版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验报告
院系:________________________________
专业:________________________________
班级:________________________________
学号:_________________________________
姓名:_________________________________
指导老师:_____________________________
进程调度的模拟与内存管理
一、实验目的
在采用多道程序设计的系统中,往往有若干个进程同时处在就绪状态。当
就续进程个数大于解决器数时,就必须依照某种策略来决定哪些进程优先占用解
决器。实验模拟实现解决机调度,以加深了解解决机调度的工作,并体会优先级
和时间片轮转调度算法的具体实行方法。帮助了解在不同的存储管理方式下,应
如何实现主存空间的分派和回收。
二、实验规定
1、可随机输入若干进程,并按优先权排序;
2、从就绪队首选进程运营:优先权-1/规定运营时间-1
规定运营时间=0时,撤消该进程
3、重新排序,进行下轮调度。
4、可随时增长进程;
5、规定道数,设立后备队列和挂起状态。若内存中进程少于规定道数,可
自动从后备队列调度一作业进入。被挂起进程入挂起队列,设立解挂功
能用于将指定挂起进程解挂入就绪队列。
6、每次调度后,显示各进程状态。
7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;
表目内容:起址、长度、状态(未分/空表目)
8、结合以上实验,PCB增长为:
{PID,规定运营时间,优先权,状态,所需主存大小,主存起始位置,
PCB指针}
9、采用最先适应算法分派主存空间;
10、进程完毕后,回收主存,并与相邻空闲分区合并。
11、采用图形界面;
三、实验内容
选择一个调度算法,实现解决机调度。
1、设计一个按优先权调度算法实现解决机调度的程序;
2、设计准时间片轮转实现解决机调度的程序。
3、主存储器空间的分派和回收。在可变分区管理方式下,采用最先适应算
法实现主存空间的分派和回收。
四、实验原理
该模拟系统采用java语言实现,要实现的功能有新建进程、进程调度、挂
起进程、解挂进程、删除进程,道数和时间片大小可以由用户自己调整,有两种
调度策略:按优先权调度和准时间片轮转调度。每个进程也许有5种状态:新建(n
ew)、就绪(ready)、运营(running)、阻塞(waiting)^挂起(suspend)。
每个状态都有一个队列用来存放处在该状态的进程,不同的调度策略采用不同的
队列实现。当创建进程时,假如内存中的进程数还没达成规定道数,则将新建进程
插入就绪队列,假如内存中进程数已经达成规定道数,则插到后备队列,后备队
列中的进程的状态为new。CPU每次调度时都从就绪队列中取进程,在进程执
行过程中假如下一个操作时10操作,则将进程插入到waiting队列。在系统运
营过程中可以执行进程挂起操作,但执行的挂起操作时系统自动暂停运营,在弹出
窗口选择要挂起的进程后,将选中的进程从本来的队列中删除并插入到挂起队
列。进行解挂操作时将选中的进程从挂起队列中删除并插入该进程本来所处的队
列。
>按优先级调度:
当选择按优先权调度时,所有队列都采用优先队列,优先队列采用一个有序
链表实现,进程的优先权值越大代表优先级越高,优先队列中的进程按优先权从
大到小排列,当新进程插入时根据该进程的优先权插入到队列中的合适位置,插
入后保持队列按优先权从大到小排列,假如新进程与队列中某个进程优先权值相
等,则该新进程插到那个进程后面,以遵循先来先服务的规则。当要从队列中取
出进程时总是取队列中第一个进程,由于该进程的优先级最高。
>准时间片轮转调度:
当选择准时间片轮转调度时,所有队列都采用先进先出队列,先进先出队列
采用一个普通单向链表实现,当新进程插入时插入到队列的末尾,当要取进程时
取队首进程,这样就实现了先进先出。
>内存管理
该实验基于实验一完毕,核心是内存的分派和回收,在实验一的基础上增长内
存管理部分,在新建进程的时候增长一个输入内存大小的输入框,在进程进入内存
时要分派内存,在进程销毁时要回收内存,假如进入内存时内存局限性,则将进程
插入到后备队列等待下次调度。系统维护一个内存表,每个表项代表一个空间,
每个空间保存了该空间的起始地址和空间大小以及空间使用状态。初始时只有一
个空间,当CPU启动时要分派内存,内存分派采用最先适应算法。回收内存时假
如有相邻空闲空间,则要进行空闲空间合并。
五、部分源程序
publicclassdata{
privateStringname;//进程的名字
privateinttime;//规定的时间总和
privateintpriority;//进程的优先权,值越大优先级越高
privateStringstate;//进程的状态
oprivateintstart:
oprivateintlength;//进程所占的内存空间
oprivateintisin;//进程所需内存大小
>进程各项变量的初始化
publicvoidsetName(Stringname){
oothis.name=name;
0)
0
publievoidsetPriority(intpriority)
oothis.priority=priority;
o)
publicvoidsetState(Stringstate){
oothis.state=state;
)
publicStringgetName(){
oreturn(this,name);
)
publieintgetPriority(){
return(this.priority);
0)
opub1icStringgetState(){
oreturn(this.state);
)
publicvoidsetTime(inttime){
othis.time=time;
)
pub1icintgetTime(){
©return(this.time);
)
pub1icvoidsetLength(int1ength)
oothis.Iength=1ength;
o)
opublicintgetLength(){
©return(this.length);
)
0
opublicvoidsetStart(intstart){
oothis.start=start;
o)
publieintgetStart(){
return(this.start);
o)
opublievoidsetlsln(intisIn){
this.isln=isln;
0)
publicintgetIsIn(){
return(this.isln);
0)
>删除列表中第几个数据
publicvoidupdate(ArrayList<Data>list,intnum)
(
osList.c1ear();
ofor(inti=0:i<list.size();i++)
0{
o©if(i!=num)
00{
osList.add(1ist.get(i));
000}
00}
olist.c1ear();
o©for(inti=0;i<sList.size();i++)
0{
oolist.add(sList.get(i));
)
)
opublicvoidupdatel(ArrayList<Data_Memory>list,intnum)
0{
oosList1.clear();
ofor(inti=0;i<list.size();i++)
o(
if(inum)
。0sListl.add(list.get(i));
)
0)
olist.clear();
ofor(inti=0;i<sList1.size();i++)
{
©olist.add(sListl.get(i));
o)
)
>放入内存
publicvoidputinMemory()
0{
oif(runningList.size()>0)
0{
oif(runningList.get(0).getlsIn()==0)
000(
oofor(inti=0;i<unAssignList.size();i++)
0(
ooooif(unAssignList.get(i).getLimit()>=runningList.get(0).getLe
ngth())
0{
oooorunningList.get(0).setStart(unAssignList.get
(i).getBase());
ooooorunningList.get(0).setlsln(1);
oif(unAssignList.get(i).getLimit()==runningLis
t.get(O).getLength())
000(
ooooooupdatel(unAssignList,i);
o}
oooelse
00{
oooounAssignList.get(i).setBase(unAssignList,get(i).g
etBase()+runningList.get(0).getLength());
oooounAssignList.get(i).setLimit(unAssignList.get(i).g
etLimit()-runningList.get(0).getLength());
000)
ooobreak;
000)
00)
0)
00)
oif(readyList.size()>0)
0{
for(intj=0;j<readyList.size();j++)
00{
oooif(readyList.get(j).getIsin()==0)
00{
ooooofor(inti=0;i<unAssignList.size();i++)
000(
ooif(unAssignList.get(i).getLimit()>=readyLis
t.get(j).getLength())
oooareadyLiSt.get(j).setStart(unAssignList.g
et(i).getBase());
oQooreadyList.get(j).setIsln(1);
ooooif(unAssignList.get(i).getLimit()==readyLi
st.get(j).getLengthO)
000{
ooooooupdatel(unAssignListzi);
d00ooo)
oooooeIse
000(
oooounAssignList.get(i).setBase(unAssignList,g
et(i).getBase()+readyList.get(j).getLength());
ounAssignList.get(i).setLimit(unA
ssignList.get(i).getLimit()—readyList.get(j).getLength());
00000)
oobreak;
00)
0000)
000}
0)
0)
)
>移除内存
publicvoidputOutMemory(ArrayList<Data>list,intnum)
olist.get(num).setlsIn(0);
oobooleanf1ag1=false;
obooleanflag2=fa1se;
ofor(inti=0;i<unAssignList.size();i++)
0(
if(unAssignList.get(i).getBase()==(list.get(num).g
etLength()+list.get(num).getStart()))
(
ounAssignList.get(i).setBase(list.get(num).getStart());
oounAssignList.get(i).setLimit(list.get(num).getLengt
h()+unAssignList.get(i).getLimit());
oflag1=true;
ooobreak;
。)
o)
aofor(inti=0;i<unAssignList.size();i++)
0(
oif((unAssignList.get(i).getBase()+unAssignList.get(i).g
etLimit())==list.get(num).getStart())
00{
ooif(!flag1)
00{
©ounAssignList.get(i).setLimit(list,get(num).getLe
ngth()+unAssignList.get(i).getLimit());
oooflag2=true;
break;
000)
oe1se
000\
ooounAssignList.get(i).setLimit(unAssignList.get(i).ge
tLimit()+unAssignList.get(i+1).getLimit());
oooooupdatel(unAssignList,i+1);
o}
0}
0)
oif(flagl||flag2)
oo{}
e1se
00(
ooointi=0;
owhi1e(unAssignList.get(i).getBase()<1ist.get(num).g
etStart())
00(
ooi++;
00)
oData_Memorydata=newData_Memory();
data.setBase(list.get(num).getstart());
odata.setLimit(list.get(num).getLength());
osListl.c1ear();
ofor(intj=0;j<i;j++)
00{
oooosList1.add(unAssignList,get(j));
。}
osListl.add(data);
oaofor(intj=i;j<unAssignList.size();j++)
00{
oosList1.add(unAssignList.get(j));
O0}
ounAssignList.clear();
oofor(intj=0;j<sList1.size();j++)
0{
©ounAssignList,add(sListl.get(j));
o}
00
0o)
0
o)
>对内存管理调度的操作
privateclassMyRendererextendsDefau1tListCellRenderer
(
pub1icComponentgetListCellRendererComponent(JList
list,Objectvalue,intindex,booleanisSelected,b0olean
cellHasFocus)
0(
oosuper.getListCe11RendererComponent(1ist,va1ue
index,isSelected,ceHHasFocus);
oosetBackground(Co10r.gray);
for(inti=0;i<unAssignList.size();i++)
ofor(intj=unAssignList.get(i).getBase()+6;j<u
nAssignList.get(i).getLimit()+unAssignList.get(i).getBase()+6;
j++)
{
ooif(index==j)
0o(
ooooosetBackground(Color.white);//当没有内容变为白色
0000)
00)
。)
oreturnthis;
0)
0}
publievoidtimeManager()
(
o〃去掉time==0的,从waiting队歹力口入新的进程,排厅,调整waitingList力口
ArunningLIst
0
0〃去掉time==o的
ooif(runningList.size()>0)
oif(runningList.get(0).getTime()==0)
oo©runningList.clear();
osList.c1ear();
ofor(inti=0;i<readyList.size();i++)
o(
oif(readyList.get(i).getTime()>0)
00{
osList.add(readyList.get(i));
)
}
oreadyList.clear();
oofor(inti=0;i<sList.size();i++)
0(
readyList.add(sList.get(i));
readyList.get(i).setState(Hready”);
o)
o//从waiting队列加入新的进程
ointj=0;
intm=readyList.size();
oofor(;m<6&&j<waitingList.size();m++,j++)
00{
oooreadyList.add(waitingList.get(j));
oreadyList.get(m).setstate("readyH);
o)
ooo//sort(readyList);
o//调整waitingList
sList.clear();
ofor(inti=j;i<waitingList.size();i++)
0(
sList.add(waitingList.get(i));o
}
owaitingList.clear();
for(inti=0;i<sList.size();i++)
waitingList.add(sList.get(i));
0}
//力口入runningList
if(runningList.Size()==0)
(
oif(readyList.size()>0)
o(
orunningList.add(readyList.get(0));
orunningList.get(0).setstate("running11);
update(readyList,0);
oif(waitingList.size()>0)
o(
readyList.add(waitingList.get(0));
ooreadyList.get(5).setstate(”readyM);
00}
oooupdate(waitingListz0);
o)
0
)
e1se//if(runningList.size()>0)
ooif(readyList.size()>0)
oooreadyList.add(runningList.get(0));
orunningList.clear();
ooreadyList.get(0).setState("running");
oo©readyList.get(readyList.size()-1).setState(nready'*);
runningList.add(readyList.get(0));
oooupdate(readyListz0);
0)
0
)
putInMemory();
osub();
odisplay();
ojtf1,grabFocus();
o)
opublicvoidPManager()
00{
ooif(runningList.size()>0)
ooif(runningList.get(0).getTime()==0)
ooarunningList.clear();
osList.clear();
oofor(inti=0;i<readyList.size();i++)
0
ooif(readyList.get(i).getTime()>0)
ooosList.add(readyList.get(i));
0o}
000)
oreadyList.clear();
for(inti=0;i<sList.size();i4-+)
00{
oooreadyList.add(sList.get(i));
ooreadyList.get(i).setState(nreadyn);
000)
ointj=0;
intm=readyList.size();
o©for(;m<6&&j<waitingList,size();m++,j++)
000{
ooreadyList.add(waitingList.get(getFirstW(wa
itingList)-1));
Hn
ooreadyList.get(m).setState(ready);
oooupdate(waitingListzgetFirstW(waitingList)-1);
o}
00o//调整waitingList
0
oo//力口入runningL工st
o©if(runningList.size()==0)
00o{
if(readyList.size()>0)
00runningList.add(readyList.get(getFirstW(readyLi
st)-1));
oorunningList.get(0).setState(nrunning");
oooupdate(readyListzgetFirstW(readyList)-1);
oif(waitingList.size()>0)
00000{
oreadyList.add(waitingList.get(getFirstW
(waitingList)-1));
ooreadyList.get(readyList,size()-1).setState(n
readyn);
o)
oooupdate(waitingList,getFirstW(waitingList)-1);
000)
0)
ooe1S6
0(
ooif(readyList.size()>0)
o(
oobooleanflag=false;
oointa=runningList.get(0).getPriority();
ooointb=readyList.get(getFirstW(readyList)-1).ge
tPriority();
oif(a>b)
000{
ooosList.clear();
osList.add(readyList.get(getFirstW(readyLis
)-1));
ooflag=true;
00}
00
oooif(flag)
o(
oorunningList.get(0).setState("ready");
ooreadyList.add(runningList.get(0));
oorunningList.c1ear();
ooorunningList.add(sList.get(0));
oorunningList.get(0).setstate(Hrunningn);
ooupdate(readyListzgetFirstW(readyList)-1);
00)
)
0
o)
putInMemory();
osubl();
display();
ojtf1.grabFocus();
}
六、程序运营图
图1进程界面
BCPU调度及内存管理nx
进程名称:进程运行时间:内存状态;
0
1
迸程忧先皴:进程大小:2
3
4
StartPrioritystopStartTime5
6
7-
运行队列:后备以列:挂起队列:8
9
110
111
112
11仰3
I15
I16
I17
I18
I19
I20
I21
I22
I23
I24
I25
I26
I27
I28
I29
I30
I31
I32
I33
挂起waiting进程▼解挂结束waiting进程▼I34
I35
I346
图2新建进程
BCPU调度及内存管理i|n
进程名称:迸程运行时间:
迸程优先级:迸程大小:
StartPrioritystopStartTimestop
运行队列:挂起队列:
名称|ME…|时间|优先|起始|大小K日优先起始大小
无…
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中历史教资面试近代史结构化题库
- 环保风险隐患排查治理制度
- 2026年大连市烟草专卖局人员招聘考试参考试题及答案详解
- 2026年中国烟草总公司河北省公司人员招聘考试参考试题及答案详解
- 2026年中国石油兰州石化分公司人员招聘考试备考题库及答案详解
- 2026年其他乳制品制造行业政策研究报告及未来五至十年专精特新与隐形冠军
- 2026年化学农药制造行业产业链安全评估报告及未来五至十年品牌溢价与忠诚度管理
- 2026年交通及公共管理用金属标牌制造行业发展研究报告及未来五至十年资本热度与投融资趋势
- 2026年国家能源集团广东公司人员招聘考试参考试题及答案详解
- 2026年中国石化销售有限公司北京石油分公司人员招聘考试备考题库及答案详解
- T/GDCA 034-2023化妆品用原料 红茶发酵产物
- 2026年全国行政执法人员执法资格考试必考题库与答案
- 2025年中国干粉砂浆市场调查研究报告
- 重庆数字资源集团招聘考试真题2025
- 城镇土地使用税房产税纳税申报表
- T∕CPCPA 0017-2026 托育机构婴幼儿回应性照护服务规范
- 2026云南保山电力股份有限公司校园招聘50人备考题库及参考答案详解1套
- 2025-2026学年苏教版(2024)小学科学一年级上册期末综合测试卷及答案
- 施工单位商务汇报体系
- Python程序设计基础及实践(慕课版 第2版)课件 郭炜 1. Python初探 -7. 组合数据类型(3)字典和集合
- 15189认可培训课件
评论
0/150
提交评论