廣工_操作系統(tǒng)_實(shí)驗(yàn)報(bào)告_第1頁(yè)
廣工_操作系統(tǒng)_實(shí)驗(yàn)報(bào)告_第2頁(yè)
廣工_操作系統(tǒng)_實(shí)驗(yàn)報(bào)告_第3頁(yè)
廣工_操作系統(tǒng)_實(shí)驗(yàn)報(bào)告_第4頁(yè)
廣工_操作系統(tǒng)_實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告學(xué) 院_計(jì)算機(jī)學(xué)院_專 業(yè)_軟件工程_班 級(jí)_ _學(xué) 號(hào)_ _姓 名_ _指導(dǎo)教師 (2010年10 月)學(xué)號(hào): 姓名: 協(xié)作者:_實(shí)驗(yàn)_一_題目_ 進(jìn)程調(diào)度_第 周星期_ _一、實(shí)驗(yàn)?zāi)康挠酶呒?jí)語(yǔ)言編寫和調(diào)試一個(gè)進(jìn)程調(diào)度程序,以加深對(duì)進(jìn)程的概念及進(jìn)程調(diào)度算法的理解。二、實(shí)驗(yàn)內(nèi)容和要求編寫并調(diào)試一個(gè)模擬的進(jìn)程調(diào)度程序,采用“輪轉(zhuǎn)法”調(diào)度算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度。每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊(PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、優(yōu)先數(shù)、到達(dá)時(shí)間、需要運(yùn)行的時(shí)間、已用CPU時(shí)間、進(jìn)程狀態(tài)等。進(jìn)程的優(yōu)先數(shù)以及需要的運(yùn)行時(shí)間事先由人為指定(也可以隨機(jī)數(shù)產(chǎn)生)。如果運(yùn)行一個(gè)時(shí)間片后

2、進(jìn)程的已占用CPU時(shí)間已達(dá)到所需要的運(yùn)行時(shí)間,則撤銷該進(jìn)程,如果還未達(dá)到,則把它送回隊(duì)尾。三、實(shí)驗(yàn)主要儀器設(shè)備和材料實(shí)驗(yàn)環(huán)境硬件環(huán)境:IBM-PC 或兼容機(jī)軟件環(huán)境:C語(yǔ)言編程環(huán)境四、實(shí)驗(yàn)原理及設(shè)計(jì)方案1、實(shí)驗(yàn)原理將程序順序的輸入進(jìn)程隊(duì)列后,開(kāi)始執(zhí)行程序,當(dāng)運(yùn)行了一個(gè)時(shí)間片后,如果進(jìn)程所占的CPU時(shí)間達(dá)到所需的運(yùn)行時(shí)間時(shí),該進(jìn)程完成,并撤銷該進(jìn)程,否則則把進(jìn)程送回隊(duì)尾。2、設(shè)計(jì)方案用一個(gè)進(jìn)程控制塊(PCB)表示進(jìn)程。輸入進(jìn)程名稱,優(yōu)先級(jí),運(yùn)行時(shí)間后,通過(guò)模擬系統(tǒng)對(duì)進(jìn)程采用“輪轉(zhuǎn)法”調(diào)度,得到各個(gè)時(shí)間片進(jìn)程的運(yùn)行情況。3、相關(guān)數(shù)據(jù)結(jié)構(gòu)的說(shuō)明struct pcb/ 定義進(jìn)程控制塊 PCB char

3、 name10;/ 進(jìn)程名稱 char state;/ 進(jìn)程當(dāng)前狀態(tài) int super;/ 進(jìn)程優(yōu)先級(jí) int ntime;/ 進(jìn)程運(yùn)行所需時(shí)間 int rtime;/ 進(jìn)程已運(yùn)行時(shí)間 struct pcb* link;/ 連接到隊(duì)列中下一個(gè)進(jìn)程的指針4、程序流程圖(詳細(xì))5、給出程序中源程序名和可執(zhí)行程序名。源程序名:pcb.cpp可執(zhí)行程序名:pcb.exe輸入數(shù)據(jù):in.txt輸出數(shù)據(jù):out.txt6、程序清單(源程序中要附有詳細(xì)的注釋)#include #define getpch(type) (type*)malloc(sizeof(type)struct pcb/ 定義進(jìn)程控制

4、塊 PCB char name10;/ 進(jìn)程名稱 char state;/ 進(jìn)程當(dāng)前狀態(tài) int super;/ 進(jìn)程優(yōu)先級(jí) int ntime;/ 進(jìn)程運(yùn)行所需時(shí)間 int rtime;/ 進(jìn)程已運(yùn)行時(shí)間 struct pcb* link;*ready,*p,*rear;typedef struct pcb PCB;void push()/ 建立將進(jìn)程按 FCFS 排入隊(duì)列的函數(shù)rear-link = p;rear = p;p-link = NULL;p-state = w; / 插入隊(duì)尾后把狀態(tài)改成w void input()/ 建立進(jìn)程控制塊函數(shù)int i,num;printf( 請(qǐng)輸入

5、進(jìn)程數(shù)量 );scanf(%d,&num);p=getpch(PCB); / 給 p 分配空間 for( i=0; iname);printf( 輸入進(jìn)程優(yōu)先等級(jí):);scanf(%d,&p-super);printf( 輸入進(jìn)程所需運(yùn)行時(shí)間:);scanf(%d,&p-ntime);p-rtime = 0; / 為進(jìn)程的已運(yùn)行時(shí)間初始化為0 p-state = w; / 為進(jìn)程的狀態(tài)初始化為 w p-link = NULL; push();void disp(PCB* pr)/ 建立進(jìn)程顯示函數(shù) printf(n qnametstatetsupertndtimetruntime n); pr

6、intf(| %st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n);void check()/ 建立進(jìn)程查看函數(shù) system(cls); PCB *pr; pr=ready-link; while(pr!=NULL) / 隊(duì)列從頭到尾顯示進(jìn)程 disp(pr); pr = pr-link; void destroy()/ 建立進(jìn)程撤消函數(shù) disp(p); printf(n 進(jìn)程 %s 已完成。n,p-name);

7、free(p); / 釋放 p void running() / 建立進(jìn)程就緒函數(shù) p-rtime+; / 已運(yùn)行時(shí)間增加 if(p-rtime = p-ntime) / 當(dāng)已運(yùn)行時(shí)間等于所需運(yùn)行時(shí)間時(shí) p-state = f; / 狀態(tài)更新為f ready-link = p-link; destroy(); / 調(diào)用destory()函數(shù),釋放p p = ready-link; system(pause); / 暫停,可了解當(dāng)前狀態(tài) else / 如果進(jìn)程還沒(méi)達(dá)到所需運(yùn)行時(shí)間,則把進(jìn)程送入隊(duì)尾 ready-link = p-link; push(); p = ready-link; int

8、main()/ 主函數(shù) int t=0; / 定義t表示已用的時(shí)間片 rear = getpch(PCB); / 為rear分配內(nèi)存 ready = rear; / 把ready指向rear input(); / 輸入進(jìn)程 p = ready-link;check();while(ready-link) / 當(dāng)進(jìn)程隊(duì)列中還有進(jìn)程時(shí)運(yùn)行 t+; p-state = r; / 將進(jìn)程狀態(tài)設(shè)置為 ready check(); printf(第%d個(gè)時(shí)間片:,t); printf(正在運(yùn)行n); system(pause); / 顯示正在運(yùn)行的進(jìn)程隊(duì)列 running(); check(); prin

9、tf(第%d個(gè)時(shí)間片:,t); printf(運(yùn)行完成n); system(pause); / 顯示運(yùn)行完成后的進(jìn)程隊(duì)列 printf(n全部進(jìn)程已運(yùn)行完成!n);system(pause);return 0;五、實(shí)驗(yàn)結(jié)果及分析1、運(yùn)行結(jié)果(要求截圖)(能動(dòng)態(tài)說(shuō)明執(zhí)行結(jié)果)(要求截圖尺寸大小適中)(1)輸入數(shù)據(jù)(2)開(kāi)始運(yùn)行,進(jìn)程隊(duì)列如圖(3)經(jīng)過(guò)3個(gè)時(shí)間片,進(jìn)程【333】完成(4)經(jīng)過(guò)9個(gè)時(shí)間片,進(jìn)程【555】完成(5)經(jīng)過(guò)10個(gè)時(shí)間片,進(jìn)程【111】完成(6)經(jīng)過(guò)12個(gè)時(shí)間片,進(jìn)程【444】完成(7)經(jīng)過(guò)13個(gè)時(shí)間片,進(jìn)程【222】完成(8)全部進(jìn)程運(yùn)行完成2、實(shí)驗(yàn)結(jié)果的分析及說(shuō)明程序輸出

10、與編寫程序的目的一致,直觀的反應(yīng)了輪轉(zhuǎn)法進(jìn)程調(diào)度的運(yùn)行規(guī)則,顯示了完成各個(gè)進(jìn)程運(yùn)行所需要的時(shí)間,以及各個(gè)進(jìn)程完成的順序。六、調(diào)試總結(jié)及心得體會(huì)(調(diào)試過(guò)程中小結(jié)、所遇問(wèn)題及解決方法、心得體會(huì))整個(gè)調(diào)試過(guò)程中并未遇到太大的問(wèn)題,程序編寫過(guò)程也很順利,運(yùn)行程序模擬進(jìn)程調(diào)度之后,更直觀的了解了輪轉(zhuǎn)法進(jìn)程調(diào)度的過(guò)程。七、思考題1、 分析不同調(diào)度算法的調(diào)度策略,比較不同調(diào)度算法的優(yōu)缺點(diǎn),總結(jié)它們的適用范圍。答:動(dòng)態(tài)有限權(quán)算法:動(dòng)態(tài)優(yōu)先權(quán)是指在創(chuàng)建進(jìn)程時(shí)所創(chuàng)建的優(yōu)先權(quán),會(huì)隨進(jìn)程的推進(jìn)或者等待時(shí)間的增加而改變,以便獲得更好的調(diào)度性能。處理機(jī)為每個(gè)進(jìn)程分配一定的時(shí)間片,在就緒隊(duì)列中,優(yōu)先權(quán)高的進(jìn)程將優(yōu)先獲得處理

11、機(jī),進(jìn)程在進(jìn)去運(yùn)行完響應(yīng)的時(shí)間片后,如沒(méi)完成,優(yōu)先權(quán)減1,從新回到就緒隊(duì)列等待分配處理機(jī)。時(shí)間片的輪轉(zhuǎn)法:系統(tǒng)將所有進(jìn)程排成一個(gè)隊(duì)列,按照先來(lái)先服務(wù)的原則,對(duì)隊(duì)列首的進(jìn)程進(jìn)行處理,每個(gè)進(jìn)程在用完自己的時(shí)間片后,從新回到隊(duì)尾進(jìn)行排隊(duì)。每運(yùn)行一次,進(jìn)程的需要時(shí)間減1,直到就緒隊(duì)列為空!學(xué)號(hào): 姓名: 協(xié)作者:_實(shí)驗(yàn)_二_題目_ 作業(yè)調(diào)度_第 周星期_ _一、實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)要求學(xué)生模擬作業(yè)調(diào)度的實(shí)現(xiàn),用高級(jí)語(yǔ)言編寫和調(diào)試一個(gè)或多個(gè)作業(yè)調(diào)度的模擬程序,了解作業(yè)調(diào)度在操作系統(tǒng)中的作用,以加深對(duì)作業(yè)調(diào)度算法的理解。二、實(shí)驗(yàn)內(nèi)容和要求作業(yè)調(diào)度算法:采用基于先來(lái)先服務(wù)的調(diào)度算法??梢詤⒖颊n本中的方法進(jìn)行設(shè)計(jì)。

12、 對(duì)于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數(shù)量、調(diào)度作業(yè)時(shí)必須考慮到每個(gè)作業(yè)的資源要求。三、實(shí)驗(yàn)主要儀器設(shè)備和材料硬件環(huán)境:IBM-PC或兼容機(jī)軟件環(huán)境:C語(yǔ)言編程環(huán)境四、實(shí)驗(yàn)原理及設(shè)計(jì)方案1、實(shí)驗(yàn)原理采用多道程序設(shè)計(jì)方法的操作系統(tǒng),在系統(tǒng)中要經(jīng)常保留多個(gè)運(yùn)行的作業(yè),以提高系統(tǒng)效率。作業(yè)調(diào)度從系統(tǒng)已接納的暫存在輸入井中的一批作業(yè)中挑選出若干個(gè)可運(yùn)行的作業(yè),并為這些被選中的作業(yè)分配所需的系統(tǒng)資源。對(duì)被選中運(yùn)行的作業(yè)必須按照它們各自的作業(yè)說(shuō)明書規(guī)定的步驟進(jìn)行控制。2、設(shè)計(jì)方案(1)作業(yè)調(diào)度程序負(fù)責(zé)從輸入井選擇若干個(gè)作業(yè)進(jìn)入主存,為它們分配必要的資源,當(dāng)它們能夠被進(jìn)程調(diào)度選中時(shí),就可占用處理器

13、運(yùn)行。作業(yè)調(diào)度選擇一個(gè)作業(yè)的必要條件是系統(tǒng)中現(xiàn)有的尚未分配的資源可滿足該作業(yè)的資源要求。但有時(shí)系統(tǒng)中現(xiàn)有的尚未分配的資源既可滿足某個(gè)作業(yè)的要求也可滿足其它一些作業(yè)的要求,那么,作業(yè)調(diào)度必須按一定的算法在這些作業(yè)中作出選擇。先來(lái)先服務(wù)算法是按照作業(yè)進(jìn)入輸入井的先后次序來(lái)挑選作業(yè),先進(jìn)入輸入井的作業(yè)優(yōu)先被挑選,當(dāng)系統(tǒng)中現(xiàn)有的尚未分配的資源不能滿足先進(jìn)入輸入井的作業(yè)時(shí),那么順序挑選后面的作業(yè)。(2) 假定某系統(tǒng)可供用戶使用的主存空間共100k,并有5臺(tái)磁帶機(jī)。3、相關(guān)數(shù)據(jù)結(jié)構(gòu)的說(shuō)明struct time/ 定義一個(gè)時(shí)間結(jié)構(gòu)體 int h; int m; t;struct jcb/ 定義一個(gè)作業(yè)結(jié)構(gòu)已

14、 char name10;/ 作業(yè)名稱 struct time submittime;/ 提交時(shí)間 struct time starttime;/ 開(kāi)始時(shí)間 struct time needtime;/ 需要運(yùn)行的時(shí)間 struct time finishtime;/ 完成時(shí)間 char state;/ 狀態(tài) struct jcb* link;/ 連接到下一個(gè)作業(yè)的指針;4、程序流程圖(詳細(xì))5、給出程序中源程序名和可執(zhí)行程序名。源程序名:jcb.cpp可執(zhí)行程序名:jcb.exe輸入數(shù)據(jù):in.txt輸出數(shù)據(jù):out.txt6、程序清單(源程序中要附有詳細(xì)的注釋)#include#inclu

15、de#define getpch(type) (type*)malloc(sizeof(type)struct time/ 定義一個(gè)時(shí)間結(jié)構(gòu)體 int h; int m; t;struct jcb/ 定義一個(gè)作業(yè)結(jié)構(gòu)已 char name10;/ 作業(yè)名稱 struct time submittime;/ 提交時(shí)間 struct time starttime;/ 開(kāi)始時(shí)間 struct time needtime;/ 需要運(yùn)行的時(shí)間 struct time finishtime;/ 完成時(shí)間 char state;/ 狀態(tài) struct jcb* link;/ 連接到下一個(gè)作業(yè)的指針*read

16、y,*p,*rear;typedef struct jcb JCB;int num;void push()/ 建立將進(jìn)程按 FCFS 排入隊(duì)列的函數(shù)rear-link = p;rear = p;void disp(JCB* pr)/ 建立作業(yè)顯示函數(shù) printf(n nametstatetsubmittimetneedtimetstarttimetfinishtimettime n); printf(| %st,pr-name); printf(|%ct,pr-state); printf(|%d:%dtt,pr-submittime.h,pr-submittime.m); printf(|

17、%d:%dtt,pr-needtime.h,pr-needtime.m); printf(|%d:%dtt,pr-starttime.h,pr-starttime.m); printf(|%d:%dtt,pr-finishtime.h,pr-finishtime.m); printf(|%d:%dtt,pr-finishtime.h-pr-submittime.h,pr-finishtime.m-pr-submittime.m); printf(n);void input()/ 建立作業(yè)控制塊函數(shù)int i;printf( 請(qǐng)輸入作業(yè)數(shù)量 );scanf(%d,&num);p=getpch(J

18、CB); / 給 p 分配空間 for( i=0; iname);printf( 輸入作業(yè)提交時(shí)間(h:m):);scanf(%d:%d,&p-submittime.h,&p-submittime.m);printf( 輸入作業(yè)所需運(yùn)行時(shí)間(h:m):);scanf(%d:%d,&p-needtime.h,&p-needtime.m);printf(n);p-state = w; / 為作業(yè)的狀態(tài)初始化為 w p-link = NULL; push(); p = NULL;void running() / 建立作業(yè)就緒函數(shù) if(p-submittime.h submittime.h = t.

19、h & p-submittime.m starttime.h=t.h; / 當(dāng)提交時(shí)有程序在運(yùn)行 p-starttime.m=t.m;/ 則開(kāi)始時(shí)間等于上一程序運(yùn)行完成時(shí)間 else/ 否則開(kāi)始時(shí)間等于提交時(shí)間 t.h=p-submittime.h; t.m=p-submittime.m; p-starttime.h=t.h; p-starttime.m=t.m; t.h=p-needtime.h+t.h; t.m=p-needtime.m+t.m; if(t.m=60) t.h+; t.m-=60; p-finishtime.h=t.h; p-finishtime.m=t.m; p-stat

20、e=f; push(); int main()/ 主函數(shù) /freopen(in.txt,r,stdin); /freopen(out.txt,w,stdout); int i; rear = getpch(JCB); ready = getpch(JCB); rear = ready; input(); p=ready-link; t.h=p-submittime.h; t.m=p-submittime.m; printf(n); for(i=0;ilink; p=ready-link; system(pause); return 0;五、實(shí)驗(yàn)結(jié)果及分析1、運(yùn)行結(jié)果(要求截圖)(能動(dòng)態(tài)說(shuō)明執(zhí)

21、行結(jié)果)(要求截圖尺寸大小適中)輸入數(shù)據(jù):輸出結(jié)果:2、實(shí)驗(yàn)結(jié)果的分析及說(shuō)明根據(jù)實(shí)驗(yàn)輸入,輸出了運(yùn)行后各個(gè)作業(yè)的開(kāi)始時(shí)間,完成時(shí)間以及周轉(zhuǎn)時(shí)間。六、調(diào)試總結(jié)及心得體會(huì)(調(diào)試過(guò)程中小結(jié)、所遇問(wèn)題及解決方法、心得體會(huì))有了第一個(gè)實(shí)驗(yàn)的基礎(chǔ),在這個(gè)實(shí)驗(yàn)中,除了在處理小時(shí)與分鐘的轉(zhuǎn)換上花費(fèi)了點(diǎn)時(shí)間之外,其余的部分都完成的比較順利。七、思考題1、寫出每種算法的調(diào)度策略,最后比較各種算法的優(yōu)缺點(diǎn)。答:先來(lái)先服務(wù)算法是根據(jù)作業(yè)的進(jìn)入時(shí)間來(lái)排序,到達(dá)時(shí)間短的先運(yùn)行,優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是運(yùn)行時(shí)間慢。短作業(yè)優(yōu)先算法是根椐作業(yè)的估計(jì)運(yùn)行時(shí)間來(lái)排序,估計(jì)運(yùn)行時(shí)間短的先運(yùn)行,優(yōu)點(diǎn)是運(yùn)行時(shí)間快,缺點(diǎn)是實(shí)現(xiàn)起來(lái)比較復(fù)雜。

22、2、選擇調(diào)度算法的依據(jù)是什么?答:如果作業(yè)要求的速度不高,而且作業(yè)比較小型,那就最好用先來(lái)先服務(wù)算法。如果作業(yè)要求的速度高,作業(yè)流程復(fù)雜,那就最好用短作業(yè)優(yōu)先算法。學(xué)號(hào): 姓名: 協(xié)作者:_實(shí)驗(yàn)_四_題目 主存空間的分配和回收_第 周星期_ 一、實(shí)驗(yàn)?zāi)康氖煜ぶ鞔娴姆峙渑c回收。理解在不同的存儲(chǔ)管理方式下,如何實(shí)現(xiàn)主存空間的分配與回收。掌握動(dòng)態(tài)分區(qū)分配方式中的數(shù)據(jù)結(jié)構(gòu)和分配算法及動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式及其實(shí)現(xiàn)過(guò)程。二、實(shí)驗(yàn)內(nèi)容和要求主存的分配和回收的實(shí)現(xiàn)是與主存儲(chǔ)器的管理方式有關(guān)的。所謂分配,就是解決多道作業(yè)或多進(jìn)程如何共享主存空間的問(wèn)題。所謂回收,就是當(dāng)作業(yè)運(yùn)行完成時(shí)將作業(yè)或進(jìn)程所占的主存空間歸還

23、給系統(tǒng)??勺兎謪^(qū)管理是指在處理作業(yè)過(guò)程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的需求,并且分區(qū)個(gè)數(shù)是可以調(diào)整的。當(dāng)要裝入一個(gè)作業(yè)時(shí),根據(jù)作業(yè)需要的主存量查看是否有足夠的空閑空間,若有,則按需要量分割一個(gè)分區(qū)分配給該作業(yè);若無(wú),則作業(yè)不能裝入,作業(yè)等待。隨著作業(yè)的裝入、完成,主存空間被分成許多大大小小的分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。實(shí)驗(yàn)要求使用可變分區(qū)存儲(chǔ)管理方式,分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)采用空閑分區(qū)表和空閑分區(qū)鏈來(lái)進(jìn)行,分區(qū)分配中所用的算法采用首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三種算法來(lái)實(shí)現(xiàn)主存的分配與回收。同時(shí),要求設(shè)計(jì)一個(gè)實(shí)用友好的用戶界面,并顯示分配與回收的過(guò)程。三、

24、實(shí)驗(yàn)主要儀器設(shè)備和材料硬件環(huán)境:IBM-PC或兼容機(jī)軟件環(huán)境:VC+ 6.0四、實(shí)驗(yàn)原理及設(shè)計(jì)方案1、實(shí)驗(yàn)原理在該算法中,把主存中所有空閑區(qū)按其物理地址遞增的次序排列。在為作業(yè)分配存儲(chǔ)空間時(shí),從上次找到的空閑分區(qū)的下一個(gè)空閑分區(qū)開(kāi)始查找,直到找到第一個(gè)能滿足要求的空閑區(qū),從中劃出與請(qǐng)求的大小相等的存儲(chǔ)空間分配給作業(yè),余下的空閑區(qū)仍留在空閑區(qū)表或鏈中。2、設(shè)計(jì)方案(1)初始化空閑分區(qū);(2)反復(fù)對(duì)現(xiàn)有的空閑分區(qū)進(jìn)行進(jìn)程創(chuàng)建和撤消,即內(nèi)存分配和回收;(3)退出。3、相關(guān)數(shù)據(jù)結(jié)構(gòu)的說(shuō)明struct zoneint size; / 區(qū)域的大小 int state; / 區(qū)域的狀態(tài) char name1

25、0; / 區(qū)域的名稱 struct zone *link; / 連接到下一區(qū)域的指針 ; 4、程序流程圖(詳細(xì))5、給出程序中源程序名和可執(zhí)行程序名。源程序名:memory.cpp可執(zhí)行程序名:memory.exe輸入數(shù)據(jù):in.txt輸出數(shù)據(jù):out.txt6、程序清單(源程序中要附有詳細(xì)的注釋)#include #include #define MAX 5struct page / 定義一個(gè)頁(yè)表 page int num; / 頁(yè)號(hào) char imformation100; / 頁(yè)表信息 page * next; / 指向下一個(gè)頁(yè)表的指針 *address,*memory; / 定義一個(gè)指

26、令地址指針和主存指針 void print(page *pp) / 輸出頁(yè)表 printf(num:t%dn,pp-num); printf(imformation:t%snn,pp-imformation); void AddToAddress() / 向指令地址添加頁(yè)表 int a; page *p,*pp; p = address; while(1) printf(please input num:); scanf(%d,&a); if(a) pp = (page *)malloc(sizeof(page); / 分配內(nèi)存空間 pp-num = a; printf(please inpu

27、t imformation:); scanf(%s,pp-imformation); pp-next = NULL; p-next = pp; / 把頁(yè)表連接到address后 p = pp; print(p); pp = NULL; free(pp); else return; void init() / 初始化程序,為address和memory分配內(nèi)存空間 address = (page *)malloc(sizeof(page); memory = (page *)malloc(sizeof(page); AddToAddress();bool IsInMemory(int n) /

28、判斷頁(yè)號(hào)是否已在主存內(nèi) page * p; p = memory-next; while(NULL != p) if(p-num = n) printf(is in memoryn); return 1; p = p-next; printf(is not in memoryn); return 0;bool IsMemoryFull() / 判斷主存是否已滿 page *p; int i = 0; p = memory-next; while(NULL != p) i+; p = p-next; if(i = MAX) / 主存中頁(yè)表的數(shù)量達(dá)到 MAX 時(shí),主存已滿 printf(is fu

29、lln); return 1; else printf(is not fulln); return 0; void DeletePage() / 用 FIFO 算法淘汰一頁(yè) page *p; p = memory; memory = p-next; free(p);void AddToMemory(page *pp) / 向主存調(diào)入當(dāng)前頁(yè)表 page *p; p = memory; while(NULL != p-next) p = p-next; p-next = pp;int main() init(); /初始化 page * p; page * pp; p = address; p =

30、 p-next; while(p) if(!IsInMemory(p-num) / 判斷 p 是否已在主存內(nèi) if(IsMemoryFull() / 判斷 主存是否已滿 DeletePage(); / 用 FIFO 算法淘汰一頁(yè) printf(n); AddToMemory(p); / 向主存調(diào)入當(dāng)前頁(yè)表 print(p); pp = p; p = p-next; pp-next = NULL; printf(n-memory:n); / 打印當(dāng)前主存區(qū)內(nèi)情況 p = memory-next; while(p) print(p); p = p-next; system(pause);五、實(shí)驗(yàn)結(jié)

31、果及分析1、運(yùn)行結(jié)果(要求截圖)(能動(dòng)態(tài)說(shuō)明執(zhí)行結(jié)果)(要求截圖尺寸大小適中)輸入命令:task1 new 130輸入命令:task2new60輸入命令:task3new100輸入命令:task2delete60輸入命令:task4new200輸入命令:task3delete100輸入命令:task1delete130輸入命令:task5new140輸入命令:task6new60輸入命令:task7new50輸入命令:task 3 new 50 (錯(cuò)誤的命令)輸入命令:quit 結(jié)束2、實(shí)驗(yàn)結(jié)果的分析及說(shuō)明本實(shí)驗(yàn)用了一條鏈表將所有的內(nèi)存都連接起來(lái),在之中按照書上要求的算法,分別執(zhí)行了每一條命令

32、,結(jié)果完全正確,對(duì)錯(cuò)誤的命令也能夠及時(shí)的判斷出來(lái)。六、調(diào)試總結(jié)及心得體會(huì)(調(diào)試過(guò)程中小結(jié)、所遇問(wèn)題及解決方法、心得體會(huì))通過(guò)前幾個(gè)實(shí)驗(yàn),對(duì)鏈表又有了深刻的了解,所以在這個(gè)對(duì)鏈表操作更為復(fù)雜的實(shí)驗(yàn)中,感覺(jué)游刃有余,對(duì)內(nèi)存空間的開(kāi)辟以及釋放有了更深刻的了解,整個(gè)程序在編寫的過(guò)程中也沒(méi)有碰到太大的困難,最主要是在編寫之前已經(jīng)深刻的把整個(gè)構(gòu)思在大腦中了。七、思考題1、內(nèi)存的主要分配方式有哪些?回收時(shí)可能出現(xiàn)的什么情況?應(yīng)怎樣處理這些情況?答:有定分區(qū)分配和動(dòng)態(tài)分區(qū)分配兩種,回收時(shí)可能出現(xiàn)內(nèi)存分區(qū)被切成若干在小不等小分區(qū),過(guò)小的分區(qū)浪費(fèi)內(nèi)存資源,這要求我們要用緊湊技術(shù)修整。2、動(dòng)態(tài)分區(qū)管理的常用內(nèi)存分配

33、算法有哪幾種?比較它們各自的使用范圍。答:有首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三種。首次適應(yīng)算法適用于小型作業(yè),而且分配速度不怎么要求的作業(yè),循環(huán)首次適應(yīng)算法適用于一些大的作業(yè),避免大作業(yè)長(zhǎng)期得不到分配,最佳適應(yīng)算法適應(yīng)于對(duì)分配速度要求高,作業(yè)容量比較大的作業(yè)。學(xué)號(hào): 姓名: 協(xié)作者:_實(shí)驗(yàn)_五_題目_ 文件系統(tǒng)_第 周星期_ _一、實(shí)驗(yàn)?zāi)康哪M文件系統(tǒng)實(shí)現(xiàn)的基本功能,了解文件系統(tǒng)的基本結(jié)構(gòu)和文件的各種管理方法,加深理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實(shí)現(xiàn)。通過(guò)用高級(jí)語(yǔ)言編寫和調(diào)試一個(gè)簡(jiǎn)單的文件系統(tǒng),模擬文件管理的工作過(guò)程,從而對(duì)各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過(guò)程有比較深入的了解。二、實(shí)驗(yàn)

34、內(nèi)容和要求編程模擬一個(gè)簡(jiǎn)單的文件系統(tǒng),實(shí)現(xiàn)文件系統(tǒng)的管理和控制功能。要求本文件系統(tǒng)采用兩級(jí)目錄,即設(shè)置主文件目錄MFD和用戶文件目錄UED。另外,為打開(kāi)文件設(shè)置運(yùn)行文件目錄AFD。設(shè)計(jì)一個(gè)10個(gè)用戶的文件系統(tǒng),每次用戶可保存10個(gè)文件,一次運(yùn)行用戶可以打開(kāi)5個(gè)文件,并對(duì)文件必須設(shè)置保護(hù)措施。在用戶程序中通過(guò)使用文件系統(tǒng)提供的Create、open、read、write、close、delete等文件命令,對(duì)文件進(jìn)行操作三、實(shí)驗(yàn)主要儀器設(shè)備和材料硬件環(huán)境:IBM-PC或兼容機(jī)軟件環(huán)境:C語(yǔ)言編程環(huán)境四、實(shí)驗(yàn)原理及設(shè)計(jì)方案1、實(shí)驗(yàn)原理運(yùn)用二級(jí)目錄思想來(lái)模擬文件系統(tǒng)。為每個(gè)用戶建立一個(gè)單獨(dú)的用戶文件

35、目錄UFD。這些文件目錄具有相似的結(jié)構(gòu),它由用戶文件的文件塊組成。此外,在系統(tǒng)再建立一個(gè)主文件目錄MFD;在主文件目錄中,每個(gè)用戶目錄都占有一個(gè)目錄項(xiàng),其目錄項(xiàng)中包含文件名和指向該文件目錄文件的指針。2、設(shè)計(jì)方案按照課本要求,為每一個(gè)命令設(shè)置一個(gè)函數(shù),再由主界面接受命令,進(jìn)行判斷以及調(diào)用函數(shù)。3、相關(guān)數(shù)據(jù)結(jié)構(gòu)的說(shuō)明struct MDF/ 定義一個(gè)用來(lái)存放user和ufd的結(jié)構(gòu)體char username200;/ usernameint length;/ user 文件目錄長(zhǎng)度struct UFD *userufd;/ 指向user文件目錄的指針struct MDF *link;/ 指向下一個(gè)

36、user的指針*mdfhead,*mdfptr;/ 頭指針struct UFD/ 定義用來(lái)存放files的鏈表char filename200;/ filenameint num;/ 保護(hù)碼int length;/ file長(zhǎng)度struct UFD *link;/ 指向下一個(gè)file的指針*ufdptr;struct AFD/ 定義一個(gè)用來(lái)存放已經(jīng)打開(kāi)的files的鏈表char username200;/ usernamechar filename200;/ filenameint num;/ 保護(hù)碼int state;/ 讀寫指針int length;/ file長(zhǎng)度struct AFD *

37、link;/ 指向下一個(gè)file的指針*afdhead,*afdptr;/ 頭指針4、程序流程圖(詳細(xì))5、給出程序中源程序名和可執(zhí)行程序名。源程序名:file.cpp可執(zhí)行程序名:file.exe6、程序清單(源程序中要附有詳細(xì)的注釋)#include #include #include struct MDF/ 定義一個(gè)用來(lái)存放user和ufd的結(jié)構(gòu)體char username200;/ usernameint length;/ user 文件目錄長(zhǎng)度struct UFD *userufd;/ 指向user文件目錄的指針struct MDF *link;/ 指向下一個(gè)user的指針*mdfh

38、ead,*mdfptr;/ 頭指針struct UFD/ 定義用來(lái)存放files的鏈表char filename200;/ filenameint num;/ 保護(hù)碼int length;/ file長(zhǎng)度struct UFD *link;/ 指向下一個(gè)file的指針*ufdptr;struct AFD/ 定義一個(gè)用來(lái)存放已經(jīng)打開(kāi)的files的鏈表char username200;/ usernamechar filename200;/ filenameint num;/ 保護(hù)碼int state;/ 讀寫指針int length;/ file長(zhǎng)度struct AFD *link;/ 指向下一個(gè)

39、file的指針*afdhead,*afdptr;/ 頭指針void init();bool createfile(char* username,char* filename,int num);bool deletefile(char * username,char * filename);bool openfile(char * username,char * filename);bool closefile(char * username,char * filename);bool readfile(char * username,char * filename);bool writefil

40、e(char * username,char * filename);void init()/ 初始化函數(shù)afdhead = (AFD *)malloc(sizeof(AFD);afdhead-link = NULL;afdhead-length = 0;/ 為afdhead分配空間,并link = null,length = 0afdptr = afdhead;int i = 10;mdfhead = (MDF *)malloc(sizeof(MDF);mdfptr = mdfhead;/ 為mdfhead分配空間struct MDF *mp;struct UFD *up;char str2

41、00;while(i-)/ 初始化10個(gè)用戶名mp = (MDF *)malloc(sizeof(MDF);/ 為每個(gè)user分配空間,并link = nullsprintf(str,user%d,10-i); strcpy(mp-username,str);/ 從user1到user10mp-length = 0;up = (UFD *)malloc(sizeof(UFD);/ 為每個(gè)user分配一個(gè)ufd,并link = null,length = 0mp-userufd = up;mp-userufd-length = 0;mp-userufd-link = NULL;mp-link =

42、 NULL;mdfptr-link = mp;mdfptr = mp;up = NULL;mp = NULL;bool createfile(char* username,char* filename,int num)/ create函數(shù)bool flag = false;/ 定義一個(gè)bool類型的flag用來(lái)做返回值mdfptr = mdfhead-link;struct UFD *up;while(mdfptr)/ 從第一個(gè)user開(kāi)始尋找usernameif(!strcmp(mdfptr-username,username)/ 找到username之后if(mdfptr-length =10)/ 如果user保存文件數(shù)超過(guò)10個(gè),則提示錯(cuò)誤并返回printf(error! the user have 10 files.n);return flag;ufdptr = mdfptr-userufd;up = ufdptr-link;while(up)/ 在user的ufd中查找filenameif(!strcmp(up-filena

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論