分类:
2012-09-20 19:38:34
原文地址:浅谈两种方法实现进程互斥的原理 作者:我在乎的你
对临界资源的使用通过量种方法实现:
管程机制和信号量机制(记录性信号量和AND信号量);
记录性信号量机制:
在记录性信号机制里面有S.value : 记录的是资源的信号的量,通过去验证每次这个值是否大于0 ,来判断是否让进程来使用此资源,但是,一旦这个值s.value=1就允许一个进程访问该资源。从而实现了进程的互斥。
这种机制用于各个进程对一个资源的共享。
AND型信号的机制:
这是好几个进程对好几个共享资源的一个实现的方法。
他的核心机制:就是将一个进程中运行过程中的所有需要的资源,都一次性全部分配给进程。待进程使用完成后,在一并的去释放。
但是信号量机制:每个要访问临界资源的进程,都要自备wait () 和signal(),这样就使得所有的操作都分散在各个进程里面,会给系统的管理,带来很到的麻烦。一旦一个操作的使用不当,就会导致系统的死锁。所以就使用了一种新的方法就是管程;
管程机制
利用共享数据结构抽想的表示系统的共享资源。把对该共享数据的操作定义为一组过程。进程对共享资源的操作,就是这组过程对共享数据的一个操作。
而这组过程组成了一个资源程序和共享的数据结构,构成了一个操作系统的资源管理模块。——管程
管程由四部分组成:
管程名,局部于管程内部的共享数据结构的说明, 对该数据结构的一组操作,对局部于管程内部的共享数据设置初始化的语句。
局部于管程内部的数据结构,只允许管程内部的过程进行访问,其实说实话管程就向围墙,把共享的数据和对他的操作包围起来,当进程访问临界资源的时候,就会经过管程,一次只允许一个进程进入管程,从而实现了进程的互斥。
当进程在访问临界的资源的时候,先是调用管程,一旦管程正在被其他的进程所调用,管程调用wait () 将自己插入到队列中,一旦当前的管程被是释放。其他进程就可以使用这个管程了,所以说这个过程进程的等待,其实就是管程的等待。