操作系统课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南城建学院
《操作系统》课程设计报告
课程名称:《操作系统》课程设计
设计题目:理发师问题
指导教师:李蓓耿永军
班级:
学号:
学生姓名:
同组人员:
成绩:
评语:
计算机科学与工程学院
2014年6月19日
前言
现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。
同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。本操作系统课程设计,是给同学提供一个集中实验的机会。希望同学们通过该设计加深对所学习课程的理解。本设计的内容是基于《操作系统原理》、《C语言程序设计》和《数据结构》等内容。
本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。完成本次课程设计,首先必须配置操作系统编写的所需的环境,包括虚拟机的建立和相应环境建立。用VI 编辑器编写相应得程序,以实现理发师进程的同步与互斥。
目录
第一章.系统环境 (1)
1.1硬件环境 (1)
1.2软件环境 (1)
第二章.设计目的及要求 (2)
2.1设计目的 (2)
2.2 要求 (2)
2.3 内容 (2)
第三章.总体设计 (3)
3.1程序设计组成框图 (3)
3.2 主函数流程图 (4)
3.3理发师进程流程图 (5)
3.4 顾客进程流程图 (5)
3.5函数调用 (6)
第四章.详细设计 (7)
4.1概要设计 (7)
4.1.1 数据结构 (7)
4.1.2 多线程编译原理 (7)
4.1.3 创建线程 (7)
4.1.4 信号量 (8)
4.2 头文件声明 (8)
4.3函数定义 (9)
4.4 变量定义 (9)
4.5函数实现 (9)
第五章.调试与测试 (11)
5.1调试方法 (11)
5.2结果分析 (13)
第六章.设计中遇到的问题及解决方法 (14)
6.1出现的问题 (14)
6.2解决方法 (14)
第七章.源程序清单和执行结果 (16)
7.1源程序清单 (16)
7.2程序执行结果 (19)
第八章.心得体会 (20)
第九章.参考文献 (21)
第一章.系统环境
1.1硬件环境
内存1GB,处理器1,硬盘(SCSI)50GB,网络适配器NAT。
1.2软件环境
虚拟机上运行的Red Hat Linux 9系统运行环境,言语开发环境是Linux的GNU C或C++。
图1.1软件环境
第二章.设计目的及要求
2.1设计目的
学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。但由于条件和学时有限,在理论学习过程中没有给提供更多的实验机会。本操作系统课程设计,是提供了一个集中实验的机会。应该通过该设计加深对所学习课程的理解。进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法。加深对于非对称性互斥问题有关概念的理解。观察和体验非对称性互斥问题的并发控制方法。进一步了解Linux系统中进程同步工具的用法,训练解决对该类问题的实际编程、调试和分析问题的能力。
2.2 要求
按件工程的思想和方法进行设计,并把它作为一个工程来做。设计的每一步都有要形成文档,“成品”出来以后要有使用说明书和测试报告。最后按院方统一要求整理出软件实习“论文”,并分别以电子和书面文档的形式上交。最后,设计的程序要编译通过,并在验收时进行演示。本设计的内容是基于《操作系统原理》教材的,但同学们必须对以前的《C语言程序设计》和《数据结构》等内容进行认真的复习。本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。因此,要求课程设计者对Linux操作系统和GNU C或C++有一定的了解。
2.3 内容
(1)一个理发店接待室有n张椅子,工作室有1张椅子;
(2)没有顾客时,理发师睡觉;
(3)第一个顾客来到时,必须将理发师唤醒;
(4)顾客来时如果还有空座的话,他就坐在一个座位上等待;
(5)如果顾客来时没有空座位了,他就离开,不理发了;
(6)当理发师处理完所有顾客,而又没有新顾客来时,他又开始睡觉。
第三章.总体设计
题目中要求描述理发师和顾客的行为,因此需要进程barber ()和customer()分别描述理发师和顾客的行为。当理发师看报时顾客近来需要唤醒理发师为其理发,当有顾客时理发师为其理发,没有的时候理发师休息,因此理发师和顾客之间是同步的关系,由于每次理发师只能为一个人理发,且可供等侯的椅子有限只有n个,即理发师和椅子是临界资源,所以顾客之间是互斥的关系。故引入3个信号量和一个控制变量:1)控制变量waiting用来记录等候理发的顾客数,初值均为0;2)信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0;3)信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为0;4)信号量mutex用于互斥,初值为1;
3.1程序设计组成框图
实现工具
及方法
基本
事项
LINUX+C语言+VMware workstation
理发师工作
或
睡觉
理发师barber等待顾客理发,如果没有顾客就去睡觉,否则顾客获
得理发椅使用权,过后释放理发椅使用权。
创建
线程
创建理发师线程,初始化信号量sem_init(&barbers,0,1);,如果创建
失败,exit(EXIT_FAILURE)
顾客剪发
等待
顾客customer理发,如果等待室有空位,进入。如果理发师在睡觉
唤醒理发师,如果在工作就在等待室等候。
创建
线程
创建顾客线程,初始化信号量sem_init(&customers,0,0);如果创建失
败,exit(EXIT_FAILURE)
图3.1