操作系统课设报告.docx
- 文档编号:29572155
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:10
- 大小:33.25KB
操作系统课设报告.docx
《操作系统课设报告.docx》由会员分享,可在线阅读,更多相关《操作系统课设报告.docx(10页珍藏版)》请在冰豆网上搜索。
操作系统课设报告
文件排版存档编号:
[UYTR-OUPT28-KBNTL98-UYNN208]
操作系统课设报告
成绩:
武汉华夏理工学院信息工程学院
课程设计
题目
用多线程同步方法解决读者阅览问题
系别
信息工程系
专业
软件工程
班级
软件1151
姓名/学号
指导教师
杨铭熙
年
月
日
正文
1.设计目的与要求
设计目的
通过研究linux多线程同步的问题,掌握对信号灯的操作方法,以及加深理解同步算法的思想。
设计要求
用多线程同步解决读者阅览问题。
设阅览室有5把椅子,几把椅子可用连续存储单元。
要求:
1)每个读者进入阅览室后,即时显示“Entered”及其线程自定义标识,还同时显示阅览室共有几名顾客及其所坐的位置。
2)至少有10个读者,每人阅览至少3秒钟。
3)多个读者须共享操作函数代码。
2.设计思想及系统平台
设计思想
进程是指在系统中运行的一个应用程序,线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。
对于操作系统而言,其调度单元是线程。
一个进程至少包括一个进程,通常将线程称为主线程。
一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
从而理解到我的课程设计所需要的进程数和线程在我的程序中怎么用。
首先座位是一个共享资源,而且有一个数量限制,这里就要用到互斥信号灯的操作和判断资源数量的信号灯。
在算法上要认真仔细思考,弄清逻辑顺序,避免错误使用信号灯而带来的死锁。
系统平台及使用语言
本次课程设计是在linux的系统平台下使用C语言实现对读者阅览问题的编程,所使用的工具有gedit编辑器、gcc编译器等。
3.详细算法描述
reader函数:
第一步:
定义一个长度为5的整型数组buffer用来模拟连续的五个座位,一个座位资源信号灯sem_sit,一个互斥信号灯sem_mutual。
第二步:
创建void*reader(intn)读者的函数,在函数的开始,使用sem_wait(&sem_sit)判断是否有空的座位,如果有再使用sem_wait(&sem_mutual)互斥信号灯实现上锁,来避免发生与时间相关的错误。
第三步:
再是读者注册,用for循环遍历座位数组buffer,来寻找一个空的座位。
第四步:
读者找到空座位坐下,使用sem_post(&sem_mutual)释放互斥锁。
读者reading4秒。
第五步:
再使用互斥信号灯,用for信号灯打印现在的座位的入座情况。
第六步:
打印完毕后,读者注销,释放座位,然后释放互斥锁,释放座位。
main函数:
第一步:
定义pthread_t[10],用来储存reader进程的进程标识。
第二步:
初始化sem_sit信号灯,sem_init(&sem_sit,0,5),初始化sem_mutual信号灯,sem_init(&sem_mutual,0,1);
第三步:
使用for循环pthread_creat()创建10个reader进程。
第四步:
使用pthread_join()等待所有reader结束。
main线程的处理函数流程图如下:
main线程的处理函数:
intmain(){
inti,j,pp,qq;
pthread_tt[10];
sem_init(&sem_sit,0,5);
sem_init(&sem_mutual,0,1);
for(i=0;i<10;i++){
pp=pthread_create(&t[i],NULL,(void*)reader,(void*)i);
if(pp!
=0){printf("reader%derror,createagain",i);i--;}
}
for(j=0;j<10;j++){
qq=pthread_join(t[j],NULL);
if(qq!
=0){
printf("reader%dexitfail",j+1);
}
}
return0;
}
reader线程的处理函数流程图如下:
reader线程的处理函数:
void*reader(intn){
inti,l;
sem_wait(&sem_sit);
sem_wait(&sem_mutual);
printf("reader%dEntered.\n",n+1);
sleep
(1);
printf("reader%dregistered.\n",n+1);
for(i=0;i<5;i++){
if(buffer[i]==-1){
buffer[i]=n;
break;
}
}
sem_post(&sem_mutual);
sleep(4);
printf("reader%disreading\n",n+1);
sem_wait(&sem_mutual);
printf("--------sittinginfo--------\n");
for(l=0;l<5;l++){
if(buffer[l]!
=-1)
printf("reader%dissittingat%d\n",buffer[l]+1,l+1);
}
printf("------------------------\n");
printf("reader%dlogoutandexit\n",n+1);
buffer[i]=-1;
sem_post(&sem_mutual);
sem_post(&sem_sit);
}
4.源程序清单
用户名:
zjy5124(IP:
)
源程序名:
目标程序名:
zjy
源程序清单如下:
#include<>
#include<>
#include<>
intbuffer[5]={-1,-1,-1,-1,-1};
sem_tsem_sit,sem_mutual;
void*reader(intn){
inti,l;
sem_wait(&sem_sit);
sem_wait(&sem_mutual);
printf("reader%dEntered.\n",n+1);
sleep
(1);
printf("reader%dregistered.\n",n+1);
for(i=0;i<5;i++){
if(buffer[i]==-1){
buffer[i]=n;
break;
}
}
sem_post(&sem_mutual);
sleep(4);
printf("reader%disreading\n",n+1);
sem_wait(&sem_mutual);
printf("--------sittinginfo--------\n");
for(l=0;l<5;l++){
if(buffer[l]!
=-1)
printf("reader%dissittingat%d\n",buffer[l]+1,l+1);
}
printf("------------------------\n");
printf("reader%dlogoutandexit\n",n+1);
buffer[i]=-1;
sem_post(&sem_mutual);
sem_post(&sem_sit);
}
intmain(){
inti,j,pp,qq;
pthread_tt[10];
sem_init(&sem_sit,0,5);
sem_init(&sem_mutual,0,1);
for(i=0;i<10;i++){
pp=pthread_create(&t[i],NULL,(void*)reader,(void*)i);
if(pp!
=0){printf("reader%derror,createagain",i);i--;}
}
for(j=0;j<10;j++){
qq=pthread_join(t[j],NULL);
if(qq!
=0){
printf("reader%dexitfail",j+1);
}
}
return0;
}
5.运行结果与运行情况
程序运行结果如下:
变量说明:
6.调试过程
我翻看了老师给我们的ppt资料,了解了一下多线程的使用方法。
创建进程,等待进程结束以及销毁进程,还有信号灯的使用有了基本的了解,对该课程设计的解决有了很好的基础,于是对中的一些有关进程抢占的程序进行了调试。
从结果中我理解到了:
线程的抢占,然后想到自己的课程设计题目:
用多线程同步方法解决读者阅览问题,我决定了我要用10个线程。
在第一次完成代码后,经过调试,发现在打印当前座位信息是也必须上互斥锁,修复了打印座位信息的错误。
最后得到如下逻辑:
首先创建reader函数,开始用p(sem_sit)信号灯判断座位是否被坐满,然后用p(sem_mutex)互斥信号灯实现上锁操作,然后找座位坐下。
然后v(sem_mutex)解开互斥锁,阅读四秒,上锁,打印座位信息,当前读者离开座位,读者注销。
解开互斥锁,p(sem_sit)座位资源加一。
main函数初始化信号灯,sem_init(&sem_sit,0,5);结
经过了这次操作系统课程设计,使我更加理解了多线程的作用和他们抢占的意义,而且对信号量的使用和互斥锁的作用有了更加深刻的理解。
能够找到程序死锁的原因以及可能带来死锁的因素,并能够解决死锁问题。
能够将多线程同步运行,共有资源多线程使用能够使用信号灯以及互斥锁来避免发生与时间相关的错误,将多线程程序正确无误的持续运行。
本科生课程设计成绩评定表
班级:
姓名:
学号:
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
10
3
设计方案正确性、可行性、创造性
20
4
设计结果正确性
40
5
设计报告的规范性
10
6
设计验收
10
总得分/等级
评语:
注:
最终成绩以五级分制记。
优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
年 月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 报告