操作系统的分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统(嵌入式) 一 特点 实时性、核心小、效率高、功能比PC弱 二 具体包括 Linux、Mcos、Ecos、Vxworks(用于FJ平台)、Wince(用于手机)、Nucleas 三 作用 内存管理、进程管理、文件管理、I/O管理,本讲义主要对进程管理作介绍。 四 进程管理 1 task 任务一般为死循环始终执行,可以通过设置Priority(优先级)设定执行先后顺序,任务越多,时间片越多,速度越慢。常用函数有:Create/Destroy、Suspend/Resume(挂起/激活)、Reschedule(重排)、Delay(用于多任务交替执行) 任务的状态:就绪、执行、挂起,状态关系图2-2(a)如下: 图2-2(a) 2 semaphore 用于进程间通信,代替了全局变量的功能,可保护任务顺利进行。主要介绍互斥信号量机制。 (a)互斥信号:主要用于两个任务多同一资源的使用,比如Task1和Task2均要使用同一个打印机的打印资源,我们知道,一个打印资源不可能同时为两个任务服务。所以在Task1使用打印资源时,必须保证Task2不能使用打印资源。这时使用互斥信号量能很好地解决这个问题。 举例: 假设mutex初始值为0,表示打印资源可使用;为1时表示已被占用,需等待。 Task1_Fun( ) { wait(mutex); //mutex = 0时设置mutex = 1 占用打印资源并执行下一步 操作; signal(mutex); //设置mutex = 1,释放打印资源 } Task2_Fun( ) { wait(mutex); //mutex = 0时设置mutex = 1 占用打印资源并执行下一步 操作; signal(mutex); //设置mutex = 1,释放打印资源 } 说明:如果Task1占用了打印资源,则mutex = 1;Task2即使要使用打印资源,但因为没有等到信号量(wait(mutex);)则不能使用打印资源直到Task1使用完释放。在Task2占用打印资源时Task1情况同样。 (b1)任务内死锁:修改Task1_Fun为 Task1_Fun( ) { wait(mutex); //mutex = 0时设置mutex = 1 占用打印资源并执行下一步 Task2_Fun(); 操作; signal(mutex); //设置mutex = 1,释放打印资源 } 这时Task1_Fun在执行了wait(mutex)后占用资源,紧接着就调用Task2_Fun()等待资源释放形成死锁。 避免方法:同层之间不要相互调用(就是说Task1_Fun和Task2_Fun不要相互调用) (b2)任务间死锁:当互斥信号量不止一个时,容易出现。比如打印机除了提供打印资源还提供扫描资源,又假设一个任务只有同时占用了打印资源和扫描资源才能进行下一步操作,比如Task1、Task2 假设mutex_print和mutex_scan的初始值均为0,表示打印资源可使用;为1时表示已被占用,需等待。 Task1_Fun( ) { wait(mutex_print); //mutex_print = 0时设置mutex_print = 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 占用打印资源并执//行下一步 若干操作; signal(mutex_print); //设置mutex_print = 1,释放打印资源 signal(mutex_scan); //设置mutex_scan = 1,释放扫描资源 } 这时如果在两个连续的时间片分别执行了Task1_Fun的wati(mutex_print);和Task2_Fun的wait(mutex_scan);则下一步Task1_Fun和Task2_Fun因相互等待对方的资源而均不能进行下一步操作,形成死锁。 避免方法:给相应任务设置超时功能,当一个任务占用资源在设定时间内没有任何操作

文档评论(0)

bm5044 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档