操作系统-互斥实现的硬件方法

为了解决进程互斥进入临界区的问题,需要采取有效措施。利用硬件实现互斥的方法有禁止中断专用机器指令两种方法。

1、禁止中断

在单处理机环境中,并发执行的进程不能在CPU上同时执行,只能交替执行。另外,对一个进程而言,它将一直运行,直到被中断。因此,为了保证互斥,只要保证一个进程不被中断就可以了,这可以通过系统内核开启、禁止中断来实现。

由于在临界区内进程不能被中断,故保证了互斥。但该方法的代价很高,进程被限制只能交替执行。

另外,在多处理机环境中,禁止中断仅对执行本指令的CPU起作用,对其他CPU不起作用,也就不能保证对临界区的互斥进入。

2、专用机器指令

在很多计算机(特别是多处理机)中设有专用指令来解决互斥问题。依据所采用指令的不同,硬件方法分为TS指令和Swap指令两种。

1)TS(Test and Set)指令

TS指令的功能是读出指定标志后把该标志设为true,TS指令的功能可以用如下函数来描述。

boolean TS(lock);
boolean lock;
{
	boolean temp;
	temp = lock;
	lock = true;
	return temp;
}

为了实现进程对临界区的访问,可为每个临界资源设置一个布尔变量lock,表示资源的两种状态,true表示正被占用;false表示空闲。在进入区检查和修改标志lock;有进程在临界区时,循环检查,直到其他进程退出时通过检查进入临界区。所有访问临界资源的进程在进入区和退出区的代码是相同的。

2)Swap指令

Swap指令的功能是交换两个字节的内容,可以用如下函数描述Swap指令。

void Swap(a, b);
boolean a, b;
{
	boolean temp;
	temp = a;
	a = b;
	b = temp;
}

利用Swap指令实现进程互斥算法,为每个临界资源设置一个全局布尔变量lock,初始值为false;每个进程设置一个局部布尔变量key。在进入区利用Swap指令交换lock与key的内容,然后检查key的状态;有进程在临界区时,循环交换和检查过程,直到其他进程退出时检查通过,进入临界区。

上一篇:JavaScript-4.4函数递归之阶乘举例---ShinePans


下一篇:C++入门篇(7)之模板基础讲解