操作系统课程设计报告格式

上传人:hs****ma 文档编号:469696832 上传时间:2023-02-14 格式:DOCX 页数:21 大小:393.20KB
返回 下载 相关 举报
操作系统课程设计报告格式_第1页
第1页 / 共21页
操作系统课程设计报告格式_第2页
第2页 / 共21页
操作系统课程设计报告格式_第3页
第3页 / 共21页
操作系统课程设计报告格式_第4页
第4页 / 共21页
操作系统课程设计报告格式_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《操作系统课程设计报告格式》由会员分享,可在线阅读,更多相关《操作系统课程设计报告格式(21页珍藏版)》请在金锄头文库上搜索。

1、江苏大学计算机学院课程设计报告课程名称操作系统课程设计实验学期2010至2011学年,第1学期学生姓名周勇专业班级计算机0801学号3080602049指导教师詹永照开课系计算机科学系操作系统课程组制操作系统课程设计报告实验题目:Linux系统管理实践与设计时间:2010-12-27至进程控制、进程通信实现2011-01-02一、实验目的与要求1、 掌握基本的同步与互斥算法。2、 学习使用Linux中基本的同步对象,掌握相关函数的使用方法。3、 了解Linux中多进程的并发执行机制,实现进程的同步与互斥。4、 查阅相关资料。5、 熟悉各种命令、系统调用与实用程序。6、 按给定功能设计相关程序。

2、7、 撰写课程设计报告。二、实验内容桌上有一只盘子,盘子只能放5只水果,每次只能放一只水果或取出一只水果。爸爸专放苹果,妈妈专放橘子,儿子专等吃盘子中的橘子,女儿专等吃盘子中的苹果。分别用P,V操作实现他们的协作行为。三、实验设备与环境实验设备:虚拟机运行平台:Linux语言:c四、设计正文(包括分析与设计思路、各模块流程图以及带注释的主要算法源码)设计思路:设计4个进程,分别是父亲进程,母亲进程,儿子进程,设置一个缓冲区,用来放水果,长度为5.所以设置一个公有信号量mutex,以限制他们对缓冲区的放和取,初值为1.另外设置私有信号S2,S1.以控制儿子是否可以取橘子吃,女儿是否可以取苹果吃。

3、初值都为0.还要设置一个信号量empty,控制父亲跟母亲之间的同步,初值为5。表示现在缓冲区有5个空位可以放。各模块流程图:Sn带注释的主要算法源码:I.Conntrol.c#include#include#include#include#include#include#include#include#defineSHMKEY9075/*共享存储区的键*/#defineSEMKEY_EMPTY9085#defineSEMKEY_S19086#defineSEMKEY_S29087#defineSEMKEY_MUTEX9088*信号量数组的键*/#defineBUFF_LEN5/*缓冲区可以存放

4、个水果*/#defineFRUIT_LEN12/*水果用字符串代替*/voidset_sembuf_struct(structsembuf*sem,intsemnum,intsemop,intsemflg)/*设置信号量结构*/sem-sem_num=semnum;sem-sem_op=semop;sem-sem_flg=semflg;main()char*addr,end;intshmid;unsignedcharin;intsemid_empty,semid_s1,semid_s2,semid_mutex;/*信号量id*/structsembufsem_tmp;/*开辟共享存储区*/if

5、(shmid=shmget(SHMKEY,BUFF_LEN*FRUIT_LEN,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf(TheBufferHasExisted!n);printf(DoYouWantToDeleteTheBuffer(Y=yes)?n=:);scanf(%c”,&end);if(end=y|end=Y)/*共享存储区、信号量并不随程序的结束而被删除,如果我们没删除的话,可以用ipcs命令查看,用ipcrm删除*/*释放缓冲区*/shmid=shmget(SHMKEY,BUFF_LEN*FRUIT_LEN,0777);

6、if(shmctl(shmid,IPC_RMID,0)0)perror(shmctl:);/*同时释放信号量*/semid_mutex=semget(SEMKEY_MUTEX,1,0777);semid_empty=semget(SEMKEY_EMPTY,1,0777);semid_s1=semget(SEMKEY_S1,1,0777);semid_s2=semget(SEMKEY_S2,1,0777);semctl(semid_mutex,0,IPC_RMID);semctl(semid_empty,0,IPC_RMID);semctl(semid_s1,0,IPC_RMID);semctl

7、(semid_s2,0,IPC_RMID);elseprintf(FailToCreateBuffer!n);return-1;addr=(char*)shmat(shmid,0,0);/*连接缓冲区*/memset(addr,0,BUFF_LEN*FRUIT_LEN);shmdt(addr);/*离开缓冲区*/*创建信号量:1个用于对缓冲区互斥,3个用于父亲、母亲、儿子、女儿同步*/if(semid_mutex=semget(SEMKEY_MUTEX,1,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf(TheSEMKEY_MUTEXHas

8、Existed!n);elseprintf(FailToCreateSEMKEY_MUTEX!n);return-1;if(semid_s1=semget(SEMKEY_S1,1,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf(TheSEMKEY_S1HasExisted!n);elseprintf(FailToCreateSEMKEYS1!n);return-1;if(semid_s2=semget(SEMKEY_S2,1,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf(TheSEMK

9、EY_S2HasExisted!n);elseprintf(FailToCreateSEMKEY_S2!n);return-1;if(semid_empty=semget(SEMKEY_EMPTY,1,0777|IPC_CREAT|IPC_EXCL)=-1)if(errno=EEXIST)printf(TheSEM_EMPTYHasExisted!n);elseprintf(FailToCreateSEM_EMPTY!n);return-1;/*给信号量赋初值*/set_sembuf_struct(&sem_tmp,0,BUFF_LEN,0);/*BUFF_LEN*/semop(semid_e

10、mpty,&sem_tmp,1);set_sembuf_struct(&sem_tmp,0,0,0);/*0*/semop(semid_s1,&sem_tmp,1);set_sembuf_struct(&sem_tmp,0,0,0);/*0*/semop(semid_s2,&sem_tmp,1);set_sembuf_struct(&sem_tmp,0,1,0);/*1*/semop(semid_mutex,&sem_tmp,1);return0;2.Father.c/*下面的p,v是对系统调用的简单封装*/intP(intsemid)structsembufp_buf;p_buf.sem_n

11、um=0;pbuf.semop=-1;p_buf.sem_flg=0;if(semop(semid,&p_buf,1)=-1)/*semop参见课件ppt*/perror(p(semid)falsed);exit(1);elsereturn(0);intV(intsemid)structsembufv_buf;/*structsembuf参见课件ppt*/v_buf.sem_num=0;v_buf.sem_op=1;v_buf.sem_flg=0;if(semop(semid,&v_buf,1)=-1)perror(v(semid)failed);exit(1);elsereturn(0);m

12、ain()char*p_buffer;/*共享存储区地址*/unsignedcharin;/*生产者存放产品的指针:它的值存放在全局缓冲区第一个字节*/intshmid;/*共享存储区id*/intsemid_empty,semid_s1,semid_s2,semid_mutex;/*信号量集合id*/shmid=shmget(SHMKEY,BUFF_LEN*FRUIT_LEN,0777);/*连接共享存储区:2存放in,out的值*/p_buffer=(char*)shmat(shmid,0,0);/*取共享存储区地址*/semid_mutex=semget(SEMKEY_MUTEX,1,0

13、777);/*获取全局信号量id*/semid_empty=semget(SEMKEY_EMPTY,1,0777);semid_s1=semget(SEMKEY_S1,1,0777);semid_s2=semget(SEMKEY_S2,1,0777);/*进入临界区*/P(semid_empty);/*对私有信号量作嗨作*/P(semid_mutex);/*对公有信号量作嗨作*/*二者顺序不能换*/in=(unsignedchar)(*p_buffer);intj=0;apple )&(*(p_buffer + in * FRUIT_LEN)!= orange);apple;)for(j=0;

14、j5;j+)if(*(p_buffer+in*FRUIT_LEN)!=printf(fatherputaapple!n*(p_buffer+in*FRUIT_LEN)=break;in=(in+1)%BUFF_LEN;shmdt(p_buffer);/*离开缓冲区*/*离开临界区*/V(semid_s1);V(semid_mutex);3.Mother.c/*下面的p,v是对系统调用的简单封装*/intP(intsemid)structsembufp_buf;p_buf.sem_num=0;p_buf.sem_op=-1;p_buf.sem_flg=0;if(semop(semid,&p_buf,1)=-1)/*semop参见课件ppt*/perror(p(semid)falsed);exit(1);elsereturn(0);intV(intsemid)structsembufv_buf;/*structsembuf参见课件ppt*/v_buf.s

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 市场营销

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号