《PPT04 操作系统(嵌入式).ppt》由会员分享,可在线阅读,更多相关《PPT04 操作系统(嵌入式).ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统(嵌入式)操作系统n特点n常见操作系统 n作用n进程管理1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有特点 n实时性n核心小n效率高n功能:比PC弱n系统软件、面向底层、面向硬件n应用软件之间的接口。1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有常见操作系统nLinuxnUnixnWindowsnAdroidn塞班nNucleas/ECos/C-OSnDos1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有作用 n进程管理n处理机调度n内存管理n文件管理nI/O管理 1/17/2023CopyRight(C
2、)江苏银河电子股份有限公司版权所有进程管理 本节课主要对进程管理作介绍。nThread(线程)nSemaphore(信号量)nMutex(互斥量)nMessage(消息队列)1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Thead(task)n任务一般为死循环始终执行,可以通过设置Prority(优先级)设定执行先后顺序,任务越多,时间片越多,速度越慢,应该在适当的时间放出时间片。n在一个时刻只能执行一条指令,看似并行,实则串行,因为cpu运行指令速度太快。常用函数有:nCreate/Destroy(创建/删除线程)nJoin/Current(等待线程结束/获取当前
3、线程句柄)nYield(使当前线程放弃本次执行权)nSleep(挂起当前线程一段时间,用于多任务交替执行)1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Thead(task)n例子While(1)call();A call B,让他帮A买东西if(ok);如果B买好了东西 break;这个例子好比A要求B给他买东西,如果没有买好则一直打电话,本线程将一直占用CPU不释放,排在队列后面的线程将无法执行指令。显然这样占着CPU资源是不合适的。1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Thead(task)While(1)call();A
4、call B,让他帮A买东西if(ok);如果B买好了东西 break;yield();n加一个yield命令,避免了连续打电话,因为执行yield时,当前线程放弃了本次的执行权,跳到了等待队列的尾部,这样其他线程就有机会进入CPU执行指令。但本线程在每次调度队列的一个循环中仍然会执行一次全部指令。1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Thead(task)While(1)call();A call B,让他帮A买东西if(ok);如果B买好了东西 break;sleep();n把yield改成sleep,当执行到sleep时,挂起当前线程一段时间,就是隔一
5、会打个电话。挂起时,本线程将进入休眠队列,不处于等待队列中,不再占用CPU资源。1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有semaphore(信号量)n用于进程间同步通信、通知。常用函数有:nCreate/Destroy(创建/删除信号量)nSignal(通知信号量)nWait(等待信号量)n用信号量可以实现互斥量和消息队列n最好能配一张图说明工作方法1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有n互斥量用于共享资源的保护使用。常用函数有:Create/Destroy(创建/删除互斥量)Lock(获取互斥量,获取不到就无限等待)Unl
6、ock(释放互斥量)n互斥信号:主要用于多个任务同一资源的使用,比如Task1和Task2均要使用同一个打印机的打印资源,我们知道,一个打印资源不可能同时为两个任务服务。所以在Task1使用打印资源时,必须保证Task2不能使用打印资源。这时使用互斥信号量能很好地解决这个问题。Mutex(互斥量)1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Mutex(互斥量)举例:n假设mutex初始值为0,表示打印资源可使用;为1时表示已被占用,需等待。nTask1_Fun()nnwait(mutex);/mutex=0时设置mutex=1 占用打印资源并 执行下一步操作;ns
7、ignal(mutex);/设置mutex=1,释放打印资源nnTask2_Fun()nnwait(mutex);/mutex=0时设置mutex=1 占用打印资源并执行下一步操作;nsignal(mutex);/设置mutex=1,释放打印资源n1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Mutex(互斥量)说明:如果Task1占用了打印资源,则mutex=1;Task2即使要使用打印资源,但因为没有等到信号量(wait(mutex);)则不能使用打印资源直到Task1使用完释放。在Task2占用打印资源时Task1情况同样。1/17/2023CopyRight
8、(C)江苏银河电子股份有限公司版权所有Mutex(互斥量)n任务内死锁:修改Task1_Fun为Task1_Fun()wait(mutex);/mutex=0时设置mutex=1 占用打印资 源并执行下一步Task2_Fun();操作;signal(mutex);/设置mutex=1,释放打印资源n这时Task1_Fun在执行了wait(mutex)后占用资源,紧接着就调用Task2_Fun()等待资源释放形成死锁。n思考:避免方法?1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Mutex(互斥量)n避免方法:同层之间不要相互调用(就是说Task1_Fun盒Task
9、2_Fun不要相互调用)1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Mutex(互斥量)n任务间死锁:当互斥信号量不止一个时,容易出现。n比如打印机除了提供打印资源还提供扫描资源,又假设一个任务只有同时占用了打印资源和扫描资源才能进行下一步操作,比如Task1、Task2n假设mutex_print和mutex_scan的初始值均为0,表示打印资源可使用;为1时表示已被占用,需等待。1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Task1_Fun()wait(mutex_print);/mutex_print=0时设置mutex_pri
10、nt=1 占用 /打印资源并执行下一步wait(mutex_scan);/mutex_scan=0时设置mutex_scan=1 占用/扫描资源并执行下一步若干操作;signal(mutex_scan);/设置mutex_scan=1,释放扫描资源signal(mutex_print);/设置mutex_print=1,释放打印资源Task2_Fun()wait(mutex_scan);/mutex_scan=0时设置mutex_scan=1 占用/扫描资源并执行下一步wait(mutex_print);/mutex_print=0时设置mutex_print=1 占用/打印资源并执行下一步若
11、干操作;signal(mutex_print);/设置mutex_print=1,释放打印资源signal(mutex_scan);/设置mutex_scan=1,释放扫描资源1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Mutex(互斥量)n这时如果在两个连续的时间片分别执行了Task1_Fun的wati(mutex_print);和Task2_Fun的wait(mutex_scan);则下一步Task1_Fun和Task2_Fun因相互等待对方的资源而均不能进行下一步操作,形成死锁。n思考:避免方法?1/17/2023CopyRight(C)江苏银河电子股份有限
12、公司版权所有Mutex(互斥量)n避免方法:给相应任务设置超时功能,当一个任务占用资源在设定时间内没有任何操作的释放所拥有的资源,并重新执行或等待执行。1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Message(消息队列)n消息队列(也叫做报文队列)就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读消息。常用函数有:nCreate/Destroy(创建/删除消息队列)nSend(发送消息)nRecieve(接收消息)n简单描述两个链表的实现方法1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有Interrupt(中断)n由于机顶盒开发通常采用硬件中断,软中断使用不多,暂不述。1/17/2023CopyRight(C)江苏银河电子股份有限公司版权所有