版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE1操作系统课程设计说明书
学院、系:软件学院专业软件工程设计题目:基于Linux的实现进程的信号量互斥申请1.需求分析我们的题目是:基于linux的进程同步与模拟实验,首先,我们将系统分为三个大得模块:进程操作模块,生产者消费者模块,银行家算法模拟模块。对于进程操作模块,我们要手动的创建几个进程,并且输入其运行时间,这些都是在终端下完成,通过一定的算法,在屏幕上输出,进程的相关信息,比如名称、执行时间和等待时间等。对于生产者消费者模块,我们要创建几个生产者、几个消费者,通过linux中的信号量sem_t创建三个信号量:empty(表示空缓冲区的信号量)full(表示满缓冲区的信号量)mutex(互斥信号量,控制在同一时刻只能有一个进程访问缓冲区)对于银行家算法的模拟,我们通过设计:资源向量:Available(代表资源的空闲个数)最大需求矩阵Max(这是个n*m的矩阵,表示一个进程对各类资源的最大需求个数)分配矩阵Allocation(这是个n*m的矩阵,表示各类资源已经分配给进程的个数)需求矩阵Need(这是个n*m的矩阵,它定义里系统中各个进程还需要的资源个数)设计思路:如果Request[i]<=Need[i]则转向(2),否则不能分配;如果Request[i]<=Available[i]则转向(3),否则不能分配;进行安全行检查,如果安全则分配,否则转向(1).2.总体设计(1)系统共分三大模块:进程操作模块银行家算法模块生产者消费者模块(2)系统的总设计框图如下:linux课程设计 linux课程设计生产者消费者退出系统银行家算法进程操作生产者消费者退出系统银行家算法进程操作创建进程显示缓冲区创建消费者创建生产者输出安全序列安全性检查显示进程信息输入请求资源创建进程显示缓冲区创建消费者创建生产者输出安全序列安全性检查显示进程信息输入请求资源(3)模块说明:(1)进程操作模块:创建进程手动创建进程,输入进程id和运行时间输出函数在终端显示进程运行的相关信息,运行时间、及等待时间时间轮转函数根据随机产生的优先权,分别运行和阻塞进程(2)银行家算法模块输入请求进程及资源手动输入进程id及请求的资源数目。安全检查函数对请求的资源进行安全性检查,如果不安全,则返回错误Request函数对请求的资源进行检查,如果符合系统要求,则进行安全性检查输出函数如果安全则输出安全序列,(3)生产者消费者创建生产者手动的输入生产者的个数和名字创建消费者手动的输入消费者的个数和名字输出缓冲区信息动态的显示缓冲区中生产的产品生产和消费产品生产者生产一个产品,当离开缓冲区的时候,消费者消费一个产品3.详细设计//标题输出函数voidprint1(){ printf("\n"); printf("pidnamestatustypepriorestotalTimecountrunTime\n");}//进程PCB的输出voidprint2(PCB*q){ printf("%d|%-4s|%-4d|%-6d|%-4d|%-4d|%-8d|%-5d|%-d\n", q->pid,q->name,q->status,q->type,q->prio,q->res,q->totalTime,q->count,q->runTime);}//输出函数voidprint(){ PCB*p; if(run!=NULL) //如果运行指针不空 { printf("Running\n"); print2(run);//输出当前正在运行的PCB } p=ready;//输出就绪队列的PCB if(p!=NULL)printf("Ready\n"); while(p!=NULL) { print2(p); p=p->next;} p=wait;//输出等待队列的PCB if(p!=NULL)printf("Waiting\n"); while(p!=NULL) { print2(p); p=p->next; } p=finish;//输出完成队列的PCB if(p!=NULL) printf("Finished\n"); while(p!=NULL) { print2(p); p=p->next; } print1();}insertReady(PCB*p2)//插入就绪队列函数{ tail->next=p2; tail=p2; p2->next=NULL;}insertWait(PCB*p2)//插入等待队列函数{ head->next=p2; head=p2; p2->next=NULL;}voidcreat(){ PCB*p; inti,time; charna[10]; ready=NULL; //就绪队列头指针 finish=NULL; //完成队列头指针 run=NULL; //运行队列指针 wait=NULL; //等待队列头指针 printf("Enternameandruntimeofeachprocess(eg.pid1[pressENTER]100:\n"); for(i=1;1<=N;i++) { p=malloc(sizeof(PCB)); p->pid=1000+i; scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->status=2;//进程状态初始为就绪状态 if(i%2==0){ p->type=0;//系统进程 p->prio=randomPrio(1.0,9.0); }else{ p->type=1; p->prio=randomPrio(11.0,19.0); } p->res=time/2; p->totalTime=time; p->count=0; p->runTime=0; if(ready!=NULL) insertReady(p); else{ p->next=ready; ready=p; tail=p; } } printf("************调度开始*************"); print1(); print(); run=ready; ready=ready->next; run->status=1;}4.心得体会在代码的编辑方面,我寻求了一些帮助。从教材上找了一篇相似的代码作为模版,在其基础上,按照题目的要求做出了修改与改动,最终完成了我所负责的部分。我负责的部分是对程序进程的添加的代码编辑。以前有C的基础,所以这次编码比较顺手,但是也遗忘了些东西,遗忘的知识点通过复习总结出来,最终编码成功。虽然编辑过程比较顺利,但是在几个人整合代码的时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院社会服务项目总结
- 慢性病管理中的心理干预研究
- 2026年阿勒泰职业技术学院单招综合素质考试参考题库带答案解析
- 中医护理理论及应用研究
- 医疗产业投资与风险控制
- 2026年成都工业职业技术学院单招综合素质笔试备考试题带答案解析
- 2026年阜阳幼儿师范高等专科学校单招综合素质考试备考题库带答案解析
- 2026年台州职业技术学院单招综合素质考试模拟试题附答案详解
- 心脏起搏器技术发展与临床应用
- 药物研发中的临床试验优化
- 劳动教育读本(中职版)专题六教学设计1学习资料
- 精神科住院病人的情绪管理
- DB375026-2022《居住建筑节能设计标准》
- 传感器与测试技术课程设计
- 社会实践-形考任务四-国开(CQ)-参考资料
- 2024年贵州贵安发展集团有限公司招聘笔试参考题库附带答案详解
- GB/T 43824-2024村镇供水工程技术规范
- DB3402-T 57-2023 医院物业服务规范
- 腰椎间盘突出患者术后护理课件
- 医院护理培训课件:《高压氧临床的适应症》
- 固定修复基础理论-固位原理(口腔固定修复工艺课件)
评论
0/150
提交评论