计算机操作系统知识--关于同步互斥的思考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执行了一部分临界区的代码后也执行他的临界区的代码。那么该软件的方法是不能保证对临界资源的互斥访问。而硬件的方法则不存在这样的问题。
/**************************************************************************************************
一个相关的思考!
**************************************************************************************************/
我的疑问是,如果硬件在执行临界区的代码时,系统产生中断。中断服务程序是否是破坏临界资源??我个人的观点是,在中断中如果进程想访问临界资源,也必须获得信号量。实际系统中是否也是这么做的?这个就要请各位大牛回答。另外,如果中断中获得不到信号量那会怎么办?等在那儿?貌似中断服务程序如果完成不了的话,系统不是崩溃了?
最近碰到各种关于同步互斥的讨论。所以想写个专题,谈谈个人对同步互斥里面几个问题的看法。
操作系统里面实现互斥的方法是采用信号量和自旋锁的机制。那么在操作系统中信号量、自旋锁是如何实现的了?一般有两种思路:其一,用软件的方法来实现。其二,采用硬件的方法。所谓软件的方法无非是各种做标志的算法,那么通过硬件有哪些解决方案了?通过采用的方案为,屏蔽中断、修改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执行了一部分临界区的代码后也执行他的临界区的代码。那么该软件的方法是不能保证对临界资源的互斥访问。而硬件的方法则不存在这样的问题。
/**************************************************************************************************
一个相关的思考!
**************************************************************************************************/
我的疑问是,如果硬件在执行临界区的代码时,系统产生中断。中断服务程序是否是破坏临界资源??我个人的观点是,在中断中如果进程想访问临界资源,也必须获得信号量。实际系统中是否也是这么做的?这个就要请各位大牛回答。另外,如果中断中获得不到信号量那会怎么办?等在那儿?貌似中断服务程序如果完成不了的话,系统不是崩溃了?
相关文章推荐
- 计算机操作系统之四:进程的互斥同步与通信
- hylan:卸载oracle 11g时,关于计算机基础知识的思考:delete和shift+delete的区别
- 关于linux内核中多进程(线程)间同步和互斥
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 计算机组件及操作系统基础知识
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 操作系统经典同步互斥问题——生产者消费者问题
- 如何清晰地思考:近一年来业余阅读的关于思维方面的知识结构整理(附大幅思维导图)
- 操作系统--进程的互斥与同步
- 关于计算机网络的相关知识
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结 转载
- 关于计算机网络的基本知识整理
- 关于计算机总线的知识
- 计算机基本知识拾遗(七)页面缓存数据的同步和恢复机制页
- 面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结 2015-07-27 20:49 13人阅读 评论(0) 收藏
- 【计算机网络】:关于wireshark抓包实验的思考
- <<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)