- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
临界资源是指一段时间内只允许一个进程访问的资源许多...
临界资源是指一段时间内只允许一个进程访问的资源。许多物理设备(如打印机和磁带机)、变量及表格都属于临界资源,它们要求互斥地被共享。而每个进程中访问临界资源的那段代码称为临界区。
保证诸进程互斥地进入自己的临界区是实现它们对临界资源的互斥访问的充要条件。为此,每个进程在进入临界区之前应先对预访问的临界资源进行检查,看其是否正在被访问。如果此刻临界资源未被访问,则该进程可以进入临界区和访问对应临界资源,同时应设置临界资源正被访问的标志为真值;如果此刻临界资源正被某进程访问,则本进程不能进入临界区。因此,必须在临界区前面增加一段用于进行上述检查的代码即进入区。相应地,在临界区之后也要加上一段称为退出区的代码,用于将临界资源正被访问的标志置为假值。换句话说,进程在进入临界区之前,应先执行“进入区”代码,在退出临界区之后则需执行“退出区”代码。
同步机构应遵循下述四条基本准则:(1)空闲让进。当无进程处于临界区时,相应的临界资源处于空闲状态,因而可允许一个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源。(2)忙则等待。当已有进程进入自己的临界区时,意味着相应的临界资源正被访问,因而所有其它企图进入临界区的进程必须等待,以保证诸进程互斥地访问临界资源。(3)有限等待。对要求访问临界资源的进程,应保证该进程能在有限时间内进入自己的临界区,以避免陷入“死等”状态。(4)让权等待。当进程不能进入自己的临界区时,应立即释放处理机,以避免进程陷入“忙等”和浪费处理机资源。
记录型信号量拥有两个分量:(1)整型变量value。其初始值表示系统中对应某类资源的数目。系统运行过程中,若value不小于0,则其表示当前运行状态下系统中可用的对应某类资源的数量;若value小于0,则其绝对值表示对应信号量及资源的阻塞进程队列长度即受阻进程数量。(2)进程链表L用于链接等待对应信号量及资源的所有阻塞进程。因此,记录型信号量的wait操作不仅要实现资源申请功能,当系统中无对应资源可用时,并阻塞当前进程、插入到对应阻塞进程链表中和释放处理机;而记录型信号量的signal操作除实现资源释放功能外,在对应阻塞进程链表不为空的情况下,并将该阻塞进程队列对首进程唤醒。
整型信号量机制并未遵循同步机构的让权等待的准则,记录型信号量机制则较好地遵循了同步机构的让权等待的准则。同时,对于需要首先获得两个以上共享资源方能执行任务的进程,如进入区代码关于信号量的wait操作次序不当,二者均有可能违背忙则等待、空闲让进和有限等待的准则。
在生产者—消费者问题中,如果缺少了signal(full)或signal(empty),则会造成死锁。具体而言:(1)如果缺少了signal(full),则一方面由于empty信号量初始值大于0使得生产者进程可以不断地向环形缓冲中填入消息,另一方面由于full信号量初始值为0而使得消费者进程在一开始执行wait(full)操作时便被阻塞且始终未被唤醒,所以其始终无法从缓冲区中取得消息,也无法执行到signal(empty)操作。一旦环形缓冲被生产者进程的消息填满,则empty信号量值也不再大于0,于是生产者进程执行wait(empty)操作时将被阻塞,从而两个进程都将无法继续执行下去,进而陷入死锁。(2)如果缺少了signal(empty),则一开始由于empty初始值大于0使得生产者进程可以不断地向环形缓冲中填入消息,而消费者进程由于full信号量初始值为0所以在执行wait(full)操作时便被阻塞。伴随生产者进程signal(full)操作的执行,消费者进程将会被唤醒,并从缓冲区中取得消息;但必须指出,由于其缺少了signal(empty),所以empty信号量值将是一个单向递减的过程。一旦empty信号量值变得不再大于0,则生产者进程执行wait(empty)操作时将被阻塞、停止向环形缓冲中填入消息和无法执行到signal(full)操作,于是当消费者进程把n个缓冲区的消息取完之后,full信号量也将无法再次变得大于0,消费者进程在执行wait(full)操作时也将被阻塞。从而两个进程都将无法继续执行下去,进而陷入死锁。
在生产者—消费者问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置,将可能造成死锁。具体而言,由于生产者进程和消费者进程是并发执行的,所以一开始可能消费者进程首先执行wait(mutex)操作之后生产者进程再执行wait(mutex)操作,而后者执行wait(mutex)操作时必然受阻,于是消费者进程由于full信号量初始值为0所以在执行wait(full)操作时也将被阻塞,从而两个进程都将无法继续执行下去,进而陷入死锁。但如果是将signal(mutex)与signal(f
文档评论(0)