欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

操作系统进程互斥 - 硬件解决方案

最编程 2024-04-03 08:59:40
...

文章目录

      • 1、关中断
      • 2、上锁与开锁
      • 3、测试并设置指令
      • 4、对换指令

1、关中断

原则:进程进入临界区时关中断,退出临界区时开中断。

为什么要采用关中断?

关中断是指在此中断处理完成前,不处理其它中断,这样就可以保证进程不被中断,从而保证了互斥性不允许两个以上的共享该资源的并发进程同时进入临界区称为互斥),因此采用关中断。

缺点?

①将禁止一切中断的权利赋予普通用户,若用户没有开放中断,系统的正常运行将受到影响。
②不适合于多处理机系统,因为一个进程只能禁止本CPU的中断,其它CPU上的进程仍然会使用互斥资源。

2、上锁与开锁

一个进程使用某个临界资源之前必须完成下列操作:
1.考察锁位的值
2.若原来的值是为“0”,将锁位置为“1”(占用该资源)
若原来值是为“1”,该资源已被别人占用,则转到第1步
3.当进程使用完资源后,将锁位置为“0 ” ,称为开锁操作

3、测试并设置指令

bool TS(bool &x)
{
	if(x)
	{
		x = false;//true表示当前资源可用,于是占用,并置x为false
		retrun true;
	}
	else
	{
		retrun false;
	}
}
bool s = true; 

process Pi()
{
	while(!TS(i));//上锁(持续检测直到x为true)
	s = true;//开锁
}

4、对换指令

void SWAP(bool &a,bool &b)
{
	bool temp = a;
	a = b;
	b = temp;
}
bool lock false;//false表示当前资源可用

process Pi()
{
	bool keyi = true;
	do{
		SWAP(keyi,lock);//上锁(持续检测直到keyi为false,说明已经交换,占位成功)
	}while(keyi);
	SWAP(keyi,lock);//开锁
}

推荐阅读