操作系统课程设计.docx
- 文档编号:18106430
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:18
- 大小:186.51KB
操作系统课程设计.docx
《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
操作系统课程设计
学号:
0121210680117
课程设计
课程名称
操作系统
学院
计算机科学与技术学院
专业
软件工程专业
班级
软件1201
姓名
柏扬
指导教师
刘军
2014——2015学年第1学期
《操作系统原理》课程设计指导书
课程编号:
课程名称:
操作系统/OperatingSystem
周数/学分:
1周/1学分
先修课程:
高级语言程序设计、汇编语言、数据结构、计算机组成原理
适用专业:
计算机科学与技术、软件工程
开课学院、系或教研室:
计算机科学与技术学院
一、课程设计的目的
通过对操作系统内核实现代码的阅读、修改、设计,理解和掌握复杂的操作系统的工作原理。
二、课程设计的内容和要求
1.系统调用
学习在Linux中产生一个系统调用以及怎样通过往Linux内核中增加一个新函数从而在该内核空间中实现对用户空间的读写。
这个函数的功能是返回当前的系统时间。
实验条件要求:
每人一台Linux主机且有超级用户权限。
2.内核定时器
通过研究内核的时间管理算法学习内核源代码。
然后应用这些知识并且使用“信号”建立一种用户空间机制来测量一个多线程程序的执行时间。
实验条件要求:
每人一台Linux主机且有超级用户权限。
3.实现生产者消费者(Bounded–BufferProblem)问题
通过研究Linux的线程机制和信号量实现生产者消费者(BoundedBuffer)问题的并发控制。
实验条件要求:
每人一台与Linux主机联网的Windows主机,普通用户权限。
4.实现读者写者(Reader-WriterProblem)问题
通过研究Linux的线程机制和信号量实现读者写者(Reader-Writer)问题并发控制。
实验条件要求:
每人一台与Linux主机联网的Windows主机,普通用户权限。
三、课程设计进度安排
序号
阶段内容
所需时间
1
消化资料、系统设计
1天
2
编程、调试
3天
3
撰写报告
1天
合计
5天
四、课程设计说明书与图纸要求
应包含如下内容:
1.设计题目与要求
2.总的设计思想及系统平台、语言、工具等。
3.数据结构与模块说明(功能与流程图)
4.源程序
5.运行结果与运行情况
6.调试记录
7.自我评析和总结
五、课程设计评分标准
序号
评分项目
満分
实得分
1
学习态度认真,遵守纪律。
20
2
设计结果。
40
3
设计报告规范(包括设计图、设计代码)
40
总得分/等级
注:
优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格。
六、课程设计参考资料
推荐教材:
《OperatingSystemConcepts(SixthEdition)(操作系统概念)影印版》,主编:
AbrahamSilberschatz
出版社:
高等教育出版社
出版或修订时间:
2003年10月
参考书:
《计算机操作系统教程(第三版)》主编:
张尧学
出版社:
清华大学出版社
出版或修订时间:
2001年7月
《操作系统原理(第三版)》,主编:
庞丽萍
出版社:
华中科技大学出版社
出版或修订时间:
2000年12月
执笔:
杨铭熙
审阅:
陈天煌日期2005年8月29
审定:
徐东平日期2005年9月10
课程设计任务书
题目:
实现生产者消费者(Bounded–BufferProblem)问题
初始条件:
学习了高级语言程序设计、汇编语言、数据结构、计算机组成原理课程,掌握了一种计算机高级语言。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
通过研究Linux的线程机制和信号量实现生产者消费者(BoundedBuffer)问题的并发控制。
实验条件要求:
每人一台与Linux主机联网的Windows主机,普通用户权限。
时间安排:
序号
阶段内容
所需时间
1
消化资料、系统设计
1天
2
编程、调试
3天
3
撰写报告
1天
合计
5天
指导教师签名:
2014年12月26日
系主任(或责任教师)签名:
年月日
目录
1.设计题目与要求1
1.1题目:
实现生产者消费者(Bounded-BufferProblem)问题1
1.2要求1
1.2.1初始条件1
1.2.2技术要求1
2.问题简介1
2.1问题背景1
2.2问题分类2
2.3基本解决方案2
3.设计思想及原理2
4.系统平台、语言及工具4
5.数据结构与模块说明(功能与流程图)4
5.1数据结构4
5.2模块说明4
6.程序源码及运行结果5
6.1程序源代码5
6.2运行结果9
7.总结9
8.参考文献10
实现生产者消费者(Bounded-BufferProblem)问题
1.设计题目与要求
1.1题目:
实现生产者消费者(Bounded-BufferProblem)问题
1.2要求
1.2.1初始条件
1.操作系统:
Linux
2.程序设计语言:
C语言
3.有界缓冲区内设有20个存储单元,其初值为0。
放入/取出的数据项按增序设定为1-20这20个整型数。
1.2.2技术要求
1)为每个生产者/消费者产生一个线程,设计正确的同步算法
2)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的当前全部内容、当前指针位置和生产者/消费者线程的自定义标识符。
3)生产者和消费者各有两个以上。
4)多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。
2.问题简介
2.1问题背景
生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。
在同一个进程地址空间内执行的两个线程。
生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。
消费者线程从缓冲区中获得物品,然后释放缓冲区。
当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。
当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。
2.2问题分类
根据缓冲区的个数、大小以及生产者消费者的个数可以分为以下几类:
1.单缓冲区(适合单或多生产消费者);
2.环行多缓冲区(或无穷缓冲区)单生产消费者;
3.环行多缓冲区多生产消费者;
2.3基本解决方案
1.用进程通信(信箱通信)的方法解决;
2.进程消息缓冲通信;
3.进程信箱通信;
3.设计思想及原理
在操作系统原理课程中,我们已经了解到了可以采用信号量来解决n个进程的临界区问题,这n个进程共享一个信号量mutex(mutualexclusion),并初始化为1。
每个进程Pi的组织结构如下图。
由于本系统我们研究的是有限缓冲区(Bounded-Buffer)的生产者消费者问题。
而且根据初始条件可知,该缓冲区内有20个缓冲项,每个缓冲项存储一个整形数。
信号量mutex提供了对缓冲池访问的互斥要求,并初始化为1。
信号量empty和full分别用来表示空缓冲项和满缓冲项的数量。
信号量empty初始化为20,而信号量full初始化为0;
生产者进程和消费者进程的代码如图。
注意生产者和消费者之间的对称性可以这样来理解代码:
生产者为消费者生产满缓冲项,或消费者为生产者生产空缓冲项。
4.系统平台、语言及工具
此实验在操作系统Ubuntu9.10下实现,主要用到的工具为vi和gedit(用于源代码的编辑),以及GCC工具(用于源代码的编译链接等)。
具体版本:
Vi(7.2.245)
gcc(4.4.1)
5.数据结构与模块说明(功能与流程图)
5.1数据结构
该系统用到的有限缓冲区采用数组实现
5.2模块说明
该实验主要分为三大模块:
1.主程序,控制程序的流程,其中控制线程的活动以及信号量的操作。
2.生产者模块:
生产者对缓冲区的操作
3.消费者模块:
消费者对缓冲区的操作
5.3程序相关模块的流程图
(生产者线程流程图)(消费者线程流程图)
6.程序源码及运行结果
6.1程序源代码
#include
#include
#include
#include
#include
#include
#definenum_producer3
#definenum_consumer3//由于题目要求生产者和消费者各有两个以上,故此处均定为3个
#defineBUFFER_SIZE20//定义缓冲区的大小,按题目要求为20
intNUM=1;//题目要求放入/取出的数据项按增序设定为1-20,因此定义此全局变量
intbuffer[BUFFER_SIZE];
intnextp=0,nextc=0;
sem_tempty,full,mutex;
//主函数
intmain()
{
inti;
signal(SIGALRM,handler);
sem_init(&empty,0,BUFFER_SIZE);
sem_init(&full,0,0);
sem_init(&mutex,0,1);
for(i=0;i for(i=0;i for(i=0;i for(i=0;i for(i=0;i sem_destroy(&empty); sem_destroy(&full); sem_destroy(&mutex); return0; } //消费者代码 void*consumer_thread(void*tid) { inti; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); while (1) { sem_wait(&full); srand((int)time(NULL)*(int)tid); sem_wait(&mutex); printf("消费者标识: %d\t指针位置: %d\t\n",(int)tid,nextc); buffer[nextc]=0; nextc=(nextc+1)%20; printf("缓冲区: "); for(i=0;i { printf("%3d",buffer[i]); } printf("\n"); sem_post(&mutex); sem_post(&empty); srand((int)time(NULL)*(int)tid); sleep (1); } return((void*)0); } //生产者代码 void*producer_thread(void*tid) { inti; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); while (1) { sem_wait(&empty); srand((int)time(NULL)*(int)tid); sleep (1); while((nextp+1)%20==nextc); sem_wait(&mutex); if(NUM>20)NUM=1;//如果大于20,NUM重新为1 buffer[nextp]=(NUM++); nextp=(nextp+1)%20; if(nextp==0) { printf("生产者标识: %d\t指针位置: 19\t\n",(int)tid); } else { printf("生产者标识: %d\t指针位置: %d\t\n",(int)tid,nextp-1); } printf("缓冲区: "); for(i=0;i { printf("%3d",buffer[i]); } printf("\n"); sem_post(&mutex); sem_post(&full); srand((int)time(NULL)*(int)tid); } return((void*)0); } 6.2运行结果 程序按Ctrl+Z终止运行,即进程挂起,可使用fg%id继续运行查看结果 7.总结 进程的同步与互斥是操作系统课程中非常重要的一部分内容。 通过本次课程设计,我不仅学会了使用信号量机制解决有限缓冲区的生产者消费者问题,而且对Linux系统下多线程编程有了更深入的了解。 虽然实验以前我已经对信号量机制解决进程间同步问题的原理有了很清楚的认识,但是此次课程设计中仍然遇到了很多问题,如Linux系统下各种系统调用以及函数的各种参数,都花费了我很多时间去网上看各种资料——虽然Linux系统中可以很方便的阅读源代码以及使用man命令进行相应指令的查看,但是全英文的资料让人看了不免有些发怵,看来还要多多加强计算机专业英语的学习,以后便可以在Linux系统中查看各种帮助文件。 另一个问题就是在编译的时候遇到的,刚开始用gcc–omainmain.c进行编译的时候总是提示出错,后来查了相关资料才知道pthread库不是Linux系统默认的库,连接时需要使用静态库libpthread.a,所以在使用pthread_create()等函数时,需要链接该库才能编译通过。 以前再用WindowsIDE进行编程的时候基本上不会遇到这样的问题,看来的确IDE为我们做了很多工作,隐藏了一些技术细节,有时候隐藏这些细节虽然可以方便我们,却让我们离真相越来越远。 最近使用Linux进行相关的编程操作,感悟还是挺多的。 Windows下的层层封装的确让我们感到很方便,但同时也让我们编程变得越来越不灵活。 因为我们不用再去了解底层的东西因此一遇到问题就会束手无策。 这段时间一直用Linux进行编程,感觉很方便,跟我以前想象地完全不一样,而且我掌握了不少命令,比我以前用鼠标操作的时候快多了,而且在Bash下可以用Ctrl+Z随时中止正在运行的进程或命令,再用fg%id重新运行。 Linux下的编程也很方便,我还了解了Makefile的编写方法,在多文件编程的时候可以极高地提高效率。 总之,我之后会加强专业英语的学习,以便更好的利用Linux操作系统进行编程之路的学习。 8.参考文献 [1]《操作系统概念(第六版)》,(美)AbrahamSilberschatz,PeterBaerGalvin,GregGagne著,郑扣根译,高等教育出版社,2004年1月 [2]《深入理解LINUX内核(第三版)》(美)博韦,西斯特著,陈莉君,张琼声,张宏伟译,中国电力出版社,2007年9月 [3]Ubuntu中文论坛: 本科生课程设计成绩评定表 班级: 软件1201 姓名: 柏扬学号: 0121210680117 序号 评分项目 满分 实得分 1 学习态度认真、遵守纪律 10 2 设计分析合理性 10 3 设计方案正确性、可行性、创造性 20 4 设计结果正确性 40 5 设计报告的规范性 10 6 设计验收 10 总得分/等级 评语: 注: 最终成绩以五级分制记。 优(90-100分)、良(80-89分)、中(70-79分)、 及格(60-69分)、60分以下为不及格 指导教师签名: 年月日 学生学号 0121210680117 实验课成绩 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名柏扬 学生专业班级软件工程1201班 2014—2015学年第1学期
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计