1、 操作系统课程设计 题目:题目:进程通信与进程同步机制实践进程通信与进程同步机制实践 所在学院: 计算机学院 所在班级: 软件 1201 学生姓名: 学生学号: 一、一、题目题目 某银行提供某银行提供5 5个服务窗口个服务窗口(3(3个对私服务窗口,个对私服务窗口, 1 1个对公服务窗口,个对公服务窗口, 1 1 个理财服务窗口个理财服务窗口) )和和 1010 个供顾客等待的座位。顾客到达银行时,若个供顾客等待的座位。顾客到达银行时,若 有空座位,则到取号机上领取一个号,等待叫号;若没有空座位,则有空座位,则到取号机上领取一个号,等待叫号;若没有空座位,则 在门外等待或离开。取号机每次仅允许
2、一位顾客使用,有对公、 对私在门外等待或离开。取号机每次仅允许一位顾客使用,有对公、 对私 和理财三类号,每位顾客只能选取其中和理财三类号,每位顾客只能选取其中一个。当营业员空闲时, 通过一个。当营业员空闲时, 通过 叫号选取一位顾客,并为其服务。请用叫号选取一位顾客,并为其服务。请用 P P、V V 操作写出进程的同步算操作写出进程的同步算 法。法。 二、二、目的目的 1 1、 掌握基本的同步与互斥算法掌握基本的同步与互斥算法 。 2 2、 学习使用学习使用 LinuxLinux 中基本的同步对象, 掌握相关中基本的同步对象, 掌握相关 API API 的使用方法。的使用方法。 3 3、 了
3、解了解 LinuxLinux 中中多任务多任务的并发执行机制, 实现进程的同步与互斥的并发执行机制, 实现进程的同步与互斥 。 三、三、实验环境实验环境 Linux CentOSLinux CentOS 编译器编译器 GCCGCC 编程语言编程语言 C C 语言语言 四、四、要求要求 1 1、当有顾客取号的时候,不允许其他顾客取号。当有顾客取号的时候,不允许其他顾客取号。 2 2、当服务窗口满的情况下,其他人必须等待。当服务窗口满的情况下,其他人必须等待。 3 3、当当没有顾客没有顾客的情况下,服务窗口必须等待。的情况下,服务窗口必须等待。 4 4、打印:打印:A A、 初始状态初始状态 B
4、B、 中间变化的状态信息中间变化的状态信息 C C、以及最终状态信息。、以及最终状态信息。 五、五、原理及算法原理及算法 本程序中设计本程序中设计 6 6个信号量, 其中个信号量, 其中 signal_Asignal_A、 signal_Bsignal_B和和 signal_Csignal_C 分别是对私、对公、理财窗口的同步信号量。若信号量值的等于分别是对私、对公、理财窗口的同步信号量。若信号量值的等于 0 0, 说明当前没有空闲空口,顾客需要等待。另设置一个说明当前没有空闲空口,顾客需要等待。另设置一个 signal_seatsignal_seat 同步信号量,记录当前的座位情况,若该信号
5、量等于同步信号量,记录当前的座位情况,若该信号量等于 0 0,说明当前没,说明当前没 有空座位, 顾客需要等待。 另有一个有空座位, 顾客需要等待。 另有一个 signal_customersignal_customer 同步信号量用同步信号量用 于记录当前已经取过票的总人数,用于生成票号信息。还有一个于记录当前已经取过票的总人数,用于生成票号信息。还有一个 mutexmutex 互斥信号互斥信号量,用于实现各进程在对信号量进行操作时的互斥。量,用于实现各进程在对信号量进行操作时的互斥。 顾客进入银行之后, 先看通过一个依据系统时间的随机数来确定顾客进入银行之后, 先看通过一个依据系统时间的随
6、机数来确定 自己是需要对私、 对公还是理财服务 (在本程序中分别对应于自己是需要对私、 对公还是理财服务 (在本程序中分别对应于 A A 类顾类顾 客,客,B B 类顾客和类顾客和 C C 类顾客) ,这三个类型的顾客的比例为类顾客) ,这三个类型的顾客的比例为 3:1:1.3:1:1.然后然后 顾客根据自己需要的服务类型, 查看提供相应类型服务的窗口是否空顾客根据自己需要的服务类型, 查看提供相应类型服务的窗口是否空 闲,若窗口有空闲,则系统直接按照闲,若窗口有空闲,则系统直接按照 signal_customersignal_customer 记录的信息,记录的信息, 生成票面信息; 若窗口没有空闲, 则再去查看生成票面信息; 若窗口没有空闲, 则再去查看 signal_seatsignal_seat 信号量看信号量看 看是否有空座位, 若有空座位, 则根据看是否有空座位, 若有空座位, 则根据 signal_customersignal_customer 记录的信息,记录的信息,