操作系统利用信号量实现银行叫号排队系统 课程设计实验报告
操作系统,利用同步、互斥信号量实现银行的排队叫号系统。 实验环境Linux 本程序是基于进程的,而不是基于线程的。如有疑问,请发送邮件至1993wbb@sina.cn寻求解答。
操作系统课程设计
题目:进程通信与进程同步机制实践
所在学院: 计算机学院 所在班级: 软件1201 学生姓名: 学生学号: 指导教师: 薛安荣
操作系统,利用同步、互斥信号量实现银行的排队叫号系统。 实验环境Linux 本程序是基于进程的,而不是基于线程的。如有疑问,请发送邮件至1993wbb@sina.cn寻求解答。
2015年 1 月
一、题目
某银行提供5个服务窗口(3个对私服务窗口,1个对公服务窗口,1个理财服务窗口)和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号;若没有空座位,则在门外等待或离开。取号机每次仅允许一位顾客使用,有对公、对私和理财三类号,每位顾客只能选取其中一个。当营业员空闲时,通过叫号选取一位顾客,并为其服务。请用P、V操作写出进程的同步算法。
二、目的
1、 掌握基本的同步与互斥算法 。
2、学习使用 Linux 中基本的同步对象,掌握相关 API 的使用方法。 3、了解 Linux 中多任务的并发执行机制,实现进程的同步与互斥 。
三、实验环境
Linux CentOS
操作系统,利用同步、互斥信号量实现银行的排队叫号系统。 实验环境Linux 本程序是基于进程的,而不是基于线程的。如有疑问,请发送邮件至1993wbb@sina.cn寻求解答。
编译器GCC 编程语言 C语言
四、要求
1、当有顾客取号的时候,不允许其他顾客取号。 2、当服务窗口满的情况下,其他人必须等待。 3、当没有顾客的情况下,服务窗口必须等待。 4、打印:A、 初始状态
B、 中间变化的状态信息 C、以及最终状态信息。
五、原理及算法
本程序中设计6个信号量,其中signal_A、signal_B和signal_C分别是对私、对公、理财窗口的同步信号量。若信号量值的等于0,说明当前没有空闲空口,顾客需要等待。另设置一个signal_seat同步信号量,记录当前的座位情况,若该信号量等于0,说明当前没有空座位,顾客需要等待。另有一个signal_customer同步信号量用于记录当前已经取过票的总人数,用于生成票号信息。还有一个mutex互斥信号量,用于实现各进程在对信号量进行操作时的互斥。
操作系统,利用同步、互斥信号量实现银行的排队叫号系统。 实验环境Linux 本程序是基于进程的,而不是基于线程的。如有疑问,请发送邮件至1993wbb@sina.cn寻求解答。
顾客进入银行之后,先看通过一个依据系统时间的随机数来确定自己是需要对私、对公还是理财服务(在本程序中分别对应于A类顾客,B类顾客和C类顾客),这三个类型的顾客的比例为3:1:1.然后顾客根据自己需要的服务类型,查看提供相应类型服务的窗口是否空闲,若窗口有空闲,则系统直接按照signal_customer记录的信息,生成票面信息;若窗口没有空闲,则再去查看signal_seat信号量看看是否有空座位,若有空座位,则根据signal_customer记录的信息,生成票面信息;若没有空座位,则通过一个以系统时间为种子的随机数生成器生成一个随机数,帮助顾客确定是要继续等待还是离开,这两种情况的比例为1:1.若顾客选择离开,则相应的进程退出。
当顾客取到票后,便开始查看对应类型的窗口是否有空闲,如果有空闲,则上前办理业务。顾客办理业务需要的时长通过以系统时间为种子的随机数生成器来确定,时长均在10秒到60秒之间。 在程序执行的过程中,顾客的状态每有变换,都会有相应的输出提示信息,并在输出的行尾输出发生该动作时当前的系统时间,以便于我们分析各个顾客进程的执行情况。
六、说明
本实验在Linux环境下完成,该程序是通过进程实现的。包含一个service可执行文件,一个customer可执行文件和一个deletesem可执行文件。其中service可执行文件用于在内存中申请一个共享内
操作系统,利用同步、互斥信号量实现银行的排队叫号系统。 实验环境Linux 本程序是基于进程的,而不是基于线程的。如有疑问,请发送邮件至1993wbb@sina.cn寻求解答。
存空间,并将这个内存空间与自身进程绑定;customer可执行文件每执行一次,就增加一个进程,即代表有一位顾客来到。通过多次执行customer可执行文件来模拟多位顾客;deletesem可执行文件用于在service进程和customer进城都执行完毕后,删除内存空间中的信号集。
实验中利用GCC编译器,通过编写Makefile文件来快速编译源代码生成以上三个可执行文件。
七、程序中各主要函数说明
1、int createshm( char * pathname, int proj_id, size_t size) 创建共享内存的函数,操作成功则返回共享内存标识符,失败返回-1.
2、int createsem (const char * pathname, int proj_id, int members, int init_val[])
在共享内训中创建信号量的函数,操作成功则返回信号集标识符,失败返回-1.
3、int opensem(const char * pathname, int proj_id)
打开信号集函数,操作成功则返回信号集标识符,失败返回-1. 4、int sem_p(int semid, int index)
P操作函数,操作成功则返回0,失败返回-1. 5、int sem_v(int semid, int index)
操作系统,利用同步、互斥信号量实现银行的排队叫号系统。 实验环境Linux 本程序是基于进程的,而不是基于线程的。如有疑问,请发送邮件至1993wbb@sina.cn寻求解答。
V操作函数,操作成功则返回0,失败返回-1. 6、int wait_sem(int semid, int index) 等待信号量为1函数,操作成功返回1. 7、int delete_sem (int semid) 删除信号集函数,操作成功返回0. 8、int get_sem_val (int semid ,int index)
获取指定信号集中指定下标的信号量的值,操作成功返回该信号量的值。
9、int my_random()
自定义随机数生成器,以系统时间为种子,每次执行前延时1秒,以便于生成不同的随机数。 10、void print_time() 打印当前系统时间。
11、int get_ticket(int semid, char identifyLabel, int * ticket, int * flag) 顾客取票函数,取票成功,返回1,失败返回-1,,由于没有空座,顾客选择离开则返回0。
12、void service(int semid, char identifyLabel, int * ticket, int *flag) 顾客办理业务函数。
八、源程序清单
sharemem.h文件
操作系统,利用同步、互斥信号量实现银行的排队叫号系统。 实验环境Linux 本程序是基于进程的,而不是基于线程的。如有疑问,请发送邮件至1993wbb@sina.cn寻求解答。
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h> #include<sys/shm.h> #include<errno.h> #include<time.h>
#define SHM_SIZE 1024
#define INDEX_MUTEX 0 #define INDEX_SIGNAL_SEAT 1 #define INDEX_SIGNAL_CUSTOMER 2 #define INDEX_SIGNAL_A 3 #define INDEX_SIGNAL_B 4 #define INDEX_SIGNAL_C 5
…… 此处隐藏:10247字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




