【网络操作系统课件】进程管理2.pptVIP

  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文档。上传文档
查看更多
第三章 进程、作业、线程管理(2) 3.3 并发进程 一.进程的并发性 二.进程的互斥和同步 三.信号量 四.进程间的通信 五.进程的死锁 一.进程的并发性 进程在执行过程中,不同运行阶段进程使用不同的系统资源,有着交替、重叠执行的可能性。正是因为多道程序系统中进程的相对执行速度不可预测,给系统也就带来了一些困难。 1、并发的存在给系统带来的要求 1)操作系统必须记下诸进程 2)操作系统必须为每个进程分配和释放各类资源 3)操作系统必须保护每个进程的数据和物理资源,避免其他进程的无意干涉 4)操作系统的结果必须与执行速度无关,即不会出现与时间有关的错误 2、进程间的相互制约关系 基于进程间相互知道对方是否存在的程度分三种可能: 1)、进程之间不知道对方 2)、进程间接知道对方 3)、进程直接知道对方 3、进程中的资源竞争 当并发进程竞争使用同一个资源时,它们相互之间会发生冲突,而竞争进程间没有任何信息交换,却可能影响到竞争进程的一些行为。 饿死:因得不到运行所需的资源,而处于长期等待, 临界资源:对一个不可共享的资源;在执行过程中,每个需要使用此资源时都要给其发命令,接收状态信息,发送数据和接收数据的资源 临界区:使用临界资源的那段程序就称为程序的临界区。 注:对临界资源的访问必须满足互斥要求 4、进程间通过共享的合作 通过共享进行合作的进程间相互不确切知道对方的情况下进行交互。如诸进程可能访问同一个共享的变量、文件或数据库,进程在使用修改这些数据时,并不涉及到其他进程,但是它们知道其他进程也可能访问同一数据。 因此系统的控制机制必须要能确保共享数据的完整性。 5、进程间通过通信合作 当进程通过通信进行合作时,各个进程都参与其他进程的连接,而通信就是给其提供同步和协调各种活动的方法。 通常通信可以被描述成由各种类型的消息组成。 二.进程的互斥和同步 并发进程管理的主要任务是:使并发执行的诸进程之间能有效的共享资源和相互合作,从而使程序的执行具有可再现性。 1、进程互斥 当并发的进程要竞争使用某些临界资源时,为了提供互斥的支持,必须满足以下要求: 空闲让进:无进程处于临界区中 忙则等待: 有限等待:要避免出现“死等”即“饿死” 让权等待:要避免出现“忙等” 一些可以满足这些互斥条件方法: 软件方法:让希望并发的进程认为都需要与另一个进程合作,以实施互斥。 硬件支持:这种方法会涉及到使用专门的机器指令。 语言支持:即在操作系统或程序设计上提供某种级别的支持。 2、互斥 Dekker算法: 1)第一种尝试 给共享的互斥资源保留一个标记为sign的全局存储器单元,希望使用这一临界资源的进程在进入临界区前必须首先检查sign的内容。如果sign的值等于该进程的进程号时,则该进程就可处于临界区,否则必须等待。 忙等:其实就是死锁 如第I号进程的程序代码段如下: ………… While (sing !=I) ; /*什么都不做*/ /*临界区*/ Sign=s;/*s为等待此资源的一个进程的进程号*/ ……………… 2)、第二种尝试 /*进程0*/ …… While (flag[1])/*延迟*/; Flag[0]=-1;/*赋值为真*/ /*临界区*/ Flag[0]=0;/*赋值为假*/ …… /*进程1*/ …… While (flag[0])/*延迟*/; Flag[1]=-1;/*赋值为真*/ /*临界区*/ Flag[1]=0;/*赋值为假*/ …… 会导致死锁 3)第三种尝试 /*进程0*/ …… Flag[0]=-1; While (flag[1]) {flag[0]=0; /*延迟*/; Flag[0]=-1; } /*临界区*/ Flag[0]=0; …… /*进程1*/ …… Flag[1]=-1; While (flag[0]) {flag[1]=0; /*延迟*/; Flag[1]=-1; } /*临界区*/ Flag[1]=0; …… 4)Dekker算法 Int flag[2]={0,0},sign=1; Void main( ) {parbegin (p0( ),p1( )); /*结构parbegin的含义是挂起主程序的执行,开始并发执行进程P0和P1*/ } Void P0( ) {…… Flag[0]=-1; While(flag[1]) If(sign==1) {flag[0]=0; While(sign==1) ; Flag[0]=-1; } /*临界区*/ Sign=1; Flage[0]=0; …… } Perterson算法 Int flag[2]={0,0},sign; Void main( ) { parbegin (P0( ),P1());} Void P0 ( ) {

文档评论(0)

精品资料 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档