互斥,同步,信号量,管程概述

来源:互联网 发布:网络三字经全文解释 编辑:程序博客网 时间:2024/05/21 17:48

本文为阅读操作系统原理及网上博客的笔记及自己的总结,以备查阅回顾

操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。


互斥:多个进程不能同时使用同一个资源;竞争使用临界资源;导致死锁(两进程临界资源相互依赖却同时被占用),饥饿(有些进程永远执行不到)

同步:一个进程的执行受其他进程的影响,需要其他进程的某些内容作为继续执行的依据;

异步:两进程执行完全不相互影响;

通信:多个进程间交换信息;比如互斥的信息,同步的信息;


临界(互斥)资源:一次只允许一个进程使用的资源

临界区:进程中访问临界资源的代码段

进入区:检查临界资源,设置标志

退出区:恢复访问标识

剩余区:上述三区之外


互斥和同步并不对立,互斥也是一种同步;

实现进程互斥的同步机制准则:空闲让进,忙则等待,有限等待,让权等待

 

互斥实现的硬件方法:

1.       禁止中断,代价高,多CPU中对其他CPU不起作用

2.       专用机器指令


TS指令(Testand Set,类似酒店房间门口需打扫标志,有的,才可以进去打扫

描述函数:int ts(int lock)

{

Int ts =lock;

Lock=1;

Return ts;

}


Swap指令

增加了一个管理员老大爷,保管者唯一的钥匙,取到钥匙才可以进去(),用完退回老大爷

硬件方法的优点:适用范围广,简单,支持多临界区

缺点:会死等,有可能饥饿死锁

 

软件方法:

简单的设置一个标识是不妥当的,有可能同时进入需增加额外的标识,麻烦,且面对多进程时表述困难


信号量(信号灯 semaphore)引入Dijkstra提出,(熟悉不,想想著名的Dijkstra算法)

是一个结构体,包含信号量的值与指向等待该信号的队列的指针

其由操作系统维护,用户只能初始化,与使用两原语(前面介绍过原语)

P原语:执行信号量减一,小于0,进程阻塞,插入等待队列

V原语:信号量加一,小于等于0,唤醒等待队列进程

注意,信号量不止表示资源的占用情况,还可以表示等待队列中进程的数目(信号量小于0时,其绝对值表示)

 

管程:

PV操作分散在多个进程中,管理不便,使用有可能不当

引入新的进程同步工具-----管程

其定义了一个包含资源的数据结构,和一组操作,能同步进程,改变数据(挺像C++的类的)

管程内部数据只由内部函数访问,函数分内外;外部函数(entry)是对外接口

管程每次只允许一个进程进入;故管程入口处有一入口等待队列

管程内部的唤醒,出现多个等待进程,组成紧急等待队列,优先级高于入口队列,且最新唤醒的先执行

管程的互斥访问由编译程序在编译时自动添加。是一个语言成分,是操作系统的固有成分


管程内部不同等待原因的变量c可以进行操作

cwaitnc)操作:紧急等待队列有进程,调出执行第一个,否则释放管程互斥权,本进程进入c变量等待队列

csignalc)操作:C非空,唤醒第一个等待进程,本进程进入紧急等待队列尾部


原创粉丝点击