计算机操作系统读书笔记___信号量机制

版权声明:私藏源代码是违反人性的罪恶行为!博客转载无需告知,学无止境。 https://blog.csdn.net/qq_41822235/article/details/85332649

目录

一、信号量机制

1.1 背景

1.2 整型信号量

1.3 记录型信号量 

1.4 AND型信号量

1.5 信号量集


一、信号量机制

1.1 背景

1965年,荷兰学者Dijkstra、计算机先驱之一提出的信号量机制(semaphores)机制是一种卓有成效的进程同步工具。在长期且广泛的应用中,信号量机制又得到了很大的发展,它从整型信号量记录型信号量,进而发展为“信号量集”机制。

图1 20世纪伟大先驱的生平成就

1.2 整型信号量

一个用于表示资源数目的整型量S,它与一般整型量不同,除初始化外,仅能通过两个标准的原子操作(atomic operation)wait(S)和signal(S)来访问,这就是著名的P/V操作: 

1.3 记录型信号量 

在采取“让权等待”的策略后,又会出现多个进程等待访问同一临界资源的情况。需求决定结构设计,为此,在信号量机制中,除了需要一个用于代表资源数目的整型变量value外,还应增加一个进程链表指针,用于链接上述的所有的等待进程。

记录型信号量是由于它采用了记录型的数据结构而得名。

相应地,wait(S)和signal(S)操作可描述如下:

 说明:该机制遵循了“让权等待”的原则。当S->value < 0时,其绝对值表示在该信号量链表中已阻塞进程的数目。V操作若加1后仍有S->value <= 0,则表示在该信号量链表中仍有等待该资源的进程被阻塞,故还应该调用wakeup原语,将链表中第一个等待进程唤醒。

1.4 AND型信号量

应用场合:一个进程往往需要获得两个或更多的共享资源才能执行其任务。当进程要求的共享资源愈多时,发生进程死锁的可能性也就愈大

将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。操作方式具有原子性atom的含义,对若干个临界资源的分配,要么把它所请求的资源全部分配到进程,要么一个也不分配。

1.5 信号量集

如果每次只能对某类临界资源进行一个单位的申请或释放,当一次需要N个单位,便需要进行N次wait(S)操作,不仅低效甚至会增加死锁的概率。同时,为了确保系统的安全性,当所申请的资源数量低于某一下限时,还必须进行管制,不予以分配。 

由此形成一般化的“信号量集”机制: 

猜你喜欢

转载自blog.csdn.net/qq_41822235/article/details/85332649