4、进程同步:进程同步的概念和同步原则,临界资源和临界区的概念,信号量及其应用,经典进程同步问题

来源:互联网 发布:邮币卡交易平台软件 编辑:程序博客网 时间:2024/06/06 23:19

进程同步的概念

临界资源:许多硬件资源如打印机、磁带机等,都属于临界资源(CriticalResouce)临界区:人们把在每个进程中访问临界资源的那段代码称为临界区(critical section)repeat    entry section    critical section;    exit section     remainder section;until false;while(TRUE){    进入区    临界区    退出区    剩余区}

同步机制应遵循的规则(同步原则)

    空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源;    忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其它试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。    有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。    让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。

硬件同步机制

1、关中断:进程在临界区执行期间,计算机系统不响应中断,从而不会引发调度。2、Test-and-Set:原子操作(原语)3、Swap上述硬件指令能有效实现进程互斥,但当临界资源忙碌时,其他进程处于忙等状态,不符合“让权等待”

信号量机制

整型信号量 、记录型信号量、信号量集

整型信号量

  把整型信号量定义为一个用于表示资源数目的整型量S  除初始化外,仅能通过两个标准的*原子操作*(Atomic Operation) wait(S)和 signal(S) 来访问  在整型信号量机制中的wait 操作,只要是信号量 S≤0,就会不断地测试。因此,该机 制并未遵循“让权等待”的准则------》记录型信号量

记录型信号量

采用了记录型的数据结构增加一个进程链表指针 L,用于链接上述的所有等待进程。
type semaphore =                    record                         value: integer;                        L: list of process;                    end    procedure wait(S)                 var Ssemaphorebegin                     S.value:=S.value-1if S.value<0 then block(S.L);                end    procedure signal(S)                 var S: semaphore;                 begin                     S.value:=S.value+1if S.value<=0 then wakeup(S.L);                end
wait中“if S.value<0”表示资源不足 ,则进程进行变成阻塞状态,放弃处理机,并插入到信号量链表S.L中。signal中“if S.value<=0” 表示依然有因为没有得到资源而阻塞的进程,故“wakeup(S.L)”唤醒进程。

AND型信号量

(一个进程需要先获得两个或更多的共享资源后方能执行其任务) Swait(Simultaneous wait)

这里写图片描述
这里写图片描述

信号量集

原因:1、出现需要N 个某类临界资源的情况     2、在有些情况下,为了确保系统的安全,当资源数量低于某一下限值时,便不予以分配。方法:对AND信号量机制加以扩充,形成一般化的“信号量集” 机制。

这里写图片描述

信号量的应用

1.利用信号量实现进程互斥
semaphore mutex = 1;    Pa(){        while{            wait(mutex);            critical section            signal(mutex);            remainder seetion        }    }    Pb(){        while{            wait(mutex);            critical section            signal(mutex);            remainder seetion        }    }
2.利用信号量实现前趋关系
cobegin 和 coend 与 parbegin 和parend 一样 都是并发进程,并行开始、并行结束的意思。

这里写图片描述

P1(){S1;sign(a);sign(b)}P2(){wait(a);S2;sign(c);sign(d);}P3(){wait(b);S3;sign(e);}P4(){wait(c);S4;sign(f);}P5(){wait(d);S5;sign(g);}P6(){wait(e);wait(f);wait(g);S6}main(){    semaphore a,b,c,d,e,f,g;    a = b = c = d = e = f = g = 0;    cobegain        P1();P2();P3();P4();P5();P6();    coend}

管程机制(Monitors)

阅读全文
0 0
原创粉丝点击