《操作系统实验报告java.doc》由会员分享,可在线阅读,更多相关《操作系统实验报告java.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统实验报告院系: 专业: 班级: 学号: 姓名: 指导老师: 进程调度得模拟与内存管理一、 实验目得在采用多道程序设计得系统中,往往有若干个进程同时处于就绪状态。当就续进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器.实验模拟实现处理机调度,以加深了解处理机调度得工作,并体会优先级与时间片轮转调度算法得具体实施方法。帮助了解在不同得存储管理方式下,应怎样实现主存空间得分配与回收。二、实验要求 1、可随机输入若干进程,并按优先权排序; 、从就绪队首选进程运行:优先权-1/要求运行时间1 要求运行时间=0时,撤销该进程、重新排序,进行下轮调度。4、可随时增加进程;、规定
2、道数,设置后备队列与挂起状态。若内存中进程少于规定道数,可自动从后备队列调度一作业进入。被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。6、每次调度后,显示各进程状态。、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目内容:起址、长度、状态(未分/空表目) 、结合以上实验,PC增加为:PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置, CB指针 9、采用最先适应算法分配主存空间;10、进程完成后,回收主存,并与相邻空闲分区合并。11、采用图形界面;三、实验内容选择一个调度算法,实现处理机调度.、设计一个按优先权调度算法实现处理机调度得程序;2
3、、设计按时间片轮转实现处理机调度得程序。、主存储器空间得分配与回收.在可变分区管理方式下,采用最先适应算法实现主存空间得分配与回收。四、实验原理该模拟系统采用ava语言实现,要实现得功能有新建进程、进程调度、挂起进程、解挂进程、删除进程,道数与时间片大小可以由用户自己调整,有两种调度策略:按优先权调度与按时间片轮转调度。每个进程可能有种状态:新建(new)、就绪(ready)、运行(running)、阻塞(wating)、挂起(supend)。每个状态都有一个队列用来存放处于该状态得进程,不同得调度策略采用不同得队列实现。当创建进程时,如果内存中得进程数还没达到规定道数,则将新建进程插入就绪队
4、列,如果内存中进程数已经达到规定道数,则插到后备队列,后备队列中得进程得状态为n。CP每次调度时都从就绪队列中取进程,在进程执行过程中如果下一个操作时I操作,则将进程插入到aing队列。在系统运行过程中可以执行进程挂起操作,但执行得挂起操作时系统自动暂停运行,在弹出窗口选择要挂起得进程后,将选中得进程从原来得队列中删除并插入到挂起队列。进行解挂操作时将选中得进程从挂起队列中删除并插入该进程原来所处得队列。 按优先级调度: 当选择按优先权调度时,所有队列都采用优先队列,优先队列采用一个有序链表实现,进程得优先权值越大代表优先级越高,优先队列中得进程按优先权从大到小排列,当新进程插入时根据该进程得
5、优先权插入到队列中得合适位置,插入后保持队列按优先权从大到小排列,如果新进程与队列中某个进程优先权值相等,则该新进程插到那个进程后面,以遵循先来先服务得规则.当要从队列中取出进程时总就是取队列中第一个进程,因为该进程得优先级最高。 按时间片轮转调度:当选择按时间片轮转调度时,所有队列都采用先进先出队列,先进先出队列采用一个普通单向链表实现,当新进程插入时插入到队列得末尾,当要取进程时取队首进程,这样就实现了先进先出。 内存管理该实验基于实验一完成,核心就是内存得分配与回收,在实验一得基础上增加内存管理部分,在新建进程得时候增加一个输入内存大小得输入框,在进程进入内存时要分配内存,在进程销毁时要
6、回收内存,如果进入内存时内存不足,则将进程插入到后备队列等待下次调度。系统维护一个内存表,每个表项代表一个空间,每个空间保存了该空间得起始地址与空间大小以及空间使用状态。初始时只有一个空间,当CU启动时要分配内存,内存分配采用最先适应算法.回收内存时如果有相邻空闲空间,则要进行空闲空间合并。五、部分源程序public classda privetig nam; /进程得名字rivae in ie; /要求得时间总与ite in riori; /进程得优先权,值越大优先级越高iae trig state; /进程得状态privae nt start;prva intngth; /进程所占得内存空
7、间rivate int sIn; /进程所需内存大小 进程各项变量得初始化pblc vid setName(trgnme)thi、am na; public voi setrioity(in poity) thi、prirty = pririty; pubic vo setate(Strn tate)ths、stat= state; public String getName() retur (this、nam); bicint gePriorit() rur (this、priot); puic Sg ette() retn(ts、stae); blicvoid setTime(intime
8、) this、ti = tie; publi nt getTime() reurn(this、me); pubic vodtLnh(ntlenth) th、lengh = length; pulcint eten() reurn (this、legth); pblic voseStrt(intsa) ths、start = start; ublic intgtSart() reur (i、tart); puivoid sesn(iIn)his、iIn = sIn;pulc ntetsIn() tun (hi、isIn); 删除列表中第几个数据publ vid pt(ryiit, in um)
9、st、clar();f(t =0;i list、sie(); i+)if( ! num)st、ad(lis、et(i));list、clr();o(ini ;i sList、e();i+)list、add(sList、t(i); publicvoid upe1(rrLsData_Memorylist,int num) sLis、cla();for(t i = 0;ilist、ie();i+)if(i! um)is、add(list、gt(i);lis、lar();fr(i i ; = runnigLis、ge(0)、geLnth() runnigLt、ge(0)、stSart(nsinList
10、、get()、geBae(); runnngLis、gt(0)、setIsn(1); if(unAsignList、e()、tLmit() = runnngList、get(0)、getLength() update1(uAssgnList,i); lse nAsgnLis、gt(i)、setBas(unAssinLt、get(i)、Base()runnigt、ge(0)、getnth()); nAsign、(i)、setLim(AssLi、et(i)、tLiit()-rnngLit、t(0)、gtngt()); break; if(rayList、ie()0) fo(intj = 0; ra
11、dyist、sie(); +) (readst、ge(j)、gtIsIn()=0) for(nt i 0; i unssignLit、iz(); +) (nssignList、e(i)、geLimit() =adyLs、et(j)、gength() eayLis、ge(j)、seStar(unsinLit、ge(i)、gtase()); reayLis、get()、esI(1); (usgLis、(i)、gtLimit() = readyLi、et(j)、getLength()) upate1(AssigList,i); else unAsignit、get(i)、setBse(unAignL
12、it、et(i)、gtBase()+readyList、g()、getLegh(); unssignList、get(i)、setit(unAssigns、get(i)、etLi()edyLit、ge(j)、geLegth(); break; 移除内存pubic vod pOutMemy(ArrayListDa lst, it num) ist、gt(m)、etIIn(); boolean flag=ae; oleang2= e; for(t 0; i nssigLis、siz(); i+) if(unssnLi、get(i)、gtae() = (lst、get(num)、geLength()
13、+list、get(nu)、getSart()) unssignLis、get(i)、setBas(list、get(num)、getSart(); unAssigLit、get()、seimt(lis、t(nm)、getengt()+nAssgnList、gt(i)、getLimt());la1tue; brak; or(t = 0; nAssnLit、size(); i+) if(usignist、t(i)、geBase()+unsignList、get(i)、gLimit()) li、et(n)、getSat() i(!la1) uAssiLit、get(i)、setimit(list、
14、get(nm)、getLegth()unAsignLst、get()、tLimi(); g2 = u; ea; ese unsgnst、get(i)、etmit(nAssn、e(i)、getLimi()+nAssigLst、(i+1)、geLmit()); updat1(unssnLit,+1); if(flg1 | fag2) s nti = 0; whie(nAsignist、gt(i)、getBse()lis、get(nu)、getStart() i+; DataMemory ata ne Datemoy();dat、setae(lst、ge(um)、gettrt()); data、se
15、tLimit(li、get(num)、getLnt()); sLit、clear(); for(t j = ; j i;j+) sLit1、ad(unsigi、ge(j); sList、ad(at); for(it j = i; unAsignLit、size();j+) sList1、dd(unAssignist、e()); unsigns、ler(); o(nt = 0; j sLit1、ize(); j+) unssgList、a(it、get(j)); 对内存管理调度得操作prvate classMyRederr exteDefultLitCellRenrer pblic poen e
16、tLisCelRenderrpoent(Jist lit, Obe value,n nde,bolanisSelcted,booeancelHasFocs) sue、geListCelRedeert(list, alue,ex, sSeected,elHaFcus); setaground(Cl、gra);for(in i =; 0)if(rnningList、g(0)、gi()=)rnningList、clear();sLit、clear();for(int i = 0; ireadst、ize(); i+)(eadyLit、gt(i)、geTim()0)sLit、a(radyst、e(i)
17、);reayLst、clear();r(i i=0;i sLt、ize();)readList、add(sList、get(i));radyList、gt(i)、stState(read”);/从wiig队列加入新得进程int j= ;int =readyLi、s();fo(; m j waitingList、size(); m+,+)rayst、dd(watinLit、get(j));eadyLis、ge(m)、setStae(”ready);/srt(readyL);/调整atiListsLst、clar();fo(n i j; i0)runningist、ad(readyLst、get(
18、);runninLst、get()、setState(runnng”);upe(eayLst,);if(waitingLis、ze()0)eadyis、add(aitgList、e();eadyi、gt(5)、setSt(”ready);upate(aiingLst,0);lse/if(runingList、sze()0)if(readist、size()0)rat、ad(runngList、get(0);rnngist、r();reayst、get(0)、seSate(running”);ryList、et(eayList、si()-)、setSte(”edy);runningi、ad(re
19、adyLst、e(0);updae(radyLit,0);puInMory();sub();disl();tf1、grabFocus(); puic voianagr() if(rnnigLit、size()0) f(unningList、gt()、getT()=0) unningist、clar(); sist、clar(); fr(n i=; i reyLis、ze();i+) if(readyLt、g()、getTime()0) sList、d(readyLis、gt(i)); adLs、lear(); or(int =0; i ist、sie();i+) eadyLis、a(sist、
20、(i)); redyLis、get(i)、tSat(redy”); int j= 0; it m =readyLst、size(); f(; m 6& j 0) bolenflg = ale; in a =runingis、ge(0)、getPriorty(); int b =rayLst、t(gtFirst(eadList)-)、geririty(); i(a b) sLt、clear(); List、a(readyLst、gt(getirstW(readList)); fag = tu; f(lag) rninist、et()、setSat(red”); readit、add(runing
21、List、gt(0); rningLs、ler(); unnigis、ad(sist、get(0)); rnnList、gt(0)、sStae(”runnin); ate(readist,geirsW(radyList)-1); putnMemor(); sub1(); dsplay(); tf1、grFoc(); 六、程序运行图 图1 进程界面图2 新建进程图 进程得挂起与解挂图4、进程得删除图5进程运行中七、实验总结 为了完成这个程序,我参考了课本,互联网以及相关资料.由于我对java语言比较陌生,因此虽然这个试验比较简单,并且不就是我一人独立完成,但也花费了我大量时间.通过这个实验,我更
22、加形象得了解了进程得调度过程,加深了对于优先权调度与时间片轮转调度得理解,并不像从前一样仅仅停留在概念上。除此之外让我对jaa语言也有了进一步得了解。 由于实验要求就是将内存管理实验与以上实验结合起来,因此在做此试验时,将此实验得代码直接放在第一个实验得界面之上,因此此实验就大大减小了难度,做起来也会比较顺利。通过次实验,我对内存分配与内存回收有了更深刻得了解,我们平时用电脑时简单得一个动作对内存来说却要做出如此多得反应,找到一个空闲并且大小合适得空间进行内存分配。本次实验使我对内存分配得了解有了很大得帮助。在这次编程中我也出现了很多程序上得简单错误,都就是因为我动手写程序比较少造成得,这也让我了解到要多次锻炼才能顺手成章。以后我会努力加强锻炼,争取越来越好。