版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、湖南工業(yè)職業(yè)技術(shù)學(xué)院湖南工業(yè)職業(yè)技術(shù)學(xué)院 操作系統(tǒng)實(shí)訓(xùn)報(bào)告操作系統(tǒng)實(shí)訓(xùn)報(bào)告題目:題目:模擬操作系統(tǒng)五大功能模擬操作系統(tǒng)五大功能 專業(yè):專業(yè): 軟件軟件 實(shí)訓(xùn)老師:實(shí)訓(xùn)老師: 完成時(shí)間:完成時(shí)間: 2007-12-27 參與人員參與人員: 目目 錄錄一,設(shè)計(jì)思想和算法說明一,設(shè)計(jì)思想和算法說明-31、 進(jìn)程管理-32、 內(nèi)存管理-33、 文件管理-34、 文件管理-45、 設(shè)備管理-5二,總功能模塊圖二,總功能模塊圖-5三,流程圖三,流程圖-6cpu 管理:-6內(nèi)存管理: -6文件管理: -74)設(shè)備管理:-75)作業(yè)管理:-8四,使用說明四,使用說明-8五,程序清單五,程序清單-8六,結(jié)果分析
2、和調(diào)試六,結(jié)果分析和調(diào)試 -19cpu 管理:-19內(nèi)存管理: -19文件管理: -19設(shè)備管理:-20作業(yè)管理:-20七,資料來源及參考書七,資料來源及參考書 -20一,設(shè)計(jì)思想和算法說明一,設(shè)計(jì)思想和算法說明1、 進(jìn)程管理進(jìn)程管理進(jìn)程調(diào)度算法有 fifo,優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法,分級調(diào)度算法,目前主要是考 fifo 和優(yōu)先數(shù)調(diào)度算法(靜態(tài)優(yōu)先級) 。輸入輸入:進(jìn)程流文件”jincheng.txt” ,其中存儲(chǔ)的是一系列要執(zhí)行的進(jìn)程,每個(gè)作業(yè)包括五個(gè)數(shù)據(jù)項(xiàng):每個(gè)作業(yè)包括五個(gè)數(shù)據(jù)項(xiàng):進(jìn)程名 進(jìn)程狀態(tài)(1 就緒 2 等待 3 運(yùn)行) 所需時(shí)間 優(yōu)先數(shù)(0 級最高) 進(jìn)程所占 cpu
3、的資源數(shù)。輸出輸出: :進(jìn)程執(zhí)行流 和等待時(shí)間 平均等待時(shí)間 cpu 的使用率。本程序包括本程序包括: :fifo,優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(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í)行完畢或主動(dòng)歸還內(nèi)存資源時(shí),系統(tǒng)要收回它所占用的內(nèi)存空間或它歸還的部分內(nèi)存空間。1) 程序運(yùn)行時(shí)首先接收輸入:空閑區(qū)數(shù)據(jù)文件”fqu.txt” ,包括若干行,每行有兩個(gè)數(shù)據(jù)項(xiàng):起始地址、長度(均為整數(shù)) ,各數(shù)據(jù)項(xiàng)以逗
4、號隔開。2) 建立空閑區(qū)表并在屏幕上顯示輸出空閑區(qū)表內(nèi)容,空閑區(qū)表中記錄了內(nèi)存中可供分配的空閑區(qū)的始址和長度,用標(biāo)志位指出該分區(qū)是否是未分配的空閑區(qū)。3 3) 從用戶界面根據(jù)用戶提示接收一個(gè)內(nèi)存申請,格式為:作業(yè)名、申請空間的大小。4) 按照最差(最壞)適配算法選擇一個(gè)空閑區(qū),分割并分配,修改相應(yīng)的數(shù)據(jù)結(jié)構(gòu)(空閑區(qū)表) ,填寫內(nèi)存已分配區(qū)表(起始地址、長度、標(biāo)志位) ,其中標(biāo)志位的一個(gè)作用是指出該區(qū)域分配給哪個(gè)作業(yè)。5) 重復(fù) 3) 、4) ,直到輸入為特殊字符(0) 。6) 在屏幕上顯示輸出新的空閑區(qū)表和已分配區(qū)表的內(nèi)容。本程序包括本程序包括:fifo,最優(yōu)適應(yīng)分配算法,最壞適應(yīng)算法3、 文
5、件管理文件管理主要就是模擬操作系統(tǒng)中的 建立文件、打開文件、讀文件、寫文件、 、關(guān)閉文件、 、刪除文件、 、建立目錄、 、顯示目錄內(nèi)容、顯示文件內(nèi)容、 、改變文件屬性等操作。1 改變目錄格式:cd目錄名功能:功能:工作目錄轉(zhuǎn)移到指定的目錄下,只要求完成改變到當(dāng)前目錄的某一個(gè)子目錄下的功能,不要求實(shí)現(xiàn)相對目錄以及絕對目錄。1 1)創(chuàng)建文件)創(chuàng)建文件格式:create文件名 文件長度功能:創(chuàng)立一個(gè)指定名字的新文件,即在目錄中增加一項(xiàng),不考慮文件內(nèi)容,但必須能輸入文件長度。2 2)刪除文件)刪除文件格式:del希望刪除的文件名功能:刪除指定的文件3 3)顯示目錄)顯示目錄格式:lsall功能:顯示全
6、部目錄以及文件,輸出時(shí)要求先輸出接近根的目錄,再輸出子目錄。4 4)創(chuàng)建目錄)創(chuàng)建目錄格式:md目錄名功能:在當(dāng)前路徑下創(chuàng)建指定的目錄5 5)刪除目錄)刪除目錄格式:rd目錄名功能:刪除當(dāng)前目錄下的指定目錄,如果該目錄為空,則可刪除,否則應(yīng)提示是否作刪除,刪除操作將該目錄下的全部文件和子目錄都刪除。作業(yè)調(diào)度主要有 fifo,運(yùn)算時(shí)間短的作業(yè)優(yōu)先,優(yōu)先數(shù)調(diào)度算法,響應(yīng)比最高者優(yōu)先調(diào)度算法,均衡調(diào)度算法4、 文件管理文件管理1 1)模擬作業(yè)調(diào)度算法)模擬作業(yè)調(diào)度算法輸入輸入:作業(yè)流文件“zye.txt” ,其中存儲(chǔ)的是一系列要執(zhí)行的作業(yè),每個(gè)作業(yè)包括三個(gè)數(shù)據(jù)項(xiàng):作業(yè)號、作業(yè)進(jìn)入系統(tǒng)的時(shí)間(用一整數(shù)
7、表示,如 10:10,表示成 1010) 、估計(jì)執(zhí)行時(shí)間(單位分)優(yōu)先級(0 級最高)2 2)參數(shù)用空格隔開,下面是)參數(shù)用空格隔開,下面是 zye.txtzye.txt 文件里面存放的作業(yè):文件里面存放的作業(yè):1 800 502 815 303 830 254 835 205 845 156 900 107 920 5其中調(diào)度時(shí)刻為最后一個(gè)作業(yè)到達(dá)系統(tǒng)的時(shí)間!輸出作業(yè)號!進(jìn)入內(nèi)存的時(shí)間!每行輸出一個(gè)作業(yè)信息本程序包括本程序包括:fifo,運(yùn)算時(shí)間短的作業(yè)優(yōu)先,優(yōu)先數(shù)調(diào)度算法,響應(yīng)比最高者優(yōu)先調(diào)度算法5、 設(shè)備管理設(shè)備管理主要就是模擬操作系統(tǒng)中的設(shè)備分配,回收,顯示三個(gè)功能。定義四個(gè)設(shè)備類,設(shè)
8、備總數(shù)量,空閑數(shù)量,分別是:input, 2 , 2printer, 3, 3disk, 4 , 4tape 1, 1分配一個(gè)設(shè)備,它的空閑數(shù)量就少一個(gè),如果回收一個(gè),它就加一個(gè),如果全部分配出去,你在申請的話,它就提示“占時(shí)無設(shè)備,請等待.” 。還加了一個(gè)輸出設(shè)備表。二,總功能模塊圖二,總功能模塊圖模擬操作系統(tǒng)五大功能模擬操作系統(tǒng)五大功能cpu 管理管理內(nèi)存管理內(nèi)存管理文件管理文件管理作業(yè)管理作業(yè)管理設(shè)備管理設(shè)備管理三,流程圖三,流程圖cpu 管理:管理:開始打開文件 jincheng.txt顯示進(jìn)程狀態(tài)結(jié)束開始選擇該變目錄創(chuàng)建文件刪除文件顯示目錄結(jié)束創(chuàng)建目錄刪除目錄輸入 exit內(nèi)存管理:
9、內(nèi)存管理:開始選擇申請空間撤銷作業(yè)顯示退出打開文件 fqu.txt結(jié)束文件管理:文件管理: 否 是4)設(shè)備管理:設(shè)備管理:開始選擇分配回收顯示退出結(jié)束5)作業(yè)管理:作業(yè)管理:開始打開文件 zye.txt顯示作業(yè)狀態(tài)結(jié)束四,使用說明四,使用說明1) 首先在 d 盤下建立三張表,表名分別是:jincheng.txt,fqu.txt,zye.txt,它們分別存放 cup 運(yùn)行的進(jìn)程,內(nèi)存存儲(chǔ)的作業(yè),還有作業(yè)管理的作業(yè)。(1)第一章表是進(jìn)程信息表:為 jincheng.txtnameztaitimeyouxianzyuana2505b16010.(2)第二章表內(nèi)存分給作業(yè)表 fqu.txtaddres
10、slongztai10032free .(3)第三章表作業(yè)分配表:zye.txt iddtimextimeyouxian18005002815301.2)運(yùn)行 cpu 管理首先要輸入進(jìn)程,所以首先輸入 d 盤下的文件 jincheng.txt 文件。打開它,使數(shù)據(jù)進(jìn)程進(jìn)入該系統(tǒng)里面運(yùn)行。還有作業(yè)管理要輸入 d 盤下的文件 zye.txt 文件。使作業(yè)數(shù)據(jù)進(jìn)入系統(tǒng)里面,進(jìn)行計(jì)算。而內(nèi)存管理側(cè)是,系統(tǒng)一運(yùn)行,它自動(dòng)打開文件。使里面的數(shù)據(jù)讀入系統(tǒng)里面來,不用輸入文件。另外文件管理就是自己在運(yùn)行時(shí),自己去創(chuàng)建和操作,修改。設(shè)備管理在程序里面以定義規(guī)定好,進(jìn)行分配和調(diào)用。五,程序清單五,程序清單#inc
11、lude#include#include#include#include#include#include#include#include#include#include#include/文件管理文件管理/ *目錄和文件的結(jié)構(gòu)定義目錄和文件的結(jié)構(gòu)定義*typedeftypedef structstruct filenodefilenode charchar name50;name50; /*/*目錄或文件的名字目錄或文件的名字*/*/ intint type;type; /*0/*0 代表目錄,代表目錄,1 1 代表普通文件代表普通文件*/*/ structstruct filenodefile
12、node *next;*next; /*/*指向下一個(gè)兄弟結(jié)點(diǎn)的指針指向下一個(gè)兄弟結(jié)點(diǎn)的指針*/*/ structstruct filenodefilenode *sub;*sub; /*/*指向第一個(gè)子結(jié)點(diǎn)的指針指向第一個(gè)子結(jié)點(diǎn)的指針*/*/ structstruct filenodefilenode *father;*father; /*/*指向父結(jié)點(diǎn)的指針指向父結(jié)點(diǎn)的指針*/*/ charchar size10;size10; /*/*如果是文件則表示文件的大小如果是文件則表示文件的大小*/*/dirfilenode;dirfilenode;dirfilenodedirfilenode
13、*workdir;*workdir; /定義當(dāng)前工作目錄定義當(dāng)前工作目錄dirfilenodedirfilenode root;root; /定義根目錄定義根目錄charchar path100;path100; /定義路徑信息定義路徑信息/初始化函數(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.fa
14、ther=null;root.father=null; strcpy(root.size,strcpy(root.size,文檔文檔);); workdir=&root;workdir=&root; strcpy(path,root);strcpy(path,root); /初始化新結(jié)點(diǎn)函數(shù)初始化新結(jié)點(diǎn)函數(shù)dirfilenodedirfilenode *init5()*init5() dirfilenodedirfilenode *p;*p; p=newp=new dirfilenode;dirfilenode; strcpy(,);strcpy(,); r
15、oot.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,存檔存檔);); returnreturn p;p; /1/1 改變目錄改變目錄voidvoid cd(charcd(char dirname)dirname) dirfilenodedirfilenode *p;*p; intint flag=0;flag=0; p=workdir-sub;
16、p=workdir-sub; if(p=null)if(p=null) coutcout錯(cuò)誤錯(cuò)誤,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=p-next; if(flag=1)if(flag=1) workdir=p;workdir=p; strcat(path,strcat(path, );); strcat(path,p-name);strcat(
17、path,p-name); coutcout工作目錄已進(jìn)入工作目錄已進(jìn)入dirnameendl;dirnameendl; elsecoutelsecout錯(cuò)誤錯(cuò)誤,dirname,dirname子目錄不存在子目錄不存在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,filesi
18、ze); p=workdir-sub;p=workdir-sub; if(p=null)if(p=null) workdir-sub=q;workdir-sub=q; coutfilenamecoutfilename文件創(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錯(cuò)誤錯(cuò)誤,filename,filename文件已存在文件已存在endl;next;p=p-next; if(flag=0)if(flag=0) p=wo
19、rkdir-sub;p=workdir-sub; while(p-next)p=p-next;while(p-next)p=p-next; p-next=q;p-next=q; coutfilenamecoutfilename文件創(chuàng)建成功文件創(chuàng)建成功endl;sub;p=workdir-sub; if(p=null)if(p=null) coutcout錯(cuò)誤錯(cuò)誤,filename,filename文件不存在文件不存在endl;type=1)if(p-type=1) if(!strcmp(p-name,filename)if(!strcmp(p-name,filename) flag=1;fla
20、g=1; break;break; p=p-next;p=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; coutfilenamecoutfilename文件已刪除文件
21、已刪除endl;endl; elseelse coutcout錯(cuò)誤錯(cuò)誤,filename,filename文件不存在文件不存在endl;type=0)if(p-type=0) cout.setf(2);cout.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; void
22、void dirs(dirfilenodedirs(dirfilenode *p,char*p,char str)/str)/顯示顯示 charchar newstr100;newstr100; dirfilenodedirfilenode *q;*q; coutstrcoutstr下子目錄及文件下子目錄及文件:endl;:endl; coutcout名稱名稱 類型類型 屬性屬性endl;sub)if(q-sub) strcpy(newstr,);strcpy(newstr,); strcat(newstr,str);strcat(newstr,str); strcat(newstr,);st
23、rcat(newstr,); strcat(newstr,q-name);strcat(newstr,q-name); dirs(q-sub,newstr);dirs(q-sub,newstr); q=p;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);str
24、cat(newstr,q-next-name); dirs(q-next-sub,newstr);dirs(q-next-sub,newstr); q=q-next;q=q-next; / 顯示所有目錄顯示所有目錄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=
25、null; q-father=workdir;q-father=workdir; strcpy(q-size,strcpy(q-size, );); p=workdir-sub;p=workdir-sub; if(p=null)if(p=null) 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錯(cuò)誤錯(cuò)誤,dirn
26、ame,dirname子目錄已子目錄已存在存在endl;next;p=p-next; if(flag=0)if(flag=0) p=workdir-sub;p=workdir-sub; while(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錯(cuò)誤錯(cuò)誤,dirname,dirname子目錄不存在子目錄不存在endl;type=0)if(p-type
27、=0) if(!strcmp(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) 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-ne
28、xt;q-next=p-next; deletedelete p;p; coutdirnamecoutdirname子目錄已刪除子目錄已刪除endl;endl; elseelse coutcout錯(cuò)誤錯(cuò)誤,dirname,dirname子目錄不存在子目錄不存在endl;endl; voidvoid fun5()fun5() intint len,flag,comm;len,flag,comm; charchar string50,filesize10;string50,filesize10; charchar command10;command10; charchar name40;name4
29、0; charchar *s;*s; initial3();initial3(); flag=1;flag=1; while(flag)while(flag) coutcout endl;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;
30、coutcout 設(shè)計(jì)者設(shè)計(jì)者: :pengyingyipengyingyi endl;endl; coutcout endl;#,path);printf(%s:#,path); 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!=n
31、ull)if(s!=null) *s=0;*s=0; strcpy(command,string);strcpy(command,string); /測試命令類型測試命令類型 if(!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) co
32、mm=2;comm=2; elseelse if(!strcmp(command,del)|!strcmp(command,del)if(!strcmp(command,del)|!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
33、(!strcmp(command,md)|!strcmp(command,md) comm=5;comm=5; elseelse if(!strcmp(command,rd)|!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;
34、comm=100; switch(comm)switch(comm) casecase 1:1: /1/1 改變目錄改變目錄 coutcoutname;cinname; cd(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,
35、s+1); coutcoutname;cinname; del(name);del(name); break;break; casecase 4:4: /4/4 顯示目錄顯示目錄 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
36、/0 退出系統(tǒng)退出系統(tǒng) flag=0;flag=0; break;break; default:default: coutcout命令錯(cuò)誤命令錯(cuò)誤endl;endl; /文件管理文件管理/作業(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
37、reach_minite;reach_minite; intint need_time;need_time; intint privilege;privilege; 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()initia
38、l2() intint i;i; for(i=0;imaxjob1;i+)for(i=0;imaxjob1;i+) jobsi.number=0;jobsi.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
39、=0;jobsi.start_time=0; jobsi.wait_time=0;jobsi.wait_time=0; jobsi.visited=0;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=
40、0;jobsi.visited=0; /讀入作業(yè)數(shù)據(jù)函數(shù)讀入作業(yè)數(shù)據(jù)函數(shù)voidvoid readdata2()readdata2() filefile *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錯(cuò)誤錯(cuò)誤, ,文件打不開文件打不開, ,請檢查文件名請檢查文件名:)endl;:)endl; elseelse while(!feof(fp)while(!feof(
41、fp) fscanf(fp,%dfscanf(fp,%d %d%d %d%d %d,&jobsquantity.number,&jobsquantity.reach_time,&jobs%d,&jobsquantity.number,&jobsquantity.reach_time,&jobsquantity.need_time,&jobsquantity.privilege);quantity.need_time,&jobsquantity.privilege); jobsquantity.reach_hour=jobsquantity.reach_time/100;jobsquantity
42、.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;-endl; cout.setf(2);cout.setf(2); coutsetw(10)coutsetw(10)作業(yè)號
43、作業(yè)號setw(12)setw(12)到達(dá)時(shí)間到達(dá)時(shí)間setw(14)setw(14) 所需時(shí)間所需時(shí)間( (分分)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_timesetw(14)jobsi.need_timesetw(14)jobsi.privilegesetw(14)jobsi.need_timesetw(14)
44、jobsi.privilegeendl;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 算法作業(yè)流算法作業(yè)流endl;endl; cout-cout-endl;-endl; cout.setf(2);cout.
45、setf(2); coutsetw(10)coutsetw(10)作業(yè)號作業(yè)號setw(12)setw(12)到達(dá)時(shí)間到達(dá)時(shí)間setw(12)setw(12) 開始時(shí)間開始時(shí)間setw(14)setw(14)周轉(zhuǎn)時(shí)間周轉(zhuǎn)時(shí)間( (分分)endl;)endl; current_hour=jobs0.reach_hour;current_hour=jobs0.reach_hour; current_minute=jobs0.reach_minite;current_minute=jobs0.reach_minite; for(i=0;iquantity;i+)for(i=0;iquantity;i
46、+) 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-jobsi.reach_minite)+jobsi.need_time;jobsi.reach_minite)+jobsi.ne
47、ed_time; coutsetw(10)jobsi.numbersetw(12)jobsi.reach_timecoutsetw(10)jobsi.numbersetw(12)jobsi.reach_timesetw(12)jobsi.start_timesetw(14)jobsi.wait_timesetw(12)jobsi.start_timesetw(14)jobsi.wait_timeendl;endl; current_hour=current_hour+(jobsi.need_time+current_minute)current_hour=current_hour+(jobsi
48、.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)時(shí)間總周轉(zhuǎn)時(shí)間:total_time:total_time 平均周轉(zhuǎn)時(shí)間平均周轉(zhuǎn)時(shí)間: :total_time/quantityendl;total_time/quanti
49、tyendl; /運(yùn)算時(shí)間短的作業(yè)優(yōu)先算法運(yùn)算時(shí)間短的作業(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; /輸出作業(yè)流輸出作業(yè)流 coutendl;coutendl; coutendlcoutendl時(shí)間短作業(yè)優(yōu)先算法作業(yè)流時(shí)間短作業(yè)優(yōu)先算法作
50、業(yè)流( (開始調(diào)度時(shí)刻為最開始調(diào)度時(shí)刻為最后一個(gè)作業(yè)到達(dá)系統(tǒng)的時(shí)間后一個(gè)作業(yè)到達(dá)系統(tǒng)的時(shí)間)endl;)endl; cout-cout-endl;-endl; cout.setf(2);cout.setf(2); coutsetw(10)coutsetw(10)作業(yè)號作業(yè)號setw(12)setw(12)到達(dá)時(shí)間到達(dá)時(shí)間setw(14)setw(14) 所需時(shí)間所需時(shí)間( (分分)setw(12)setw(12)開始時(shí)間開始時(shí)間setw(14)setw(14) 周轉(zhuǎn)時(shí)間周轉(zhuǎn)時(shí)間( (分分)endl;)endl; current_hour=jobsquantity-1.reach_hour;cu
51、rrent_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;jquantity;j+)for(j=0;jquantity;j+) if(jobsj.visited=0)&(jobsj.need_timecurr
52、ent_need_timif(jobsj.visited=0)&(jobsj.need_timecurrent_need_time)e) p=j;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
53、_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_timecoutsetw(10)jobsp.numbersetw(12)jobsp.reach_timesetw(14)jobsp.need_timesetw(12)jobsp.start_timesetw
54、(14)jobsp.need_timesetw(12)jobsp.start_timesetw(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.ne
55、ed_time+current_minute)%60; jobsp.visited=1;jobsp.visited=1; total_time+=jobsp.wait_time;total_time+=jobsp.wait_time; coutendlcoutendl總周轉(zhuǎn)時(shí)間總周轉(zhuǎn)時(shí)間:total_time:total_time 平均周轉(zhuǎn)時(shí)間平均周轉(zhuǎn)時(shí)間: :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; in
56、tint current_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)度時(shí)刻為最后一開始調(diào)度時(shí)刻為最后一個(gè)作業(yè)到達(dá)系統(tǒng)的時(shí)間個(gè)作業(yè)到達(dá)系統(tǒng)的時(shí)間)endl;)endl; cout-cout-endl;-endl; cout.se
57、tf(2);cout.setf(2); coutsetw(10)coutsetw(10)作業(yè)號作業(yè)號setw(12)setw(12)到達(dá)時(shí)間到達(dá)時(shí)間setw(14)setw(14) 1)setw(12)1)setw(12)開始時(shí)間開始時(shí)間setw(14)setw(14)周轉(zhuǎn)時(shí)間周轉(zhuǎn)時(shí)間( (分分)endl;)endl; current_hour=jobsquantity-1.reach_hour;current_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite;current_minute=jo
58、bsquantity-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)&(jobsj.privilegecurrent_privilegif(jobsj.visited=0)&(jobsj.privilegecurrent_privilege)e) p=j;p=j; current_privilege=jo
59、bsj.privilege;current_privilege=jobsj.privilege; 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_hour)*60+(current_minute-jobsp.reach_hour)*60+(current_minute-jobsp.reach_minite
60、)+jobsp.need_time;jobsp.reach_minite)+jobsp.need_time; coutsetw(10)jobsp.numbersetw(12)jobsp.reach_timecoutsetw(10)jobsp.numbersetw(12)jobsp.reach_timesetw(14)jobsp.privilegesetw(12)jobsp.start_timesetw(14)jobsp.privilegesetw(12)jobsp.start_timesetw(14)jobsp.wait_timeendl;setw(14)jobsp.wait_timeendl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度停車場排水系統(tǒng)施工合同規(guī)范文本3篇
- 固化劑采購合同6篇
- 編程軟件課程設(shè)計(jì)
- 抗腫瘤新藥行業(yè)專題
- 脫甲烷塔課程設(shè)計(jì)
- 2024幼兒園招生工作計(jì)劃(31篇)
- 算法課的課程設(shè)計(jì)
- 線上課程設(shè)計(jì)基本要素
- 算數(shù)運(yùn)算測試java課程設(shè)計(jì)
- 藥劑課程設(shè)計(jì)報(bào)告
- 寒假安全教育主題班會(huì)PPT-
- 學(xué)生資助手冊
- (完整版)聚乙烯課件
- 中國雷暴日多發(fā)區(qū)特征及雷電發(fā)展變化
- 20232023山東省高中學(xué)業(yè)水平測試會(huì)考題及答案政治
- 獨(dú)一味(正式稿2)
- 山西太原晉陽湖總體規(guī)劃城市設(shè)計(jì)景觀方案文本
- 干部業(yè)績相關(guān)信息采集表
- 八年級上綜合性學(xué)習(xí) 我們的互聯(lián)網(wǎng)時(shí)代 練習(xí)卷(含答案)
- 中西文化概論(第三版)PPT完整全套教學(xué)課件
- 食品批發(fā)銷售記錄制度
評論
0/150
提交評論