




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统及应用,ProcessesandThreads,华南理工大学计算机科学与工程学院,2009年秋季,Outline,ProcessesThreadsInterprocesscommunicationClassicalIPCproblemsScheduling,进程间通信,需要解决三个问题第一,一个进程如何把信息传递给另一个进程。第二,确认在关键活动中两个或更多的进程不会把事情搞乱。例如,两个进程都试图取得1MB的内存第三个问题与正确的顺序有关例如,如果进程A产生数据,而进程B打印数据,那么B在打印之前必须等待,直到A已经产生了一些数据。,竞争条件,两个进程同时想访问共享内存,定义:两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序,称为竞争条件(racecondition)。,临界区(1),临界资源:一段时间内只允许一个进程访问的资源把对临界资源(如:共享内存)进行访问的程序片段称作临界区(criticalregion或criticalsection)。以某种手段确保当一个进程在使用一个共享变量或文件时,其他进程不能做同样的操作,称作互斥(mutualexclusion)。对于一个好的互斥的解决方案必须满足的四个条件任何两个进程不能同时处于其临界区不应对CPU的速度和数量做任何假设临界区外运行的进程不得阻塞其他进程不得使进程无限期等待进入临界区,临界区(2),使用临界区实现互斥,MutualExclusionwithBusyWaiting(1)忙等待的互斥,禁止中断使每个进程在刚刚进入临界区后立即禁止所有中断,并在就要离开之前再打开中断。对操作系统本身是一项很有用的技术,对用户进程则不是一种合适的通用互斥机制。锁变量设立一个共享(锁)变量,其初值为0。当一个进程想进入临界区时,它首先测试该锁,如果该锁的值是0,则该进程将其设置为1并进入临界区。若该锁的值已经为1,则该进程将等待直到其值变为0。是否能实现互斥?,MutualExclusionwithBusyWaiting(2),临界区问题的一种解法(a)进程0(b)进程1,严格轮换法,设立一个整型变量,用于记录轮到哪个进程进入临界区,并检查或更新共享内存。如为0时,进程0进入临界区;为1时,进程1进入临界区连续测试一个变量直到某个值出现为止,称为忙等待(busywaiting)问题?(考虑一个进程比另一个进程慢很多的情况),MutualExclusionwithBusyWaiting(3),Peterson解法是一个不需严格轮换的软件互斥算法设立一个整型变量turn作为进入临界区的标志,同时设立一个数组interested来表示轮到的进程是否希望进入临界区。只有当轮到了某进程,而其他进程不希望进入临界区时,该进程才能进入,否则,将等待。在使用共享变量之前,各个进程使用其进程号0或1作为参数来调用enter_region,该调用在需要时将使进程等待,直到能安全地进入临界区在完成对共享变量的访问之后,进程将调用leave_region,表示操作已完成,若其他进程希望进入临界区,则现在就可以进入.,MutualExclusionwithBusyWaiting(4),Peterson解法,MutualExclusionwithBusyWaiting(5),TSL指令是一种需要硬件支持的方案.使用了测试并加锁指令TSLRX,LOCK,它将一个内存字LOCK读到寄存器RX中,然后在该内存地址上存一个非0值.使用共享变量lock来协调对共享内存的访问。当lock为0时,任何进程都可以使用TSL指令将其设置为1,并读写共享内存。当操作结束时,进程用一条普通的move指令将lock的值重新设置为0。,SleepandWakeup(1)休眠与唤醒,Peterson解法和TSL指令都是正确的,但是它们都有忙等待的缺点,浪费CPU时间.在无法进入临界区时,采用阻塞而不是忙等待的方法:使用通信原语sleep和wakeupSleep是一个将引起调用进程阻塞的系统调用,即被挂起,直到另外一个进程将其唤醒.Wakeup调用有一个参数,即要唤醒的进程.,SleepandWakeup(2),生产者-消费者问题(也称为有界缓存区问题)问题描述:两组进程共享一个公共的固定大小的缓存区,其中一组是生产者,将信息放入缓存区;另一组是消费者,从缓存区中取出信息.当缓存区已满,生产者还想放入新的数据项时,生产者休眠,待消费者取走数据项后再唤醒它;当缓存区已空,消费者还想从中取数据时,消费者休眠,待生产者放入数据项后再唤醒它.,N-1,SleepandWakeup(3),含有严重竞争条件的生产者-消费者问题,设立一个变量count跟踪缓存区中的数据项数.如果缓存区的大小为N,则生产者代码检查count是否达到N,若是,则生产者休眠;否则生产者向缓存区中放入一个数据项并增加count的值;消费者首先测试count是否为0,若是,则休眠;否则从中取走一个数据项,并递减count的值;每个进程同时也检查另一个进程是否应该被唤醒,若是,则唤醒之.,Semaphores(1)信号量,由E.W.Dijkstra在1965年提出.是一种新的变量类型取值可以为0(表示没有保存下来的唤醒操作)或者正整数(表示有一个或多个唤醒操作)对信号量设立两种操作:down(或P)和up(或V)对一信号量执行down操作,则是检查其值是否大于0.若大于0,则其值减1并继续;若其值为0,则进程将休眠.检查数值,修改变量值以及可能发生的休眠操作均作为单一的,不可分割的原子操作完成.Up操作对信号量的值增1,唤醒一个在该信号量上休眠的进程。不会有进程因执行up而阻塞.信号量的值增1和唤醒一个进程同样也是不可分割的。,Semaphores(2),实现进程互斥,down(mutex);,up(mutex);,Semaphores(3),提问:1.mutex的取值范围?,down(mutex);,up(mutex);,up(mutex);,up(mutex);,down(mutex);,down(mutex);,Semaphoremutex=1;,Semaphores(4),实现进程同步,down(s);,up(s);,Semaphores(5),down(s);,up(s);,执行时两种可能性:在进程B还没有送数据之前,进程A先执行了down(s),结果会怎样?进程B的up(s)操作已经完成,进程A才执行了down(s),结果会怎样?,答:进程A执行down(s),会使自己进入阻塞状态,直至进程B送数据后执行up(s),才能将它唤醒若进程B的up(s)操作已经完成,进程A才执行了down(s),则进程A不会阻塞。它可以顺利地取到数据,完成下面的操作。,Semaphores=0;,Semaphores(6),用信号量解决生产者和消费者问题,Semaphores(7),用信号量解决生产者和消费者问题,Semaphores(8),桌上有一个盘子,可以存放一个水果。父亲总是放苹果到盘子中,而母亲总是放香蕉到盘子中;一个儿子专等吃盘子里的香蕉,而一个女儿专等吃盘子里的苹果。请用信号量解决此问题。分析:父亲、母亲、儿子和女儿共用一个盘子,盘子一次只能放一个水果。当盘子为空时,父亲和母亲均可以试着将一个水果放入盘中,但一次只能有一个人成功放入水果。若放入盘子中的是香蕉,则允许儿子吃,女儿必须等待若放入盘子中的是苹果,则允许女儿吃,儿子必须等待,Semaphores(9),设置信号量dish,表示盘子是否为空,初值为1设置信号量apple,表示盘中是否有苹果,初值为0信号量banana,表示盘中是否有香蕉,初值为0,Father()while(true)down(dish);putappleintodish;up(apple),daughter()while(true)down(apple);takeapplefromdish;up(dish);eatingapple,mother()?Son()?,Mutexes(互斥信号量),如果不需要信号量的计数能力,可以使用信号量的一种简化版本,称为互斥信号量Mutex是一个可以处于两态之一的变量:加锁和解锁Mutex使用两个过程:当一个线程(或进程)需要访问临界区时,它调用mutex_lock,如果该信号量当前是解锁的,此调用成功,调用线程可自由进入临界区;如果该互斥信号量已经加锁,调用线程被阻塞,直到在临界区中的线程完成并调用mutex_unlock.,Monitors(1)管程,使用信号量要非常小心,否则很容易导致死锁Hoare等人提出了一种高级同步原语,称为管程一个管程是一个由过程、变量及数据结构等组成的集合,它们组成一个特殊的模块或软件包进程可在需要的时候调用管程中的过程,但它们不能在管程之外声明的过程中直接访问管程内的数据结构任意时刻管程中只能有一个活跃进程,使管程能有效地完成互斥,Monitors(2),当一个管程过程无法继续运行时,它会在条件变量上执行wait操作,该操作导致调用进程自身阻塞.进程可以通过对其伙伴正在等待的一个条件变量执行signal操作,以唤醒该伙伴进程条件变量不是计数器,也不能象信号量那样累积信号供以后使用。所以wait操作必须在signal操作之前。,互斥与同步,Monitors(3),说明:条件变量x:表示等待原因,Monitors(4),用管程实现的生产者-消费者问题的解法框架,管程定义,进程调用,MessagePassing(1)消息传递,MessagePassing(2),消息传递使用两条原语:send和receiveSend(destination,down(forki+1%N);,up(forki);,up(forki+1%N);,DiningPhilosophers(4),解决办法至多只允许四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐仅当哲学家的左右两只筷子都可用时,才允许他拿起筷子进餐,DiningPhilosophers(5),办法2的一种实现方法使用一个数组state跟踪每一个哲学家是在进餐、思考还是饥饿一个哲学家只有在两个邻居都没有进餐时,才允许进入到进餐状态使用一个信号量数组,每个信号量对应一位哲学家,在所需的叉子被占用时,想进餐的哲学家就被阻塞当被占用的叉子被释放时,可能唤醒被阻塞的哲学家每个哲学家想进餐时,运行philosopher进程,DiningPhilosophers(5),哲学家就餐问题的一种解法(part1),DiningPhilosophers(6),哲学家就餐问题的一种解法(part2),TheReadersandWritersProblem(1)读者-写者问题,问题描述:一个数据对象可被多个进程共享。其中有的进程要求读,另一些进程要求写或修改。把要求读的进程称为“读者”进程,其它进程称为“写者”进程。允许多个读者进程同时读共享的数据对象,但不允许写者进程与其它写者进程或读者进程同时访问共享的数据对象。,TheReadersandWritersProblem(2),db,TheReadersandWritersProblem(3),rc,rc,rc.,mutex,TheReadersandWritersProblem(4),读者/写者问题的一种解法,TheSleepingBarberProblem(1)睡眠理发师问题,问题描述:理发店有一位理发师,一把理发椅和n把供等候理发的顾客坐的椅子.如果没有顾客,理发师便在理发椅子上睡觉,当一个顾客到来时,他必须先叫醒理发师.如果理发师正在理发时又有顾客到来,如果有空椅子,顾客就坐下来等候;如果没有空椅子,顾客就离开.要求为理发师和顾客各自编一段程序来描述他们的行为,要求不能进入竞争条件.,TheSleepi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45791-2025城市基础设施公共安全监测通用技术规范
- GB/T 34138-2025辐射防护仪器环境、电磁和机械性能要求以及试验方法
- 眼视光技术专业教学标准(高等职业教育专科)2025修订
- 中国褥垫行业市场发展现状及投资战略咨询报告
- 2022-2027年中国蛋白饮料行业市场深度分析及发展战略规划报告
- 棕刚玉砂轮项目投资可行性研究分析报告(2024-2030版)
- 中国低压母线桥市场深度分析及投资战略咨询报告
- 中国移动机器人(AGV) 行业市场行情动态分析及发展前景趋势预测报告
- 中国铝焊条行业市场调查报告
- 中国鸳鸯养殖行业市场全景评估及投资策略咨询报告
- 违拗患者的护理
- 汽车的总体构造课件
- 眼科护理中的医疗事故与风险管理
- 煤矿岗位标准化作业流程
- 《合理使用抗生素》课件
- 数字美的智慧工业白皮书-2023.09
- 桥梁施工进度图
- 某啤酒厂安全现状评价设计报告书模板
- 广西桂林市2022-2023学年高二下学期期末质量检测数学试题(含答案解析)
- 内墙抹灰安全技术交底
- 中学美术校本教材《素描》
评论
0/150
提交评论