操作系统原理演示课件.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、进程同步的概念
进程运行中的两种制约关系 由于竞争资源形成的间接制约关系; 由于相互合作造成的直接制约关系;
进程同步指多个相关进程在执行次序上的协 调
2、临界资源与临界区
临界资源(critical source)
在一段时间内只允许有限个进程访问的资源 ,如 打印机等I/O设备,缓冲区等
其中:缓冲区是临界资源,而访问缓冲区的代码 是临界区
3、信号量机制
引例:生产者-消费者问题 分析:首先需要定义产品的类型,缓冲区的
长度,读写指针,资源变量counter。 Int n; Int in,out; Structure item; Item buffer[n]; Int counter;
3、信号量机制
Void procedure(){

while(true){

生产一个产品放入 nextp;

wait(mutex);

while(counter==n){no-op;}

buffer[in]=nextp;

in++;

counter++;

single(mutex);}
}
3、信号量机制
3、信号量机制
Void procedure(){

while(true){

生产一个产品放入 nextp;

while(counter==n){no-op;}

buffer[in]=nextp;

in++;

counter++;}
}
3、信号量机制
Void comsumer(){

while(true){
操作系统原理
第二章 进程管理
第三节 进程同步
主要内容 进程同步的概念 临界资源与临界区 信号量机制 管程机制 典型的进程同步问题
1、进程同步的概念
多道系统与多任务系统——程序的并发执
行——程序执行失去封闭型——引入进程的
概念——使得多进程能够并发执行并能够保
证运行环境封闭与进程的独立性——问题:
1、进程同步的概念
P1、P2两个进程的执行顺序是随机的,P1、 P2可能顺序执行或交错执行。 由图可见,不 同的执行顺序,COUNT值会不同,这是不允 许的。出现这种现象的原因,在于在一个进 程执行过程中,该进程能够修改的全局变量 如 COUNT应该不允许其他进程修改。即在 进程P1执行前,必须保证在P1执行过程中没 有其他进程修改COUNT的值
C程序
Void wait(semaphore){

s.value--;

if(s.value<0){
该进程;
将调用wait操作的进程放入s.L,阻塞



3、信号量机制
void single(simaphore){

s.value++;

if(s.value<=0) {

将s.L中第一个进程去掉,并放入就绪
同步机制应遵循的规则 空闲让进; 忙则等待; 有限等待;对要求进入临界区的进程,应在
有限时间内使之进入,以免陷入“死等”。 让权等待;对于等待进入临界区的进程而言,
它必须立即释放处理机,以免进程“忙等”
2、临界资源与临界区
例:生产者-消费者题
有一个或多个生产者生产某着类型的产品 (数据、记录、字符等等),并放置在缓冲区中; 有一个或多个消费者从缓冲区中取数据,每次取 一项;系统保证对缓冲区的操作是互斥进行的, 即每次只有一个进程能够访问缓冲区。
3、信号量机制
用一个数据结构来描述临界资源的的使用状 态或给临界资源加锁,这个数据结构就是信
号量
(1)整形信号量:用一位整数表示临界资源 的忙闲状态
原子操作:wait(S): while S≤0 do no-op

S∶=S-1;

signal(S): S∶=S+1;
3、信号量机制
(1)记录型信号量
队列;



3、信号量机制
在记录型信号量机制中,S.value的初值表示系统中 某类资源的数目, 因而又称为资源信号量,对它的 每次wait操作,意味着进程请求一个单位的该类资 源,因此描述为S.value=S.value-1;

while(counter==0){no-op;}

nextc=buffer[out];

out++;

counter--;

消费nextc中的产品;}
}
3、信号量机制
问题: 并发执行时,消费者进程与生产者进程都可以改
变counter的值,执行顺序不同,counter的结果也 不一样,而且与实际结果也不相同。 为解决这个问题,引入一个互斥变量mutex,来 控制对变量counter的访问。 引入互斥变量后的生产者消费者代码如下:
由于整形信号量出现忙等现象,因此引入记录型 信号量
type semaphore=record value:integer;
L:list of process; end
struct semaphore{ int value; Listofprocess L; }
3、信号量机制
相应的, wait(S)和signal(S)操作可描述为:
Void comsumer(){

while(true){

wait(mutex);

while(counter==0){no-op;}

nextc=buffer[out];

out++;

counter--;

single(mutex);

消费nextc中的产品;}
}
Mutex是互斥变量,它是一个整型数,称为整形信号量
如何进行资源共享?
解决办法(1)排队,有共享资源控制访问—
—需要专门的守护进程,增加了开销

(2)由用户进程控制访问——互斥
1、进程同步的概念
先看一个例子:进程P1、P2公用一个变量 COUNT,初始值为0
当P1完成COUNT =1, 当P2完成,COUNT =2
交错执行,进程执行完 成后,COUNT =1
临界区(critical section)
每个进程中访问临界资源的那段代码 ,被称之为 进程的临界区
可把一个访问临界资源的循环进程描述如下:
2、临界资源与临界区
repeat


critical section;


remainder section;
until false;
2、临界资源与临界区
相关文档
最新文档