操作系统 |
您所在的位置:网站首页 › 笔记的概念是什么 › 操作系统 |
目录 进程同步 (1)进程同步 1.进程同步的基本概念 2.进程之间的两种制约关系 3.四大区 4.同步机制应遵循的规则: (2)硬件同步机制 1.关中断 2.利用Test-and-Set指令实现互斥(专用机器指令) 3.利用swap指令实现互斥(交换指令) (3)信号量机制 1、整型信号量 2、记录型信号量 3、AND型信号量 4、信号量集 5.利用信号量实现进程互斥 6.利用信号量实现前趋关系 (4)管程机制 1.管程的基本概念和定义 2.条件变量 进程同步 (1)进程同步 1.进程同步的基本概念进程同步的主要任务是使并发执行的诸进程之间能有效地共享资源和相互合作,使执行的结果具有可再现性。 2.进程之间的两种制约关系间接相互制约关系 系统资源共享:互斥地访问、系统统一分配 直接相互制约关系 进程间合作,比如进程A、B,进程B是对进程A的数据进行处理,那么进程B就一定要在进程A之后执行。 临界资源(critical resource):一段时间仅允许一个进程访问的资源。 临界资源可能是硬件,也可能是软件:变量,数据,表格,队列等。 并发进程对临界资源的访问必须做某种限制,否则就可能出现与时间有关的错误 3.四大区临界区:临界段,在每个程序中,访问临界资源的那段程序。 进入区:用于进入临界区前检查临界资源是否正在被访问的代码块。 退出区:在临界区之后用于将临界区正在被访问的标志恢复为未被访问的状态的代码块。 剩余区:除进入区、临界区及退出区之外的其它部分的代码。 一个访问临界资源的循环进程描述为: while(true) { 进入区 临界区 退出区 剩余区 } 4.同步机制应遵循的规则:空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。(多中选一) 忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其它试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。 (互斥访问) 有限等待: 对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,避免陷入"死等"状态。 (避免死等) 让权等待: 当进程不能进入自己的临界区时,应立即释放处理机,避免进程陷入"忙等"状态。 (避免忙等) (2)硬件同步机制 1.关中断关中断:实现互斥最简单的方法。 进入锁测试之前关闭中断,直到完成锁测试并且关上锁以后再打开中断。进程进入临界区执行期间,计算机系统不会响应中断,也不会引发调度,就不会引起线程或者进程的切换。 缺点:影响系统效率、不适合多CPU、会导致严重后果 2.利用Test-and-Set指令实现互斥(专用机器指令)TS指令的一般性描述: boolean TS(boolean *lock){ boolean old; old=*lock; *lock=TRUE; return old; }利用TS指令实现互斥的循环进程结构描述为: do{ … while TS(&lock); critical section; lock:=false; remainder seciton; }while(true) 3.利用swap指令实现互斥(交换指令) void swap(boolean *a, boolean *b) { boolean temp; temp=*a; *a=*b; *b=temp; }利用Swap指令实现进程互斥的循环进程描述为: do{ key=TRUE; do{ swap(&lock, &key); } while(key!=FALSE); critical section; //临界区操作 lock:=false; … } while(TRUE); (3)信号量机制 1、整型信号量把整型信号量定义为一个整型量:表示资源数目由两个标准原子操作wait(S)(P操作)和signal(S)(V操作)来访问。 P/wait(S): { while (S≤0);/*do no-op*/ S:=S-1; } V/signal(S): { S:=S+1; } 2、记录型信号量记录型信号量机制采取“让权等待”策略,避免了整型信号量出现的“忙等”现象。 实现时需要一个用于代表资源数目的整型变量value(资源信号量):用一个少一个 一个用于链接所有阻塞进程的进程链表list :让权等待 信号量是一个数据结构,定义如下: tupedef struct { int value; struct Process_Control_Block *list; } semaphore 信号量说明: semaphore s; P(semaphore *s)/wait(semaphore *s) { s.value = s.value -1; if (s.value < 0) { //该进程状态置为阻塞状态 //将该进程的PCB插入相应的阻塞队列末尾s.queue; } } V(semaphore *s)/signal(semaphore *s) { s.value = s.value +1; if (s.value < = 0) { //唤醒相应阻塞队列s.queue中阻塞的一个进程 //改变其状态为就绪状态 //并将其插入就绪队列 } } 3、AND型信号量AND同步机制的基本思想是: 将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。只要尚有一个资源未分配给进程,其它所有可能为之分配的资源,也不分配给它。 实现时在wait操作中,增加一个“AND”条件,故称AND同步,或同时wait操作(Swait)。 Swait(S1, S2, …, Sn) //P原语; { if(S1 >=1 && S2 >= 1 && … && Sn >= 1) { //满足资源要求时的处理; for (i = 1; i |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |