1、进程同步与互斥习题课 河北工业大学计算机学院李建伟 利用信号量实现进程间的互斥 由于各进程要求共享资源 而有些资源需要互斥使用 因此各进程间竞争使用这些资源 进程的这种关系为进程的互斥临界资源 criticalresource系统中某些资源一次只允许一个进程使用 称这样的资源为临界资源或互斥资源或共享变量 临界区 互斥区 criticalsection一个程序片段的集合 这些程序片段分散在不同的进程中 对某个共享的数据结构 共享资源 进行操作在进程中涉及到临界资源的程序段叫临界区 a a 1print a a a 1print a 进程的互斥 间接作用 互斥例题1设一民航航班售票系统有n个售票
2、处 每个售票处通过终端访问系统中的公用数据区 假定公共数据区中一些单元xk k 1 2 分别存放 月 日 次航班的现存票数 设P1 P2 Pn表示各售票处的处理进程 R1 R2 Rn表示各进程执行时所用的工作单元 用信号量实现进程间互斥的程序如下 begin S Semaphore S 1 cobegin ProcessP i i 1 2 n begin 按旅客订票要求找到xk P S Ri xk ifRi 1thenbeginRi Ri 1 xk R1 V S 输出一张票 end elsebeginV S 输出 票已售完 end end coend end 互斥例题2 2 利用信号量实现进程
3、间的同步 一般来说 信号量初值为0 两个进程之间的同步模型如下 进程P1进程P2 L1 P S L2 V S 例1用信号量实现司机和售票员的同步 设S1和S2分别为司机和售票员的私用信号量 初值均为0 则司机和售票员的同步过程描述如下 例2设进程A B是两个相互合作的进程 共用一个缓冲区 进程A负责从卡片输入机读入卡片送到缓冲区 进程B取走缓冲区中的卡片信息进行加工处理 进程A在完成将卡片送入缓冲区后 给进程B发一信号 进程B收到信号后 取走卡片信息进行加工处理 反之 进程B取走卡片信息后 给进程A发一信号 进程A再将卡片信息读入缓冲区 为此 我们利用两个私用信号量S1和S2 其初值均为0 信
4、号量S1表示缓冲区是否有卡片信息 信号量S2表示缓冲区信息是否被取走 利用P V操作实施进程A B的同步过程如下 读者 写者模型是现代操作系统中典型的进程同步互斥问题 以客户服务器模式为代表的多进 线 程通信系统应用都可以抽象为该模型的不同形式 因此 该模型的算法在这些领域具有重要的应用价值 典型同步互斥问题之一 读者与写者问题 Reader WriterProblems 多个进程共享一个文件 其中只读文件进程称为读者 只写文件进程称为写者 多个读者和多个写者在某个时间段内对该文件资源异步进行读写 为避免文件数据出现丢失修改和读脏数据的情况 对读者和写者的读写操作限制如下 1 写 写互斥 即不
5、允许多个写者同时对文件进行写操作 2 读 写互斥 即不允许读者和写者同时对文件分别进行读写操作 3 读 读允许 即允许多个读者同时对文件进行读操作 读者优先方案 设计思想 读者优先意味着以下两条要求 i 除非有写者正在写文件 否则读者不需要等待 ii 仅当无读者时才允许写者使用文件 读者优先算法实现 PReader 读者进程 P mutexReaderCount ReaderCount If ReaderCount 1 P mutexShareFile V mutexReaderCount 从文件读信息 P mutexReaderCount ReaderCount If ReaderCount
6、 0 V mutexShareFile V mutexReaderCount PWriter 写者进程 P mutexShareFile 向文件写信息 V mutexShareFile 算法分析 限制条件 1 3 均可以得到满足 是彻底解决读者 写者问题的最基本方案 但读者的高优先级可能造成某个暂时得不到文件的写者由于被随后而来的源源不断的读者插队而长时间挂起 直到全部读者进程运行完毕后 才可以使用文件 读者 写者公平竞争方案 设计思想 读者 写者公平竞争的要求读者 写者完全按照先来先服务的原则使用文件资源 一旦有写者到达 后续的读者都必须等待 不允许出现后来者超越先来的等待资源者插队的现象
7、PReader 读者进程 P mutexRegister P mutexReaderCount ReaderCount If ReaderCount P mutexShareFV mutexReaderCount V mutexRegister 从文件读信息 P mutexReaderCountReaderCount If ReaderCount 0 V mutexShareFile V mutexReaderCount PWriter 写者进程 P mutexRegister P mutexShareFile 向文件写信息 V mutexShareFile V mutexRegister 算
8、法分析 限制条件 1 3 均可以得到满足 新的互斥信号量mutexRegister的引入使得在有写者处于等待状态的情况下 后来的读者进程会由于同写者进程对注册标记的竞争尝试失败而不得不挂起 从而实现了读者 写者间的先来先服务的公平竞争方案 写者优先方案 设计思想 写者优先有以下两条要求 i 仅当无写者时才允许读者使用文件 ii 唤醒时优先考虑写者 算法实现 PReader 读者进程 P mutexEnhance P mutexRegister P mutexReaderCount ReaderCount If ReaderCount 1 P mutexShareFile V mutexRead
9、erCount V mutexRegister V mutexEnhance 从文件读信息 P mutexReaderCount ReaderCount If ReaderCount 0 V mutexShareFile V mutexReaderCount PWriter 写者进程 P mutexWriterCount WriterCount If WriterCount 1 P mutexRegister V mutexWriterCount P mutexShareFile 向文件写信息 V mutexShareFile P mutexWriterCount WriterCount If
10、 WriterCount 0 V mutexRegister V mutexWriterCount 算法分析 在满足限制条件 1 3 的前提下 以写者进程为优先考虑对象 如果有写请求发出 则它会在被允许的最快时间内得到响应 其好处是在一个由很多客户端以读权限访问的服务器 如一般的公众服务器 上 如果管理员对服务器的某些内容或配置进行修改的话 那么它的及时性可以得到满足 总结 可由一类进程多次访问 而不同类的进程必须互斥访问资源的控制 是进程控制中常见的一类问题 读者 写者模型正是这类问题中的一个典型 它给出了对于这类资源的控制方法 即采用一个资源计数变量进行控制 把对于该资源的访问控制变成对变
11、量的访问 同时 资源计数变量作为新的临界资源 也需要用新的信号量对其进行互斥访问控制 练习题1 桌子有一空盘 允许存放一个水果 爸爸可向盘中放苹果 也可以向盘中放桔子 儿子专等吃盘中的桔子 女儿专等吃盘中的苹果 规定当盘空时一次只能放一只水果供吃者取用 请用P V原语实现爸爸 儿子 女儿3个并发进程的同步 练习题2 设有三个进程A B C 其中A与B构成一对生产者与消费者 A为生产者 B为消费者 共享一个由n个缓冲块组成的缓冲池 B与C也构成一对生产者与消费者 此时B为生产者 C为消费者 共享另一个由m个缓冲块组成的缓冲池 用P V操作描述它们之间的关系 练习题3 把学生和监考老师都看作进程
12、学生有N人 教师1人 考场门口每次只能进出一个人 进考场原则是先来先进 当N个学生都进入考场后 教师才能发卷子 学生交卷后可以离开考场 教师要等收上来全部卷子后才能离开考场 问共需设置几个进程 设置合适的信号量及初值 试用P V操作解决上述问题中的同步和互斥关系 练习题4 进程P1和P2通过两个缓冲区给进程P11 P12 P21 P22传递信息 进程P11 P12取进程P1的信息 进程P21 P22取进程P2的信息 假定这两个缓冲区一样大小 所要传递的信息也与缓冲区一样大 同一时刻只能由一个进程往缓冲区中送信息或取信息 试用PV操作来实现这6个进程之间的同步与互斥关系 只要求写出进程P1与P11的同步算法