习题讲解1

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

实现
conductor()//售票员进程 售票员进程 { while(1) { 关车门; 关车门 V(start);//通知司机可以开车 ; 通知司机可以开车 售票 P(open);//请求开门 ; 请求开门 开车门; 开车门; 上下乘客; 上下乘客; } 7 }
苹果桔子问题
问题描述
桌上有一只盘子,每次只能放入一只水果; 桌上有一只盘子,每次只能放入一只水果; 爸爸专向盘子中放苹果; 爸爸专向盘子中放苹果; 妈妈专向盘子中放梨; 妈妈专向盘子中放梨; 一个儿子专等吃盘子中的梨; 一个儿子专等吃盘子中的梨; 一个女儿专等吃盘子里的苹果
进程管理
进程调度
考虑5个进程 考虑 个进程P1,P2,P3,P4,P5,规定进程优先数越 个进程 , 小优先级越高。 小优先级越高。试描述在采用下述几种调度算法 时各进程运行过程, 时各进程运行过程,并计算采用每种算法时的进 程平均周转时间。假设忽略进程的调度时间。 程平均周转时间。假设忽略进程的调度时间 先来先服务调度算法 时间片轮转调度算法(时间片为1ms) 非剥夺式优先权优先调度算法 剥夺式优先权优先调度算法
26
读者/写者问题(写者优先) 读者/写者问题(写者优先)
Sempore mutex_rdcnt=1,mutex_wrcnt=1,mutex=1, wsem=1,rsem=1; Int rdcnt=0,wrcnt=0;
15
问题分析
顾客购物后要到收银员处付款, 顾客购物后要到收银员处付款,因此顾客进程与收银员进程 之间是同步的关系,一次只允许一个顾客进程付款, 之间是同步的关系,一次只允许一个顾客进程付款,整个超 市只有一个收银员进程收费。 市只有一个收银员进程收费。 为顾客进程设置一个私有信号量S_customer ,表示有没有顾 为顾客进程设置一个私有信号量 客要付款; 客要付款; 为收银员进程设置一个私有信号量 S_cashier ,表示有没有 收银员在收费。 收银员在收费。 开始时没有顾客去付款,收银员也没有收费, 开始时没有顾客去付款,收银员也没有收费,所以 S_customer和S_cashier的初值为 。 的初值为0。 和 的初值为 16
问题分析
当有顾客买完东西去付款时执行V( 当有顾客买完东西去付款时执行V(S_customer), V( ) 通知收银员进程有顾客付款, 通知收银员进程有顾客付款,此时收银员进程执行 P(S_customer)操作后就可进入收费,收费完成后 P( )操作后就可进入收费, 收银员进程执行V( V(S_cashier),以通知顾客收费完 收银员进程执行V( ) 此时顾客执行P( P(S_cashier)就可离开收银台, 毕,此时顾客执行P( )就可离开收银台, 在离开超市时需执行V(Sn) 释放资源。 V(Sn), 在离开超市时需执行V(Sn),释放资源。
Fra Baidu bibliotek18
顾客进程I(I=1,2,…,n)
收银员进程
P(Sn)
进入超市
实 现
在超市购物
P(S_customer)
收费
V(S_customer) P(S_cashier)
付款
V(S_cashier)
离开超市
V(Sn) 19
图书馆问题
问题描述
图书馆有100个座位,每位进入图书馆的读者要在登 个座位, 图书馆有 个座位 记表上登记,退出时要在登记表上注销。 记表上登记,退出时要在登记表上注销。 当图书馆中没有座位时,后到的读者在图书馆为 等待(阻塞)。 当图书馆中没有座位时,后到的读者不等待,立 即回家。 要几个程序?有多少个进程? 要几个程序?有多少个进程?
注销
V(mutex) V(seat) 21
计数问题
问题描述
三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元 的缓冲区。P1每次用produce()生成一个正整数并用put ()送入缓冲区某一空单元中;P2每次用getodd()从该 P2 getodd 缓冲区中取出一个奇数并用countodd()统计奇数个数; P3每次用geteven()从该缓冲区中取出一个偶数并用 counteven()统计偶数个数。请用信号量机制实现这三个 进程的同步与互斥活动,并说明所定义的信号量的含义。
超市购物
问题描述
有一个超市,最多可容纳N个人进入购物,当N 个顾客满员时,后到的顾客在超市外等待;超市 中只有一个收银员。可以把顾客和收银员看作两 类进程,两类进程间存在同步关系。写出用P、V 操作实现的两类进程的算法 。
13
顾客进程I(I=1,2,…,n)
进入超市
收银员进程
问 题 分 析
付款 在超市购物 收费
22
问题分析与信号量设置
本题属于生产者——消费者问题的变形:P1相当于生 消费者问题的变形: 相当于生 本题属于生产者 消费者问题的变形 产者, 、 相当于消费者 共享多缓冲区。 相当于消费者, 产者,P2、P3相当于消费者,共享多缓冲区。
缓冲区是临界资源, 因此设互斥信号量 缓冲区是临界资源 因此设互斥信号量mutex。 。 P1、P2因奇数的放置与取用而同步,设同步信号量 、 因奇数的放置与取用而同步 设同步信号量odd; 因奇数的放置与取用而同步, P1、P3因偶数的放置与取用而同步,设同步信号量 、 因偶数的放置与取用而同步 设同步信号量even; 因偶数的放置与取用而同步, P1、P2、P3因共享缓冲区而同步,设同步信号量empty。 、 、 因共享缓冲区而同步,设同步信号量 。 因共享缓冲区而同步 semaphore mutex = 1,odd = 0,even = 0,empty = N;
23
Process P1() () { while(1) { number = produce(); P(empty); P(mutex); put(); V(mutex); If number % 2 == 0 V(even); else V(odd); } } 24
Process P2() () { while(1) { P(odd); P(mutex); getodd(); V(mutex); V(empty); countodd(); } }
pear := 0; apple := 0;
10
实现
Father() ( { L1:削一个苹果; 削一个苹果; 削一个苹果 P(empty); P(empty); 把苹果放入plate; 把苹果放入 ; V(apple); V(apple); goto L1; } Mother() ( { L2:剥一个梨; 剥一个梨; 剥一个梨 P(empty); P(empty); 把梨放入plate; 把梨放入 ; V(pear); V(pear); goto L2; } 11
Process P3() () { while(1) { P(even); P(mutex); geteven(); V(mutex); V(empty); counteven(); } } 25
读者/写者问题(写者优先) 读者/写者问题(写者优先)
问题描述: 问题描述: 允许多个读者同时读数据 任何时候只许一个写者向数据区写数据 读者和写者需要互斥 有读者读时,不允许写;但当读者在读时, 有读者读时,不允许写;但当读者在读时,而 有写者来时, 有写者来时,以后来的读者必须等到该写者完 成写操作后,方可读数据。 成写操作后,方可读数据。
问题分析
顾客购物后要到收银员处付款, 顾客购物后要到收银员处付款,因此顾客进程与收银员进程 之间是同步的关系,一次只允许一个顾客进程付款, 之间是同步的关系,一次只允许一个顾客进程付款,整个超 市只有一个收银员进程收费。 市只有一个收银员进程收费。 为顾客进程设置一个私有信号量S_customer ,表示有没有顾 为顾客进程设置一个私有信号量 客要付款; 客要付款; 为收银员进程设置一个私有信号量 S_cashier ,表示有没有 收银员在收费。 收银员在收费。 开始时没有顾客去付款,收银员也没有收费, 开始时没有顾客去付款,收银员也没有收费,所以 S_customer和S_cashier的初值为 。 的初值为0。 和 的初值为 17
离开超市
14
问题分析
由于超市是顾客进程之间的共有资源, 由于超市是顾客进程之间的共有资源,而且超市里 限制最多允许有N个顾客购物 所以要设置一个公 个顾客购物, 限制最多允许有 个顾客购物,所以要设置一个公 用信号量Sn,表示还可以允许多少顾客进入超市, 用信号量 ,表示还可以允许多少顾客进入超市, 初值为N。 初值为 。 顾客进程在进入超市时要执行P(Sn),离开超市时要 , 顾客进程在进入超市时要执行 执行V(Sn)操作。 操作。 执行 操作
实现
stop ,run:semaphore; stop=0; run=0; driver() //司机进程 司机进程 { while (1) { P(start);//请求启动汽车 请求启动汽车 启动汽车; 启动汽车 正常行车; 正常行车; 到站停车; 到站停车; V(open); //通知售票员可以开门 通知售票员可以开门 } } 6
8
问题分析
本题属于生产者——消费者问题的变形,相当于 消费者问题的变形, 本题属于生产者 消费者问题的变形 两个生产者(爸爸和妈妈)向两个消费者( 两个生产者(爸爸和妈妈)向两个消费者(儿子 和女儿)提供产品的同步问题,且是单缓冲区。 和女儿)提供产品的同步问题,且是单缓冲区。 因此,可参考生产者与消费者问题的解法。 因此,可参考生产者与消费者问题的解法。
实现
Son() ( { L3: P(pear); P(pear); 中取梨 从plate中取梨; 中取 V(empty); V(empty); 吃梨; goto L3; } Daughter () { L4: P(apple); 中取苹果; 从plate中取苹果; 中取苹果 V(empty); 吃苹果; 吃苹果; goto L4; } 12
2
进程 P1 P2 P3 P4 P5
创建时刻 0 2 4 6 8
执行时间( ) 执行时间(ms) 优先数 3 3 6 4 5 2 5 1 2 4
3
司机与售票员的题
问题描述
创建两个进程模拟售票员和汽车司机的同步行为。 具体内容如下: 1) 司机的活动: 启动车辆,正常行车,到站停车。 2) 售票员活动: 关车门,售票,开车门。 3) 当发车时间到,售票员关好车门后,司机才能启动车 辆,售票员才开始售票。 当到站时,司机停稳车后,售票员才能打开车门,车 上乘客先下车,然后站台上的乘客上车。 4
9
信号量定义
empty:semaphore; ; /* 盘子为空 */ /* 盘子里有梨 盘子里有梨*/ /* 盘子里有苹果 */ /* 盘子为空 盘子为空*/ /* 盘子里没有梨 盘子里没有梨*/ /* 盘子里没有苹果 盘子里没有苹果*/
pear :semaphore;
apple:semaphore; empty := 1;
问题分析
第一步: 第一步:确定进程间的关系
司机到站停车后,售票员方可工作; 同样, 司机到站停车后,售票员方可工作; 同样,售票员关车 门后,司机才能工作。 门后,司机才能工作。 所以司机与售票员之间是一种同步关系。 所以司机与售票员之间是一种同步关系。
第二步: 第二步:确定信号量及其值
由于司机与售票员之间要互通消息,司机进程设置一个 由于司机与售票员之间要互通消息, 私有信号量start,用于判断是否允许司机启动汽车, 私有信号量start,用于判断是否允许司机启动汽车,初值 为0。售票员进程设置一个私有信号量open,用于判断是 。售票员进程设置一个私有信号量open, 否允许售票员开门,售票员是否能够开车门,初值为0。 否允许售票员开门,售票员是否能够开车门,初值为 。 5
20
读者
P(seat) P(mutex)
登记
一个程序 多个进程(每个读者对应一个进程) 多个进程(每个读者对应一个进程)
V(mutex) 公用信号量seat,初值为100, ,初值为 公用信号量 ,
阅读
表示座位数 互斥信号量mutex,初值为1, ,初值为 , 互斥信号量 用于对登记表互斥访问
P(mutex)
相关文档
最新文档