操作系统课程设计课件 题目2_第1页
操作系统课程设计课件 题目2_第2页
操作系统课程设计课件 题目2_第3页
操作系统课程设计课件 题目2_第4页
操作系统课程设计课件 题目2_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于软件互斥算法的临界区进程互斥的模拟实现

功能要求(1)互斥算法选择界面要求对Dekker、Peterson、Lamport、Eisenburg/Mcguire4个软件解决互斥的算法进行模拟实现。(2)运行结果(界面)根据选择的软件互斥算法,能动态显示2个或多个并发进程对临界区的互斥执行信息,包括处于临界区内的进程和要进入临界区的进程。

具体细节实现(1)根据界面选择相应的软件互斥算法,(2)能任意创建2个或多个并发进程实现对临界区的互斥执行;(3)对于每个进入临界区进程的执行,可以用显示信息进行模拟;(4)每个进入临界区的进程在临界区内要滞留一个随机产生的时间段

Dekker互斥算法是由荷兰数学家T.Dekker给出的第一个正确实现互斥的软件算法,算法针对两个进程P0和P1定义的两个数据结构:

intflag[2];//初值为0

intturn;//初值为0或1算法:Dekker互斥算法P0:do{flag[0]=1;whileflag[1]doif(turn=1){flag[0]=0;whileturn==1doskip;flag[0]=1;}Dekker互斥算法临界区

turn=1;flag[0]=0;

其余代码

}while(1)Dekker互斥算法P1:do{flag[1]=1;whileflag[0]doif(turn=0){flag[1]=0;whileturn==0doskip;flag[1]=1;}Dekker互斥算法临界区

turn=0;flag[1]=0;

其余代码

}while(1)Peterson算法思想:算法整队两个进程,应用与Dekke算法相似的两个数据结构

intflag[2];//初值为0

intturn;//初值为0或1Peterson算法P0:do{flag[0]=1;turn=1;whileflag[1]&&turn==1doskip;临界区flag[0]=0;}while(1);Peterson算法P1:do{flag[1]=1;turn=0;whileflag[0]&&turn==0doskip;临界区flag[1]=0;}while(1);Lamport面包店算法算法思想:算法的基本思想源于顾客在面包店中购买面包时的排队原理。设置一个发号者,按0,1,2,…,发号。想进入临界区(面包店)的进程先抓号,抓到号之后按由小到大的次序依次进入。Problem:两个进程可能抓到相同的号。Why?

为保证抓到不同的号,需要互斥机制。Resolution:

若抓到相同的号,按进程编号由小到大依次进入。Definition:(a,b)<(c,d)iff(a<c)or(a=candb<d)Lamport面包店算法算法需要以下两个数据结构

int

choosing[n];

int

number[n];

前者表示进程是否正在抓号choosing[i]=1表示进程正在抓号,否则为0,其初值为0.后者用来表示进程抓到号码,初值也为0.算法描述方便需要定义以下表示方法

(a,b)<(c,d),如果

a<cor(a=candb<d)成立。Lamport面包店算法do{Pi进入:1.choosing[i]=1;2.number[i]=max{number[0],…,number[n-1]}+1;3.choosing[i]=0;4.for(j=0;j<n;j++){5.Whilechoosing[j]{skip;}6.While(number[j]<>0)&&7.(number[j],j)<(number[i],i){skip}8.}

(1)P0抓到1未赋值(2)P1抓到1进入临界区(3)P2抓到2进入临界区Lamport面包店算法(Cont.)临界区;

number[i]=0;}while(1);变量choosing的作用:P0:抓到1;P1:抓到1;正确次序:P0,P1,P2P2:抓到2;

可能按P1,P2,P0次序进入!Eisenberg/Mcguire算法enum

flag[n](idle,want_in,in_cs);初值idle

int

turn;//intherangeof(0,n-1);

初始任意0

i

turnn-1先于i先于iflag[i]=idle:进程Pi不想进入临界区flag[i]=want_in:进程Pi想进入临界区flag[i]=in_cs:进程Pi想进入或已进入临界区Eisenberg/Mcguire算法Pi进入:do{do{

flag[i]=want_in;j=turn;While(j!=i)if(flag[j]!=idle){j=turn};else{j=(j+1)%n};

flag[i]=in_cs;j=0;While((j<n)&&(j==i∣∣flag[j]!=in_cs))

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论