您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > [7]嵌入式操作系统原理
第三讲嵌入式操作系统原理1.操作系统概念2.任务/进程3.内核4.进程间同步与通信5.中断管理1.操作系统概念1.1操作系统基本功能•控制和管理计算机系统内各种硬件和软件资源、有效地组织多道程序运行的系统软件(或程序集合),是用户与计算机之间的接口。•UNIXDOSLinuxWindows98WindowsNT•扩充机器功能,方便用户使用;提高系统效率。•存储器管理、处理机管理、设备管理、文件管理、用户接口1.2操作系统的形成和发展•手工阶段•批处理•多道程序设计技术和多道成批系统•分时操作系统•实时操作系统•网络操作系统•分布式系统1.2.1多道程序设计技术和多道成批系统多道程序设计技术:在计算机内存中同时存放几道相互独立的程序,它们在管理程序的控制下相互穿插地运行。多道宏观上并行微观上串行批量操作系统:该系统把用户提交的作业成批地送入计算机内存,然后由作业调度程序自动地选择作业运行。优点:缩短作业之间的交接时间,减少处理机的空闲等待时间,提高系统的吞吐量。缺点:用户响应时间较长。用户既不能了解自己程序的运行情况,也不能控制计算机。1.2.2分时操作系统•由于中断技术的使用,使得一台计算机能连接多个用户终端,用户可通过各自的终端使用和控制计算机,我们把一台计算机连接多个终端的计算机系统称为分时计算机系统,或称分时系统。•把处理机的响应时间分成若于个大小相等(或不相等)的时间单位,称为时间片(如100毫秒),每个终端用户获得CPU,就等于获得一个时间片,该用户程序开始运行,当时间片到(用完),用户程序暂停运行,等待下一次运行。2.任务/进程•操作系统的特性之一是并发与共享,即在系统中(内存)同时存在几个相互独立的程序,这些程序在系统中既交叉地运行,又要共享系统中的资源,这就会引起一系列的问题,包括:对资源的竞争、运行程序之间的通信、程序之间的合作与协同等符。•要解决这些问题,用程序的概念已经不能描述程序在内存中运行的状态,必须引人新的概念--进程。2.1任务/进程概念•行为的一个规则叫做程序,程序在处理机上执行时所发生的活动称为进程(Dijkstra)。•进程是这样的计算部分,它是可以和其它计算并行的一个计算。(Donovan)•进程(有时称为任务)是一个程序与其数据一道通过处理机的执行所发生的活动。(Alan.C.Shaw)•进程是执行中的程序。(KenThompsonandDennisRitchie)•进程,即是程序在并发环境中的执行过程。2.1进程与程序的区别•进程是动态概念;程序是静态概念•进程具有并发性,宏观上同时运行;程序本身具有顺序性,程序的并发执行是通过进程实现的•进程具有独立性,是一个能独立运行的单位,是系统资源分配的基本单位,是运行调度的基本单位;程序本身没有此特性•进程和程序无一一对应关系,一个进程可顺序执行多个程序;一个程序可由多个进程共用•进程异步前进,会相互制约;程序不具备此特性•进程实体具有一定结构,组成进程映象;程序没有这种结构2.2任务/进程特点•一个任务也可以称为一个进程。•每个任务都是整个应用系统的一个部分。•每个任务都赋予一定的优先级,有自己一套CPU寄存器和自己的栈空间。•典型的每个任务都是一个无限循环,每个任务都存在某种状态下:休眠态、运行态、挂起态(等待某一个事件发生)和被中断态。任务多任务2.3进程描述•在系统中一个进程存在:进程控制块(数据结构)进程的执行程序(一个可执行文件)进程总是位于某个队列(就绪、等待某事件队列)处于某种状态(运行、就绪、等待)占用某些系统资源(内存,打开某些文件、处理机、外设)进程描述•进程控制块PCB(ProcessControlBlock)存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,在创建时,建立PCB,并伴随进程运行的全过程,直到进程撤消而撤消。PCB就象我们的户口。2.4任务状态•休眠态-该任务驻留在内存中,但并不被多任务内核所调度。•就绪态-任务已经准备好,但由于该任务的优先级比正在运行的任务的优先级低,暂时不能运行。•运行态-该任务掌握了CPU的控制权,正在运行中。•挂起态-也称为等待事件态,指该任务正在等待某一个或一些事件的发生。•被中断态-由于CPU开始处理中断请求,使该任务的执行被打断。2020/1/25任务的运行状态每个任务都有确定的状态,而同时只能是一个任务占有CPU;拥有运行权的任务一定是就绪任务中优先级最高的。睡眠状态就绪状态运行状态等待状态ISR被删除的任务退出中断调度程序启动就绪的最高优先级任务被更高优先级的任务抢夺运行权刚创建的任务进入中断3.内核•内核负责为每个任务分配CPU时间。•内核负责任务间通信。•内核负责任务切换工作。•负责任务调度,按照一定的策略,在就绪态的任务中选择一个任务执行。•实时内核调度算法基于优先级调度,总是让处于就绪态的优先级最高的任务先运行。3.1非占先式内核•非占先式内核non-preemptive-内核要求每个任务自我放弃CPU的所有权。-中断可以使一个高优先级的任务由挂起状态变为就绪态,但中断服务以后控制权还是回到原来被中断的那个任务,直到该任务主动放弃CPU的使用权。-更高优先权的任务不能打断正在执行的较低优先权的任务,直到较低优先权任务主动放弃CPU的控制权。非占先式内核3.2占先式内核•占先式内核preemptive-最高优先级的任务一旦就绪,总能得到CPU的控制权。-高优先级的就绪任务可以打断正在执行的较低优先级的任务,进入执行态;被抢占的较低优先级任务进入就绪任务队列,等待下一次调度。-商业上销售的实时内核都是抢占式内核。占先式内核3.3可重入性•可重入性reentrancy-可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏。-可重入型函数任何时候可以被中断,一段时间后又可以执行,而相应的数据不会丢失。-可重入型函数只使用局部变量,即变量保存在CPU寄存器中或堆栈中。可重入型函数不可重入型函数3.4时间片轮转调度•时间片轮转调度round-robinscheduling•当两个或两个以上的任务具有同样的优先级,内核运行一个任务运行事先确定的一段时间,叫做时间额度(quantum),然后切换给另一个任务。•满足下列条件时,把CPU控制权交给下一个就绪任务-当前任务无事可作。-当前任务的时间片还没有用完任务就结束了。-当前任务的时间片用完了。3.5基于优先级调度•根据任务的优先级和状态决定任务的调度。•基于优先级抢占式调度。•基于优先级非抢占式调度。任务优先级•静态优先级-任务在执行过程中优先级不改变,各个任务的优先级在编译时就确定了。•动态优先级-任务在执行过程中,优先级是可变的。3.6优先级反转•高优先级的任务在申请已经被低优先级任务占据的资源时,高优先级被迫进入等待态,如果有一个中优先级的任务一直在执行,则高优先级将无法执行。优先级反转问题实例优先级反转的解决方法•优先级继承-拥有资源的低优先级任务被高优先级抢占。-高优先级任务开始申请被低优先级占据的资源。-此时,拥有该资源的低优先级任务的优先级上升到高于高优先级的任务。-拥有资源的任务得到运行机会,就有机会尽快释放资源。-释放资源,该任务回到原来的优先级。-高优先级任务得到运行机会,占有资源。4.进程间同步与通信•在多道程序的环境中,系统中的多个进程可以并发执行,同时它们又要共享系统中的资源,这些资源有些是可共享使用的,如磁盘,有些是以独占方式使用的,如打印机。由此将会引起一系列的矛盾,产生错综复杂的相互制约的关系。•产生这种错综复杂的相互制约关系的原因有二:资源共享进程合作4.1临界与互斥•1.临界资源:一次仅允许一个进程使用的资源称为临界资源。•2、临界区:每个进程中访问临界资源的那段程序段称为临界区(临界段)。•3.互斥:在操作系统中,当某一进程正在访问某临界区时,就不允许其它进程进入,否则就会发生(后果)无法估计的错误。我们把进程之间的这种相互制约的关系称为互斥。4.2信号量•信号量semaphore-控制共享资源的使用权-标志某个事件发生-使两个任务的行为同步•二进制信号量-信号只有两个值0和1•计数式信号量-信号有一个取值范围,例如0-255信号量•信号量的操作•创建Create-初始化二进制或计数式信号量的信号值•等待Wait-如果信号量值非0,则得到信号,信号量值减1•给信号Signal-信号量值加133互斥型信号量:通常表现为一个二值型信号,用一位二进制位来表示(1/0),可以实现共享资源的独占式占用。计数信号量:通常表现为一个递减的计数器信号,可以实现若干个同类资源的共享,提高资源使用效率。二进制信号量计数式信号量364.3消息邮箱指向保存任务间传递信息的存储空间(缓存区)的指针结构称为消息邮箱。374.4消息队列若消息邮箱被定义成拥有若干个元素的数组,用来传递多个消息的地址指针,这样消息的数据结构称为消息队列。4.5死锁•死锁deadlock-指两个任务无限期地互相等待对方控制的资源。•防止死锁的方法-先得到全部的资源再做下一步工作。-所有任务用同样的顺序去申请多个资源。-释放资源时使用相反的顺序。-定义任务等待资源的时间,如果一段时间内没有等到资源就产生超时,化解死锁。4.6事件标志•应用于任务和多个事件同步的场合。•独立型事件标志-任何等待的一个事件发生,则唤醒任务•关联型事件标志-所有等待的事件同时发生,则唤醒任务事件标志42消息邮箱及其操作一、消息邮箱任务与任务间要传递一个数据,为了适应不同数据的需要,最好在存储中建立一个数据缓冲区,把要传递的数据放在该缓冲区中,从而实现任务间的数据通信。消息邮箱•消息邮箱messagemailbox-通过内核一个任务或一个中断服务程序可以把一则消息(一个指针)放到邮箱中。-通过内核一个或多个任务可以通过内核接收这则消息。-每个邮箱有相应的等待消息的任务列表,如果邮箱为空,则等待消息的任务将被挂起。-每个邮箱也应该有相应的发送消息的任务列表,如果邮箱满,则发送消息的任务将被挂起。44二、消息邮箱的操作OS_EVENT*OSMboxCreate(void*msg){OS_EVENT*pevent;OS_ENTER_CRITICAL();pevent=OSEventFreeList;if(OSEventFreeList!=(OS_EVENT*)0){OSEventFreeList=(OS_EVENT*)OSEventFreeList-OSEventPtr;}OS_EXIT_CRITICAL();if(pevent!=(OS_EVENT*)0){pevent-OSEventType=OS_EVENT_TYPE_MBOX;(1)pevent-OSEventPtr=msg;(2)OSEventWaitListInit(pevent);}return(pevent);(3)}创建邮箱1.邮箱的创建452.发送一个消息到邮箱中:OSMboxPost()/OSMboxPostOpt()•INT8UOSMboxPost(•OS_EVENT*pevent,•void*msg•)•INT8UOSMboxPostOpt(•OS_EVENT*pevent,•void*msg,•INT8Uopt•)463.等待一个邮箱中的消息:OSMboxPend()/OSMboxAccept()void*OSMboxPend(•OS_EVENT*pevent,•INT16Utimeout,•INT8U*err•)•void*OSMboxAccept(•OS_EVENT*pevent•)474.查询一个邮箱的状态,OSMboxQuery()INT8UOSMboxQuery(OS_EVENT*pevent,OS_MBOX_DATA*pdata)Typedefstruct{void*OSMsg;INTU8UOSEvenTb1[OS_EVENT_TBL_SIZE];INT8UOSEvent
本文标题:[7]嵌入式操作系统原理
链接地址:https://www.777doc.com/doc-3305043 .html