




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武 汉 理 工 大 学 华 夏 学 院课 程 设 计 报 告 书课程名称: 操作系统原理 题 目: 用多线程同步方法解决哲学家就餐问题 系 名: 专业班级: 姓 名: 学 号: 指导教师: 2014 年 6 月 12 日武汉理工大学华夏学院信息工程系课 程 设 计 任 务 书课程名称: 操作系统原理课程设计 指导教师: 班级名称: 开课系、教研室: 软件与信息安全 一、课程设计目的与任务操作系统课程设计是操作系统原理课程的后续实践课程,旨在通过一周的实践训练,加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、Linux 系统、C 语言程序设计技术进行实际问题处理的能力,进一步提高学生进行分析问题和解决问题的能力,包含系统分析、系统设计、系统实现和系统测试的能力。学生将在指导老师的指导下,完成从需求分析,系统设计,编码到测试的全过程。二、课程设计的内容与基本要求1、课程设计题目用多线程同步方法解决哲学家就餐问题2、课程设计内容本课程设计要求在 Linux 操作系统,GCC 编译环境下开发。用 c/c+语言在 Linux 操作系统环境下,通过研究 Linux 的线程机制和信号量实现哲学家就餐问题的并发控制。为避免死锁,可采用只许 4 个哲学家入席且桌上有 5 支筷子的办法。几把椅子可用连续存储单元。1 每个哲学家取得一双筷子开始用餐后,即时显示“Dining”和该哲学家的标识符以及餐桌上有几位哲学家及其所坐的位置。2 设定共有 10 个哲学家需用餐。每位用餐耗时 10 秒钟以上。3 多个哲学家须共享操作函数代码。提示:1 有界缓冲区/连续存储区可用数组实现。2 编译命令可用:gcc -lpthread -o 目标文件名 源文件名3 多线程编程方法参见电子文档。3、设计报告撰写格式要求:1 设计题目与要求 2 设计思想3 系统结构 4 数据结构的说明和模块的算法流程图5 使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)7 自我评价与总结8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;西南交通大学本科毕业设计(论文) 第 2 页三、课程设计步骤及时间进度和场地安排本课程设计将安排在第 17 周, 教育技术中心。具体安排如下:第一天,下发任务书,学生查阅资料第二天,系统设计和原型开发第三,四天 系统功能实现第五天,系统调试 测试 打包和验收周次星期一 星期二 星期三 星期四 星期五第 17 周 第 1-8 节 第 1-8 节 第 1-8 节 第 1-8 节 第 1-8 节地点 现教 241 现教 241 现教 241 现教 241 现教 241四、课程设计考核及评分标准课程设计考核将综合考虑学生考勤和参与度,系统设计方案正确性,系统设计和开发效果以及课程设计报告书的质量。具体评分标准如下:设置六个评分点(1)设计方案正确,具有可行性、创新性; 25 分(2)系统开发效果较好; 25 分(3)态度认真、刻苦钻研、遵守纪律; 10 分(4)设计报告规范、课程设计报 告质量高、参考文献充分 20 分(5)课程设计答辩概念清晰,内容正确 10 分(6)课程设计期间的课堂考勤、答疑与 统筹考虑。 10 分按上述六项分别记分后求和, 总分按五级记分法记载最后成 绩。优秀(10090分),良好(80 89分), 中等(7079分),及格(6069分),不及格(059 分)西南交通大学本科毕业设计(论文) 第 3 页1. 设计题目与要求:1.1. 用多线程同步方法解决哲学家就餐问题(Dining-Philosophers Problem)1.2. 要求:1.2.1. 每个哲学家取得一双筷子开始用餐后,即时显示“Dining”和该哲学家的标识符以及桌上有几位哲学家及其所坐的位置。1.2.2. 设定共有 10 个哲学家需用餐。每位用餐耗时 10 秒钟以上。1.2.3. 多个哲学家须共享操作函数代码。2. 设计思想:2.1. 哲学家就餐问题,即共有 5 个哲学家绕一个圆桌做在 5 个位置上,他们每 2 个人中间有一只筷子,共 5 只筷子,只有当每个哲学家取得他左右两边的筷子时,哲学家才能开始就餐,其它时间,哲学家只能思考或等待筷子。为避免哲学家互相等待对方的筷子发生死锁,本次课程设计要求只许 4 个哲学家入席,以保证至少有一个哲学家能够进餐。2.2. 本课程设计将 room 作为信号量,将其初始化为 4,以保证只允许 4 个哲学家同时入席就餐,这样就能保证至少有一个哲学家可以就餐。针对每个哲学家,通过共享操作函数代码,分别建立 5 个线程,以实现同步哲学家就餐,而申请进入餐厅的哲学家进入 room 的等待队列,根据 FIFO 的原则,总会进入到餐厅就餐,因此不会出现饿死和死锁的现象,针对 5 只筷子分别设置了 5 个互斥信号量,以保证每只筷子每次只能被取得一次。3. 系统结构:一个桌子;五个椅子 ;十个哲学家;五支筷子4. 数据结构的说明和模块的算法流程图:4.1. 线程创建函数 pthread_create 声明如下:#include int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 4.2. 1等待其它线程结束函数 pthread_join 声明如下:#include int pthread_join(pthread_t thread, void *retval);4.3. 信号量的数据类型为结构 sem_t,它本质上是一个长整型的数。桌子椅子椅子 椅子 椅子哲学家 哲学家 哲学家 哲学家 哲学家哲学家 哲学家 哲学家 哲学家 哲学家筷子 筷子 筷子 筷子 筷子椅子西南交通大学本科毕业设计(论文) 第 4 页初始化信号量函数 sem_init 声明如下: #include sem_init (sem_t *sem, int pshared, unsigned int value);4.4. 增加信号量值函数 sem_post 声明如下:#include int sem_post(sem_t *sem);4.5. 减少信号量值函数 sem_wait 声明如下#include int sem_wait(sem_t * sem);4.6. 主要数据结构声明:#define NUMBERS 10 /将哲学家人数 NUMBERS 定义为 10sem_t chopsticsNUMBERS /定义 5 只筷子的互斥信号量 chopsticssem_t room /定义避免死锁的同步信号量 room4.7. 线程共享函数伪代码:void *Share(int i)think();p(room); /请求入席进餐 p(chopsticksetnumber); /请求左手边的筷子 p(chopsticksetnumber+1); /请求右手边的筷子eat();v (chopsticksetnumber); /释放左手边的筷子v(chopsticksetnumber+1); /释放右手边的筷子 v(room); /退出席位释放信号量 chairs 西南交通大学本科毕业设计(论文) 第 5 页开始建立桌椅和上菜设置哲学家是否有座位? 等待坐座位左边是否有筷子? 等待拿起左边的筷子右边是否有筷子?拿起右边的筷子吃饭哲学家吃完了离开座位,一边画圈圈结束等待YYYNNN流程图西南交通大学本科毕业设计(论文) 第 6 页5. 运行结果和结果分析: 5.1. 运行结果:rootlocalhost Desktop# gcc -lpthread -o a aaaa.crootlocalhost Desktop# ./a哲学家 1 坐上了位置 1哲学家 1 拿到左侧筷子 1哲学家 1 拿到右侧筷子 2哲学家 1 坐在 1 椅子上吃饭dining*哲学家 1 坐在椅子 1 上哲学家 2 坐上了位置 2哲学家 3 坐上了位置 3哲学家 3 拿到左侧筷子 3哲学家 3 拿到右侧筷子 4哲学家 3 坐在 3 椅子上吃饭dining*哲学家 1 坐在椅子 1 上哲学家 2 坐在椅子 2 上哲学家 3 坐在椅子 3 上西南交通大学本科毕业设计(论文) 第 7 页哲学家 4 坐上了位置 4哲学家 1 吃饱了放下筷子 1 和 2哲学家 1 离开了位置 1 走到一边画圈圈哲学家 3 吃饱了放下筷子 3 和 4哲学家 3 离开了位置 3 走到一边画圈圈哲学家 2 拿到左侧筷子 2哲学家 2 拿到右侧筷子 3哲学家 2 坐在 2 椅子上吃饭dining*哲学家 2 坐在椅子 2 上哲学家 5 坐上了位置 1哲学家 5 拿到左侧筷子 1哲学家 4 拿到左侧筷子 4哲学家 4 拿到右侧筷子 5哲学家 4 坐在 4 椅子上吃饭dining*哲学家 5 坐在椅子 1 上哲学家 2 坐在椅子 2 上哲学家 2 吃饱了放下筷子 2 和 3哲学家 4 吃饱了放下筷子 4 和 5哲学家 4 离开了位置 4 走到一边画圈圈哲学家 5 拿到右侧筷子 2哲学家 5 坐在 1 椅子上吃饭dining*哲学家 5 坐在椅子 1 上哲学家 2 坐在椅子 2 上哲学家 6 坐上了位置 3哲学家 6 拿到左侧筷子 3哲学家 6 拿到右侧筷子 4哲学家 6 坐在 3 椅子上吃饭dining*西南交通大学本科毕业设计(论文) 第 8 页哲学家 5 坐在椅子 1 上哲学家 2 坐在椅子 2 上哲学家 6 坐在椅子 3 上哲学家 2 离开了位置 2 走到一边画圈圈哲学家 8 坐上了位置 2哲学家 9 坐上了位置 4哲学家 5 吃饱了放下筷子 1 和 2哲学家 5 离开了位置 1 走到一边画圈圈哲学家 6 吃饱了放下筷子 3 和 4哲学家 6 离开了位置 3 走到一边画圈圈哲学家 8 拿到左侧筷子 2哲学家 8 拿到右侧筷子 3哲学家 8 坐在 2 椅子上吃饭dining*哲学家 8 坐在椅子 2 上哲学家 7 坐上了位置 1哲学家 7 拿到左侧筷子 1哲学家 9 拿到左侧筷子 4哲学家 9 拿到右侧筷子 5哲学家 9 坐在 4 椅子上吃饭dining*哲学家 7 坐在椅子 1 上哲学家 8 坐在椅子 2 上哲学家 8 吃饱了放下筷子 2 和 3哲学家 7 拿到右侧筷子 2哲学家 7 坐在 1 椅子上吃饭dining*哲学家 7 坐在椅子 1 上哲学家 8 坐在椅子 2 上哲学家 9 吃饱了放下筷子 4 和 5西南交通大学本科毕业设计(论文) 第 9 页哲学家 9 离开了位置 4 走到一边画圈圈哲学家 8 离开了位置 2 走到一边画圈圈哲学家 10 坐上了位置 3哲学家 10 拿到左侧筷子 3哲学家 10 拿到右侧筷子 4哲学家 10 坐在 3 椅子上吃饭dining*哲学家 7 坐在椅子 1 上哲学家 10 坐在椅子 3 上哲学家 7 吃饱了放下筷子 1 和 2哲学家 7 离开了位置 1 走到一边画圈圈哲学家 10 吃饱了放下筷子 3 和 4哲学家 10 离开了位置 3 走到一边画圈圈5.2. 结果分析:各个哲学家(线程)完全独立自主运作,达到了预期的目标,拿筷子自然无冲突,吃饭也能正常运行,全程序没有一个哲学家饿死(线程不执行) ,或者是有哲学家在座位上却吃不到饭(死锁)的问题。所有的哲学家都可以去画圈圈(吃饱了之后去思考) 。6. 自我评价与总结:通过本次课程设计,我对哲学家就餐这一操作系统经典问题有了进一步的了解,尤其是在设计进程同步算法方面有了新的认识。通过亲自动手和查询资料,我知道了通过 Linux 系统的线程机制和信号量控制来实现哲学家就餐问题的并发控制。在这次课程设计中,由于没有掌握好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保型抗静电剂应用行业跨境出海战略研究报告
- 科学实验视频教程库行业深度调研及发展战略咨询报告
- 高温润滑脂耐热性企业制定与实施新质生产力战略研究报告
- 沙漠生态旅游国际合作行业跨境出海战略研究报告
- 用户界面(UI)动效设计企业制定与实施新质生产力战略研究报告
- 创新中职学校德育工作的教育技术应用
- 如何利用时间管理提高工作满意度
- 2025年化工厂安全生产工作计划
- 2025年医院感染管理信息系统建设计划
- 科技行业员工技能提升学习心得体会
- 深基坑土方开挖专项施工方案
- 大型集团公司信息安全整体规划方案相关两份资料
- 【双减作业论文】双减背景下初中数学分层作业的设计与实施(共八篇)
- 2024年安徽龙亢控股集团限公司公开招聘人员13人(高频重点提升专题训练)共500题附带答案详解
- 从古至今话廉洁-大学生廉洁素养教育智慧树知到期末考试答案章节答案2024年吉林大学
- 人音版 (五线谱)四年级下册音乐-5 《小溪流水响叮咚》教案
- 2023-2024学年上海交大附中高三上英语10月周练卷及答案
- 病理生理学病例分析报告
- 三D打印公开课
- 补铁剂中铁元素的检验-应用配合物进行物质检验高二化学鲁科版(2019)选择性必修2
- 给水管网改造工程施工组织设计概述
评论
0/150
提交评论