进程同步补充作业
- 格式:doc
- 大小:1.11 MB
- 文档页数:3
操作系统作业【注意】对于作业中的选择题,都要求抄写题目(题中若有插图可不画),并在题目上填写答案。
作业1——进程同步(1)1.设有n个进程使用同一个共享变量,如果最多允许m(m < n)个进程同时进入相关临界区,则信号量的变化范围是。
A. n,n-1,...,n-mB. m,m-1,...1,0,-1,...m-nC. m,m-1,...1,0,-1,...m-n-1D. m,m-1,...1,0,-1,...m-n+12.对于有两个并发进程的系统,设互斥信号量为mutex,若mutex=0,则。
A. 表示没有进程进入与mutex相关的临界区B. 表示有一个进程进入与mutex相关的临界区C. 表示有一个进程进入与mutex相关的临界区,另一个进程等待进入D.表示有两个进程进入与mutex相关的临界区3.S.queue,S.value是信号灯S的两个组成部分,当S.queue为空时,S.value的值是( ) A.S.value≤0 B.S.value=0 C.S.value=1 D.Svalue≥04.如果信号量的当前值为-3,则表示系统中在该信号量上有个等待进程。
5.下列选项中,操作系统提供给应用程序的接口是。
(2010全国试题)A.系统调用B.中断C.库函数D.原语6.下列选项中,导致创建新进程的操作是。
(2010全国试题)I.用户登录成功II.设备分配III.启动程序执行A.仅I和II B.仅II和III C.仅I和III D.I、II和III7.设与某资源关联的信号量初值为3,当前值为1。
若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是。
(2010全国试题)A.0、1 B.1、0 C.1、2 D.2、0作业2——进程同步(2)1.如何利用信号量机制来实现多个进程对临界资源的互斥访问?2.四个进程A、B、C、D都要读一个共享文件F,系统允许多个进程同时读文件F,但限制是进程A 和进程C不能同时读文件F,进程B和进程D也不能同时读文件F,为了使这四个进程并发执行时能按系统要求使用文件,现用PV操作进行管理,请回答下面的问题:(1)应定义的信号量及初值:。
第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。
A.管道B.管程C.通道D.DMA2.以下_B__不是操作系统的进程通信手段。
A.管道B.原语C.套接字D.文件映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。
A.3B.2C.1D.04.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V 操作管理时信号量S的可能取值是_C__。
A.3,2,1,0,-1B.2,1,0,-1,-2C. 1,0,-1,-2,-3D.4,3,2,1,05.下面有关进程的描述,是正确的__A__。
A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V 操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。
A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B_ _。
A.没有进程进入临界区B.有1个进程进入了临界区C. 有2个进程进入了临界区D. 有1个进程进入了临界区并且另一个进程正等待进入8. 信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。
A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C. 信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10. 并发是指_C__。
A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11. 临界区是_C__。
A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。
进程同步经典习题1.某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。
若把一个购票者看作一个进程,请用PV操作实现管理。
解:定义一个信号量S,初值为20parbeginprocess pl(l=1,2,……)beginwait(S);进入售票厅;购票;退出;signal(S)end2.桌上有一空盘,允许存放一个水果,爸爸可向盘内放苹果,妈妈可向盘内放桔子,儿子专等吃盘内的桔子,女儿专等吃盘中的苹果,请用P、V 操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步与互斥。
int S=1;int Sa=0;int Sb=0;main(){cobeginfather();mather();son();daughter();coend}father() mather(){while(1) { while(1){p(S); {p(S) ;将一个苹果放入盘中将一个桔子放入盘中V(Sa);} V(Sb);}} }son() daughter(){ while(1) { while(1){p(Sb); { p(Sa);从盘中取出桔子从盘中取出苹果V(S);吃桔子;} V(S);吃苹果;}}3.生产围棋的工人不小心把相等数量的黑子和白子混装在一个盒子里,现在要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程PA和PB组成,系统功能如下:(1)PA专拣黑子,PB专拣白子;(2)每个进程每次只拣一个子,当一个进程拣子时,不允许另一个进程去拣子;(3)当一个进程拣一个子(黑或白)后,必须让另一个进程去拣一个子(白或黑)请回答:①这两个并发进程之间的关系是同步还是互斥②写出PV操作管理时应定义的信号量及其初值。
③根据定义的信号量,写出用PV操作管理两个并发进程的程序答:①两个进程之间是同步关系②定义两个信号量S1和S2,初值为1和0③process PA process PAbegin beginrepeat repeatwait(S1) wait(S2)拣黑子拣白子signal(S2) signal(S1)until false until falseend end4.有一阅览室,读者进入时必须先在一张登记表上登记,该表为每一座位列出一个表目,包括座号、姓名,读者离开时要注销登记信息;假若阅览室共有100个座位。
第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。
A.管道B.管程C.通道2.以下_B__不是操作系统的进程通信手段。
A.管道B.原语C.套接字D.文件映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。
4.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是_C__。
,2,1,0,-1 ,1,0,-1,-2 C. 1,0,-1,-2,-3 ,3,2,1,05.下面有关进程的描述,是正确的__A__。
A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V 操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。
A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B__。
A.没有进程进入临界区B.有1个进程进入了临界区C. 有2个进程进入了临界区D. 有1个进程进入了临界区并且另一个进程正等待进入8. 信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。
A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C. 信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10. 并发是指_C__。
A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11. 临界区是_C__。
A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。
A.进程之间无关,系统是封闭的B.进程之间相互依赖相互制约C.进程之间可能有关,也可能无关D.以上都不对13. 在消息缓冲通信中,消息队列是一种__A__资源。
实验三进程同步一、实验目的:1.了解进程和线程的同步方法,学会运用进程和线程同步方法来解决实际问题;2.了解windows系统下Win32 API或Pthread信号量机制的使用方法;二、实验预备内容:1.对书上所说基于信号量的有限缓冲的生产者-消费者问题;2.对于信号量的概念有大概的了解,知道如何用信号量的wiat()和signal()函数如何取消应用程序进入临界区的忙等;三、实验环境说明:此实验在Win7(32位) CodeBlocks环境下实现,采用WinAPI的信号量机制。
四、实验内容:设计一个程序解决有限缓冲问题,其中的生产者与消费者进程如下图所示。
在Bounded-Buffer Problem(6.6.1节)中使用了三个信号量:empty (记录有多少空位)、full(记录有多少满位)以及mutex(二进制信号量或互斥信号量,以保护对缓冲区插入与删除的操作)。
对于本项目,empty和full将采用标准计数信号量,而mutex将采用二进制信号量。
生产者与消费者作为独立线程,在empty、full、mutex的同步前提下,对缓冲区进行插入与删除。
本项目可采用Pthread或Win32 API。
(本实验采用Win32 API)五、程序设计说明:1.全局变量:定义缓冲区数组及其环形队列表达方式,定义mutex、empty、full 三个信号量。
empty记录缓冲区有多少个空位;full记录缓冲区有多少个满位;mutex作为互斥信号量,保护对缓冲区插入或删除的操作。
具体定义如下:定义生产者、消费者线程结构和包含的信息:(由于题目中没有要求,因此只定义了编号一个变量)2.缓冲区:缓冲区是一个元数据类型为buffer_item(可通过typedef定义)的固定大小的数组,按环形队列处理。
buffer_item的定义及缓冲区大小可保存在头文件中:A.insert_item():先判断缓冲区是否已满,不满则向缓冲区中插入元素;B.remove_item()先判断缓冲区是否为空,不空则从缓冲区中删除元素;3.生产者线程:生产者线程交替执行如下两个阶段:睡眠一段随机事件,向缓冲中插入一个随机数。
进程同步练习题1.在公共汽车上,司机和售票员的工作流程如图所示。
为保证乘客的安全,司机和售票员应密切配合协调工作。
请用信号量来实现司机与售票员之间的同步。
司机售票员图司机和售票员工作流程图2.桌子上有一只盘子,盘子中只能放一只水果。
爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。
用PV操作实现他们之间的同步机制。
3.a,b两点之间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:(1)当ab之间有车辆在行驶时同方向的车可以同时驶入ab段,但另一方向的车必须在ab 段外等待;(2)当ab之间无车辆在行驶时,到达a点(或b点)的车辆可以进入ab段,但不能从a 点和b点同时驶入;(3)当某方向在ab段行驶的车辆驶出了ab段且暂无车辆进入ab段时,应让另一方向等待的车辆进入ab段行驶。
请用信号量为工具,对ab段实现正确管理以保证行驶安全。
4.将只读数据的进程称为“读者”进程,而写或修改数据的进程称为“写者”进程。
允许多个“读者”同时读数据,但不允许“写者”与其他“读者”或“写者”同时访问数据。
另外,要保证:一旦有“写者”等待时,新到达的“读者”必须等待,直到该“写者”完成数据访问为止。
试用P、V操作正确实现“读者”与“写者”的同步。
(第二类读者写者问题,信号量解决方法)5.一条河上架设了由若干个桥墩组成的一座桥。
若一个桥墩只能站一个人,过河的人只能沿着桥向前走而不能向后退。
过河时,只要对岸无人过,就可以过。
但不允许河对岸的两个人同时过,以防止出现死锁。
请给出两个方向的人顺利过河的同步算法。
6.有一个仓库,可以存放A和B两种产品,但要求:(1)每次只能存入一种产品(A或B);(2)-N<A产品数量-B产品数量<M。
其中,N和M是正整数。
试用同步算法描述产品A与产品B的入库过程。
1、在公共汽车上,司机和售票员的工作流程如图所示。
为保证乘客的安全,司机和售票员应密切配合协调工作。
操作系统进程同步实验报告实验三:进程同步实验一、实验任务:(1)掌握操作系统的进程同步原理;(2)熟悉linux的进程同步原语;(3)设计程序,实现经典进程同步问题。
二、实验原理:(1)P、V操作PV操作由P操作原语与V操作原语组成(原语就是不可中断的过程),对信号量进行操作,具体定义如下:P(S):①将信号量S的值减1,即S=S-1;②如果S30,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):①将信号量S的值加1,即S=S+1;②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
(2)信号量信号量(semaphore)的数据结构为一个值与一个指针,指针指向等待该信号量的下一个进程。
信号量的值与相应资源的使用情况有关。
当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的值仅能由PV 操作来改变。
一般来说,信号量S30时,S表示可用资源的数量。
执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S(3)linux的进程同步原语①wait();阻塞父进程,子进程执行;②#include#includekey_t ftok (char*pathname, char proj);它返回与路径pathname相对应的一个键值。
③int semget(key_t key, int nsems, int semflg)参数key就是一个键值,由ftok获得,唯一标识一个信号灯集,用法与msgget()中的key 相同;参数nsems指定打开或者新创建的信号灯集中将包含信号灯的数目;semflg参数就是一些标志位。
参数key与semflg的取值,以及何时打开已有信号灯集或者创建一个新的信号灯集与msgget()中的对应部分相同。
该调用返回与健值key相对应的信号灯集描述字。
调用返回:成功返回信号灯集描述字,否则返回-1。
第一章补充作业1、设某计算机系统有一台输入机、一台打印机。
现有两道程序同时投入运行,且程序A先开始运行,程序B后运行。
程序A的运行轨迹为:计算50ms,打印信息100ms,再计算50ms,打印信息100ms,结束。
程序B的运行轨迹为:计算50ms,输入数据80ms,再计算100ms,结束。
试说明:(1)两道程序运行时,CPU有无空闲等待?若有,在哪段时间内等待?为什么会空闲等待?(2)程序A、B运行时有无等待现象?若有,在什么时候会发生等待现象?2、有两个程序,A程序按顺序使用CPU 10s,使用设备甲5s,使用CPU 5s,使用设备乙10s,最后使用CPU 10s。
B程序按顺序使用设备甲10s,使用CPU 10s,使用设备乙5s,使用CPU 5s,使用设备乙10s。
在顺序环境下先执行A程序再执行B程序,CPU的利用率是多少?在多道程序系统环境下,CPU的利用率是多少?第二章补充作业1、熟练练习60条DOS命令,要求写出每条命令的格式、功能练习过程。
2、熟练练习40条LINUX命令,要求写出每条命令的格式、功能练习过程。
注:做好截图存在文档中,实验报告中要写入。
第三章补充作业1、假设一个计算机系统具有如下性能特征:处理一次中断,平均耗用1ms。
一次进程调度,平均需要2ms。
将CPU分配给选中的进程,又平均需要1ms。
再假设其定时器芯片每秒产生100次中断。
请回答:操作系统将百分之几的CPU 时间用于时钟中断处理?如果操作系统采用轮转法调度,10个时钟中断为1个时间片。
那么,操作系统将百分之几的CPU时间用于进程调度(包括调度、分配CPU和引起调度的时钟中断处理时间)?2、假设就绪队列中有10个进程,系统将时间片设为200ms,CPU进行进程切换要花费10ms,试问系统开销所占的比率约为多少?3、有三个进程PA、PB和PC协作解决文件打印问题:PA将文件记录从磁盘读入内在的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录,如图所示。
1、测量控制系统中的数据采集任务把所采集的数据送一单缓冲区;计算任务则从该缓冲区中取出数据并进行计算。
试写出利用信号量机制实现两者共享单缓冲区的同步算法。
Var Sempty,Sfull: semaphore:= 1,0BeginParbeginCollection:beginrepeat采集一个数据;wait(Sempty);数据放入缓冲区;signal(Sfull);untill false;end;Compute:beginrepeatwait(Sfull);从缓冲区取出数据;signal(Sempty);计算;` until false;end;ParendEnd2、有一阅览室,共有100个座位。
读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。
读者离开时要注销掉登记内容。
试用wait和signal原语描述读者进程的同步问题。
var mutex, readcount :semaphore := 1,100; BeginParbeginProcess Reader:beginrepeatwait(readcount);wait(mutex);<填入座号和姓名完成登记>;signal(mutex);<阅读>wait(mutex)<删除登记表中的相关表项,完成注销>signal(mutex);signal(readcount);until false;end;parend;End;1)、桌上有一空盘,只允许放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子;女儿专吃盘中的苹果,儿子专吃盘中的桔子;试用wait 和signal原语实现爸爸、妈妈、女儿、儿子之间的同步问题。
var Sempty, Sapple, Sorange,: semaphore:= 1,0,0; beginparbeginFather: beginrepeatwait(Sempty);<put apple in tray>;signal(Sapple);until false;end;Mother: beginrepeatwait(Sempty);<put orange in tray>;signal(Sorange);until false;end;Son: beginrepeatwait(Sorange);<take orange>;signal(Sempty);until false;end;Daughter: beginrepeatwait(Sapple);<take apple>;signal(Sempty);until false;end;parend;end;1、在4×100米接力赛中,4个运动员之间存在如下关系,运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100米后交给运动员3,运动员3也只有在接到运动员2传来的棒后才能跑,他跑完100米后交给运动员4,运动员4接到棒后跑完全程。
第4章进程同步与通信1)选择题(1)在操作系统中,P、V操作是一种_D__。
A。
机器指令B。
系统调用命令C. 作业控制命令D。
低级进程通信原语(2)若信号量S的初值为2,当前值为-1,则表示有_B__等待进程。
A。
0个B。
l个C. 2个D。
3个(3)在直接通信方式中,系统提供两条通信原语进行发送和接收,其中Send原语中参数应是_C_。
A。
sender,message B。
sender,mailboxC. receiver,message D。
receiver,mailbox(4)下述那个选项不是管程的组成部分_A__.A。
管程外过程调用管程内数据结构的说明B。
管程内对数据结构进行操作的一组过程C。
局部于管程的共享数据说明D。
对局部于管程的数据结构设置初值的语句(5)某通信方式通过共享存储区来实现,其属于_D__。
A. 消息通信B。
低级通信C。
管道通信D。
高级通信(6)用P、V操作管理临界区时,信号量的初值应定义为__C__。
A. —1B. 0C。
1 D. 任意值(7)临界区是_B__。
A. 一个缓冲区B. 一段程序C. 一段共享数据区D。
一个互斥资源(8)信箱通信是一种_D__通信方式。
A。
直接通信 B. 信号量C。
低级通信D。
间接通信(9)对于两个并发进程,设互斥信号量为mutex,若mutex=0则__A_。
A. 表示有一个进程进入临界区B。
表示没有进程进入临界区C。
表示有一个进程进入临界区,另一个进程等待进入D. 表示有两个进程进入临界区(10)对信号量S执行V操作后,下述选项正确的是_C__。
A. 当S小于等于0时唤醒一个阻塞进程B. 当S小于0时唤醒一个阻塞进程C. 当S小于等于0时唤醒一个就绪进程D. 当S小于0时唤醒一个就绪进程(11)在消息缓冲通信中,消息队列属于_A__资源。
A. 临界B。
共享C。
永久 D. 可剥夺(12)在消息缓冲通信机制中,使用的临界资源是_D__。
A。
信箱B。
进程同步问题总结报告一、问题描述进程同步是操作系统中一个重要的问题,它涉及到多个进程在共享资源时如何正确地访问和操作。
在多进程环境中,如果没有正确的同步机制,会导致诸如竞态条件、死锁等问题。
本报告主要探讨进程同步问题及其解决方案。
二、问题分析1. 竞态条件:当多个进程同时访问共享资源,并且至少有一个进程的操作结果被其他进程的操作所覆盖,就会产生竞态条件。
竞态条件可能会导致数据不一致、系统状态不确定等问题。
2. 死锁:死锁是指两个或多个进程在等待对方释放资源,导致系统无法继续执行的情况。
死锁通常是由于资源分配不当、进程请求资源的顺序不一致等原因造成的。
三、解决方案1. 互斥锁(Mutex):互斥锁是一种最基本的同步机制,它允许一个进程在一段时间内独占共享资源。
当一个进程获得互斥锁后,其他进程就不能再获取锁,直到原进程释放锁。
这样可以避免竞态条件。
2. 信号量(Semaphore):信号量是一个计数器,用于控制对共享资源的访问次数。
信号量的值表示当前可用的共享资源数量。
通过调整信号量的值,可以控制进程对共享资源的访问。
3. 条件变量(Condition Variable):条件变量用于进程间的通信,一个进程可以在条件变量上等待,直到另一个进程通过通知操作唤醒它。
条件变量常与互斥锁、信号量等机制结合使用。
4. 读写锁(Read-Write Lock):读写锁允许多个进程同时读取共享资源,但只允许一个进程写入共享资源。
这可以提高并发性能,特别适用于读操作远多于写操作的情况。
5. 栅栏(Barrier):栅栏是一种同步机制,用于确保多个进程在访问共享资源前都达到某一位置。
栅栏类似于一个检查点,所有进程在到达栅栏前都必须等待,直到所有进程都到达栅栏才继续执行。
四、实验结果我们通过实验验证了这些同步机制的正确性和有效性。
实验中,我们设计了一些多进程程序,模拟了竞态条件和死锁情况,然后使用上述同步机制来解决这些问题。
第三章进程同步与通信作业习题与答案第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。
A.管道B.管程C.通道D.DMA2.以下_B__不是操作系统的进程通信手段。
A.管道B.原语C.套接字D.文映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。
A.3B.2C.1D.04.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是_C__。
A.3,2,1,0,-1B.2,1,0,-1,-2C.1,0,-1,-2,-3D.4,3,2,1,05.下面有关进程的描述,是正确的__A__。
A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。
A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B__。
A.没有进程进入临界区B.有1个进程进入了临界区C.有2个进程进入了临界区D.有1个进程进入了临界区并且另一个进程正等待进入8.信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。
A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C.信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10.并发是指_C__。
A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11.临界区是_C__。
A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。
进程同步实验 (1)实验目的 (1)实验过程 (1)1.制造混乱 (1)实验结果: (3)结果分析: (3)2.mutex 方案 (4)实验结果: (5)结果分析: (6)3.软件方案 (6)实验结果: (9)结果分析: (10)进程同步实验实验目的讨论临界区问题及其解决方案。
实验首先创建两个共享数据资源的并发线程。
在没有同步控制机制的情况下,我们将看到某些异常现象。
针对观察到的现象,本实验采用两套解决方案:•利用Windows 的mutex 机制•采用软件方案然后比较这两种方案的性能优劣。
实验过程1.制造混乱Windows 操作系统支持抢先式调度,这意味着一线程运行一段时间后,操作系统会暂停其运行并启动另一线程。
也就是说,进程内的所有线程会以不可预知的步调并发执行。
为了制造混乱,我们首先创建两个线程t1 和t2。
父线程(主线程)定义两个全局变量,比如accnt1 和accnt2。
每个变量表示一个银行账户,其值表示该账户的存款余额,初始值为0。
线程模拟在两个账户之间进行转账的交易。
也即,每个线程首先读取两个账户的余额,然后产生一个随机数r,在其中一个账户上减去该数,在另一个账户上加上该数。
线程操作的代码如下:#include <stdlib.h>#include <stdio.h>#include <windows.h>int accnt1 = 0;int accnt2 = 0;double begin=0,end=0,time=0;int i=1;DWORD WINAPI run( LPVOID p) {int counter=0;int tmp1, tmp2, r;begin=GetTickCount();do {tmp1 = accnt1;tmp2 = accnt2;r = rand();accnt1 = tmp1 + r;accnt2 = tmp2 - r;counter++;} while ( accnt1 + accnt2 == 0 &&counter<); end=GetTickCount();time=end-begin;printf ("counter=%d\n", counter);printf ("进程%d用时%lf \n", i,time);i++;counter =0;return 0;}int main(int argc, char *argv[]){CreateThread(NULL,0,run,NULL,0,NULL); CreateThread(NULL,0, run,NULL,0,NULL);system("PAUSE");return 0;}实验结果:结果分析:两个线程执行相同的代码。
XI`AN TECHNOLOGICAL UNIVERSITY 实验报告进程同步的多种解决办法摘要:简单介绍了进程同步的概念,分析了进程同步的多种解决办法,重点讨论了读者写者问题,更容易了解解决办法的具体机制。
关键词:进程同步;多进程;读者-写者0 引言Windows应用程序中消息有两种送出途径,直接和排队。
Windows或某些运行的应用程序可直接发布消息给窗口过程,或消息可送达到消息列象连续不断地轮询消息队列的OS中当前执行的每一个进程都不是由事件的顺序来控制的,而是由事件的发生来控制的。
在传统的操作系统中,为提高资源利用率和系统吞吐量,通常采用多道程序技术,将多个程序同时装入内存,并使之并发执行。
1 同步在OS中引入进程后,一方面使系统中多道程序并发执行,这不仅使资源利用率改善,亦可显著提高系统吞吐量,但也使系统更为复杂,致使进程对系统资源的无序争夺,每次处理的结果存在不确定性,显现不可再现性。
因此,在多道程序系统中,必须引入进程同步机制。
在本文中将介绍如下几种进程同步机制——硬件同步机制,信号量机制,管程机制和Peri网。
2 进程同步解决办法2.1 硬件同步机制目前许多计算机已提供特殊的硬件指令,允许对一个字中的内容进行检测和改正或对两个字进行交换。
可利用特殊指令解决临界的问题。
对临界区管理时,可将标志看作一个锁,“锁开”进入,“锁关”等待,初始状态锁是开着的。
但当临界资源忙碌时,其他进程处于“忙等”状态,不符合“让权等待”原则,造成处理机时间的浪费,同时很难解决,解决复杂的进程同步问题。
2.2 信号量机制信号量机制已得到广泛发展,由整形信号量经记录型信号量,发展到“信号量集机制”,已广泛应用于单处理机和多处理机系统以及计算机网络中。
信号量机制通常包括整型信号量,记录型信号量,AND型信号量和信号量集。
2.2.1 整型信号量除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问。
1.设有两个优先级相同的进程p
1与p
2
,令信号量s
1
、s
2
的初值为0,已知z=2,
试问p
1、p
2
并发运行后x=?,y=?,z=?
进程p
1:y=1; 进程p
2
: x=1;
y=y+2; x=x+1;
signal(s
1
); wait(s
1
);
z=y+1; x=x+y;
wait(s
2
); signal(s
2
);
y=z+y; z=z+x;
解:
①x=5,y=12,z=9 ②x=5,y=7,z=9 ③ x=5,y=7,z=4
2. 有桥如下图所示,车流方向如箭头所示。
假设桥上不允许两车交会,但允许同方向多辆车依次通过(即桥上可有多个相同方向行驶的车辆),试用wait和signal操作实现桥交通管理。
算法:
Var lmutex,rmutex,mutex:semapghore:=1,1,1;
Var lcount,rcount:integer:=0,0;
begin
parbegin
left:begin
repeat
wait(lmutex);//准备上桥
if lcount=0 then wait(mutex);
lcount=lcount+1;
signal(lmutex);
车自左向右过桥;
wait(lmutex);//下桥
lcount=lcount-1;
if lcount=0 then signal(mutex);
signal(lmutex);
until false;
end.
right:begin
repeat
wait(rmutex);//准备上桥
if rcount=0 then wait(mutex);
rcount=rcount+1;
signal(rmutex);
车自右向左过桥;
wait(rmutex);//下桥
rcount=rcount-1;
if rcount=0 then signal(mutex);
signal(rmutex);
until false;
end.
parend.
end.
3.某银行人民币储蓄业务由若干个柜员负责。
每个顾客进入银行后先取一个号,并且等着叫号,当一个柜员空闲下来时,就叫下一个号,持该号的顾客被服务。
试用wait、signal操作正确编写柜台人员进程和顾客进程的
4.。