资源描述:
《操作系统实验进程管理存储器管理设备管理实验代码报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验一进程管理—、目的木课题实验的目的是,加深对进程概念及进程管理各个部分内容的理解;熟悉进程管理中主耍数据结构的设计及进程调度算法,进程控制机构,同步机构,通信机构的实施。二、题目述程管理三、要求及提示1、要求设置PCB,进程控制原语,进程调度算法,能描述进程调度屮不同进程状态之间的转换,设计一个允许n个进程并发运行的进稈管理模拟系统。该系统包括有简单的进程控制,同步及通佶机构,其进程调度算法可任意选择。每个进程用一•个PCB表示,其内容可根据具体情况设置。各进程之间应有一定的同步关系。系统在运行过程屮能显示或打印各进程的状态及有关参数的变化
2、情况,以便观察诸进程的运行过程及系统的管理过程。2、编程实现。3、工具:C语言或其它高级语言4、实验时间:3学时四、实验报告1、写出进程管理的思想。2、画出算法流程图和设置的数据结构。3、写出调试程序出现的问题及解决的方法。仁打印实验报告及程序清单。5、报告给出测试的结果。五、范例支持多个进程并发运行的简单进程管理模拟系统。1、问题描述本系统的同步机构采用的是信号量上的P,V操作的机制;控制机构包扌舌阻塞和唤醒操作;时间片中断处理程序处理模拟的时间片中断;迓程调度程序负责为各进程分配处理机。系统中设计了3个并发述程。它们之间有如卜同步关系:3个
3、进程需要互斥使川临界资源s2,进程1和进程2乂需互斥使川临界资源slo本系统在运行过程屮随机打印出各进程的状态变换过程,系统的调度过程及公共变量的变化情况。2、算法系统为进程设置了5种运行状态:e—执行态;I-高就绪态;t—低就绪态(执行进程因时间片到限而转入);w—等待态;c—完成态。各进程的初始状态均设置为re系统分时执行各进程,并规定3个进程的执行概率均为33%。通过产生随机数x来模拟时间片。当进程process1访问随机数x时,若x30.33;当进程process2访问x时,若x<0.33或x20.66;当进程process3访问x时,
4、若xv0.66,分别认为各进程的执行时间片到限,产牛“时间片中断”而转入低就绪态4进程调度算法采用剥夺式最高优先数法。各进程的优先数通过键盘输入予以静态设置。调度程序每次总是选择优先数最小(优先权最高)的就绪进程投入执行。先从r状态进稈中选择,在从t状态进程中选择。当现行进程唤醒某个等待进程,口被唤醒进程的优先数小于现行进程吋,则剥夺现行进程的执行权。各进程在使用临界资源si和s2吋,通过调用信号量semi和sem2.上的P,V操作来实现同步,阻塞和唤解操作负责完成从进程的执行态到等待态到就绪态的转换。系统启动后,在完成必要的系统初始化后便执行
5、进程调度程序。但执行进程因“时间片中断”,或被排斥使用临界资源,或唤醒某个等待资源时,立即进行进程调度。当3个进程都处于完成状态后,系统退出运行。图1和图2分别示出了系统主控程序和进程调度程序的人致流程。图1进程管理卞控程用3、数据结构(1)每个进程有一个进程控制块PCB,内容包括:进程控制数,id=0,l,2;进程状态,可为e,r,t,w,c;进程优先数;idstatuspriorty图2进程调度程序^chpfiiilpr仃r态就¥NY绪进程?绪进程?YN有无执行进程?选取优先数最小pd恢复现行进行现场Nreturn(NIL)YYvexe优先
6、数?仃无执彳j•者exeHNIL)?pd优先数置exe进程状态为“广F=置pd进程状态为“尹恢复进程pd的现场cxc^-pd1return(exe)nexrtwr等待链指针,只是在同一信号量上等待的下一•个进程的标吋数。(2)信号量semaphore,对于临界资源si和s2分别有semi和sem2均为互斥信号量。内容包括:value信号量值,初值为1;fii-stwr等待链首指针,指示该信号量上等待的下一个进程标识数。(3)现场保留区,川数组savearea⑶[4]表示,即每一个进程都有一个人小为4个单元的保留区,川来保存被“屮断”时的现场信息
7、,如通川寄存器的内容和断点地址等。此外,系统中述用到下列主要全程变量:exe执行进程指针,其值为进程标识数;i用来模拟一个通川寄存器;addr用來模拟程序计数器;si,s2两个公用变量,与來共享临界资源。4、程序清单#include#defineTRUE1SdefineFALSE0#defineMAXPR1100#defineN1L-1struct{intid;charstatus;intnextwr;intpriority;}pcb[3];struct{intvalue;intfirstwr;}sem[2];charsave
8、area[3][4],addr;inti,si,s2,seed,exe=NTL;init()/*initialization*/{intj;for(j