您的位置:首页 > 理论基础

计算机操作系统知识--关于同步互斥的思考1

2012-09-08 17:48 423 查看
计算机操作系统知识--关于同步互斥的思考1


最近碰到各种关于同步互斥的讨论。所以想写个专题,谈谈个人对同步互斥里面几个问题的看法。

操作系统里面实现互斥的方法是采用信号量和自旋锁的机制。那么在操作系统中信号量、自旋锁是如何实现的了?一般有两种思路:其一,用软件的方法来实现。其二,采用硬件的方法。所谓软件的方法无非是各种做标志的算法,那么通过硬件有哪些解决方案了?通过采用的方案为,屏蔽中断、修改CPU。

修改CPU这一说法是我个人的提法,未必准确。通过修改CPU然后使CPU获取了某些功能,这些功能的体现则是通过CPU指令集表现出来的。那么有哪些指令是用来实现互斥功能的了?Test-and-Set、Decrement和Increment、Compare-and-Swap、指令对,包括一条特殊Load指令,称为链接Load指令(load link,简写为ll),或者称为加锁Load指令(Load
Locked),另外还包括一条特殊Store指令称为Store指令(store conditional,简写为sc)。

下面以Test-and-Set指令为例,谈谈该指令是如何实现进程的对临界资源的互斥访问的。

while(S) do;

Test-and-Set(S,temp);

while(temp) do Test-and-Set(S,temp); /完成lock(S)操作/

if balance[X] > 100 then /临界段/

begin

balance[X] :=balance[X] -100;

balance[Z] :=balance[Z] +100;

end

S:=False; /完成unlock(S)操作/



对比看看软件的算法,在进程级的角度实现互斥对临界资源的互斥访问的算法:





硬件的方法和软件的方法相比,软件的方法在进程P0实现进入临界区后,如果产生中断,修改标志使得进程P1也可以进入临界区,如果系统调度P1在P0执行了一部分临界区的代码后也执行他的临界区的代码。那么该软件的方法是不能保证对临界资源的互斥访问。而硬件的方法则不存在这样的问题。



/**************************************************************************************************

一个相关的思考!

**************************************************************************************************/



我的疑问是,如果硬件在执行临界区的代码时,系统产生中断。中断服务程序是否是破坏临界资源??我个人的观点是,在中断中如果进程想访问临界资源,也必须获得信号量。实际系统中是否也是这么做的?这个就要请各位大牛回答。另外,如果中断中获得不到信号量那会怎么办?等在那儿?貌似中断服务程序如果完成不了的话,系统不是崩溃了?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐