操作系統(tǒng)課程設(shè)計(jì)報(bào)告多道批處理調(diào)度的模擬_第1頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告多道批處理調(diào)度的模擬_第2頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告多道批處理調(diào)度的模擬_第3頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告多道批處理調(diào)度的模擬_第4頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告多道批處理調(diào)度的模擬_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課 程 設(shè) 計(jì) 課程名稱 操作系統(tǒng) _ 題目名稱 多道批處理調(diào)度的模擬學(xué)生學(xué)院 計(jì)算機(jī)學(xué)院 專業(yè)班級 2007 級計(jì)科(5)班 2010年 07月 03日廣東工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書一、課程設(shè)計(jì)的內(nèi)容本課程設(shè)計(jì)要求模擬實(shí)現(xiàn)一個(gè)的多道批處理系統(tǒng)的兩級調(diào)度。通過具體的作業(yè)調(diào)度、進(jìn)程調(diào)度、內(nèi)存分配等功能的實(shí)現(xiàn),加深對多道批處理系統(tǒng)的兩級調(diào)度模型和實(shí)現(xiàn)過程的理解。 二、課程設(shè)計(jì)的要求與數(shù)據(jù)1 要求作業(yè)從進(jìn)入系統(tǒng)到最后完成,要經(jīng)歷兩級調(diào)度:作業(yè)調(diào)度和進(jìn)程調(diào)度。作業(yè)調(diào)度是高級調(diào)度,它的主要功能是根據(jù)一定的算法,從輸入井中選中若干個(gè)作業(yè),分配必要的資源,如主存、外設(shè)等,為它們建立初始狀態(tài)為就緒的作業(yè)進(jìn)程。進(jìn)程

2、調(diào)度是低級調(diào)度,它的主要功能是根據(jù)一定的算法將cpu分派給就緒隊(duì)列中的一個(gè)進(jìn)程。2 假定某系統(tǒng)可供用戶使用的主存空間共100kb,并有4臺磁帶機(jī)。主存分配采用可變分區(qū)分配方式且主存中信息不允許移動,對磁帶機(jī)采用靜態(tài)分配策略,作業(yè)調(diào)度分別采用先來先服務(wù)算法和最小作業(yè)優(yōu)先算法,進(jìn)程調(diào)度采用先來先服務(wù)和最短進(jìn)程優(yōu)先算法。(能增加實(shí)現(xiàn)更多的調(diào)度算法則可以獲得加分)。3 假定“預(yù)輸入”程序已經(jīng)把一批作業(yè)的信息存放在輸入井了,并為它們建立了相應(yīng)作業(yè)表。測試數(shù)據(jù)如下:作業(yè) 到達(dá)時(shí)間 估計(jì)運(yùn)行時(shí)間 內(nèi)存需要 磁帶機(jī)需要job1 10:00 25分鐘 15k 2臺job2 10:20 30分鐘 60k 1臺jo

3、b3 10:30 10分鐘 50k 3臺job4 10:35 20分鐘 10k 2臺job5 10:40 15分鐘 30k 2臺4 分別在不同算法控制下運(yùn)行設(shè)計(jì)的程序,依次顯示被選中作業(yè)、內(nèi)存空閑區(qū)和磁帶機(jī)的情況。比較不同算法作業(yè)的選中次序及作業(yè)平均周轉(zhuǎn)時(shí)間。5 選用程序設(shè)計(jì)語言:c、c等。三、課程設(shè)計(jì)應(yīng)完成的工作1充分理解設(shè)計(jì)的任務(wù),完成設(shè)計(jì)的基本要求。然后根據(jù)自己的基礎(chǔ)和能力選擇不同難度的算法和實(shí)現(xiàn)方式,以取得更高的分?jǐn)?shù)。 2. 獨(dú)立完成系統(tǒng)的分析、設(shè)計(jì)、編碼、測試工作。3完成設(shè)計(jì)報(bào)告的撰寫。4以光盤(以班為單位刻錄)方式提交已調(diào)試通過的完整的相關(guān)源程序和能夠運(yùn)行的執(zhí)行文件;提交“課程設(shè)計(jì)

4、報(bào)告”的書面和電子兩種版本。四、課程設(shè)計(jì)進(jìn)程安排序號設(shè)計(jì)各階段內(nèi)容地點(diǎn)起止日期1查閱資料、分析題目、概要設(shè)計(jì)分散周一2詳細(xì)設(shè)計(jì)、編碼分散周二3調(diào)試實(shí)驗(yàn)室周三4撰寫設(shè)計(jì)報(bào)告分散周四5運(yùn)行、驗(yàn)收實(shí)驗(yàn)室周五五、應(yīng)收集的資料及主要參考文獻(xiàn)1 計(jì)算機(jī)操作系統(tǒng), 湯小丹等 ,西安電子科技大學(xué)出版社2 操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書,傅秀芬,廣東工業(yè)大學(xué)(自編)3 計(jì)算機(jī)操作系統(tǒng)教程 ( 第二版 ), 張堯?qū)W、 史美林,清華大學(xué)出版社4 現(xiàn)代操作系統(tǒng),a.s.tanenbaum 著,陳向群等譯機(jī)械工業(yè)出版社發(fā)出任務(wù)書日期:2010年6月27日 指導(dǎo)教師簽名:林穗計(jì)劃完成日期: 2010年7月3日 基層教學(xué)單位責(zé)任人簽章

5、:傅秀芬一 設(shè)計(jì)背景本次課程設(shè)計(jì)的目的是模擬實(shí)現(xiàn)一個(gè)多道批處理系統(tǒng)的兩級調(diào)度。在這之前,我們的操作系統(tǒng)課程已經(jīng)做過了四次實(shí)驗(yàn),分別是進(jìn)程調(diào)度,作業(yè)調(diào)度,主存空間的分配和回收,文件系統(tǒng)。而此次多道批處理系統(tǒng)的兩級調(diào)度將在采用前三次實(shí)驗(yàn)(即進(jìn)程調(diào)度,作業(yè)調(diào)度,主存空間的分配和回收)成果的基礎(chǔ)上,對他們進(jìn)行整合,完成一個(gè)完整的模擬多道批處理系統(tǒng)兩級調(diào)度的系統(tǒng)程序。本課程設(shè)計(jì)將按要求規(guī)定的步驟進(jìn)行:設(shè)計(jì)背景(查詢資料和分析題目),概要設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼,調(diào)試和測試,總結(jié)和撰寫報(bào)告。二 概要設(shè)計(jì)1.要求作業(yè)從進(jìn)入系統(tǒng)到最后完成,要經(jīng)歷兩級調(diào)度:作業(yè)調(diào)度和進(jìn)程調(diào)度。作業(yè)調(diào)度是高級調(diào)度,它的主要功能是根據(jù)

6、一定的算法,從輸入井中選中若干個(gè)作業(yè),分配必要的資源,如主存、外設(shè)等,為它們建立初始狀態(tài)為就緒的作業(yè)進(jìn)程。進(jìn)程調(diào)度是低級調(diào)度,它的主要功能是根據(jù)一定的算法將cpu分派給就緒隊(duì)列中的一個(gè)進(jìn)程。2假定“預(yù)輸入”程序已經(jīng)把一批作業(yè)的信息存放在輸入井了,并為它們建立了相應(yīng)作業(yè)表。測試數(shù)據(jù)如下:作業(yè) 到達(dá)時(shí)間 估計(jì)運(yùn)行時(shí)間 內(nèi)存需要 磁帶機(jī)需要job1 10:00 25分鐘 15k 2臺job2 10:20 30分鐘 60k 1臺job3 10:30 10分鐘 50k 3臺job4 10:35 20分鐘 10k 2臺job5 10:40 15分鐘 30k 2臺3使用visual c+設(shè)計(jì)如下各功能界面。

7、放在輸入井的作業(yè)列表:內(nèi)存分配的情況:已經(jīng)進(jìn)入內(nèi)存并存在的作業(yè):已經(jīng)完成的作業(yè)列表:程序設(shè)置區(qū):包括開始時(shí)間,磁帶機(jī)和內(nèi)存初始值,調(diào)度算法的選擇作業(yè)添加區(qū),可以輸入作業(yè)及它的各個(gè)參數(shù)。程序運(yùn)行狀態(tài)區(qū)。如開始,暫停,繼續(xù)和重置等個(gè)人信息的顯示:三 詳細(xì)設(shè)計(jì)。1 相關(guān)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。typedef struct job/建立作業(yè)信息結(jié)構(gòu)char jname10; /作業(yè)名int hour; /到達(dá)時(shí)刻時(shí)鐘數(shù)int minute; /到達(dá)時(shí)刻分鐘數(shù)int run; /運(yùn)行時(shí)間int memory; /要求主存空間int sign; /所要磁帶機(jī)數(shù)int fhour; /完成時(shí)刻時(shí)鐘數(shù)int fmin

8、ute; /完成時(shí)刻分鐘數(shù)int enterhour;/進(jìn)入內(nèi)存時(shí)時(shí)刻時(shí)鐘數(shù)int enterminute;/進(jìn)入內(nèi)存時(shí)刻分鐘數(shù)bool done;/記錄是否作業(yè)已完成,完成true,否則falsejob,job;typedef struct jcb/作業(yè)信息結(jié)構(gòu)intnu/記錄作業(yè)位于主存分區(qū)表的分區(qū)號char name10;/作業(yè)名int rtime;/運(yùn)行時(shí)間int memory;/申請主存空間jcb,jcb;typedef struct spart/分區(qū)表信息結(jié)構(gòu)int num;/分區(qū)序號int sadd;/分區(qū)始址int space;/分區(qū)大小char situ10;/分區(qū)狀態(tài)spa

9、rt,spart;typedef struct pcb /* 定義進(jìn)程控制塊pcb */ char name10; / 進(jìn)程名 int ntime; / 所需要的運(yùn)行時(shí)間 int stime; /剩余時(shí)間pcb,pcb;typedef struct qbnode pcb base; struct qbnode *next;qbnode,*qcb;typedef struct int tip; / 就緒隊(duì)列時(shí)間片 int num; / 就緒隊(duì)列成員數(shù) qcb front; / 隊(duì)頭指針 qcb rear; / 隊(duì)尾指針 queuejob jwork5=/定義五個(gè)作業(yè)joba,10, 0,25,1

10、5,2,0,0,0,0,false,jobb,10,20,30,60,1,0,0,0,0,false,jobc,10,30,10,50,3,0,0,0,0,false,jobd,10,35,20,10,2,0,0,0,0,false,jobe,10,40,15,30,2,0,0,0,0,false;int disk=4;/磁帶機(jī)數(shù)5int memory=100;/系統(tǒng)可用主存100kbint hour=9;/系統(tǒng)時(shí)間int minute=55;/9:55vector jexe;/主存作業(yè)隊(duì)列vector jwait; /后備作業(yè)隊(duì)列vector jdone;/完成作業(yè)隊(duì)列vector jdis

11、k;/輸入井作業(yè)隊(duì)列vectorqjcb;/作業(yè)隊(duì)列vectorqproce;/位于主存的作業(yè)隊(duì)列vectorqpart;/分區(qū)表狀態(tài)隊(duì)列vectorqfree;/空閑分區(qū)表項(xiàng)vectorpronum;/完成作業(yè)的主存分區(qū)號vector:iterator pnext;/記錄空閑分區(qū)表分配主存后下一個(gè)空閑位置intsystime = 0;/系統(tǒng)時(shí)間,初始化為0intsysmemory = 100;/主存空間100kbintpnadr = -1;/記錄pnext所要指向的分區(qū)始址,-1表示無空閑分區(qū)float progressflag = 0;/進(jìn)度條標(biāo)志位status initqueue(que

12、ue &q)/* 構(gòu)造空隊(duì)列q */ q.front=(qcb)malloc(sizeof(qbnode); q.rear=q.front; if(!q.front)return -2;q.num=0;q.tip=0; q.front-next=null; return 1;status enqueue(queue &q,pcb &e)/* 插入元素e為q的新的隊(duì)尾元素 */ qcb p; p=(qcb)malloc(sizeof(qbnode); if(!p)return -2; p-base=e; p-next=null; q.rear-next=p;q.rear=p; return 1;

13、status dequeue(queue &q,pcb &e)/* 若隊(duì)列非空,則刪除q的隊(duì)頭元素,用e返回其值 */ qcb p; if(q.front=q.rear)return 0;/* 空隊(duì)列 */ p=q.front-next; e=p-base; q.front-next=p-next; if(q.rear=p)q.rear=q.front; p-next=null; free(p); return 1;status emptyqueue(queue &q)/判斷q是否為空隊(duì)列,是返回1,否返回0if(q.front-next=null)return 1;elsereturn 0;

14、queue al;/進(jìn)程隊(duì)列2主存空間分配和回收的設(shè)計(jì):循環(huán)首次適應(yīng)法。使用鏈指針把所有的空閑分區(qū)鏈成一條鏈,為了實(shí)現(xiàn)對空閑分區(qū)的分配和鏈接,在每個(gè)分區(qū)的起始部分設(shè)置狀態(tài)位、分區(qū)的大小和鏈接各個(gè)分區(qū)的前向指針,由狀態(tài)位指示該分區(qū)是否分配出去了;同時(shí),在分區(qū)尾部還設(shè)置有一后向指針,用來鏈接后面一個(gè)分區(qū);分區(qū)的中間部分是用來存放作業(yè)的空閑內(nèi)存空間,當(dāng)該分區(qū)分配出去后,狀態(tài)位改變。設(shè)計(jì)一個(gè)內(nèi)存空閑分鏈,內(nèi)存空閑分區(qū)通過空閑分區(qū)鏈來管理,在進(jìn)行內(nèi)存分配時(shí)系統(tǒng)統(tǒng)優(yōu)先使用空閑區(qū)低端的空間。設(shè)計(jì)一個(gè)空閑分區(qū)說明鏈,設(shè)計(jì)一個(gè)某時(shí)刻主存空間占用情況表,作為主存當(dāng)前使用基礎(chǔ)。初始化空閑區(qū)和已分配區(qū)說明表的值。設(shè)計(jì)

15、作業(yè)申請隊(duì)列以及作業(yè)完成后的釋放順序,實(shí)現(xiàn)主存的分配和回收。當(dāng)一個(gè)作業(yè)執(zhí)行完成撤離時(shí),作業(yè)所占的分區(qū)應(yīng)該歸還給系統(tǒng)。歸還的分區(qū)如果與其它空閑區(qū)相鄰,則應(yīng)合成一個(gè)較大的空閑區(qū),登記在空閑區(qū)說明表中。此時(shí),相鄰空閑區(qū)的合并問題,要求考慮四種情況:1)、釋放區(qū)下鄰空閑區(qū)(低地址鄰接)2)、釋放區(qū)上鄰空閑區(qū)(高地址鄰接)3)、釋放區(qū)上下都與空閑區(qū)鄰接4)、釋放區(qū)上下都與空閑區(qū)不鄰接3作業(yè)調(diào)度算法:先來先服務(wù)和短作業(yè)優(yōu)先。(1)先來先服務(wù)算法:是按照作業(yè)進(jìn)入輸入井的先后次序來挑選作業(yè),先進(jìn)入輸入井的作業(yè)優(yōu)先被挑選,當(dāng)系統(tǒng)中現(xiàn)有的尚未分配的資源不能滿足先進(jìn)入輸入井的作業(yè)時(shí),那么順序挑選后面的作業(yè)。(2)短

16、作業(yè)優(yōu)先算法:總是按作業(yè)要求運(yùn)行的時(shí)間來選擇作業(yè),每次挑選要求運(yùn)行時(shí)間短且資源要求能滿足的作業(yè)先進(jìn)入主存執(zhí)行。(3)程序流程圖(僅以先來先服務(wù)調(diào)度算法說明過程)4進(jìn)程調(diào)度算法:短進(jìn)程優(yōu)先和先來先服務(wù)。(1)先來先服務(wù)算法:是按照作業(yè)進(jìn)入內(nèi)存的先后次序來創(chuàng)建進(jìn)程,先進(jìn)入內(nèi)存的作業(yè)優(yōu)先被挑選,只要cpu一空閑,立即分配給隊(duì)首的進(jìn)程,讓它擁有處理機(jī)資源,運(yùn)行。(2)短進(jìn)程優(yōu)先算法:總是按進(jìn)程要求運(yùn)行的時(shí)間來選擇進(jìn)程,每次挑選要求運(yùn)行時(shí)間最短進(jìn)程先分配cpu執(zhí)行。(3)程序流程圖(僅以先來先服務(wù)調(diào)度算法說明過程)四編碼。相應(yīng)算法的實(shí)現(xiàn)(其中的重點(diǎn)部分):void pclock(int &hour,in

17、t &minute)/時(shí)鐘函數(shù)+minute;if(minute59)minute=0;+hour;if(hour23)hour=0;void calt(job &job,int hour,int minute) /計(jì)算完成時(shí)刻job.fminute=minute;job.fhour=hour;void pfcfsinput(queue &al1,vector &q)/* 建立先來先服務(wù)進(jìn)程隊(duì)列模塊函數(shù) */if(al1.num != q.size()/此時(shí)有新作業(yè)進(jìn)入內(nèi)存,則為它建立進(jìn)程pcb p;while(al1.num q.size()strcpy(,qal1.num.jn

18、ame);p.ntime = qal1.num.run;enqueue(al1,p);al1.num +;void psjfinput(queue &al1,vector &q) /建立短進(jìn)程優(yōu)先進(jìn)程隊(duì)列模塊if(al1.num != q.size()pcb p;qcb ip1,ip2;int id = al1.num;while(al1.num next;/指向隊(duì)列的首元素while(ip2 != null)if(p.ntime base.ntime)/新進(jìn)程比正在運(yùn)行的進(jìn)程還要短break;ip1 = ip2;ip2 = ip1-next;pi-base = p;/插入進(jìn)程pi-next

19、= ip2;ip1-next = pi;al1.num +;while(al1.rear-next != null)/派完序注意要更新隊(duì)尾指針al1.rear = al1.rear-next;vector:iterator ip;for(ip = q.begin();ip != q.end();+ip)if(ip-jname = qid.jname)break;vector jev(ip,q.end();/記錄將要被刪除作業(yè)q.erase(ip,q.end();/把這部分刪除,以便從新排序for(id = 0;id jev.size();+id)/插入排序ip = q.begin();whil

20、e(ip != q.end()if(jevid.run run)break;else+ip;q.insert(ip,jevid);void prun(queue &al1)/進(jìn)程隊(duì)列運(yùn)行模塊pclock(hour,minute); if(emptyqueue(al1) = 0)/進(jìn)程隊(duì)列非空,則執(zhí)行al1.front-next-base.ntime -;/進(jìn)程隊(duì)列首元素正在執(zhí)行if(al1.front-next-base.ntime next-base.ntime = 0;int sub = jexe0.run - al1.front-next-base.ntime; progressflag

21、 = (float)(sub)/(float)(jexe0.run);if(al1.front-next-base.ntime = 0)/進(jìn)程已完成要撤銷該進(jìn)程pcb e;jexe0.done = true;dequeue(al1,e);al1.num -;vector:iterator itor = qproce.begin();while(itor != qproce.end()if(strcmp(itor-name,) = 0)itor-rtime = 0; break;else+itor;void insert(vector &q)/插入作業(yè)處理模塊vector:itera

22、tor itor = pnext;sysmemory -= q0.memory;/分配主存空間if(q0.memory = itor-space)/空閑分區(qū)大小恰好等于作業(yè)大小strcpy(qpartitor-num.situ,q0.name);/將作業(yè)裝入內(nèi)存相應(yīng)分區(qū)中jcb job = q0;q.erase(q.begin();/刪除已裝進(jìn)主存的作業(yè)隊(duì)列的作業(yè)job.num = pnext-num;/新作業(yè)的分區(qū)號int sub = qpart.size() - 1;if(pnext-num = sub)/新作業(yè)恰好位于末尾分區(qū)qproce.push_back(job);/新作業(yè)插入主存作

23、業(yè)隊(duì)列末尾elsevector:iterator jp;int id;id = pnext-num + 1;jp = qproce.begin();while(jp-num != id) /找到要插入新作業(yè)的位置+jp;qproce.insert(jp,job);+itor;if(itor = qfree.end()/指向原空閑分區(qū)表的最后一個(gè)元素qfree.erase(pnext);/刪除已分配的空閑分區(qū)項(xiàng)pnext = qfree.begin();/pnext指向qfree首元素elsevector:iterator reg ;/記錄要刪除項(xiàng)的下一項(xiàng)reg = qfree.erase(pn

24、ext);/刪除已分配的空閑分區(qū)項(xiàng)pnext = reg;/令pnext指向下一個(gè)空閑分區(qū)else/空閑分區(qū)大小大于作業(yè)申請空間大小spart part;/分割后位于分區(qū)表的空閑分區(qū)part.num = pnext-num + 1;part.sadd = pnext-sadd + q0.memory;part.space = pnext-space - q0.memory;strcpy(part.situ,pnext-situ);jcb job = q0;job.num = pnext-num;int sub = qpart.size() - 1;if(pnext-num = sub)/新作業(yè)

25、裝入原分區(qū)的最后的空閑分區(qū)qproce.push_back(job);elsevector:iterator jp;int id;jp = qproce.begin();id = pnext-num + 1;while(jp-num != id)/記錄作業(yè)分區(qū)號需要改變的首位置+jp;vector:iterator ip;ip = jp;while(ip != qproce.end()/改變新作業(yè)之后作業(yè)的分區(qū)序號+(ip-num);+ip;qproce.insert(jp,job);/插入新作業(yè)vector:iterator spt;vector:iterator reg;spt = qpa

26、rt.begin();while(spt-sadd !=qpartpnext-num.sadd)/記錄分區(qū)表插入qpart所需要的位置+spt;qpartpnext-num.space = q0.memory;strcpy(qpartpnext-num.situ,q0.name);/把作業(yè)裝進(jìn)主存相應(yīng)分區(qū)下+spt;reg = spt;while(reg != qpart.end()/更改其下的分區(qū)號+(reg-num);+reg;qpart.insert(spt,part);/插入part,分區(qū)表相應(yīng)項(xiàng)序號已更改(*pnext) = part;/分割后的空閑分區(qū)項(xiàng)+itor;while(it

27、or != qfree.end()/更改其下的空閑分區(qū)號+(itor-num);+itor;q.erase(q.begin();/刪除已裝進(jìn)主存的作業(yè)隊(duì)列的作業(yè)if(pnext != qfree.end()/空閑分區(qū)表非空pnadr = pnext-sadd;/賦pnext所指空閑分區(qū)的分區(qū)始址elsepnadr = -1;int disproce(vector &q)/主存分配處理模塊if(qfree.empty()/無空閑空間分配q.erase(q.begin();/直接刪除首元素return 0;elseif(q0.memory space)/空閑分區(qū)足夠裝入作業(yè)insert(q);re

28、turn 1;else/搜索其它空閑分區(qū)if(qfree.size() 1)vector:iterator itor;itor = pnext;+itor;while(itor != pnext)if(itor = qfree.end()itor = qfree.begin();if(q0.memory space)/z找到合適的分區(qū)break/跳出while循環(huán),停止搜索+itor;if(q0.memory space)pnext = itor;insert(q);return 1;q.erase(q.begin();/直接刪除首元素return 0;void jsjfpro(vector

29、&m) /短作業(yè)優(yōu)先作業(yè)調(diào)度vector:iterator itor;vector:iterator reg;itor = jdisk.begin();while(itor != jdisk.end()/輸入井作業(yè)if(itor-hour minute = minute) /當(dāng)有作業(yè)在特定時(shí)刻申請進(jìn)入主存jwait.push_back(*itor);/將作業(yè)插入就緒隊(duì)列reg = jdisk.erase(itor);itor = reg;else+itor;if(!jwait.empty()/后備隊(duì)列非空,按短作業(yè)排序vector jev(jwait);jwait.clear();vector

30、:iterator ip;for(vector:size_type id = 0;id jev.size();+id)ip = jwait.begin();while(ip != jwait.end()if(jevid.run run )break;else+ip;jwait.insert(ip,jevid);m.clear();int i = 0;jcb m;ip = jwait.begin();while(ip != jwait.end()m.memory = ip-memory;m.rtime = ip-run;strcpy(,ip-jname);m.push_back(m)

31、;+i;+ip;/就緒隊(duì)列作業(yè),存放已到達(dá)而因資源不足而阻塞的作業(yè)itor=jwait.begin();while(itor!=jwait.end()if(disk=itor-sign) /當(dāng)主存空間磁帶機(jī)足夠用時(shí)if(disproce(m) = 1)job job=*itor; /復(fù)制作業(yè)信息job.enterhour = hour;/進(jìn)入主存時(shí)鐘數(shù)job.enterminute = minute;/進(jìn)入主存分鐘數(shù)memory-=itor-memory; /分配主存空間disk-=itor-sign;/分配磁帶機(jī)reg=jwait.erase(itor); /刪除就緒隊(duì)列將要插入主存的作業(yè)j

32、exe.push_back(job); /將job插入主存隊(duì)列尾itor=reg;/指向被刪除作業(yè)的下一個(gè)位置else+ itor;/往主存隊(duì)列添加作業(yè)直至主存空間不足或者就緒作業(yè)隊(duì)列為空else+itor;m.erase(m.begin();void jfcfspro(vector &m)/先來先服務(wù)作業(yè)調(diào)度vector:iterator itor;vector:iterator reg;itor = jdisk.begin();while(itor != jdisk.end()/輸入井作業(yè)if(itor-hour minute = minute) /當(dāng)有作業(yè)在特定時(shí)刻申請進(jìn)入主存jwait

33、.push_back(*itor);/將作業(yè)插入就緒隊(duì)列reg = jdisk.erase(itor);itor = reg;else+itor;if(!jwait.empty()m.clear();int i = 0;jcb m;vector:iterator ip;ip = jwait.begin();while(ip != jwait.end()m.memory = ip-memory;m.rtime = ip-run; strcpy(,ip-jname);m.push_back(m);+i;+ip; /就緒隊(duì)列作業(yè),存放已到達(dá)而因資源不足而阻塞的作業(yè)itor=jwait.b

34、egin();while(itor!=jwait.end()if(disk = itor-sign) /當(dāng)主存空間磁帶機(jī)足夠用時(shí)if(disproce(m) = 1)job job= *itor; /復(fù)制作業(yè)信息job.enterhour = hour;/進(jìn)入主存時(shí)鐘數(shù)job.enterminute = minute;/進(jìn)入主存分鐘數(shù)memory-=itor-memory; /分配主存空間disk-=itor-sign;/分配磁帶機(jī)reg=jwait.erase(itor); /刪除就緒隊(duì)列將要插入主存的作業(yè)jexe.push_back(job); /將job插入主存隊(duì)列尾itor=reg;/

35、指向被刪除作業(yè)的下一個(gè)位置else+ itor;/往主存隊(duì)列添加作業(yè)直至主存空間不足或者就緒作業(yè)隊(duì)列為空else+itor;m.erase(m.begin();void jfinjob()/完成作業(yè)處理模塊if(!jexe.empty()/主存作業(yè)非空if(jexe0.done = true) /如果作業(yè)已完成 job work=*jexe.begin();/作業(yè)完成,要將其插入到完成作業(yè)隊(duì)列calt(work,hour,minute);memory+=jexe.begin()-memory; /釋放占用的主存空間disk+=jexe.begin()-sign;/釋放磁帶機(jī)jexe.erase

36、(jexe.begin(); /刪除主存模塊的首作業(yè)jdone.push_back(work);/添加到完成隊(duì)列void recproce()/作業(yè)釋放處理模塊for(vector:size_type i = 0;i pronum.size();+i)sysmemory += qpartpronumi.space;/釋放主存strcpy(qpartpronumi.situ,空閑內(nèi)存);/釋放已完成的作業(yè)pronum.clear();vector:iterator del;vector:iterator it;del = qpart.begin();+del;/主存隊(duì)列首分區(qū)分配已給系統(tǒng)whil

37、e(del != qpart.end()/更新分區(qū)表qpartif(strcmp(del-situ,空閑內(nèi)存) = 0)/指定分區(qū)為空閑分區(qū)it = del;+it;if(it != qpart.end()if(strcmp(it-situ,空閑內(nèi)存) = 0)/del的下一分區(qū)也空閑/合并del和it指向的分區(qū)int adr1,adr2;adr1 = del-sadd;adr2 = it-sadd;it-num = del-num;it-sadd = del-sadd;it-space += del-space;it = qpart.erase(del);/合并分區(qū),刪除無用分區(qū)if(pna

38、dr != -1)if(pnadr = adr1)|(pnadr = adr2) /pnext記錄的內(nèi)容恰好指向原分區(qū)表的del和it位置pnadr = it-sadd;/記錄pnext所要指向it所指位置的始址,以便更新qfree表elsepnadr = it-sadd;elseif(pnadr = -1)/原空閑分區(qū)表為空pnadr = del-sadd;/令pnext指向分區(qū)表的第一個(gè)空閑分區(qū)位置,便于更新qfreedel = it;else/指向的分區(qū)為作業(yè)分區(qū),則跳過+del;void memfreeproce()/主存釋放處理模塊vectorpreg;/記錄主存作業(yè)隊(duì)列中未完成的作業(yè)隊(duì)列for(vector:size_type i = 0;i qproce.size();+i)if(qprocei.rtime = 0)/說明作業(yè)已完成pronum.push_back(qprocei.num);/記錄要釋放的主存分區(qū)號elsepreg.push_back(qprocei);qproce.clear();qproce = preg;if(!pronum.empty()/有作業(yè)要釋放recproc

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論