操作系统课程设计报告

发布 2022-10-05 12:40:28 阅读 9139

操作系统实验报告。

一、 实验题目: linux或windows或unix环境下,采用系统调用中的信号量、p、v操作,编程解决理发师问题:一个理发店由一间等候室w和一间工作室b组成。

顾客可以从外面大街上进入w等候理发。两个房间的入口是并排的,且共享一扇日本式可滑动的推拉门(门总是挡住一个入口)。顾客在工作室内理完发,可由b的旁门出去。

w中有n把椅子,顾客必须坐着等候。理发师可由门上小窗查看w中无人就睡觉,否则开门,并叫一位顾客入内理发。顾客每进入一位,都拉铃通知理发师。

若把顾客和理发师都视为进程,请用p、v操作写出进程的同步算法。

二、 实验目的:了解并掌握进程通信与进程同步机制。

三、 实验要求:在windows环境下,采用系统调用,编程实现读者、写者问题,具体的要求为:一个数据集(如一个文件或记录)为多个并发进程所共享,其中一些进程只要求读该数据集的内容,这些进程称为“读者”,而另一些进程则要求修改该数据集的内容,这些进程称为“写者”。

具体要求是:允许多个读者同时读该数据集的内容,但是,若有一个写者在写,则其他读者不能读,若有一个写者在写或有其他读者在读,则其他写者均被拒绝。当一个写者正在写,而有多个读者与写者在等待时,写者应优先唤醒。

读者进去读、等待,写者进去写、等待等状态均在屏幕上打印出来。

四、 实验原理及算法。

原理:本实验采用pv操作,具体操作顺序如下:

semaphore s,s1,s2;

检查能否进入等候区,s2检查理发师是否空闲s1是互斥信号量,检查门是否能开。

process 顾客。

p(&s);/查看是否能够进入等候区。

p(&s1);/检查门是否能够打开,顾客推门进入理发店;

v(&s1);/释放门资源,拉铃通知理发师并坐着等待理发;

v(&s2);/唤醒理发师。

proess理发师。

p(&s2);/检查理发师是否空闲。

p(&s1);/查看门是否能开,开门叫一位顾客入内理发;

v(&s1);/释放门资源。

v(&s);/释放等候区资源,顾客理完发从b的旁门出去;

算法:本次实验即反复调用p、v函数,根据上述顺序,进行一些资源的开发与释放后,进行p、v操作,来完成实验要求。

linux操作系统环境下c的编译:

---编辑环境一般采用vi;

---编译命令: g++ 源文件名可执行文件名。

用到的相关系统调用。

---shmget( )开辟共享存储区。

---semget():用于产生一个信号量数组或查找已创建的信号量数组的描述字。其中,semkey是用户指定的关键字,count规定信号量数组的长度,flag为操作标志。

--semop():用于进行p、v操作。其中,semid是semget返回的描述字,oplist是用户提供的操作数组的指针,count是该数组的大小。

semop返回最后被操作的信号量在操作完成前的值。oplist中的每个元素包含三个内容;信号量序号、欲进行的操作值和标识。

基本使用格式。

gcc [ 选项] 《文件名》

必须包含的头文件:

#include

#include

#include

#include

#include <>

用到的数据结构:sembuf

p操作的实现:

设置oplist中的欲进行的操作值为-1, 后执行semop。

例如程序段如下:

structsembuf psembuf;

semid = semget (semkey,2, 0777);

= first;

= sem_undo;

semop(semid, &psembuf, 1);

v操作的实现:

设置oplist中的欲进行的操作值为1, 后执行semop。

例如程序段如下:

structsembuf psembuf;

semid = semget (semkey,2, 0777);

= first;

= sem_undo;

semop(semid, &psembuf, 1);

五、 主要数据结构。

*生产者。#include

#include

#include

#include

#include <>

#include <>

#define shmkey 9075 /*共享存储区的键*/

#define semkey_barber 9085

#define semkey_customer 9086

#define semkey_mutex 9087 /*信号量数组的键*//注意:上面的键在系统中必须唯一*/

#define buff_len 1 /*缓冲区可以存放10个产品*/

#define product_len 32 /*每个产品是一个字符串:<=32字符*/

int p(intsemid)

int v(intsemid)

voidset_sembuf_struct(structsembuf *sem,intsemnum, intsemop,intsemflg)

六、 流程图。

p、v操作的流程图:否。是。

否。是。

七、 实验测试结果及结果分析。

测试结果:结果分析:

由上面在linux系统下进行操作的截图可知,在预先设置了等候区的位置数为5之后,输入customer指令,系统自动引入一位顾客,输入barber指令后,系统指示理发师对客人进行理发操作。

八、 课程设计总结。

经过本次实验,对pv操作有了更深层次的理解,平时在上。

课时,仅仅是对该操作有书面上的了解,包括后来在期末考试复习阶段,也只是对题目上面的理解。具体到课程设计上,刚开始按照老师的要求写出了简单的流程,然后开始编写程序。程序编写好之后,发现对linux系统的了解少之又少,操作也很有问题。

在同学的帮助下,学会了怎样在电脑原有程序下安装linux系统,并且学会了在linux系统中对所编写的程序的操作。可以说,自己得到的收获是相当大的。并且自身对linux系统也产生了一定的兴趣,接下来会找时间做具体研究。

九、 源程序清单。

*生产者。#include

#include

#include

#include

#include <>

#include <>

#define shmkey 9075 /*共享存储区的键*/

#define semkey_barber 9085

#define semkey_customer 9086

#define semkey_mutex 9087 /*信号量数组的键*//注意:上面的键在系统中必须唯一*/

#define buff_len 1 /*缓冲区可以存放10个产品*/

#define product_len 32 /*每个产品是一个字符串:<=32字符*/

*下面的p,v是对系统调用的简单封装*/

int p(intsemid)

structsembufp_buf;p_p_

p_if(semop(semid,&p_buf,1)==1)/*semop参见课件ppt*/

elsereturn (0);

int v(intsemid)

structsembufv_buf;/*structsembuf 参见课件ppt*/v_v_

v_if(semop(semid,&v_buf,1)==1)

elsereturn (0);

main()

char *p_buffer;/*共享存储区地址*/

intshmid;/*共享存储区id*/

intsemid_barber,semid_customer,semid_mutex;/*信号量集合id*/

shmid=shmget(shmkey,buff_len * product_len,0777);/连接共享存储区:2 存放in,out的值*/

p_buffer=(char*)shmat(shmid,0,0);/取共享存储区地址*/

semid_mutex=semget(semkey_mutex,1,0777);/获取全局信号量id*/

semid_barber=semget(semkey_barber,1,0777);

semid_customer=semget(semkey_customer,1,0777);

/*从屏幕接收产品*/

/*进入临界区*/

p(semid_barber);/对私有信号量作p操作*/

p(semid_mutex);/对公有信号量作p操作*//二者顺序不能换*/

printf("a waiting customer enter in the studio");

shmdt(p_buffer); 离开缓冲区*/

sleep(10);

/*离开临界区*/

v(semid_customer);

操作系统课程设计报告

西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...

操作系统课程设计报告

课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...

操作系统课程设计报告

实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...