操作系統(tǒng)實訓(xùn)報告C++實現(xiàn)操作系統(tǒng)五大功能_第1頁
操作系統(tǒng)實訓(xùn)報告C++實現(xiàn)操作系統(tǒng)五大功能_第2頁
操作系統(tǒng)實訓(xùn)報告C++實現(xiàn)操作系統(tǒng)五大功能_第3頁
操作系統(tǒng)實訓(xùn)報告C++實現(xiàn)操作系統(tǒng)五大功能_第4頁
操作系統(tǒng)實訓(xùn)報告C++實現(xiàn)操作系統(tǒng)五大功能_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、湖南工業(yè)職業(yè)技術(shù)學(xué)院湖南工業(yè)職業(yè)技術(shù)學(xué)院 操作系統(tǒng)實訓(xùn)報告操作系統(tǒng)實訓(xùn)報告 題目:題目:模擬操作系統(tǒng)五大功能模擬操作系統(tǒng)五大功能 專業(yè):專業(yè): 軟件軟件 實訓(xùn)老師:實訓(xùn)老師: 完成時間:完成時間: 2007-12-27 參與人員參與人員: 2 目目 錄錄 一,設(shè)計思想和算法說明一,設(shè)計思想和算法說明-3 1、 進(jìn)程管理-3 2、 內(nèi)存管理-3 3、 文件管理-3 4、 文件管理-4 5、 設(shè)備管理-5 二,總功能模塊圖二,總功能模塊圖-5 三,流程圖三,流程圖-6 cpu 管理:-6 內(nèi)存管理: -6 文件管理: -7 4)設(shè)備管理:-7 5)作業(yè)管理:-8 四,使用說明四,使用說明-8 五,

2、程序清單五,程序清單-8 六,結(jié)果分析和調(diào)試六,結(jié)果分析和調(diào)試 -19 cpu 管理:-19 內(nèi)存管理: -19 文件管理: -19 設(shè)備管理:-20 作業(yè)管理:-20 七,資料來源及參考書七,資料來源及參考書 -20 一,設(shè)計思想和算法說明一,設(shè)計思想和算法說明 1、 進(jìn)程管理進(jìn)程管理 進(jìn)程調(diào)度算法有 fifo,優(yōu)先數(shù)調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法,分級調(diào)度算法,目前主要 3 是考 fifo 和優(yōu)先數(shù)調(diào)度算法(靜態(tài)優(yōu)先級) 。 輸入輸入:進(jìn)程流文件”jincheng.txt” ,其中存儲的是一系列要執(zhí)行的進(jìn)程, 每個作業(yè)包括五個數(shù)據(jù)項:每個作業(yè)包括五個數(shù)據(jù)項: 進(jìn)程名 進(jìn)程狀態(tài)(1 就緒 2

3、等待 3 運(yùn)行) 所需時間 優(yōu)先數(shù)(0 級最高) 進(jìn)程所占 cpu 的資 源數(shù)。 輸出輸出: : 進(jìn)程執(zhí)行流 和等待時間 平均等待時間 cpu 的使用率。 本程序包括本程序包括: :fifo,優(yōu)先數(shù)調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法 2、 內(nèi)存管理內(nèi)存管理 內(nèi)存調(diào)度算法有內(nèi)存調(diào)度算法有:最先適應(yīng)分配算法,最優(yōu)適應(yīng)分配算法,最壞適應(yīng)算法 用戶提出內(nèi)存空間的申請;系統(tǒng)根據(jù)申請者的要求,按照一定的分配策略分析內(nèi)存空間的 使用情況,找出能 滿足請求的空閑區(qū),分給申請者;當(dāng)程序執(zhí)行完畢或主動歸還內(nèi)存資源時,系統(tǒng)要收回它 所占用的內(nèi)存空間 或它歸還的部分內(nèi)存空間。 1) 程序運(yùn)行時首先接收輸入:空閑區(qū)數(shù)據(jù)文件”

4、fqu.txt” ,包括若干行,每行有兩個數(shù) 據(jù)項:起始地址、長度(均為整數(shù)) ,各數(shù)據(jù)項以逗號隔開。 2) 建立空閑區(qū)表并在屏幕上顯示輸出空閑區(qū)表內(nèi)容,空閑區(qū)表中記錄了內(nèi)存中可供分配 的空閑區(qū)的始址和 長度,用標(biāo)志位指出該分區(qū)是否是未分配的空閑區(qū)。 3 3) 從用戶界面根據(jù)用戶提示接收一個內(nèi)存申請,格式為:作業(yè)名、申請空間的大小。 4) 按照最差(最壞)適配算法選擇一個空閑區(qū),分割并分配,修改相應(yīng)的數(shù)據(jù)結(jié)構(gòu)(空 閑區(qū)表) ,填寫內(nèi) 存已分配區(qū)表(起始地址、長度、標(biāo)志位) ,其中標(biāo)志位的一個作用是指出該區(qū)域分配給哪 個作業(yè)。 5) 重復(fù) 3) 、4) ,直到輸入為特殊字符(0) 。 6) 在屏

5、幕上顯示輸出新的空閑區(qū)表和已分配區(qū)表的內(nèi)容。 本程序包括本程序包括:fifo,最優(yōu)適應(yīng)分配算法,最壞適應(yīng)算法 3、 文件管理文件管理 主要就是模擬操作系統(tǒng)中的 建立文件、打開文件、讀文件、寫文件、 、關(guān)閉文件、 、刪除 文件、 、建立目錄、 、 顯示目錄內(nèi)容、顯示文件內(nèi)容、 、改變文件屬性等操作。1 改變目錄格式:cd目錄名 功能:功能:工作目錄轉(zhuǎn)移到指定的目錄下,只要求完成改變到當(dāng)前目錄的某一個子目錄 下的功能,不要求實現(xiàn)相對目錄以及絕對目錄。 1 1)創(chuàng)建文件)創(chuàng)建文件 格式:create文件名 文件長度 功能:創(chuàng)立一個指定名字的新文件,即在目錄中增加一項,不考慮文件內(nèi)容,但必 須能輸入文

6、件長度。 2 2)刪除文件)刪除文件 4 格式:del希望刪除的文件名 功能:刪除指定的文件 3 3)顯示目錄)顯示目錄 格式:lsall 功能:顯示全部目錄以及文件,輸出時要求先輸出接近根的目錄,再輸出子目錄。 4 4)創(chuàng)建目錄)創(chuàng)建目錄 格式:md目錄名 功能:在當(dāng)前路徑下創(chuàng)建指定的目錄 5 5)刪除目錄)刪除目錄 格式:rd目錄名 功能:刪除當(dāng)前目錄下的指定目錄,如果該目錄為空,則可刪除,否則應(yīng)提示是否 作刪除,刪除操作將該目錄下的全部文件和子目錄都刪除。 作業(yè)調(diào)度主要有 fifo,運(yùn)算時間短的作業(yè)優(yōu)先,優(yōu)先數(shù)調(diào)度算法,響應(yīng)比最高者優(yōu)先調(diào)度 算法,均衡調(diào)度算法 4、 文件管理文件管理 1

7、 1)模擬作業(yè)調(diào)度算法)模擬作業(yè)調(diào)度算法 輸入輸入:作業(yè)流文件“zye.txt” ,其中存儲的是一系列要執(zhí)行的作業(yè), 每個作業(yè)包括三個數(shù)據(jù)項: 作業(yè)號、作業(yè)進(jìn)入系統(tǒng)的時間(用一整數(shù)表示,如 10:10,表示成 1010) 、估計執(zhí)行時間 (單位分)優(yōu)先級(0 級最高) 2 2)參數(shù)用空格隔開,下面是)參數(shù)用空格隔開,下面是 zye.txtzye.txt 文件里面存放的作業(yè):文件里面存放的作業(yè): 1 800 50 2 815 30 3 830 25 4 835 20 5 845 15 6 900 10 7 920 5 其中調(diào)度時刻為最后一個作業(yè)到達(dá)系統(tǒng)的時間! 輸出作業(yè)號!進(jìn)入內(nèi)存的時間!每行輸

8、出一個作業(yè)信息 本程序包括本程序包括:fifo,運(yùn)算時間短的作業(yè)優(yōu)先,優(yōu)先數(shù)調(diào)度算法,響應(yīng)比最高者優(yōu)先調(diào)度算法 5、 設(shè)備管理設(shè)備管理 主要就是模擬操作系統(tǒng)中的設(shè)備分配,回收,顯示三個功能。 定義四個設(shè)備類,設(shè)備總數(shù)量,空閑數(shù)量,分別是: input, 2 , 2 printer, 3, 3 disk, 4 , 4 tape 1, 1 分配一個設(shè)備,它的空閑數(shù)量就少一個,如果回收一個,它就加一個,如果全部分配出去, 5 你在申請的話,它就提示“占時無設(shè)備,請等待.” 。還加了一個輸出設(shè)備表。 二,總功能模塊圖二,總功能模塊圖 模擬操作系統(tǒng)五大功能模擬操作系統(tǒng)五大功能 cpu 管理管理 內(nèi)存管理

9、內(nèi)存管理 文件管理文件管理 作業(yè)管理作業(yè)管理 設(shè)備管理設(shè)備管理 三,流程圖三,流程圖 cpu 管理:管理: 開始 打開文件 jincheng.txt 顯示進(jìn)程狀態(tài) 結(jié)束 6 開始 選擇 該變目錄 創(chuàng)建文件 刪除文件 顯示目錄 結(jié)束 創(chuàng)建目錄 刪除目錄 輸入 exit 內(nèi)存管理:內(nèi)存管理: 開始 選擇 申請空間 撤銷作業(yè) 顯示 退出 打開文件 fqu.txt 結(jié)束 文件管理:文件管理: 否 是 7 4)設(shè)備管理:設(shè)備管理: 開始 選擇 分配 回收 顯示 退出 結(jié)束 5)作業(yè)管理:作業(yè)管理: 開始 打開文件 zye.txt 顯示作業(yè)狀態(tài) 結(jié)束 四,使用說明四,使用說明 1) 首先在 d 盤下建立三

10、張表,表名分別是:jincheng.txt,fqu.txt,zye.txt,它們分別存 放 cup 運(yùn)行的進(jìn)程,內(nèi)存存儲的作業(yè),還有作業(yè)管理的作業(yè)。 (1)第一章表是進(jìn)程信息表:為 jincheng.txt nameztaitimeyouxianzyuan a2505 b16010 . (2)第二章表內(nèi)存分給作業(yè)表 fqu.txt addresslongztai 8 10032free . (3)第三章表作業(yè)分配表:zye.txt iddtimextimeyouxian 1800500 2815301 . 2)運(yùn)行 cpu 管理首先要輸入進(jìn)程,所以首先輸入 d 盤下的文件 jincheng.t

11、xt 文件。打開它,使數(shù)據(jù)進(jìn)程 進(jìn)入該系統(tǒng)里面運(yùn)行。還有作業(yè)管理要輸入 d 盤下的文件 zye.txt 文件。使作業(yè)數(shù)據(jù)進(jìn)入系統(tǒng)里面,進(jìn)行 計算。而內(nèi)存管理側(cè)是,系統(tǒng)一運(yùn)行,它自動打開文件。使里面的數(shù)據(jù)讀入系統(tǒng)里面來,不用輸入文件。 另外文件管理就是自己在運(yùn)行時,自己去創(chuàng)建和操作,修改。設(shè)備管理在程序里面以定義規(guī)定好,進(jìn)行分 配和調(diào)用。 五,程序清單五,程序清單 #include#include #include#include #include#include #include#include #include#include #include#include /文件管理文件管理 / / *

12、目錄和文件的結(jié)構(gòu)定義目錄和文件的結(jié)構(gòu)定義* typedeftypedef structstruct filenodefilenode charchar name50;name50; /*/*目錄或文件的名字目錄或文件的名字*/*/ intint type;type; /*0/*0 代表目錄,代表目錄,1 1 代表普通文件代表普通文件*/*/ structstruct filenodefilenode *next;*next; /*/*指向下一個兄弟結(jié)點的指針指向下一個兄弟結(jié)點的指針*/*/ structstruct filenodefilenode *sub;*sub; /*/*指向第一個子結(jié)

13、點的指針指向第一個子結(jié)點的指針*/*/ structstruct filenodefilenode *father;*father; /*/*指向父結(jié)點的指針指向父結(jié)點的指針*/*/ charchar size10;size10; /*/*如果是文件則表示文件的大小如果是文件則表示文件的大小*/*/ dirfilenode;dirfilenode; dirfilenodedirfilenode *workdir;*workdir; /定義當(dāng)前工作目錄定義當(dāng)前工作目錄 dirfilenodedirfilenode root;root; /定義根目錄定義根目錄 charchar path100;p

14、ath100; /定義路徑信息定義路徑信息 /初始化函數(shù)初始化函數(shù) voidvoid initial3()initial3() strcpy(,root);strcpy(,root); root.type=0;root.type=0; root.next=null;root.next=null; root.sub=null;root.sub=null; root.father=null;root.father=null; strcpy(root.size,strcpy(root.size,文檔文檔);); workdir=workdir= strcpy(pa

15、th,root);strcpy(path,root); /初始化新結(jié)點函數(shù)初始化新結(jié)點函數(shù) dirfilenodedirfilenode *init5()*init5() dirfilenodedirfilenode *p;*p; p=newp=new dirfilenode;dirfilenode; strcpy(,);strcpy(,); root.type=0;root.type=0; root.next=null;root.next=null; root.sub=null;root.sub=null; root.father=null;root.fa

16、ther=null; strcpy(root.size,strcpy(root.size,存檔存檔);); returnreturn p;p; /1/1 改變目錄改變目錄 voidvoid cd(charcd(char dirname)dirname) dirfilenodedirfilenode *p;*p; intint flag=0;flag=0; p=workdir-sub;p=workdir-sub; if(p=null)if(p=null) coutcout錯誤錯誤,dirname,dirname子目錄不存在子目錄不存在 endl;type=0)if(p-type=0) if(!s

17、trcmp(p-name,dirname)if(!strcmp(p-name,dirname) flag=1;flag=1; break;break; p=p-next;p=p-next; if(flag=1)if(flag=1) workdir=p;workdir=p; strcat(path,strcat(path, );); strcat(path,p-name);strcat(path,p-name); coutcout工作目錄已進(jìn)入工作目錄已進(jìn)入dirnameendl;dirnameendl; elsecoutelsecout錯誤錯誤,dirname,dirname子目錄不存在子目錄

18、不存在endl;name,filename);strcpy(q-name,filename); q-sub=null;q-sub=null; q-type=1;q-type=1; q-next=null;q-next=null; q-father=workdir;q-father=workdir; strcpy(q-size,filesize);strcpy(q-size,filesize); p=workdir-sub;p=workdir-sub; 9 if(p=null)if(p=null) workdir-sub=q;workdir-sub=q; coutfilenamecoutfile

19、name文件創(chuàng)建成功文件創(chuàng)建成功endl;type=1)if(p-type=1) if(!strcmp(p-name,filename)if(!strcmp(p-name,filename) flag=1;flag=1; coutcout錯誤錯誤,filename,filename文件已存在文件已存在 endl;next;p=p-next; if(flag=0)if(flag=0) p=workdir-sub;p=workdir-sub; while(p-next)p=p-next;while(p-next)p=p-next; p-next=q;p-next=q; coutfilenameco

20、utfilename文件創(chuàng)建成功文件創(chuàng)建成功endl;sub;p=workdir-sub; if(p=null)if(p=null) coutcout錯誤錯誤,filename,filename文件不存在文件不存在endl;type=1)if(p-type=1) if(!strcmp(p-name,filename)if(!strcmp(p-name,filename) flag=1;flag=1; break;break; p=p-next;p=p-next; if(flag=1)if(flag=1) if(p=workdir-sub)if(p=workdir-sub) workdir-su

21、b=p-next;workdir-sub=p-next; elseelse q=workdir-sub;q=workdir-sub; while(q-next!=p)while(q-next!=p) q=q-next;q=q-next; q-next=p-next;q-next=p-next; deletedelete p;p; coutfilenamecoutfilename文件已刪除文件已刪除endl;endl; elseelse coutcout錯誤錯誤,filename,filename文件不存在文件不存在 endl;type=0)if(p-type=0) cout.setf(2);c

22、out.setf(2); coutsetw(14)p-coutsetw(14)namesetw(12)namesetw(12)endl; elseelse cout.setf(2);cout.setf(2); coutsetw(14)p-coutsetw(14)namesetw(12)setw(10)sizenamesetw(12)setw(10)sizenext;p=p-next; voidvoid dirs(dirfilenodedirs(dirfilenode *p,char*p,char str)/str)/顯示顯示 charchar newstr100;newstr100; dirf

23、ilenodedirfilenode *q;*q; coutstrcoutstr下子目錄及文件下子目錄及文件:endl;:endl; coutcout名稱名稱 類型類型 屬性屬性endl;sub)if(q-sub) strcpy(newstr,);strcpy(newstr,); strcat(newstr,str);strcat(newstr,str); strcat(newstr,);strcat(newstr,); strcat(newstr,q-name);strcat(newstr,q-name); dirs(q-sub,newstr);dirs(q-sub,newstr); q=p

24、;q=p; while(q-next)while(q-next) if(q-next-sub)if(q-next-sub) strcpy(newstr,);strcpy(newstr,); strcat(newstr,str);strcat(newstr,str); strcat(newstr,strcat(newstr, );); strcat(newstr,q-next-name);strcat(newstr,q-next-name); dirs(q-next-sub,newstr);dirs(q-next-sub,newstr); q=q-next;q=q-next; / 顯示所有目錄顯

25、示所有目錄 voidvoid lsall()lsall() dirfilenodedirfilenode *p;*p; coutcout顯示所有目錄結(jié)構(gòu)顯示所有目錄結(jié)構(gòu)endl-endl- -endl;-name,dirname);strcpy(q-name,dirname); q-sub=null;q-sub=null; q-type=0;q-type=0; q-next=null;q-next=null; q-father=workdir;q-father=workdir; strcpy(q-size,strcpy(q-size, );); p=workdir-sub;p=workdir-

26、sub; if(p=null)if(p=null) 10 workdir-sub=q;workdir-sub=q; coutdirnamecoutdirname子目錄創(chuàng)建成功子目錄創(chuàng)建成功endl;type=0)if(p-type=0) if(!strcmp(p-name,dirname)if(!strcmp(p-name,dirname) flag=1;flag=1; coutcout錯誤錯誤,dirname,dirname子目錄已子目錄已 存在存在endl;next;p=p-next; if(flag=0)if(flag=0) p=workdir-sub;p=workdir-sub; wh

27、ile(p-next)while(p-next) p=p-next;p=p-next; p-next=q;p-next=q; coutdirnamecoutdirname子目錄創(chuàng)建成功子目錄創(chuàng)建成功endl;sub;p=workdir-sub; if(p=null)if(p=null) coutcout錯誤錯誤,dirname,dirname子目錄不存在子目錄不存在endl;type=0)if(p-type=0) if(!strcmp(p-name,dirname)if(!strcmp(p-name,dirname) flag=1;flag=1; break;break; p=p-next;p

28、=p-next; if(flag=1)if(flag=1) if(p=workdir-sub)if(p=workdir-sub) workdir-sub=p-next;workdir-sub=p-next; elseelse q=workdir-sub;q=workdir-sub; while(q-next!=p)while(q-next!=p) q=q-next;q=q-next; q-next=p-next;q-next=p-next; deletedelete p;p; coutdirnamecoutdirname子目錄已刪除子目錄已刪除endl;endl; elseelse coutc

29、out錯誤錯誤,dirname,dirname子目錄不存在子目錄不存在 endl;endl; voidvoid fun5()fun5() intint len,flag,comm;len,flag,comm; charchar string50,filesize10;string50,filesize10; charchar command10;command10; charchar name40;name40; charchar *s;*s; initial3();initial3(); flag=1;flag=1; while(flag)while(flag) coutcout endl;

30、endl; coutcout 模擬文件管理模擬系統(tǒng)模擬文件管理模擬系統(tǒng) endl;endl; coutcout endl;endl; coutcout cdcd 改變目錄改變目錄 createcreate 創(chuàng)建文件創(chuàng)建文件 deldel 刪刪 除文件除文件endl;endl; coutcout lsalllsall 顯示目錄顯示目錄 mdmd 創(chuàng)建目錄創(chuàng)建目錄 rdrd 刪刪 除目錄除目錄 endl;endl; coutcout 設(shè)計者設(shè)計者: : pengyingyipengyingyi endl;endl; coutcout endl;#,path);printf(%s:#,path);

31、gets(string);gets(string); len=strlen(string);len=strlen(string); if(len=0)if(len=0) strcpy(command,errer);strcpy(command,errer); elseelse /獲得命令獲得命令 s=null;s=null; s=strchr(string,s=strchr(string, );); if(s!=null)if(s!=null) *s=0;*s=0; strcpy(command,string);strcpy(command,string); /測試命令類型測試命令類型 if(

32、!strcmp(command,cd)|!strcmp(command,cd)if(!strcmp(command,cd)|!strcmp(command,cd) comm=1;comm=1; elseelse if(!strcmp(command,create)|!strcmp(command,create)if(!strcmp(command,create)|!strcmp(command,create) comm=2;comm=2; elseelse if(!strcmp(command,del)|!strcmp(command,del)if(!strcmp(command,del)|!

33、strcmp(command,del) comm=3;comm=3; elseelse if(!strcmp(command,lsall)|!strcmp(command,lsall)if(!strcmp(command,lsall)|!strcmp(command,lsall) comm=4;comm=4; elseelse if(!strcmp(command,md)|!strcmp(command,md)if(!strcmp(command,md)|!strcmp(command,md) 11 comm=5;comm=5; elseelse if(!strcmp(command,rd)|

34、!strcmp(command,rd)if(!strcmp(command,rd)|!strcmp(command,rd) comm=6;comm=6; elseelse if(!strcmp(command,exit)|!strcmp(command,exit)if(!strcmp(command,exit)|!strcmp(command,exit) comm=0;comm=0; elseelse comm=100;comm=100; switch(comm)switch(comm) casecase 1:1: /1/1 改變目錄改變目錄 coutcoutname;cinname; cd(

35、name);cd(name); break;break; casecase 2:2: /2/2 創(chuàng)建文件創(chuàng)建文件 coutcoutnamefilesize;cinnamefilesize; create(name,filesize);create(name,filesize); break;break; casecase 3:3: /3/3 刪除文件刪除文件 /strcpy(name,s+1);/strcpy(name,s+1); coutcoutname;cinname; del(name);del(name); break;break; casecase 4:4: /4/4 顯示目錄顯示目

36、錄 lsall();lsall(); break;break; casecase 5:5: /5/5 創(chuàng)建目錄創(chuàng)建目錄 coutcoutname;cinname; md(name);md(name); break;break; casecase 6:6: /6/6 刪除目錄刪除目錄 coutcoutname;cinname; rd(name);rd(name); break;break; casecase 0:0: /0/0 退出系統(tǒng)退出系統(tǒng) flag=0;flag=0; break;break; default:default: coutcout命令錯誤命令錯誤endl;endl; /文件管

37、理文件管理 / /作業(yè)管理作業(yè)管理 / constconst intint maxjob1=50;maxjob1=50; /定義最大作業(yè)定義最大作業(yè) /定義數(shù)據(jù)結(jié)構(gòu)體定義數(shù)據(jù)結(jié)構(gòu)體 typedeftypedef structstruct node2node2 intint number;number; intint reach_time;reach_time; intint reach_hour;reach_hour; intint reach_minite;reach_minite; intint need_time;need_time; intint privilege;privilege

38、; floatfloat excellent;excellent; intint start_time;start_time; intint wait_time;wait_time; intint visited;visited; job1;job1; job1job1 jobsmaxjob1;jobsmaxjob1; intint quantity;quantity; /初始化函數(shù)初始化函數(shù) voidvoid initial2()initial2() intint i;i; for(i=0;imaxjob1;i+)for(i=0;imaxjob1;i+) jobsi.number=0;job

39、si.number=0; jobsi.reach_time=0;jobsi.reach_time=0; jobsi.reach_hour=0;jobsi.reach_hour=0; jobsi.reach_minite=0;jobsi.reach_minite=0; jobsi.privilege=0;jobsi.privilege=0; jobsi.excellent=0;jobsi.excellent=0; jobsi.start_time=0;jobsi.start_time=0; jobsi.wait_time=0;jobsi.wait_time=0; jobsi.visited=0;

40、jobsi.visited=0; quantity=0;quantity=0; /重置作業(yè)數(shù)據(jù)函數(shù)重置作業(yè)數(shù)據(jù)函數(shù) voidvoid reset()reset() intint i;i; for(i=0;imaxjob1;i+)for(i=0;imaxjob1;i+) jobsi.start_time=0;jobsi.start_time=0; jobsi.wait_time=0;jobsi.wait_time=0; jobsi.visited=0;jobsi.visited=0; /讀入作業(yè)數(shù)據(jù)函數(shù)讀入作業(yè)數(shù)據(jù)函數(shù) voidvoid readdata2()readdata2() filefi

41、le *fp;*fp; charchar fname20;fname20; intint i;i; coutcoutfname;cinfname; if(fp=fopen(d:zye.txt,r)=null)if(fp=fopen(d:zye.txt,r)=null) coutcout錯誤錯誤, ,文件打不開文件打不開, ,請檢查文件名請檢查文件名:)endl;:)endl; elseelse while(!feof(fp)while(!feof(fp) fscanf(fp,%dfscanf(fp,%d %d%d %d%d %d,quantity.need_time, 12 jobsquant

42、ity.reach_hour=jobsquantity.reach_time/100;jobsquantity.reach_hour=jobsquantity.reach_time/100; jobsquantity.reach_minite=jobsquantity.reach_time%100;jobsquantity.reach_minite=jobsquantity.reach_time%100; quantity+;quantity+; /輸出初始作業(yè)數(shù)據(jù)輸出初始作業(yè)數(shù)據(jù) coutcout輸出初始作業(yè)數(shù)據(jù)輸出初始作業(yè)數(shù)據(jù)endl;endl; cout-cout- -endl;-end

43、l; cout.setf(2);cout.setf(2); coutsetw(10)coutsetw(10)作業(yè)號作業(yè)號setw(12)setw(12)到達(dá)時間到達(dá)時間 setw(14)setw(14) 所需時間所需時間( (分分)setw(14)setw(14)1)1)endl; for(i=0;iquantity;i+)for(i=0;iquantity;i+) coutsetw(10)jobsi.numbersetw(12)jobsi.reach_timecoutsetw(10)jobsi.numbersetw(12)jobsi.reach_time setw(14)jobsi.need

44、_timesetw(14)jobsi.privilegesetw(14)jobsi.need_timesetw(14)jobsi.privilege endl;endl; /fifo/fifo 算法算法 voidvoid fifo1()fifo1() intint i;i; intint current_hour;current_hour; intint current_minute;current_minute; intint total_time=0;total_time=0; /輸出作業(yè)流輸出作業(yè)流 coutendl;coutendl; coutendlfifocoutendlfifo

45、算法作業(yè)流算法作業(yè)流endl;endl; cout-cout- -endl;-endl; cout.setf(2);cout.setf(2); coutsetw(10)coutsetw(10)作業(yè)號作業(yè)號setw(12)setw(12)到達(dá)時間到達(dá)時間setw(12)setw(12) 開始時間開始時間setw(14)setw(14)周轉(zhuǎn)時間周轉(zhuǎn)時間( (分分)endl;)endl; current_hour=jobs0.reach_hour;current_hour=jobs0.reach_hour; current_minute=jobs0.reach_minite;current_minu

46、te=jobs0.reach_minite; for(i=0;iquantity;i+)for(i=0;iquantity;i+) jobsi.start_time=current_hour*100+current_minute;jobsi.start_time=current_hour*100+current_minute; jobsi.wait_time=(current_hour-jobsi.wait_time=(current_hour- jobsi.reach_hour)*60+(current_minute-jobsi.reach_hour)*60+(current_minute-

47、 jobsi.reach_minite)+jobsi.need_time;jobsi.reach_minite)+jobsi.need_time; coutsetw(10)jobsi.numbersetw(12)jobsi.reach_timecoutsetw(10)jobsi.numbersetw(12)jobsi.reach_time setw(12)jobsi.start_timesetw(14)jobsi.wait_timesetw(12)jobsi.start_timesetw(14)jobsi.wait_time endl;endl; current_hour=current_ho

48、ur+(jobsi.need_time+current_minute)current_hour=current_hour+(jobsi.need_time+current_minute) /60;/60; current_minute=(jobsi.need_time+current_minute)%60;current_minute=(jobsi.need_time+current_minute)%60; total_time+=jobsi.wait_time;total_time+=jobsi.wait_time; coutendlcoutendl總周轉(zhuǎn)時間總周轉(zhuǎn)時間:total_time

49、:total_time 平均周轉(zhuǎn)時間平均周轉(zhuǎn)時間: : total_time/quantityendl;total_time/quantityendl; /運(yùn)算時間短的作業(yè)優(yōu)先算法運(yùn)算時間短的作業(yè)優(yōu)先算法 voidvoid shorter()shorter() intint i,j,p;i,j,p; intint current_hour;current_hour; intint current_minute;current_minute; intint current_need_time;current_need_time; intint total_time=0;total_time=0;

50、 /輸出作業(yè)流輸出作業(yè)流 coutendl;coutendl; coutendlcoutendl時間短作業(yè)優(yōu)先算法作業(yè)流時間短作業(yè)優(yōu)先算法作業(yè)流( (開始調(diào)度時刻為最開始調(diào)度時刻為最 后一個作業(yè)到達(dá)系統(tǒng)的時間后一個作業(yè)到達(dá)系統(tǒng)的時間)endl;)endl; cout-cout- -endl;-endl; cout.setf(2);cout.setf(2); coutsetw(10)coutsetw(10)作業(yè)號作業(yè)號setw(12)setw(12)到達(dá)時間到達(dá)時間setw(14)setw(14) 所需時間所需時間( (分分)setw(12)setw(12)開始時間開始時間setw(14)set

51、w(14) 周轉(zhuǎn)時間周轉(zhuǎn)時間 ( (分分)endl;)endl; current_hour=jobsquantity-1.reach_hour;current_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite;current_minute=jobsquantity-1.reach_minite; for(i=0;iquantity;i+)for(i=0;iquantity;i+) current_need_time=30000;current_need_time=30000; for(j=0;j

52、quantity;j+)for(j=0;jquantity;j+) if(jobsj.visited=0)p=j; current_need_time=jobsj.need_time;current_need_time=jobsj.need_time; jobsp.start_time=current_hour*100+current_minute;jobsp.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.wait_time=(current_hour- jobsp.reach_h

53、our)*60+(current_minute-jobsp.reach_hour)*60+(current_minute- jobsp.reach_minite)+jobsp.need_time;jobsp.reach_minite)+jobsp.need_time; coutsetw(10)jobsp.numbersetw(12)jobsp.reach_timecoutsetw(10)jobsp.numbersetw(12)jobsp.reach_time setw(14)jobsp.need_timesetw(12)jobsp.start_timesetw(14)jobsp.need_ti

54、mesetw(12)jobsp.start_time setw(14)jobsp.wait_timeendl;setw(14)jobsp.wait_timeendl; current_hour=current_hour+(jobsp.need_time+current_minute)current_hour=current_hour+(jobsp.need_time+current_minute) /60;/60; current_minute=(jobsp.need_time+current_minute)%60;current_minute=(jobsp.need_time+current

55、_minute)%60; jobsp.visited=1;jobsp.visited=1; total_time+=jobsp.wait_time;total_time+=jobsp.wait_time; coutendlcoutendl總周轉(zhuǎn)時間總周轉(zhuǎn)時間:total_time:total_time 平均周轉(zhuǎn)時間平均周轉(zhuǎn)時間: : total_time/quantityendl;total_time/quantityendl; /優(yōu)先數(shù)調(diào)度算法優(yōu)先數(shù)調(diào)度算法 voidvoid privilege()privilege() intint i,j,p;i,j,p; intint current_

56、hour;current_hour; intint current_minute;current_minute; intint current_privilege;current_privilege; intint total_time=0;total_time=0; /輸出作業(yè)流輸出作業(yè)流 coutendl;coutendl; coutendlcoutendl優(yōu)先數(shù)調(diào)度算法作業(yè)流優(yōu)先數(shù)調(diào)度算法作業(yè)流( (開始調(diào)度時刻為最后一開始調(diào)度時刻為最后一 個作業(yè)到達(dá)系統(tǒng)的時間個作業(yè)到達(dá)系統(tǒng)的時間)endl;)endl; cout-cout- -endl;-endl; cout.setf(2);cout

57、.setf(2); coutsetw(10)coutsetw(10)作業(yè)號作業(yè)號setw(12)setw(12)到達(dá)時間到達(dá)時間setw(14)setw(14) 1)setw(12)1)setw(12)開始時間開始時間setw(14)setw(14)周轉(zhuǎn)時間周轉(zhuǎn)時間 ( (分分)endl;)endl; current_hour=jobsquantity-1.reach_hour;current_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite;current_minute=jobsquantit

58、y-1.reach_minite; for(i=0;iquantity;i+)for(i=0;iquantity;i+) current_privilege=30000;current_privilege=30000; for(j=0;jquantity;j+)for(j=0;jquantity;j+) if(jobsj.visited=0)p=j; current_privilege=jobsj.privilege;current_privilege=jobsj.privilege; jobsp.start_time=current_hour*100+current_minute;jobsp

59、.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.wait_time=(current_hour- jobsp.reach_hour)*60+(current_minute-jobsp.reach_hour)*60+(current_minute- jobsp.reach_minite)+jobsp.need_time;jobsp.reach_minite)+jobsp.need_time; coutsetw(10)jobsp.numbersetw(12)jobsp.reach_ti

60、mecoutsetw(10)jobsp.numbersetw(12)jobsp.reach_time setw(14)jobsp.privilegesetw(12)jobsp.start_timesetw(14)jobsp.privilegesetw(12)jobsp.start_time setw(14)jobsp.wait_timeendl;setw(14)jobsp.wait_timeendl; current_hour=current_hour+(jobsp.need_time+current_minute)current_hour=current_hour+(jobsp.need_t

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論