ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:51.11KB ,
资源ID:13147840      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13147840.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(学生报告课名称操作系统项目名称进程管理模拟.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

学生报告课名称操作系统项目名称进程管理模拟.docx

1、学生报告课名称操作系统项目名称进程管理模拟 学生实验报告实 验 课 名 称: 操作系统 实验 项 目名称: 进程管理模拟系统 专 业 名 称: 计算机科学与技术 班 级: 24020504 学 号: 2402050416 学 生 姓 名: 张 朋 长 教 师 姓 名: 刘 晓 春 2008年06月11日一、 实验项目名称 进程管理模拟系统二、 实验内容设计一个允许n个进程并发运行的进程管理的模拟系统。该系统包括简单的进程控制(创建、阻塞、唤醒、调度)、同步及通信机构。分析系统所需的数据结构、算法的流程以及化分各个功能模块。并且能够编写相应的程序代码,对其进行测试,分析结果是否正确。三、 实验要

2、求要求学生熟悉进程概念及进程管理的各部分内容。要求学生明确进程管理中需要的数据结构、控制机构的基本原理。将分析程序结果写入“实验结果与分析”中,其中包括:程序的模块功能、程序的流程。将对进程管理的实现与概念的联系与体验写入“实验体会与评价”中。四、 实验原理 进程管理包括进程的控制、阻塞、唤醒与撤消。进程在运行过程中状态在不断的变化。进程运行过程中,因为竞争资源而需对它们进行同步控制。所有这些在操作系统中用数据结构PCB来记录,系统通过PCB控制进程的运行。在单处理机系统中,多道程序的引入,需要进程的调度程序来选择一个进程进行运行。比如常用的先来先服务、短进程 优和优先级优先等等,也可以选择它

3、们的结合调度算法。例子:支持多个进程并发运行的简单进程管理模拟系统。问题描述:本系统的同步机构采用的信号量上的P、V操作的机制;控制机构包括阻塞和唤醒操作;时间片中断处理程序处理模拟的时间片中断;进程调度程序负责为各进程分配处理机。系统中设计了3个并发进程它们之间有如下同步关系:3个进程需要互斥使用临界资源s2,进程1和进程2又需互斥使用临界资源s1。本系统在运行过程中随机打印出各进程的状态变换过程,系统的调度过程及公共交量的变化情况。算法:系统为进程设置了5种运行状态:e执行态;r高就绪态;t低就绪态(执行进程因时间片到限而转入):w等待态;c完成态。各进程的初始状态均设置为r。系统分时执行

4、各进程。通过产生随机数x来模拟时间片(每一个时间片并不相同)。当进程processl访问随机数x时,若x033;当进程proccss2访问x时,若x0.33或x0.66;当进程process3访问x时,若x0.66,则分别认为各进程的执行时间片到限,产生“时间片中断”面转入低就绪态t。进程调度算法采用剥夺式最高优先数法。各进程的优先数通过键盘输入予以静态设置。调度程序每次总是选择优先数最小(优先权最高)的就绪进程投入执行。先从r状态进程中选择,再从t状态进程中选择。当现行进程唤醒某个等待进程,且被唤醒进程的比先数小于现行进程时,则剥夺现行进程的执行权。各进程在使用临界资源s1和s2时,通过调用

5、信号量sem1和sem2上的P、V操作来实现同步。阻塞和唤醒操作负责完成从进程的执行态到等待态以及从就绪态的转变。系统启动后,在完成必要的系统初始化后便执行进程调度程序。当执行因“时间片中断”,或者被排斥使用临界资源,或唤醒某个等待进程时,立即进行进程调度。当3个进程都处于完成状态后,系统退出运行。数据结构:每个进程一个PCB,内容:id进程标识status 进程状态priority进程优先数nextwr等待队链指针,指示在同一信号量上等待的下一个进程的标识。信号量。对应于临界资源s1和s2分别有sem1和sem2,均为互斥号量,内容包括:value信号量值,初值为1firstwr等待链指针,

6、指示在该信号量上第一个等待进程的标识数。保留区。用数组saveaera34表示。即每个进程都有一个大小为4个单元的保留区,用来保存被“中断”时的现场信息,如通用寄存器的内容和断点地址等。全程变量。exe执行进程指针,其值为进程标识数i用来模拟一个通用寄存器。五、 实验流程 实验流程图如下页所示: 六、本次实验源程序#include #include #include #include #define TRUE 1 #define FALSE 0 #define MAXPRI 100 #define NIL -1 struct int id; char status; int nextwr; /

7、*等待链指针,指示在同一信号量上等待的下一个进行进程的标识符* int priority; pcb3; struct int value; int firstwr; /*等待链首指针,指示该信号量上第一个等待进程的标识数*/ sem2; char savearea34,addr; int i,s1=0,s2=0,seed,exe=NIL; void init( ) int j; for(j=0;j3;j+) pcbj.id=j; pcbj.status=r; pcbj.nextwr=NIL; coutnprocess j+1i; pcbj.priority=i; sem0.value=1; s

8、em0.firstwr=NIL; sem1.value=1; sem1.firstwr=NIL; for(i=0;i3;i+) for(j=0;j4;j+) saveareaij=0; double random() double m; srand(time(0); m=(1+rand()%3)%3-0.1; coutrandom m=mn; getchar(); return(m); timeint(char ad) /*time slice interupt*/ double x; x=random(); if(x0.33)&(exe=0)return(FALSE); if(x0.66)&

9、(exe=1)return(FALSE); if(x1.0)&(exe=2)return(FALSE); saveareaexe0=i; saveareaexe1=ad; pcbexe.status=t; coutThis times slice interrupt process exe+1 enter into readyn; exe=NIL; return(TRUE); find( ) int j,pd=NIL,w=MAXPRI; for(j=0;j3;j+) if(pcbj.status=r) if(pcbj.priorityw) w=pcbj.priority; pd=j; if (

10、pd=NIL) for(j=0;j3;j+) if(pcbj.status=t) if(pcbj.priorityw) w=pcbj.priority; pd=j; return(pd); scheduler( ) int pd; if(pd=find()=NIL&exe=NIL) return(NIL); /*quit system*/ if(pd!=NIL) if(exe=NIL) pcbpd.status=e; exe=pd; coutproccess exe+1 is executingn; else if(pcbpd.prioritypcbexe.priority) pcbexe.s

11、tatus=r; coutprocess exe+1 enter into readyn; pcbpd.status=e; exe=pd; coutprocess exe+1 is executingn; i=saveareaexe0; addr=saveareaexe1; return(exe); void block(int se) int w; coutprocess exe+1=0) return(FALSE); block(se); saveareaexe0=i; saveareaexe1=ad; exe=NIL; return(TRUE); void wakeup(int se)

12、int w; w=semse.firstwr; if(w!=NIL) semse.firstwr=pcbw.nextwr; pcbw.status=r; coutprocess w+10) return(FALSE); wakeup(se); saveareaexe1=ad; saveareaexe0=i; return(TRUE); void eexit(int n) pcbn.status=c; coutprocess n+1 is completed!n; exe=NIL; void process1() if(addr=a) goto a1; if(addr=b) goto b1; i

13、f(addr=c) goto c1; if(addr=d) goto d1; if(addr=e) goto e1; if(addr=f) goto f1; for(i=0; i3;i+)/*如果程序执行超过次,则*/ coutprocess1 calls P on the semaphore 1n; if(p(0,a) break; /*process 1 is blocked*/ a1: coutprocess1 is executing in the cretical section 1n; if(timeint(b) break; /*time silce interrupt*/ b1

14、: couts1=+s1endl; coutprocess1 calls V on semaphorel and quit cretical section 1.n; if(v(0,c) break; /*wake up a blocked process*/ c1: coutprocess1 calls P on semaphorel 2.n; if(p(1,d) break; d1: coutprocess1 is execting cretical section 2.n; if(timeint(e) break; e1: couts2=+s2endl; coutprocess1 cal

15、ls V on semaphore2 and quit cretical section2.n; if(v(1,f) break; /*wake up a block process*/ f1: coutprocess1 cycle count=iendl; if(i3) return; eexit(0); void process2() if(addr=a) goto a2; if(addr=b) goto b2; if(addr=c) goto c2; if(addr=d) goto d2; if(addr=e) goto e2; if(addr=f) goto f2; for(i=1;i

16、6;+i) coutprocess2 call P on semaphore2n; if(p(1,a) break; /*process2 is blocked*/ a2: coutprocess2 is executing on the cretical setion2n; if(timeint(b) break; b2: couts2=+s2endl; coutprocess2 is calls V on semaphore2 and quit cretical section2.n; if(v(1,c) break; /*wake up a blocked process*/ c2: c

17、outprocess2 call P on semphore 1.n; if(p(0,d) break; /*process2 is blocked*/ d2: coutprocess2 is executing cretical setion1n; if(timeint(e) break; e2: couts1=+s1endl; coutprocess2 call V on semaphorel and quit cretical setion2n; if(v(0,f) break; /*wkup up a block process*/ f2: coutprocess2 cycle cou

18、nt=in; if(i6) return; eexit(1); void process3() if(addr=a) goto a3; if(addr=b) goto b3; if(addr=c) goto c3; for(i=1;i6;+i) coutprocess3 call P on semaphore2n; if(p(1,a) break; /*process3 is blocked*/ a3: coutprocess3 is executing on its cretical section.n; if(timeint(b) break; b3: couts2=+s2; coutpr

19、ocess3 calls V on semaphore and quit cretical section.n; if(v(1,c) break; /*wake up a blocked process */ c3: coutprocess3 cyclen count=in; if(i6) return; eexit(2); void main() int j=0; int k; char m; cout* * * * process management * * * *nn; init(); couts1=s1ts2=s2endl; coutprocess1,process2,process

20、3 are all in ready!n; for(;) j=j+1; coutnj th Scheduler Press ENTER to continuen; getchar(); if(k=scheduler()!=NIL) switch(k) case 0: process1(); break; case 1: process2(); break; case 2: process3(); break; default: coutprocess identifer errorn; break; else break; couts1=s1ts2=s2n; coutn* * * * END

21、* * * *n; 七、实验体会与评价操作系统一定要引入进程的概念哪,主要从两个方面来看:从理论角度看,是对正在运行的程序过程的抽象;从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。本次试验主要是熟悉进程概念及进程管理的各部分内容,并明确进程管理中需要的数据结构、控制机构的基本原理。进程的同步机制包括互斥和同步。互斥是指一组并发进程中的两个或多个程序段,因共享某一公有资源而导致它们必须以一个不允许交叉执行的单位执行;同步指的是在异步环境下的一组并发进程,因直接制约而互相发送信号而进行互相合作、互相等待,使得各进程按一定的速度执

22、行的过程。而本实验是通过P、V原语来实现这种机制。进程状态分为就绪、等待、执行三个状态。进程从等待状态到运行状态,必须经过就绪状态,不能直接转换到运行状态;进程由运行状态变为等待状态一般是由运行进程自己主动提出的;进程由等待状态转变为就绪状态总是由外界事件引起的,而不是由该进程自己引起的。本次实验的进程管理机制过程是:先判断是否有时间片中断,否的话则跳过此状态的改变,进行下面的判断;有的话就将该进程的状态改为t,再从t状态进程中选择。当现行进程唤醒某个等待进程,且被唤醒进程的优先数小于现行进程时,则剥夺现行进程的执行权。然后通过PV操作实现对临界资源的使用,最后等三个进程都处于完成状态时,结束运行。通过为每个进程分配一个PCB,PCB中记录了操作系统所需的,用于描述进程当前状态以及进程控制运行的全部信息,然后通过产生随机数x来模拟时间片。接着利用从键盘输入的优先级顺序,每次选择优先数最小(优先权最高)的就绪进程投入执行。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2