文档库 最新最全的文档下载
当前位置:文档库 › 进程同步问题

进程同步问题

进程同步问题
进程同步问题

进程同步问题

(2013年考研题)某博物馆最多可容纳500 人同时参观,有一个出入口,该出入口一次仅允许一个人通过。参观者的活动描述如下:

cobegin

参观者进程i:

{

进门;

参观;

出门;

}

coend

请添加必要的信号量和P、V(或wait()、signal())操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。

【答案要点】

定义两个信号量

Semaphore empty = 500; / / 博物馆可以容纳的最多人数(2分)Semaphore mutex = 1; / / 用于出入口资源的控制(2分)

参观者进程i;

{

P ( empty );

P ( mutex );

进门;

V( mutex );

参观;

P ( mutex );

出门;

V( mutex );

V( empty );

}

coend(3分)

【评分说明】

①信号量初值给1分,说明含义给1分,两个信号量的初值和含义共4分。

②对mutex的P、V 操作正确给2分。

③对empty的P、V 操作正确给1分。

④其他答案,参照①~③的标准给分。

(2011年考研题)某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客及营业员的活动描述如下:cobegin

{

process 顾客i

{

从取号机获取一个号码;

等待叫号;

获得服务;

}

process 营业员

{

while(TRUE)

{

叫号;

为顾客服务;

}

}

}coend

请添加必要的信号量和P、V(或wait()、signal())操作,实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。

解析:

Semaphore seats=10,//有10个座位的资源信号量

Mutex=1,//取号机互斥信号量

haveCustomer=0;//顾客与营业员同步,无顾客时营业员休息

cobegin

{

process 顾客i

{

P(seats);//等空位

P(mutex);//申请使用取号机

从取号机获取一个号码;

V(mutex);//取号完毕

V(haveCustomer);//通知营业员有新顾客到来

等待叫号;

V(seats);//离开座位

获得服务;

}

process 营业员

{

while(TRUE)

{

P(haveCustomer);//没有顾客则休息

叫号;

为顾客服务;

}

}

}coend

进程同步与通信作业习题与答案

第三章 一.选择题(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,0 5.下面有关进程的描述,是正确的__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__资源。 A.临界 B.共享 C.永久 D.可剥夺 14. 以下关于P、V操作的描述正确的是__D_。 A.机器指令 B. 系统调用 C.高级通信原语 D.低级通信原语 15.当对信号量进行V源语操作之后,_C__。 A.当S<0,进程继续执行 B.当S>0,要唤醒一个就绪进程 C. 当S<= 0,要唤醒一个阻塞进程 D. 当S<=0,要唤醒一个就绪 16.对临界区的正确论述是__D_。 A.临界区是指进程中用于实现进程互斥的那段代码 B. 临界区是指进程中用于实现进程同步的那段代码 C. 临界区是指进程中用于实现进程通信的那段代码 D. 临界区是指进程中访问临界资源的那段代码 17. __A__不是进程之间的通信方式。 A.过程调用 B.消息传递 C.共享存储器 D.信箱通信 18. 同步是指进程之间逻辑上的__A__关系。

进程同步经典习题

1.某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请用PV操作实现管理。 解:定义一个信号量S,初值为20 parbegin process pl(l=1,2,……) begin wait(S); 进入售票厅; 购票; 退出; signal(S) end 2.桌上有一空盘,允许存放一个水果,爸爸可向盘内放苹果,妈妈可向盘内放桔子,儿子专等吃盘内的桔子,女儿专等吃盘中的苹果,请用P、V 操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步与互斥。 int S=1;int Sa=0;int Sb=0; main() {cobegin father(); 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 PA begin begin repeat repeat wait(S1) wait(S2) 拣黑子拣白子 signal(S2) signal(S1) until false until false end end 4.有一阅览室,读者进入时必须先在一张登记表上登记,该表为每一座位列出一个表目,包括座号、姓名,读者离开时要注销登记信息;假若阅览室共有100个座位。试用信号量和PV操作来实现用户进程的同步算法。 解:设置如下3个信号量 seat:表示阅览室中空座位数,其初值为100.

进程同步机制与互斥-生产者消费者问题

学习中心: 专业: 年级:年春/秋季 学号: 学生: 题目:进程同步与互斥生产者-消费者问题 1.谈谈你对本课程学习过程中的心得体会与建议? 转眼间,学习了一个学期的计算机操作系统课程即将结束。在这个学期中,通过老师的悉心教导,让我深切地体会到了计算机操作系统的一些原理和具体操作过程。在学习操作系统之前,我只是很肤浅地认为操作系统只是单纯地讲一些关于计算机方面的操作应用,并不了解其中的具体操作过程 1.1设计思路 在这次设计中定义的多个缓冲区不是环形循环的,并且不需要按序访问。其中生产者可以把产品放到某一个空缓冲区中,消费者只能消费被指定生产者生产的产品。本设计在测试用例文件中指定了所有生产和消费的需求,并规定当共享缓冲区的数据满足了所有有关它的消费需求后,此共享才可以作为空闲空间允许新的生产者使用。

本设计在为生产者分配缓冲区时各生产者之间必须互斥,此后各个生产者的具体生产活动可以并发。而消费者之间只有在对同一个产品进行消费时才需要互斥,它们在消费过程结束时需要判断该消费者对象是否已经消费完毕并释放缓冲区的空间。 1.2程序流程图 1.3基本内容 在设计程序时主要有三个主体部分、三个辅助函数和一个数据结构。 其中主体部分为一个主函数main(),用于初始化缓冲区和各个同步对象,并完成线程信息的读入,最后根据该组的线程记录启动模拟线程,并等待所有线程的运 Y

行结束后退出程序; 生产者函数Produce()和消费者函数Consume(),生产者和消费者函数运行于线程中完成对缓冲区的读、写动作,根据此处生产消费的模型的特点,生产者和消费者之间通过使用同步对象实现了生产和消费的同步与互斥,是本实验的核心所在。 另外三个辅助性函数被生产者和消费者函数调用,是上述生产和消费函数中对缓冲区进行的一系列处理。 3)在实现本程序的消费生产模型时,具体的通过如下同步对象实现互斥: ①设一个互斥量h_mutex,以实现生产者在查询和保留缓冲区内的下一个位置时进行互斥。 ②每一个生产者用一个信号量与其消费者同步,通过设置h_Semaphore[MAX_THREAD_NUM]信号量 ③数组实现,该组信号量用于相应的产品已产生。同时用一个表示空缓冲区

进程间的同步和互斥-

实验报告 1、实验名称 进程间的互斥和同步 2、小组成员:姓名+学号 3、实验目的 Linux命名信号量实现进程间的互斥和同步 4、实验背景知识 进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。而当进程A产生信息放入缓冲区时,进程B才会被唤醒。 进程互斥是进程之间的间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。比如进程B需要访问打印机,但此时进程A占有了打印机,进程B会被阻塞,直到进程A释放了打印机资源,进程B才可以继续执行。 5、实验步骤演示 大概步骤: 先进行单次同步,把信号量先初始化为0,创建一个命名信号量,设置信号捕捉处理代码,安装捕捉信号;其次使用信号量进行同步和互斥的操作。 详细步骤: 1.创建一个命名信号量,sem = sem_open(SEM_NAME, OPEN_FLAG, OPEN_MODE, INIT_V); 2.创建子进程,pid = fork(); 3.V操作,sem_post(sem); 4.P操作,sem_wait(sem); 5.等待子进程结束,wait(&status); 6.删掉在系统创建的信号量,sem_unlink(SEM_NAME); 7.彻底销毁打开的信号量,sem_close(sem);

8.信号捕捉处理,static void myhandler(void); 9.迭代同步,两个信号量,开始时一个为1,一个为0,一个进程执行完换另一个执行; 10.安装捕捉信号,signal(SIGINT,(void *)myhandler ); 11.创建一个命名信号量:sem1 = sem_open(SEM_NAME1, OPEN_FLAG, OPEN_MODE, 1);sem2 = sem_open(SEM_NAME2, OPEN_FLAG, OPEN_MODE, 0); 12.创建子进程,pid = fork(); 13.if(0 == pid) P操作:sem_wait(sem1); V操作:sem_post(sem2); 14.if(0 < pid) P操作:sem_wait(sem2); V操作:sem_post(sem1); 15.static void mysem(char *str) { int i = 0; //P操作 sem_wait(sem); while('\0' != str[i]) { printf("%c\n", str[i++]); sleep(1); } //V操作 sem_post(sem); } 进程排斥,在临界区设置PV操作 16.创建一个命名信号量,sem = sem_open(SEM_NAME, OPEN_FLAG, OPEN_MODE, INIT_V); 17.if(0 == pid) { mysem("abcd"); } 18.if(0 < pid) { mysem("1234"); //等待子进程结束 wait(&status); //删掉在系统创建的信号量 sem_unlink(SEM_NAME); //彻底销毁打开的信号量 sem_close(sem); } 说明: 命名信号量不带内存共享,编译时要带库文件-lpthread或-lrt

进程的同步实验报告

操作系统 实验报告 哈尔滨工程大学 计算机科学与技术学院

一、实验概述 1. 实验名称 进程的同步 2. 实验目的 ⑴使用EOS的信号量,编程解决生产者 消费者问题,理解进程同步的意义。 ⑵调试跟踪EOS信号量的工作过程,理解进程同步的原理。 ⑶修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 3. 实验类型 验证+设计 4. 实验内容 ⑴准备实验 ⑵使用EOS的信号量解决生产者-消费者问题 ⑶调试EOS信号量的工作过程 ①创建信号量 ②等待释放信号量 ③等待信号量(不阻塞) ④释放信号量(不唤醒) ⑤等待信号量(阻塞) ⑥释放信号量(唤醒) ⑷修改EOS的信号量算法 二、实验环境 WindowsXP + EOS集成实验环境 三、实验过程 1. 设计思路和流程图

图4-1.整体试验流程图

图4-2.Main 函数流程图、生产者消费、消费者流程图 2. 算法实现 3. 需要解决的问题及解答 (1). 思考在ps/semaphore.c 文件内的PsWaitForSemaphore 和PsReleaseSemaphore 函数中,为什么要使用原子操作?

答:在执行等待信号量和释放信号量的时候,是不允许cpu响应外部中断的,如果此时cpu响应了外部中断,会产生不可预料的结果,无法正常完成原子操作。 (2). 绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。 (3).P143生产者在生产了13号产品后本来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢? 答:这是因为临界资源的限制。临界资源就像产品仓库,只有“产品仓库”空闲生产者才能生产东西,有权向里面放东西。所以它必须等到消费者,取走产品,“产品空间”(临界资源)空闲时,才继续生产14号产品。 (4). 根据本实验3.3.2节中设置断点和调试的方法,自己设计一个类似的调试方案来验证消费者线程在消费24号产品时会被阻塞,直到生产者线程生产了24号产品后,消费者线程才被唤醒并继续执行的过程。 答:可以按照下面的步骤进行调试 (1) 删除所有的断点。 (2) 按F5启动调试。OS Lab会首先弹出一个调试异常对话框。 (3) 在调试异常对话框中选择“是”,调试会中断。 (4) 在Consumer函数中等待Full信号量的代码行(第173行)WaitForSingleObject(FullSemaphoreHandle, INFINITE); 添加一个断点。 (5) 在“断点”窗口(按Alt+F9打开)中此断点的名称上点击右键。 (6) 在弹出的快捷菜单中选择“条件”。 (7) 在“断点条件”对话框(按F1获得帮助)的表达式编辑框中,输入表达式“i == 24”。 (8) 点击“断点条件”对话框中的“确定”按钮。 (9) 按F5继续调试。只有当消费者线程尝试消费24号产品时才会在该条件断点处中断。 4. 主要数据结构、实现代码及其说明 修改PsWaitForSemaphore函数 if (Semaphore->Count>0){ Semaphore->Count--; flag=STATUS_SUCCESS; }//如果信号量大于零,说明尚有资源,可以为线程分配 else flag=PspWait(&Semaphore->WaitListHead, Milliseconds); KeEnableInterrupts(IntState); // 原子操作完成,恢复中断。 return flag; }//否则,说明资源数量不够,不能再为线程分配资源,因此要使线程等待 修改PsReleaseSemaphore函数 if (Semaphore->Count + ReleaseCount > Semaphore->MaximumCount) {

第3章 进程同步与通信 练习题答案

第3章进程同步与通信练习题 (一)单项选择题 1.临界区是指( )。 A.并发进程中用于实现进程互斥的程序段 B.并发进程中用于实现进程同步的程序段 C.并发进程中用户实现进程通信的程序段 D.并发进程中与共享变量有关的程序段 2.相关临界区是指( )。 A.一个独占资源 B.并发进程中与共享变量有关的程序段 c.一个共享资源 D.并发进程中涉及相同变量的那些程序段 3.管理若干进程共享某一资源的相关临界区应满足三个要求,其中( )不考虑。 A一个进程可以抢占己分配给另一进程的资源 B.任何进程不应该无限地逗留在它的临界区中c.一次最多让一个进程在临界区执行 D.不能强迫一个进程无限地等待进入它的临界区4、( )是只能由P和v操作所改变的整型变量。 A共享变量 B.锁 c整型信号量 D.记录型信号量 5.对于整型信号量,在执行一次P操作时,信号量的值应( )。 A.不变 B.加1 C减1 D.减指定数值 6.在执行v操作时,当信号量的值( )时,应释放一个等待该信号量的进程。 A>0 B.<0 c.>=0 D.<=0 7.Pv操作必须在屏蔽中断下执行,这种不可变中断的过程称为( )。 A初始化程序 B.原语 c.子程序 D控制模块 8.进程间的互斥与同步分别表示了各进程间的( )。 A.竞争与协作 B.相互独立与相互制约 c.不同状态 D.动态性与并发性 9并发进程在访问共享资源时的基本关系为( )。 A.相互独立与有交往的 B.互斥与同步 c并行执行与资源共享 D信息传递与信息缓冲 10.在进程通信中,( )常用信件交换信息。 A.低级通信 B.高级通信 c.消息通信 D.管道通信 11.在间接通信时,用send(N,M)原语发送信件,其中N表示( )。 A.发送信件的进程名 B.接收信件的进程名 C信箱名 D.信件内容 12.下列对线程的描述中,( )是错误的。 A不同的线程可执行相同的程序 B.线程是资源分配单位 c.线程是调度和执行单位 D.同一 进程中的线程可共享该进程的主存空间 13.实现进程互斥时,用( )对应,对同一个信号量调用Pv操作实现互斥。 A.一个信号量与一个临界区 B.一个信号量与—个相关临界区 c.一个信号量与一组相关临界 区 D一个信号量与一个消息 14.实现进程同步时,每一个消息与一个信号量对应,进程( )可把不同的消息发送出去。 A.在同一信号量上调用P操作 B在不同信号量上调用P操作 c.在同一信号量上调用v操作D.在不同信号量上调用v操作 (二)填空题 1.目前使用的计算机的基本特点是处理器______执行指令。 2.进程的______是指进程在顺序处理器上的执行是按顺序进行的。 3.当一个进程独占处理器顺序执行时,具有______和______两个特性。 4.进程的封闭性是指进程的执行结果只取决于______,不受外界影响。 5 进程的可再现性是指当进程再次重复执行时,必定获得______的结果。 6.一个进程的工作在没有全部完成之前,另一个进程就可以开始工作,则称这些进程为______.

李建伟版实用操作系统第二版最新习题 3 进程同步与通信

李建伟版实用操作系统第二版最新习题 3 进程同步与通信 一、选择题 题号1 2 3 4 5 6 7 8 9 10 答案A D D C B C A B A A 题号11 12 答案D C 二、综合题 1、答:临界资源也称独占资源、互斥资源,它是指某段时间内只充许一个进程使用的资源。比如打印机等硬件资源,以及只能互斥使用的变量、表格、队列等软件资源。各个进程中访问临界资源的、必须互斥执行的程序代码段称为临界区,各进程中访问同一临界资源的程序代码段必须互斥执行。 为防止两个进程同时进入临界区,可采用软件解决方法或同步机构来协调它们。但是,不论是软件算法还是同步机构都应遵循下述准则: ①空闲让进。②忙则等待。③有限等待。④让权等待。 2、答:忙等待意味着一个进程正在等待满足一个没有闲置处理器的严格循环的条件。因为只有一个CPU 为多个进程服务,因此这种等待浪费了CPU 的时钟。 其他类型的等待:与忙等待需要占用处理器不同,另外一种等待则允许放弃处理器。如进程阻塞自己并且等待在合适的时间被唤醒。忙等可以采用更为有效的办法来避免。例如:执行请求(类似于中断)机制以及PV 信号量机制,均可避免“忙等待”现象的发生。 3、答: 在生产者—消费者问题中,Producer 进程中P(empty)和P(mutex)互换先后次序。先 执行P(mutex),假设成功,生产者进程获得对缓冲区的访问权,但如果此时缓冲池已满,没有空缓冲区可供其使用,后续的P(empty)原语没有通过,Producer 阻塞在信号量empty 上,而此时mutex 已被改为0,没有恢复成初值1。切换到消费者进程后,Consumer 进程执行P(full)成功,但其执行P(mutex)时由于Producer 正在访问缓冲区,所以不成功,阻塞在信号量mutex 上。生产者进程和消费者进程两者均无法继续执行,相互等待对方释放资源,会产生死锁。 在生产者和消费者进程中,V 操作的次序无关紧要,不会出现死锁现象。 4、答:

操作系统课程设计用多进程同步方法解决生产者-消费者问题

操作系统课程设计 用多进程同步方法解决生产者-消费者问题 系别:计科系 专业: 计算机科学与技术 班级:04 级 4 班 学号:0410******* 姓名:苏德洪 时间:2006-7-7—2006-7-14

目录 一、题目: (3) 二、设计目的: (3) 三、总体设计思想概述: (3) 四、说明: (3) 五、设计要求: (3) 六、设计方案: (3) 七、流程图: (5) 八、运行结果 (7) 九、源程序 (11) 十、总结 (18) 十一、参考文献 (20)

一、题目: 用多进程同步方法解决生产者-消费者问题。 二、设计目的: 通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。 三、总体设计思想概述: 1、生产者—消费者问题是一种同步问题的抽象描述。 2、计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一 资源时,可以看作是消耗,且该进程称为消费者。 3、而当某个进程释放资源时,则它就相当一个生产者。 四、说明: 有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数。 五、设计要求: 1、每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前 指针位置和生产者/消费者线程的标识符。 2、生产者和消费者各有两个以上。 3、多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码。 六、设计方案: 通过一个有界缓冲区(用数组来实现,类似循环队列)把生产者和消费者联系起来。假定生产者和消费者的优先级是相同的,只要缓冲区未满,生产者就可以生产产品并将产品送入缓冲区。类似地,只要缓冲区未空,消费者就可以从缓冲区中去走产品并消费它。 应该禁止生产者向满的缓冲区送入产品,同时也应该禁止消费者从空的缓冲区中取出产品,这一机制有生产者线程和消费者线程之间的互斥关系来实现。 为解决生产者/消费者问题,应该设置两个资源信号量,其中一个表示空缓冲区的数目,用g_hFullSemaphore表示,其初始值为有界缓冲区的大小SIZE_OF_BUFFER;另一个表示缓冲区中产品的数目,用g_hEmptySemaphore表示,其初始值为0。另外,由于有界缓冲区是一个临界资源,必须互斥使用,所以还需要再设置一个互斥信号量g_hMutex,起初值为1。

进程同步实验报告

实验三进程的同步 一、实验目的 1、了解进程同步和互斥的概念及实现方法; 2、更深一步的了解fork()的系统调用方式。 二、实验内容 1、预习操作系统进程同步的概念及实现方法。 2、编写一段源程序,用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。程序的输出是什么?分析原因。 3、阅读模拟火车站售票系统和实现进程的管道通信源代码,查阅有关进程创建、进程互斥、进程同步的系统功能调用或API,简要解释例程中用到的系统功能或API的用法,并编辑、编译、运行程序,记录程序的运行结果,尝试给出合理的解释。 4、(选做)修改问题2的代码,使得父子按顺序显示字符“a”;“b”、“c”编辑、编译、运行。记录程序运行结果。 三、设计思想 1、程序框架 (1)创建两个子进程:(2)售票系统:

(3)管道通信: 先创建子进程,然后对内容加锁,将输出语句存入缓存,并让子进程自己进入睡眠,等待别的进程将其唤醒,最后解锁;第二个子进程也执行这样的过程。父进程等待子进程后读内容并输出。 (4)修改程序(1):在子进程的输出语句前加上sleep()语句,即等待父进程执行完以后再输出。 2、用到的文件系统调用函数 (1)创建两个子进程:fork() (2)售票系统:DWORD WINAPI Fun1Proc(LPVOID lpPartameter); CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); CloseHandle(hThread1); (HANDLE)CreateMutex(NULL,FALSE,NULL); Sleep(4000)(sleep调用进程进入睡眠状态(封锁), 直到被唤醒); WaitForSingleObject(hMutex,INFINITE); ReleaseMutex(hMutex); (3)管道通信:pipe(fd),fd: int fd[2],其中: fd[0] 、fd[1]文件描述符(读、写); lockf( fd,function,byte)(fd: 文件描述符;function: 1: 锁定 0:解锁;byte: 锁定的字节数,0: 从当前位置到文件尾); write(fd,buf,byte)、read(fd,buf,byte) (fd: 文件描述符;buf : 信息传送的源(目标)地址;byte: 传送的字节数); sleep(5); exit(0); read(fd[0],s,50) (4)修改程序(1):fork(); sleep(); 四、调试过程 1、测试数据设计 (1)创建两个子进程:

[操作系统]经典进程同步问题题库

1、测量控制系统中的数据采集任务把所采集的数据送一单缓冲区;计算任务则从该缓冲区中取出数据并进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。 Var Sempty,Sfull: semaphore:= 1,0 Begin Parbegin Collection:begin repeat 采集一个数据; wait(Sempty); 数据放入缓冲区; signal(Sfull); untill false; end; Compute:begin repeat wait(Sfull); 从缓冲区取出数据; signal(Sempty); 计算; ` until false; end; Parend End 2、有一阅览室,共有100个座位。读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。读者离开时要注销掉登记内容。试用wait和signal原语描述读者进程的同步问题。 var mutex, readcount :semaphore := 1,100; Begin Parbegin Process Reader:begin repeat wait(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; begin parbegin Father: begin repeat wait(Sempty); ; signal(Sapple); until false; end; Mother: begin repeat wait(Sempty); ; signal(Sorange); until false; end; Son: begin repeat wait(Sorange); ; signal(Sempty); until false; end; Daughter: begin repeat wait(Sapple); ; signal(Sempty); until false; end; parend; end; 1、在4×100米接力赛中,4个运动员之间存在如下关系,运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100米后交给运动员3,运动员3也只有在接到运动员2传来的棒后才能跑,他跑完100米后交给运动员4,运动员4接到棒后跑完全程。请试用信号量机制对其上过程进行分析。 var s1,s2,s3:semaphpre:=0,0,0; begin parbegin Athlete1: begin Run 100m; signal(s1); end; Athlete2: begin wait(s1); Run 100m; signal(s2); end; Athlete3: begin wait(s2); Run 100m; signal(s3); end; Athlete4: begin wait(s3); Run 100m; end; parend; end 2、在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操作实现司机和售票员的同步。

进程通信与进程同步机制实现

一.课程设计题目 某银行提供10个服务窗口(7个对私服务窗口,3个对公服务窗口)和100个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用,有对公和对私两类号,美味顾客只能选取其中一个。当营业员空闲时,通过叫号选取一位顾客,并为其服务。请用P、V操作写出进程的同步算法。 二.课程设计目的 1、掌握基本的同步与互斥算法,理解银行排队系统操作模型。 2、学习使用Windows 2000/XP中基本的同步对象,掌握相关API 的使用方法。 3、了解Windows 2000/XP中多线程的并发执行机制,实现进程的同步与互斥。 三.课程设计要求 ◆学习并理解生产者/消费者模型及其同步/互斥规则; ◆学习了解Windows同步对象及其特性; ◆熟悉实验环境,掌握相关API的使用方法; ◆设计程序,实现生产者/消费者进程(线程)的同步与互斥; ◆提交实验报告。 四.需要了解的知识

1.同步对象 同步对象是指Windows中用于实现同步与互斥的实体,包括信号量(Semaphore)、互斥量(Mutex)、临界区(Critical Section)和事件(Events)等。本实验中使用到信号量、互斥量和临界区三个同步对象。 2.同步对象的使用步骤: ◆创建/初始化同步对象。 ◆请求同步对象,进入临界区(互斥量上锁)。 ◆释放同步对象(互斥量解锁)。 五.需要用到的API函数及相关函数我们利用Windows SDK提供的API编程实现实验题目要求,而VC中包含有Windows SDK的所有工具和定义。要使用这些API,需要包含堆这些函数进行说明的SDK头文件——最常见的是Windows.h(特殊的API调用还需要包含其他头文件)。 本实验使用到的API的功能和使用方法简单介绍 1、WaitForSingleObject( hSemaphoreChairs , INFINITE ); WaitForSingleObject( hMutex , INFINITE ); ●功能——使程序处于等待状态,直到信号量hHandle出现(即其值大于等于1)或超过规定的等待时间 ●格式 DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); ●参数说明

第7章进程同步(含答案)

第7章进程同步练习题 一、单项选择题 1、P、V操作是(A )。 A 两条低级进程通信原语B两组不同的机器指令 C两条系统调用命令D两条高级进程通信原语 2、对进程的管理和控制使用(B)。 A 指令 B 原语 C 信号量 D 信箱通信 3、若P、V操作的信号量S初值为2,当前值为-1,则表示有(B)等待进程。 A 0个 B 1个 C 2个 D 3个 4、用P、V操作管理(互斥)临界区时,信号量的初值应定义为(C)。 A -1 B 0 C 1 D 任意值 5、用V操作唤醒一个等待进程时,被唤醒进程的状态变为(B)。 A 等待B就绪C运行 D 完成 6、进程间的同步是指进程间在逻辑上的相互(B)关系。 A联接 B 制约C继续D调用 7、(D)是一种只能进行P操作和V操作的特殊变量 A调度B进程C同步D信号量 8、(B)是解决进程间同步和互斥的一对低级通信原语。 A lock 和unlock B P和V C W和S D send和receive 8、在操作系统中,解决进程间的(D)和(B)问题的一种方法是使用(F)。 A调度 B 互斥C通讯D同步E分派F信号量 9、用P、V操作可以解决(A)互斥问题 A一切B某些 C 正确D错误 10、对于两个并发进程,设互斥信号量为mutex,若mutex=0,则(B) A表示没有进程进入临界区B表示有一个进程进入临界区 C表示有一个进程进入临界区,另一个进程等待进入 D表示有两个进程进入临界区 11、两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来消息,或者建立某个条件后再向前执行,这种制约性合作关系被称为进程的(A) A同步 B 互斥C调度D执行 二、填空题 1、信号量的物理意义是当信号量值大于零时表示(可用资源的数目);当信号量值小于零时,其绝对值为(因请求该资源而被阻塞的进程数目)。 2、临界资源的概念是(一次仅允许一个进程访问的资源),而临界区是指(进程中访问临界

计算机操作系统_进程间互斥与同步

进程间互斥与同步 实验内容: 编写算法,实现进程间对临界资源的互斥访问以及进程间的同步关系。 实验要求: 1、要求进程互斥使用文本文件; 2、假定文本文件txt1最大可写入30个字符; 3、写满后复制进程将文本文件的内容复制到另一个文本文件txt2中(无长度限制)。 4、复制进程复制完毕写入进程可再重新写入,重复执行3,4,直到给出停止命令。 5、实现进程间的同步和互斥。 代码: #include #include//stdio.h #include//函数库 #include//linux/unix的系统调用 #include//信号量 #include using namespace std; typedef union _semnu{ int val; struct semid_ds *buf; ushort *array; }semun; //v操作 void v(int &sem_id) { struct sembuf sem_b;

sem_b.sem_num=0; sem_b.sem_op=1; sem_b.sem_flg=SEM_UNDO; if(semop(sem_id,&sem_b,1)==-1) { cout<<"error"<

分布式系统中进程的同步方法

分布式系统中进程的同步方法 【摘要】在分布式操作系统中,为了实现进程的同步,首先要对系统中发生的事件进行排序,还要有良好的分布式同步算法。本文对分布式操作系统中的一些常见算法进行了分析,从而解析才能使进程在分布式操作系统中更加正确有效地协同工作。 【关键字】分布式操作系统,进程,同步,算法。 【Abstract】In the distributed operating system,in order to achieve the process of synchronization,First, you want to sort of events that occur in the system,but you also distributed synchronization algorithm.This article analyzes some common algorithms in the distributed operating system, to resolve to make the process more correctly and effectively work together in a distributed operating system. 【Key words】Distributed operating system, Process, Synchronous, Algorithm.

在分布式系统中,处于不同物理位置的若干进程通过传递消息相互通信,进行协同工作完成同一任务。工作过程中,进程产生了大量的事件和消息,这些事件和消息在时间上的先后顺序对工作正确有效的完成往往是有影响的。由于进程所处的物理位置不同带来的时钟差异如各地时钟值的差异和时钟运行精度的差异等)和网络传输延时等方面的原因,一个进程所看到的系统内事件和消息的先后顺序很可能与它们的实际顺序是不一致的,这样就带来了问题,如图1所示。 100 150 300 350 物理时间 图1 分布式进程通信示例 在一个先来先服务的分布式系统中,X地的进程Pi在时刻100时向Z滴的进程Pk发出了请求服务的消息Rq,并盖上了本地的时间戳130,随后Y地的进程Pj也向Pk发出了请求服务消息,并盖上了本地的时间戳120。Pj的消息在时刻300到达Pk,而Pi的消息在时刻350才到达Pk。这样,对Pk而言,不管到达的顺序还是按照时间戳的大小都应该先对Pj进行服务,这显然是不公平的。因此,在分布式系统中必须采取一定的同步机制来保证工作的顺利进行和结果正确。 进程同步大致有两种程度:一种是局部的松散同步,即事件和消息产生的逻辑顺序上简单同步;一种是全局的精确同步,即各进程的本地时钟基于现实世界物理时间标准同步。前一种同步能由Lamport算法和Ricart and Agrawla 算法等算法实现。在这种同步机制中,各进程利用逻辑时钟产生时间戳,能保证按序发送消息,同样接收进程也能按序接收。或者说,接受进程能按序从各个不同进程接收消息,而且从同一进程接收的消息也是顺序的。但这种同步仅仅保证了事件和消息的顺序一致性,而不能反映它们产生的真实时间,因为同步机制中所采用的时间戳只能看作是一个数字编号,并没有和物理时钟精确对应起来。这种同步机制在分布式系统的实际应用中有着很大的局限,因为很多现实的分

进程同步:实验报告

1.实验内容(进程的同步) (1) 阅读理解示例程序。 (2) 说明示例程序是否能适合解决 N 个生产者和 1 个消费者问题,并设计实验验证 (3) 参照教材修改为 N 个生产者和 1 个消费者问题 (4) 思考 N 个生产者和 M 个消费者问题的解决方案(不要求) (5) 利用信号量解决同步问题。 2.实验目的 通过程序模拟及验证生产者消费者问题等经典问题,深入理解并发中的同步和互斥的概念 3.实验原理 (1)进程概念: (1.定义:程序的一次执行过程 ( 2.三种基本状态 :就绪状态,执行状态,阻塞状态 (2)进程同步: (1.定义:并发进程在执行次序上的协调,以达到有效的资源共享和相互合作,使程序执行有可再现性。 ( 2.两种形式的制约关系: (一:资源共享关系:进程间接制约,需互斥地访问临界资源。)、(二:相互合作关系:进程直接制约) (3.临界资源:一次仅允许一个进程访问的资源,引起不可再现性是因为临界资源没有互斥访问。 (3)信号量:定义一个用于表示资源数目的整型量S,它与一般的整型量不同,除初始化 外,仅能通过两个标准的原子操作 wait(S)和 signal(S)来访问,俗称 P,V操作。通俗来讲就是用P 来访问资源后减去一个单位资源,用 V 操作来释放一个单位资源就是现有资源上加一个单位资源。 4.实验内容一:说明示例程序是否能适合解决 N 个生产者和 1 个消费者问题,并设计实验验证答:示例程序不能解决多个生产者和消费者的问题,它是解决单个消费者和生产者的。如果可以就要修改代码,如“二”所说。 二:多个消费者和生产者的问题

生产者 1 如上图所示 :如果要解决多个生产者和消费者的问题: 第一步:分析上图得出了两种关系,分别是异步和同步的关系 第 二步:异步关系的是生产者和生产者之间的, 因为同一时刻只能 有一个生产者 访问缓冲区,所以我们就可以设置临界资源 .获得 临界资源的生产者才能把产品 放到缓冲区里 第三步:同步关系有两个, 首先是生产者和缓冲区之间, 再是缓冲区和消费者之 间。他们都满足一前一后的关系, 即当缓冲区空间未满时, 生产者才可以放产品; 缓冲区不为空的时候才可以让消费者取出产品消费。 第四步:设计变量,用 C 语言编程,在 linux 上运行,观察结果。代码如下: #include #include #include #include #include #include int n=10; int buffer[10];// 缓冲区空间大小 int in=0,out=0; sem_t mutex,empty,full;// 设置临界资源,定义两个同步关系的信号量 void* producer(void *arg){ // 生产者 sem_wait(&mutex); // 访问临界资源 int tag= pthread_self()%100; int nextPro; srand(time(NULL)+tag); 生产者 6 缓冲区 消费者 生产者 2 生产者 3 生产者 4 生产者 5 相关头文件

相关文档
相关文档 最新文档