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

计算机操作系统知识--关于同步互斥的思考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执行了一部分临界区的代码后也执行他的临界区的代码。那么该软件的方法是不能保证对临界资源的互斥访问。而硬件的方法则不存在这样的问题。

 

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

一个相关的思考!

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

 

    我的疑问是,如果硬件在执行临界区的代码时,系统产生中断。中断服务程序是否是破坏临界资源??我个人的观点是,在中断中如果进程想访问临界资源,也必须获得信号量。实际系统中是否也是这么做的?这个就要请各位大牛回答。另外,如果中断中获得不到信号量那会怎么办?等在那儿?貌似中断服务程序如果完成不了的话,系统不是崩溃了?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值