操作系統(tǒng)課程試驗報告_第1頁
操作系統(tǒng)課程試驗報告_第2頁
操作系統(tǒng)課程試驗報告_第3頁
操作系統(tǒng)課程試驗報告_第4頁
操作系統(tǒng)課程試驗報告_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、中南大學(xué)操作系統(tǒng)實驗報告姓名:孫福星專業(yè)班級:軟件1006班完成日期:進程調(diào)度與內(nèi)存管理一、實驗?zāi)康脑诓捎枚嗟莱绦蛟O(shè)計的系統(tǒng)中,往往有若干個進程同時處于就緒狀態(tài)。當就續(xù)進程個數(shù)大于處理器數(shù)時,就必須依照某種策略來決定哪些進程優(yōu)先占用處理器。實驗?zāi)M實現(xiàn)處理機調(diào)度,以加深了解處理機調(diào)度的工作,并體會優(yōu)先級和時間片輪轉(zhuǎn)調(diào)度算法的具體實施方法。幫助了解在不同的存儲管理方式下,應(yīng)怎樣實現(xiàn)主存空間的分配和回收。二、實驗要求1 、可隨機輸入若干進程,并按優(yōu)先權(quán)排序;2 、從就緒隊首選進程運行:優(yōu)先權(quán)-1/要求運彳T時間-1要求運彳T時間=0時,撤銷該進程3、重新排序,進行下輪調(diào)度。4、可隨時增加進程;5、

2、規(guī)定道數(shù),設(shè)置后備隊列和掛起狀態(tài)。若內(nèi)存中進程少于規(guī)定道數(shù),可自動從后備隊列調(diào)度一作業(yè)進入。被掛起進程入掛起隊列,設(shè)置解掛功能用于將指定掛起進程解掛入就緒隊列。6、每次調(diào)度后,顯示各進程狀態(tài)。7、自行假設(shè)主存空間大小,預(yù)設(shè)操作系統(tǒng)所占大小并構(gòu)造未分分區(qū)表;表目內(nèi)容:起址、長度、狀態(tài)(未分/空表目)8 、結(jié)合以上實驗,PCB增加為:PID,要求運行時間,優(yōu)先權(quán),狀態(tài),所需主存大小,主存起始位置,PCB旨針9 、采用最先適應(yīng)算法分配主存空間;10、進程完成后,回收主存,并與相鄰空閑分區(qū)合并。11、采用圖形界面;三、實驗內(nèi)容選擇一個調(diào)度算法,實現(xiàn)處理機調(diào)度。1、設(shè)計一個按優(yōu)先權(quán)調(diào)度算法實現(xiàn)處理機調(diào)度

3、的程序;2、設(shè)計按時間片輪轉(zhuǎn)實現(xiàn)處理機調(diào)度的程序。3、主存儲器空間的分配和回收。在可變分區(qū)管理方式下,采用最先適應(yīng)算法實現(xiàn)主存空間的分配和回收。四、實驗原理該模擬系統(tǒng)采用java語言實現(xiàn),要實現(xiàn)的功能有新建進程、進程調(diào)度、掛起進程、解掛進程、刪除進程,道數(shù)和時間片大小可以由用戶自己調(diào)整,有兩種調(diào)度策略:按優(yōu)先權(quán)調(diào)度和按時間片輪轉(zhuǎn)調(diào)度。每個進程可能有5種狀態(tài):新建(new)、就緒(ready)、運行(running)、阻塞(waiting)、掛起(suspend)。每個狀態(tài)都有一個隊列用來存放處于該狀態(tài)的進程,不同的調(diào)度策略采用不同的隊列實現(xiàn)。當創(chuàng)建進程時,如果內(nèi)存中的進程數(shù)還沒達到規(guī)定道數(shù),則

4、將新建進程插入就緒隊列,如果內(nèi)存中進程數(shù)已經(jīng)達到規(guī)定道數(shù),則插到后備隊列,后備隊列中的進程的狀態(tài)為new。CPU每次調(diào)度時都從就緒隊列中取進程,在進程執(zhí)行過程中如果下一個操作時IO操作,則將進程插入到waiting隊列。在系統(tǒng)運行過程中可以執(zhí)行進程掛起操作,但執(zhí)行的掛起操作時系統(tǒng)自動暫停運行,在彈出窗口選擇要掛起的進程后,將選中的進程從原來的隊列中刪除并插入到掛起隊列。進行解掛操作時將選中的進程從掛起隊列中刪除并插入該進程原來所處的隊列。按優(yōu)先級調(diào)度:當選擇按優(yōu)先權(quán)調(diào)度時,所有隊列都采用優(yōu)先隊列,優(yōu)先隊列采用一個有序鏈表實現(xiàn),進程的優(yōu)先權(quán)值越大代表優(yōu)先級越高,優(yōu)先隊列中的進程按優(yōu)先權(quán)從大到小排

5、列,當新進程插入時根據(jù)該進程的優(yōu)先權(quán)插入到隊列中的合適位置,插入后保持隊列按優(yōu)先權(quán)從大到小排列,如果新進程與隊列中某個進程優(yōu)先權(quán)值相等,則該新進程插到那個進程后面,以遵循先來先服務(wù)的規(guī)則。當要從隊列中取出進程時總是取隊列中第一個進程,因為該進程的優(yōu)先級最tWj。按時間片輪轉(zhuǎn)調(diào)度:當選擇按時間片輪轉(zhuǎn)調(diào)度時,所有隊列都采用先進先出隊列,先進先出隊列采用一個普通單向鏈表實現(xiàn),當新進程插入時插入到隊列的末尾,當要取進程時取隊首進程,這樣就實現(xiàn)了先進先出。內(nèi)存管理該實驗基于實驗一完成,核心是內(nèi)存的分配和回收,在實驗一的基礎(chǔ)上增加內(nèi)存管理部分,在新建進程的時候增加一個輸入內(nèi)存大小的輸入框,在進程進入內(nèi)存時

6、要分配內(nèi)存,在進程銷毀時要回收內(nèi)存,如果進入內(nèi)存時內(nèi)存不足,則將進程插入到后備隊列等待下次調(diào)度。系統(tǒng)維護一個內(nèi)存表,每個表項代表一個空間,每個空間保存了該空間的起始地址和空間大小以及空間使用狀態(tài)。初始時只有一個空間,當CPU啟動時要分配內(nèi)存,內(nèi)存分配采用最先適應(yīng)算法?;厥諆?nèi)存時如果有相鄰空閑空間,則要進行空閑空間合并。)五、源代碼及截圖: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("進程調(diào)度-ws");Containerc=();(null);etDivFlag(0);divDtoArray0.setDivFlag(1);divDtoArray0.setDivBase(20);divDtoArray0.setLength(180);readydata=newObject64;runningdata=newObject23;divdata=newObject203;allocdata=newObject203;Stringcol1

15、="進程","時間","優(yōu)先級","狀態(tài)"Stringcol2="進程","時間","優(yōu)先級"String口col3="起址","長度","狀態(tài)"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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論