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

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實驗報告學(xué) 院 計算機學(xué)院 專 業(yè) 計算機科學(xué)與技術(shù) 班 級 2班 學(xué) 號 姓 名 指導(dǎo)教師 (200 9年5 月) 計算機 學(xué)院 計算機科學(xué)與技術(shù) 專業(yè) 2 班 學(xué)號: 姓名: 協(xié)作者:_ 教師評定: 考勤情況程序運行情況程序質(zhì)量實驗技能創(chuàng)新精神實驗報告設(shè)計文檔實驗_一_題目_ 進程調(diào)度_ _ 第 5 周星期 1 實驗_二_題目_ 作業(yè)調(diào)度_ 第 7 周星期 1 實驗_三(綜合性)題目_主存空間的分配與回收_ 第 9 周星期 1 實驗_四 _題目_ 文件系統(tǒng) _第 11 周星期 1 實驗平臺:(宋體5號字)1、 計算機及操作系統(tǒng):臺式機,windows xp sp32、 編程環(huán)境:m

2、icrosoft visual c+ 6.0源程序名和可執(zhí)行程序名:實驗一:時間片輪轉(zhuǎn)法.cpp 時間片輪轉(zhuǎn)法.exe實驗二:作業(yè)調(diào)度.cpp和作業(yè)調(diào)度.exe實驗三(綜合性):主存空間的分配和回收.cpp和主存空間的分配和回收.exe實驗四:文件系統(tǒng).cpp和文件系統(tǒng).exe備注:學(xué)號:3106006475 姓名: 楊振風(fēng) 協(xié)作者:_實驗_一_題目_ 進程調(diào)度_第 5 周星期_ 一 _一、實驗?zāi)康?用高級語言編寫和調(diào)試一個進程調(diào)度程序,以加深對進程的概念及進程調(diào)度算法的理解二、實驗內(nèi)容和要求設(shè)計一個有 n個進程共行的進程調(diào)度程序。進程調(diào)度算法: 采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機分配給

3、優(yōu)先數(shù)最高的進程)和先來先服務(wù)算法。 每個進程有一個進程控制塊( pcb)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數(shù)、到達時間、需要運行時間、已用cpu時間、進程狀態(tài)等等。 進程的優(yōu)先數(shù)及需要的運行時間可以事先人為地指定(也可以由隨機數(shù)產(chǎn)生)。進程的到達時間為進程輸入的時間。 進程的運行時間以時間片為單位進行計算。 每個進程的狀態(tài)可以是就緒 w(wait)、運行r(run)、或完成f(finish)三種狀態(tài)之一。 就緒進程獲得 cpu后都只能運行一個時間片。用已占用cpu時間加1來表示。 如果運行一個時間片后,進程的已占用 cpu時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間

4、片后進程的已占用cpu時間還未達所需要的運行時間,也就是進程還需要繼續(xù)運行,此時應(yīng)將進程的優(yōu)先數(shù)減1(即降低一級),然后把它插入就緒隊列等待cpu。 每進行一次調(diào)度程序都打印一次運行進程、就緒隊列、以及各個進程的 pcb,以便進行檢查。重復(fù)以上過程,直到所要進程都完成為止。三、實驗主要儀器設(shè)備和材料 臺式機,microsoft visual c+ 6.0四、實驗原理及設(shè)計方案1、實驗原理; 時間片輪轉(zhuǎn)法的基本思想:所有就緒隊列按fcfs排成一個隊列。總是把處理機分配給隊首的進程,各個進程占用的cpu時間相同。如果運行進程用完它的時間片后還未完成,就把它送回到就緒隊列的末尾,把處理機重新分配給隊

5、首的進程,直至所有的進程運行完畢為止。2、設(shè)計方案 設(shè)計一個數(shù)據(jù)結(jié)構(gòu)包含各個進程的調(diào)度情況,然后用分程序?qū)崿F(xiàn)各個功能。3、相關(guān)數(shù)據(jù)結(jié)構(gòu)的說明struct pcb /* 定義進程控制塊pcb */ char name10; 定義進程名char state; 狀態(tài)int super; 優(yōu)先數(shù)int ntime; 需要時間int rtime; 已運行時間struct pcb* link; 指針域*ready=null,*first,*p; typedef struct pcb pcb;4、程序流程圖(詳細)結(jié)束初始化pcb,輸入進程信息各進程按fcfs排列就緒隊列空開始就緒隊列隊首進程投入運行空不空

6、已達到時間片到運行進程占用cpu時間+1運行進程已占用cpu時間達到所需運行時間把運行進程插入就緒隊列尾進程已完成撤消該進程未達到5、給出程序中源程序名和可執(zhí)行程序名。 時間片輪轉(zhuǎn)法.cpp 時間片輪轉(zhuǎn)法.exe6、程序清單(源程序中要附有詳細的注釋)(代碼部分:分成兩欄(字號小五)#include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define null 0 int len;struct pcb /* 定義進程控制塊pcb */ char name10; char state;

7、 int super; int ntime; int rtime; struct pcb* link; *ready=null,*first,*p; typedef struct pcb pcb; sort()if(ready=null)ready=p; first=ready;ready-link=first;elseready-link=p;ready=p;ready-link=first;input() /* 建立進程控制塊函數(shù)*/ int i,num; printf(n *實驗一 進程調(diào)度(時間片輪轉(zhuǎn)法)*n); printf(n 請輸入進程數(shù):); scanf(%d,&num); f

8、or(i=1;iname); printf(n 輸入進程優(yōu)先數(shù):); scanf(%d,&p-super); printf(n 輸入進程運行時間:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w; p-link=null; sort(); /* 調(diào)用sort函數(shù)*/ int space() int l=1; pcb* pr=first; while(pr!=ready) l+; pr=pr-link; return(l); disp(pcb * pr) /*建立進程顯示函數(shù),用于顯示當(dāng)前進程*/ printf(n qname t sta

9、te t supertndtime t runtime n); printf(|%st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n); check() /* 建立進程查看函數(shù) */ pcb* pr; printf(n * 當(dāng)前正在運行的進程是:%s,p-name); /*顯示當(dāng)前運行進程*/ disp(p); pr=first; printf(n *當(dāng)前就緒隊列狀態(tài)為:n); /*顯示就緒隊列狀態(tài)*/ while(pr

10、!=p) disp(pr); pr=pr-link; destroy() /*建立進程撤消函數(shù)(進程運行結(jié)束,撤消進程)*/ printf(n 進程 %s 已完成.n,p-name); ready-link=first;len-;free(p); running()(p-rtime)+;if(p-rtime=p-ntime) destroy();elseready=p;main() /*主函數(shù)*/ int h=0;char ch;input(); len=space();while(len!=0) ch=getchar(); h+; printf(n the execute number:%d

11、 n,h); p=first; first=p-link;p-state=r; check(); running(); p-state=w;printf(n 按任一鍵繼續(xù).); /ch=getchar(); printf(nn 進程已經(jīng)完成.n); ch=getchar(); 五、實驗結(jié)果及分析1、運行結(jié)果(要求截圖)(能動態(tài)說明執(zhí)行結(jié)果)首先,輸入進程名及各個進程的運行時間 2、第一次運行的情況3、4、5、6、7、8、9、10、六、調(diào)試總結(jié)及心得體會 這個算法主要參考書上給的最高優(yōu)先數(shù)法,每輸入一個進程放在隊尾,最后構(gòu)成一個單向的循環(huán)鏈表。在運行時,每個進程的運行時間加一,而剩余需要時間減一

12、,如果滿足所需要的運行時間,就把該進程移出這個循環(huán)鏈表。這個試驗的難度值不大,主要參考書上給的思想。學(xué)號:3106006475 姓名: 楊振風(fēng) 協(xié)作者:_實驗_二_題目_ 作業(yè)調(diào)度_第 7 周星期_ 一 _實驗?zāi)康模罕緦嶒炓髮W(xué)生模擬作業(yè)調(diào)度的實現(xiàn),用高級語言編寫和調(diào)試一個或多個作業(yè)調(diào)度的模擬程序,了解作業(yè)調(diào)度在操作系統(tǒng)中的作用,以加深對作業(yè)調(diào)度算法的理解。實驗內(nèi)容和要求:1、為單道批處理系統(tǒng)設(shè)計一個作業(yè)調(diào)度程序(1)、編寫并調(diào)試一個單道處理系統(tǒng)的作業(yè)調(diào)度模擬程序。(2)、作業(yè)調(diào)度算法:分別采用先來先服務(wù)(fcfs),最短作業(yè)優(yōu)先(sjf)、響應(yīng)比高者優(yōu)先(hrn)的調(diào)度算法。 (3)、由于在

13、單道批處理系統(tǒng)中,作業(yè)一投入運行,它就占有計算機的一切資源直到作業(yè)完成為止,因此調(diào)度作業(yè)時不必考慮它所需要的資源是否得到滿足,它所占用的 cpu時限等因素。(4)、每個作業(yè)由一個作業(yè)控制塊jcb表示,jcb可以包含如下信息:作業(yè)名、提交時間、所需的運行時間、所需的資源、作業(yè)狀態(tài)、鏈指針等等。作業(yè)的狀態(tài)可以是等待w(wait)、運行r(run)和完成f(finish)三種狀態(tài)之一。每個作業(yè)的最初狀態(tài)總是等待w。(5)、對每種調(diào)度算法都要求打印每個作業(yè)開始運行時刻、完成時刻、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,以及這組作業(yè)的平均周轉(zhuǎn)時間及帶權(quán)平均周轉(zhuǎn)時間,并比較各種算法的優(yōu)缺點。實驗方法、步驟及結(jié)果測試:編寫

14、并調(diào)試一個單道處理系統(tǒng)的作業(yè)等待模擬程序。假設(shè)在單道批處理環(huán)境下有四個作業(yè)job1、job2、job3、job4,已知它們進入系統(tǒng)的時間、估計運行時間。分別采用先來先服務(wù)(fcfs),最短作業(yè)優(yōu)先(sjf)、響應(yīng)比高者優(yōu)先(hrn)的調(diào)度算法,計算出作業(yè)的平均周轉(zhuǎn)時間和帶權(quán)的平均周轉(zhuǎn)時間 。 對每種調(diào)度算法都要求打印每個作業(yè)開始運行時刻、完成時刻、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,以及這組作業(yè)的平均周轉(zhuǎn)時間及帶權(quán)平均周轉(zhuǎn)時間,并比較各種算法的優(yōu)缺點。源程序如下:#include stdio.h #include #include #define null 0typedef struct jcb /*定義

15、結(jié)構(gòu)體*/ char name10;char state;int htime;int rtime;struct jcb *next;jcbnode,*linkptr;typedef struct /*定義隊列*/linkptr front;linkptr rear;linkqueue;/*/void initqueue(linkqueue *q) /*初始化并建立隊列*/(*q).front=(*q).rear=(linkptr)malloc(sizeof(jcbnode);if(!(*q).front) printf(ntt建立隊列失敗!n);(*q).rear-next=null;crea

16、tworkqueue(linkqueue workqueue) jcb *njcb; jcb *p; int i,num; system(cls); printf(nntt請輸入作業(yè)個數(shù):); scanf(%d,&num); for(i=0;iname); printf(nntt輸入所需運行時間:); scanf(%d,&njcb-rtime); printf(nntt到達時間為:%d,i); printf(n); njcb-htime=i; njcb-state=w; njcb-next=null; p=workqueue.rear; p-next=njcb; workqueue.rear=

17、njcb; return num; void fcfs(int n,linkptr q)/*先來先服務(wù)算法函數(shù)*/ int t,tc,ts;float t,wi,w,ti;ts=0;t=w=0; jcb *ptr; ptr = q-next; t=0; while(ptr) printf(nntt作業(yè) %s,ptr-name); tc=t+ptr-rtime; ti=tc-ptr-htime; wi=ti/ptr-rtime; t=tc; t=t+ti; w=w+wi; printf(nntt 開始時刻ts:%d 完成時刻tc:%d ,ts,tc); printf(ntt 周轉(zhuǎn)時間ti:%f

18、帶權(quán)周轉(zhuǎn)時間wi:%f,ti,wi); ts=ts+ptr-rtime; ptr=ptr-next; t=t/n; w=w/n; printf(nntt平均周轉(zhuǎn)時間:%f 帶權(quán)平均周轉(zhuǎn)時間:%fn,t,w); printf(ntt按任意鍵返回上一步.);void sjf(int n,linkptr q) /*最短作業(yè)優(yōu)先函數(shù)*/int i,t,tc,ts;float t,w,ti,wi;t=w=0;ts=0;jcb *ptr,*q,*tmp;t=0;ptr=q-next; tmp=ptr;if(ptr-next=null) printf(nntt作業(yè) %s,ptr-name); tc=t+pt

19、r-rtime; ti=tc-ptr-htime; wi=ti/ptr-rtime;t=t+ti; w=w+wi; printf(nntt 開始時刻ts:%d 完成時刻tc:%d ,ts,tc); printf(ntt 周轉(zhuǎn)時間ti:%f 帶權(quán)周轉(zhuǎn)時間wi:%f,ti,wi); ts=ts+ptr-rtime;else printf(nntt作業(yè) %s,ptr-name); tc=t+ptr-rtime; ti=tc-ptr-htime; wi=ti/ptr-rtime; printf(nntt 開始時刻ts:%d 完成時刻tc:%d ,ts,tc); printf(ntt 周轉(zhuǎn)時間ti:%f

20、 帶權(quán)周轉(zhuǎn)時間wi:%f,ti,wi); ts=ts+ptr-rtime;t=t+ti;w=w+wi;t=tc;ptr=tmp-next;while(ptr)q=ptr;i=0;while(q&irtimertime) ptr=q;q=q-next;+i;printf(nntt作業(yè) %s,ptr-name); tc=t+ptr-rtime; ti=tc-ptr-htime; wi=ti/ptr-rtime; printf(nntt 開始時刻ts:%d 完成時刻tc:%d ,ts,tc); printf(ntt 周轉(zhuǎn)時間ti:%f 帶權(quán)周轉(zhuǎn)時間wi:%f,ti,wi); ts=ts+ptr-rt

21、ime;t=t+ti;w=w+wi; t=tc;q=q;while(q-next!=ptr)q=q-next;q-next=ptr-next;ptr=tmp-next; t=t/n; w=w/n; printf(nntt平均周轉(zhuǎn)時間:%f 帶權(quán)平均周轉(zhuǎn)時間:%fn,t,w); printf(ntt按任意鍵返回上一步.); void hrn(int n,linkptr q) /*響應(yīng)比高者優(yōu)先函數(shù)*/jcb *ptr,*q,*tmp;int i,t,tc,ts;float r,rp,t,w,ti,wi;t=t=w=ts=0;ptr=q-next;tmp=ptr;if(ptr-next=null)

22、/*只有一個成員的情況*/ printf(nntt %s,ptr-name); tc=t+ptr-rtime; ti=tc-ptr-htime; wi=ti/ptr-rtime; printf(nntt 開始時刻ts:%d 完成時刻tc:%d ,ts,tc); printf(ntt 周轉(zhuǎn)時間ti:%f 帶權(quán)周轉(zhuǎn)時間wi:%f,ti,wi); ts=ts+ptr-rtime;t=t+ti;w=w+wi;else printf(nntt作業(yè) %s,ptr-name); tc=t+ptr-rtime; ti=tc-ptr-htime; wi=ti/ptr-rtime; printf(nntt 開始時

23、刻ts:%d 完成時刻tc:%d ,ts,tc); printf(ntt 周轉(zhuǎn)時間ti:%f 帶權(quán)周轉(zhuǎn)時間wi:%f,ti,wi); ts=ts+ptr-rtime;t=t+ti;w=w+wi;t=tc;ptr=tmp-next;while(ptr)rp=(t+ptr-rtime)/ptr-rtime;q=ptr;i=0;while(q&irtime)/q-rtime;if(rrp) rp=r;ptr=q;q=q-next;+i; printf(nntt作業(yè) %s,ptr-name); tc=t+ptr-rtime; ti=tc-ptr-htime; wi=ti/ptr-rtime; prin

24、tf(nntt 開始時刻ts:%d 完成時刻tc:%d ,ts,tc); printf(ntt 周轉(zhuǎn)時間ti:%f 帶權(quán)周轉(zhuǎn)時間wi:%f,ti,wi); ts=ts+ptr-rtime; t=t+ti; w=w+wi;t=tc;q=q; while(q-next!=ptr) q=q-next; q-next=ptr-next; ptr=tmp-next;t=t/n; w=w/n; printf(nntt平均周轉(zhuǎn)時間:%f 帶權(quán)平均周轉(zhuǎn)時間:%fn,t,w); printf(ntt按任意鍵返回上一步.);void main() linkqueue workqueue; jcb *q; int

25、num; int choice; for(;) system(cls); printf(nntt*該程序用于模擬作業(yè)調(diào)度過程*); printf(nntt (該程序以作業(yè)完成的順序依次輸出) ); printf(nntt -); printf(ntt| 1.先來先服務(wù)(fcfs) 2.最短作業(yè)優(yōu)先(sjf)|n); printf(ntt| 3.響應(yīng)比高者優(yōu)先(hrn)4.退出 |); printf(ntt -); printf(ntt請輸入你的選擇:); scanf(%d,&choice); if (choice=4) exit(0); else if(choice4) continue; e

26、lse initqueue(&workqueue); q=workqueue.front; num=creatworkqueue(workqueue); switch(choice) case 1: fcfs(num,q); break; case 2: sjf(num,q); break; case 3: hrn(num,q); break; getch(); 程序運行過程如下:運行程序,選擇算法先來先服務(wù)算法運行過程如下:1.選擇12.輸入作業(yè)數(shù)目3.輸入作業(yè)信息,到達時間為系統(tǒng)默認值4.運行結(jié)果如下:5.對輸入的數(shù)據(jù)進行分析,與理論值相符!程序過程正確。最短作業(yè)優(yōu)先算法運行過程如下:1.

27、選擇最短作業(yè)優(yōu)先算法2.輸入相應(yīng)信息,取教材76頁圖表的數(shù)據(jù)輸入。即進程名abcde平均到達時間01234服務(wù)時間43524sjf完成時間4918613周轉(zhuǎn)時間4816398帶權(quán)周轉(zhuǎn)時間12.673.11.52.252.13.運行結(jié)果如下:4.結(jié)果分析 實驗結(jié)果與圖表上的理論值相符響應(yīng)比高者優(yōu)先算法運行過程如下:1.選擇3 hrn2.同樣輸入sjf算法時圖表中的信息后運行結(jié)果如下:3.對輸入的信息進行結(jié)果分析,作業(yè)的運行順序為a-d-b-e-c,與實驗的結(jié)果相符小結(jié):通過對這次的實驗,使我對作業(yè)調(diào)度算法有了更深層次的理解。相對進程調(diào)度,作業(yè)調(diào)度相對復(fù)雜一些,通過這次試驗?zāi)芎芎玫睦斫飧鱾€算法的內(nèi)

28、容,同時為后面的主存空間與分配的試驗做好準備。學(xué)號:3106006475 姓名: 楊振風(fēng) 協(xié)作者:_實驗_三_題目_主存空間的分配與回收_第 9 周星期_一 實驗?zāi)康模菏煜ぶ鞔娴姆峙渑c回收。理解在不同的存儲管理方式下,如何實現(xiàn)主存空間的分配與回收。掌握動態(tài)分區(qū)分配方式中的數(shù)據(jù)結(jié)構(gòu)和分配算法及動態(tài)分區(qū)存儲管理方式及其實現(xiàn)過程。實驗內(nèi)容和要求:主存的分配和回收的實現(xiàn)是與主存儲器的管理方式有關(guān)的。所謂分配,就是解決多道作業(yè)或多進程如何共享主存空間的問題。所謂回收,就是當(dāng)作業(yè)運行完成時將作業(yè)或進程所占的主存空間歸還給系統(tǒng)。可變分區(qū)管理是指在處理作業(yè)過程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的需求,并且分區(qū)

29、個數(shù)是可以調(diào)整的。當(dāng)要裝入一個作業(yè)時,根據(jù)作業(yè)需要的主存量查看是否有足夠的空閑空間,若有,則按需要量分割一個分區(qū)分配給該作業(yè);若無,則作業(yè)不能裝入,作業(yè)等待。隨著作業(yè)的裝入、完成,主存空間被分成許多大大小小的分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。實驗要求使用可變分區(qū)存儲管理方式,分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)采用空閑分區(qū)表和空閑分區(qū)鏈來進行,分區(qū)分配中所用的算法采用首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三種算法來實現(xiàn)主存的分配與回收。同時,要求設(shè)計一個實用友好的用戶界面,并顯示分配與回收的過程。實驗方法、步驟及結(jié)構(gòu)測試:某系統(tǒng)采用可變分區(qū)存儲管理,在系統(tǒng)運行的開始,假設(shè)初始狀態(tài)下,可用

30、的內(nèi)存空間為640kb,存儲器區(qū)被分為操作系統(tǒng)分區(qū)(40kb)和可給用戶的空閑區(qū)(600kb)。作業(yè)1申請130kb作業(yè)2申請60kb作業(yè)3申請100kb作業(yè)2釋放60kb作業(yè)4申請200kb作業(yè)3釋放100kb作業(yè)1釋放130kb作業(yè)5申請140kb作業(yè)6申請60kb作業(yè)7申請50kb當(dāng)作業(yè)1進入內(nèi)存后,分給作業(yè)1(130kb),隨著作業(yè)1、2、3的進入,分別分配60kb、100kb、經(jīng)過一段時間的運行后,作業(yè)2運行完畢,釋放所占內(nèi)存。此時,作業(yè)4進入系統(tǒng),要求分配200kb內(nèi)存。作業(yè)3,1運行完畢,釋放所占內(nèi)存。此時又有作業(yè)5申請140kb,作業(yè)6申請60kb,作業(yè)7申請50kb。請你為它

31、們進行主存分配和回收。1、采用可變分區(qū)存儲管理,使用空閑分區(qū)表或空閑分區(qū)鏈實現(xiàn)主存分配和回收??臻e分區(qū)表:設(shè)計一張空閑區(qū)說明,記錄哪些分區(qū)是空閑的。為內(nèi)存中每個尚未分配出去的分區(qū)設(shè)置一個表項。包括:分區(qū)序號、分區(qū)始址、分區(qū)大小及該分區(qū)的狀態(tài)。當(dāng)分配內(nèi)存空間時,就從中進行查找,如找到符合條件的空間的空閑區(qū)就分配給作業(yè)??臻e分區(qū)鏈:使用鏈指針把所有的空閑分區(qū)鏈成一條鏈,為了實現(xiàn)對空閑分區(qū)的分配和鏈接,在每個分區(qū)的起始部分設(shè)置狀態(tài)位、分區(qū)的大小和鏈接各個分區(qū)的前向指針,由狀態(tài)位指示該分區(qū)是否分配出去了;同時,在分區(qū)尾部還設(shè)置有一后向指針,用來鏈接后面一個分區(qū);分區(qū)的中間部分是用來存放作業(yè)的空閑內(nèi)存空

32、間,當(dāng)該分區(qū)分配出去后,狀態(tài)位就由“0”置為“1”。設(shè)計一個內(nèi)存空閑分區(qū)表(鏈),內(nèi)存空閑分區(qū)通過空閑分區(qū)表(鏈)來管理,在進行內(nèi)存分配時,系統(tǒng)優(yōu)先使用空閑區(qū)低端的空間。設(shè)計一個空閑分區(qū)說明表(鏈),設(shè)計一個某時刻主存空間占用情況表,作為主存當(dāng)前使用基礎(chǔ)。初始化空閑區(qū)和已分配區(qū)說明表的值。設(shè)計作業(yè)申請隊列以及作業(yè)完成后的釋放順序,實現(xiàn)主存的分配和回收。要求每次分配和回收后顯示出空閑內(nèi)存分區(qū)表(鏈)的情況。把空閑區(qū)說明(鏈)表的變化情況以及各作業(yè)的申請、釋放情況顯示、打印出來。2、采用可變分區(qū)存儲管理,選用首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三個算法中的任選一種算法設(shè)計主存分配和回收程序

33、。3、實現(xiàn)過程主存空間分配:設(shè)計作業(yè)申請隊列,動態(tài)輸入構(gòu)造空閑區(qū)表,并顯打印示構(gòu)造好的空閑區(qū)表。鍵盤接收內(nèi)存申請尺寸大小。根據(jù)申請,實施內(nèi)存分配,并返回分配所得內(nèi)存首址。分配完后,調(diào)整空閑區(qū)表(即扣除分配部分),并顯示調(diào)整后的空閑區(qū)表。若分配失敗,返回分配失敗信息。要求每次分配后顯示出空閑內(nèi)存分區(qū)表(鏈)的情況。主存空間回收:當(dāng)一個作業(yè)執(zhí)行完成撤離時,作業(yè)所占的分區(qū)應(yīng)該歸還給系統(tǒng)。歸還的分區(qū)如果與其它空閑區(qū)相鄰,則應(yīng)合成一個較大的空閑區(qū),登記在空閑區(qū)說明表中。此時,相鄰空閑區(qū)的合并問題,要求考慮四種情況:1)、釋放區(qū)下鄰空閑區(qū)(低地址鄰接)2)、釋放區(qū)上鄰空閑區(qū)(高地址鄰接)3)、釋放區(qū)上下都

34、與空閑區(qū)鄰接4)、釋放區(qū)上下都與空閑區(qū)不鄰接動態(tài)輸入構(gòu)造空閑區(qū)表,并顯示構(gòu)造好的空閑區(qū)表。根據(jù)空閑區(qū)表,按內(nèi)存回收的四種情況從鍵盤接收回收區(qū)域的內(nèi)存首址與大小?;厥諈^(qū)域,調(diào)整空閑區(qū)表(與前面空閑區(qū)相連、與后面空閑區(qū)相連、與前后空閑區(qū)相連則合并、與前后空閑區(qū)都不相連則插入該項),并顯示調(diào)整后的空閑區(qū)表。要求每次回收后顯示出空閑內(nèi)存分區(qū)表(鏈)的情況。程序流程圖如下:否是否結(jié)束是修改分區(qū)表q.size-aneedaneed動態(tài)向內(nèi)存申請一個大小為need的未分配作業(yè)分區(qū)源程序如下:#include #include #include #include #define null 0struct sb

35、lock char name10; int add; int size; struct sblock *next; struct sblock *front; ;sblock *fhead;sblock *head;sblock *rear;void ini()fhead=new sblock;fhead-front=fhead-next=null;fhead-size=0;head=rear=new sblock;head-front=rear-front=null;head-next=rear-next=null; sblock *ptr=new sblock;printf(nntt本程序

36、的虛擬條件:內(nèi)存空間為 640kb);printf(nnt 操作系統(tǒng)分區(qū)占用(40kb) 用戶可用空閑區(qū)(600kb)); ptr-size=600;ptr-add=0;ptr-next=null;ptr-front=fhead;fhead-next=ptr;void disp() int sp,rsp;sblock *p;sblock *q;p=head-next;q=fhead-next;printf(ntt已分配空區(qū)信息表: 作業(yè)名,開始地址,大小(kb);printf(ntt 操作系統(tǒng)分區(qū) 0 40 );while(p)sp=p-add+40;printf(ntttt %s %d %d

37、,p-name,sp,p-size);p=p-next; printf(ntt空閑分區(qū)信息表: 開始地址,大小(kb);while(q) rsp=q-add+40;printf(ntttt %d %dn,rsp,q-size);q=q-next;void input()sblock *q=fhead-next;sblock *p=new sblock;printf(ntt請輸入作業(yè)名:);scanf(%s,&p-name);printf(tt請輸入作業(yè)大小(kb):);scanf(%d,&p-size);p-front=p-next=null; if(q != null) while(q !=

38、 null & q-sizesize) q=q-next; if(q=null)printf(ntt空間分配失敗.);elseif(q-size=p-size)if(q-next=null)p-add=q-add; q-front-next=q-next; q-front = null;elsep-add=q-add;q-front-next=q-next;q-next-front=q-front;q-front=q-next=null;elsep-add=q-add;q-add=q-add+p-size;q-size=q-size-p-size;rear-next=p;p-next=null

39、;rear=p;disp();void resort()char n10;printf(ntt請輸入要回收的作業(yè)名:);scanf(%s,&n);sblock *p=head-next;while(p & strcmp(p-name,n) != 0) p=p-next;if(p != null) sblock *ptr=head; while(ptr-next!=p) ptr=ptr-next;ptr-next=p-next;sblock *q=fhead;while(q-next&q-next-addadd) q=q-next;if(q-next=null)if(q-add+q-size!=

40、p-add)q-next=p;p-front=q;p-next=null;elseq-size=q-size+p-size;elseif(q-next-add=p-add+p-size) q-next-size=q-next-size+p-size;q-add=p-add;elseif(q-add+q-size=p-add) q-size=q-size+p-size;else p-next=q-next; q-next-front=p;q-next=p;p-front=q;disp();void main() int choice;printf(nntt*該程序用于模擬主存空間的分配與回收過程

41、*);ini(); while(1) printf(ntt1.申請空間t2.釋放空間t0.退出); printf(ntt請輸入你的選擇:); scanf(%d,&choice); switch(choice) case 0: exit(0);case 1: input();break;case 2: resort();break;default: printf(tt輸入錯誤.請重新輸入n); getch();程序運行過程如下:本程序設(shè)置了系統(tǒng)默認值程序運行過程,將程序按實驗步驟要求運行,即作業(yè)1申請130kb 作業(yè)2申請60kb作業(yè)3申請100kb 作業(yè)2釋放60kb后程序如下:接著作業(yè)4申請

42、200kb然后接著運行,作業(yè)3釋放100kb 作業(yè)1釋放130kb作業(yè)5申請140kb 作業(yè)6申請60kb作業(yè)7申請50kb之后的最終結(jié)果如下:對運行的結(jié)果進行分析發(fā)現(xiàn)實驗結(jié)果與理論結(jié)果相符,該程序形象生動的揭示了空間資源的分配和回收過程。使我們能更直觀的了解這一過程。試驗總結(jié): 這個試驗難度有點大,沒有實現(xiàn)可視化界面,一方面自己沒有足夠的掌握好vc環(huán)境里面各個圖形化函數(shù)的調(diào)用,另外就是由于時間緊的原因未能實現(xiàn),但是能夠很好的理解課本里面描述的主存的分配與回收。學(xué)號:3106006475 姓名: 楊振風(fēng) 協(xié)作者:_實驗_四_題目_文件系統(tǒng)_第 11 周 星期 1 實驗?zāi)康哪M文件系統(tǒng)實現(xiàn)的基本功能,了解文件系統(tǒng)的基本結(jié)構(gòu)和文件的各種管理方法,加深理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實現(xiàn)。通過用高級語言編寫和調(diào)試一個簡單的文件系統(tǒng),模擬文件管理的工作過程,從而對各種文件操作命令的實質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解。 實驗內(nèi)容和要求編程模擬一個簡單的文件系統(tǒng),實現(xiàn)文件系統(tǒng)的管理和控制功能。要求本文件系統(tǒng)采用兩級目錄,即設(shè)置主文件目錄mfd和用戶文件目錄ued。另外,為打開文件設(shè)置運行文件目錄afd。設(shè)計一個10個用戶的文

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論