




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学操作系统实验报告姓名:孙福星专业班级:软件1006班完成日期:进程调度与内存管理一、实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就续进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。实验模拟实现处理机调度,以加深了解处理机调度的工作,并体会优先级和时间片轮转调度算法的具体实施方法。帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。二、实验要求1 、可随机输入若干进程,并按优先权排序;2 、从就绪队首选进程运行:优先权-1/要求运彳T时间-1要求运彳T时间=0时,撤销该进程3、重新排序,进行下轮调度。4、可随时增加进程;5、
2、规定道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可自动从后备队列调度一作业进入。被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。6、每次调度后,显示各进程状态。7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;表目内容:起址、长度、状态(未分/空表目)8 、结合以上实验,PCB增加为:PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB旨针9 、采用最先适应算法分配主存空间;10、进程完成后,回收主存,并与相邻空闲分区合并。11、采用图形界面;三、实验内容选择一个调度算法,实现处理机调度。1、设计一个按优先权调度算法实现处理机调度
3、的程序;2、设计按时间片轮转实现处理机调度的程序。3、主存储器空间的分配和回收。在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。四、实验原理该模拟系统采用java语言实现,要实现的功能有新建进程、进程调度、挂起进程、解挂进程、删除进程,道数和时间片大小可以由用户自己调整,有两种调度策略:按优先权调度和按时间片轮转调度。每个进程可能有5种状态:新建(new)、就绪(ready)、运行(running)、阻塞(waiting)、挂起(suspend)。每个状态都有一个队列用来存放处于该状态的进程,不同的调度策略采用不同的队列实现。当创建进程时,如果内存中的进程数还没达到规定道数,则
4、将新建进程插入就绪队列,如果内存中进程数已经达到规定道数,则插到后备队列,后备队列中的进程的状态为new。CPU每次调度时都从就绪队列中取进程,在进程执行过程中如果下一个操作时IO操作,则将进程插入到waiting队列。在系统运行过程中可以执行进程挂起操作,但执行的挂起操作时系统自动暂停运行,在弹出窗口选择要挂起的进程后,将选中的进程从原来的队列中删除并插入到挂起队列。进行解挂操作时将选中的进程从挂起队列中删除并插入该进程原来所处的队列。按优先级调度:当选择按优先权调度时,所有队列都采用优先队列,优先队列采用一个有序链表实现,进程的优先权值越大代表优先级越高,优先队列中的进程按优先权从大到小排
5、列,当新进程插入时根据该进程的优先权插入到队列中的合适位置,插入后保持队列按优先权从大到小排列,如果新进程与队列中某个进程优先权值相等,则该新进程插到那个进程后面,以遵循先来先服务的规则。当要从队列中取出进程时总是取队列中第一个进程,因为该进程的优先级最tWj。按时间片轮转调度:当选择按时间片轮转调度时,所有队列都采用先进先出队列,先进先出队列采用一个普通单向链表实现,当新进程插入时插入到队列的末尾,当要取进程时取队首进程,这样就实现了先进先出。内存管理该实验基于实验一完成,核心是内存的分配和回收,在实验一的基础上增加内存管理部分,在新建进程的时候增加一个输入内存大小的输入框,在进程进入内存时
6、要分配内存,在进程销毁时要回收内存,如果进入内存时内存不足,则将进程插入到后备队列等待下次调度。系统维护一个内存表,每个表项代表一个空间,每个空间保存了该空间的起始地址和空间大小以及空间使用状态。初始时只有一个空间,当CPU启动时要分配内存,内存分配采用最先适应算法。回收内存时如果有相邻空闲空间,则要进行空闲空间合并。)五、源代码及截图:publicclassdivDTO(privateintdivBase;privateintlength;privateintdivFlag;publicdivDTO(intdivBase,intlength,intdivFlag)(=divBase;=div
7、Flag;=length;)publicdivDTO()()publicvoidsetDivBase(intbase)(=base;)publicintgetDivBase()(return;)publicvoidsetLength(intlength)(=length;publicintgetLength()(return;)publicvoidsetDivFlag(intflag)(=flag;)publicintgetDivFalg()(return;)publicclassPcbDTO(staticfinalintRunning=1staticfinalintReady=2;stati
8、cfinalintWaiting=3privateStringprocessName;privateintrunTime;privateintprority;privateintprocessState;privateintbase;privateintlimit;privateintpcbFlag;publicPcbDTO(Stringname,inttime,intpro,intbase,intlimit)(=name;=time;=pro;=0;=limit;=base;)publicPcbDTO()=0;publicvoidsetProcessName(Stringname)=name
9、;publicStringgetProcessName()(returnprocessName;)publicvoidsetRunTime(inttime)(=time;)publicintgetRunTime()(return;)publicvoidsetPrority(intprority)(=prority;)publicintgetPrority()(return;)publicvoidsetProcessState(intstate)(=state;)publicStringgetProcessState()(Strings=newString();if=1)(s="run
10、ning")elseif=2)(s="ready")elseif=3)(s="waiting")returns;publicintgetBase()(return;)publicvoidsetBase(intbase)(=base;)publicvoidsetLimit(intlimit)(=limit;)publicintgetLimit()(return;)3.import.*;import.*;import.*;importclassMainFrameprivateJListreadyList;privateJListwaitingLis
11、t;privateJListjobList;privateJButtonsusButton;privateJButtonrelaxButton;privateJButtonstartButton;privateJButtonnewButton;privateJLabelnameLabel;privateJLabelprorityLabel;privateJLabeltimeLabel;privateJLabeljobLabel;privateJLabelreadyLabel;privateJLabelwaitingLabel;privateJLabelrunningLabel;privateJ
12、LabelspaceLabel;privateJLabeldivLabel;privateJLabelallocLabel;privateJTablereadyTable;privateJTablerunningTable;privateJTabledivTable;privateJTableallocTable;privateJTextFieldnameText;privateJTextFieldtimeText;privateJTextFieldspaceText;privateJComboBoxprorityCom;privateJPanelnewPanel;privateJPanelw
13、aitingPanel;privateJPanelreadyPanel;VectorjobVectorName;VectorjobDtoVector;VectorwaitingVectorName;VectorwaitingDtoVector;PcbDTO口readyDtoArray;PcbDTOnewDtoArray;divDTOdivDtoArray;PcbDTOnewSort;Objectreadydata;Objectrunningdata;Objectdivdata;Objectallocdata;intfirst;intend;intpoint;PcbDTOa;publicMain
14、Frame()a=newPcbDTO();first=0;end=0;point=0;JFramejf=newJFrame("进程调度-ws");Containerc=();(null);etDivFlag(0);divDtoArray0.setDivFlag(1);divDtoArray0.setDivBase(20);divDtoArray0.setLength(180);readydata=newObject64;runningdata=newObject23;divdata=newObject203;allocdata=newObject203;Stringcol1
15、="进程","时间","优先级","状态"Stringcol2="进程","时间","优先级"String口col3="起址","长度","状态"String口col4="起址","长度","占用进程"readyTable=newJTable(readydata,col1);dd(runningTable);().add(readyTab
16、le);().add(divTable);().add(allocTable);etProcessState().equals("waiting")max=j;break;j=(j+1)%6;for(intj=first;j%6!=end;)if(!readyDtoArrayj.getProcessState().equals("waiting")if(readyDtoArrayj.getPrority()>readyDtoArraymax.getPrority()max=j;j=(j+1)%6;if(max>=0)a=readyDtoArr
17、aymax;readyDtoArraymax=readyDtoArrayfirst;readyDtoArrayfirst=a;(readyDtoArraymax.getProcessName(),max,0);(readyDtoArraymax.getRunTime(),max,1);(readyDtoArraymax.getPrority(),max,2);readyDtoArraymax.getProcessState(),max,3);("",first,0);("",first,1);("",first,2);("&
18、quot;,first,3);(),0,0);(),0,1);(),0,2);readyDtoArrayfirst.setRunTime(readyDtoArrayfirst.getRunTime()-1);if(0!=readyDtoArrayfirst.getPrority()readyDtoArrayfirst.setPrority(readyDtoArrayfirst.getPrority()-1);first=(first+1)%6;else"cpu等待中");else/* try(2000);catch(InterruptedException* e1)* /e
19、tBase()>=()newSorti=newSorti+1;point-;etBase(),i,0);allocTable.setValueAt(newSorti.getLimit(),i,1);(newSorti.getProcessName(),i,2);("",point,0);("",point,1);("",point,2);etDivFalg()=1)memoryEnd=divDtoArrayi.getDivBase()+divDtoArrayi.getLength();if(memoryEnd=()up=i;if
20、(divDtoArrayi.getDivBase()=()+a.getLimit()down=i;if(up>=0&&down>=0)divDtoArrayup.setLength(divDtoArrayup.getLength()+()+divDtoArraydown.getLength();divDtoArraydown.setDivFlag(0);for(inti=(down+1);i<20;i+)if(divDtoArrayi.getDivFalg()=1)divDtoArrayi-1.setDivBase(divDtoArrayi.getDivBas
21、e();divDtoArrayi-1.setDivFlag(1);divDtoArrayi-1.setLength(divDtoArrayi.getLength();divDtoArrayi.setDivFlag(0);else("",i-1,0);("",i-1,1);("",i-1,2);break;elseif(up>=0&&down<0)divDtoArrayup.setLength(divDtoArrayup.getLength()+();elseif(up<0&&down&
22、gt;=0)divDtoArraydown.setLength(divDtoArraydown.getLength()+();divDtoArraydown.setDivBase();elseif(up<0&&down<0)for(inti=0;i<20;i+)if(divDtoArrayi.getDivBase()>()|divDtoArrayi.getDivFalg()=0)location=i;break;)for(inti=20;i>location;i-)if(divDtoArrayi-1.getDivFalg()=1)divDtoArr
23、ayi.setDivBase(divDtoArrayi-1.getDivBase();divDtoArrayi.setDivFlag(1);divDtoArrayi.setLength(divDtoArrayi-1.getLength();)divDtoArraylocation.setDivBase();divDtoArraylocation.setDivFlag(1);divDtoArraylocation.setLength();)etDivFalg()=1)(String.valueOf(divDtoArrayi.getDivBase(),i,0);(String.valueOf(di
24、vDtoArrayi.getLength(),i,1);(String.valueOf(divDtoArrayi.getDivFalg(),i,2);)if(!()intrunLength=0;PcbDTOjobToReady=(PcbDTO)jobDtoVector.elementAt(0);for(inti=0;i<20;i+)if(divDtoArrayi.getDivFalg()=1)if(divDtoArrayi.getLength()>=jobToReady.getLimit()runAllocFlag=i;break;if(runAllocFlag>=0)(0)
25、;(jobVectorName.indexOf();(jobVectorName);(divDtoArrayrunAllocFlag.getDivBase();runLength=divDtoArrayrunAllocFlag.getLength()-();if(runLength=0)inti=runAllocFlag;divDtoArrayi.setDivFlag(0);for(;i<19;i+)if(divDtoArrayi+1.getDivFalg()=1)divDtoArrayi=divDtoArrayi+1;divDtoArrayi+1.setDivFlag(0);(Stri
26、ng.valueOf(divDtoArrayi.getDivBase(),i,0);(String.valueOf(divDtoArrayi.getLength(),i,1);(String.valueOf(divDtoArrayi.getDivFalg(),i,2);(String.valueOf(divDtoArrayi.getDivFalg(),i,2);elseif(runLength>0)intc2=divDtoArrayrunAllocFlag.getDivBase()+();divDtoArrayrunAllocFlag.setDivBase(c2);divDtoArray
27、runAllocFlag.setLength(runLength);(c2),runAllocFlag,0);(runLength),runAllocFlag,1);(String.valueOf(divDtoArrayrunAllocFlag.getDivFalg(),runAllocFlag,2);readyDtoArrayend=jobToReady;(),end,0);(),end,1);(),end,2);(),end,3);end=(end+1)%6;intruni=0;etBase()break;alueOf(newSorti.getBase(),i,0);(String.val
28、ueOf(newSorti.getLimit(),i,1);(newSorti.getProcessName(),i,2);rim().length()=0)(null,"进程名不能为空!");elseif().trim().length()=0)(null,"运行时间不能为空");elseif().trim().length()=0)(null,"空间不能为空");else();();Strings=().toString();(s);().trim();newDtoArraycount=test;(newDtoArraycount
29、);(newDtoArraycount.getProcessName();(jobVectorName);count+;("");("");("");PcbDTOb=(PcbDTO)(0);for(inti=0;i<20;i+)if(divDtoArrayi.getDivFalg()=1)if(divDtoArrayi.getLength()>=()newAllocFlag=i;break;etDivBase();newLength=divDtoArraynewAllocFlag.getLength()-();if(newLength=0)inti=newAllocFlag;d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 术前去除毛发原则中国专家共识(2025年)
- 食管及胃镜检查的意义与风险
- 对比分析CFA试题及答案选择
- 中暑急救知识培训
- 第五章 作业1 曲线运动-2025版高一物理必修二
- 高中宿舍安全教育主题班会
- 手工道具美术课件
- 2024年特许金融分析师全场景试题及答案
- 2025年中考地理复习:部份综合题答题模板
- 教学课件变现文案范文
- 【MOOC】针灸学-经络养生与康复-暨南大学 中国大学慕课MOOC答案
- haccp培训课件教学课件
- 股权质押合同合同模板
- 2024年电闸门安装工程合同范本
- 2024年度电子烟产品OEM定制与合作协议
- 【初中物理】密度(教学课件)-2024-2025学年人教版(2024)八年级物理上册
- 2020-2021学年湖北省鄂东南省级示范高中教育教学改革联盟学校高一下学期期中联考数学试题(解析版)
- 【多元化经营战略下的企业财务绩效探析:以海尔集团为例(论文)12000字】
- 解析:2024年北京高考数学真题(原卷版)
- 《Python程序设计基础教程(微课版)》全套教学课件
- 牧场物语-矿石镇的伙伴们-完全攻略
评论
0/150
提交评论