操作系統(tǒng)實(shí)驗(yàn)報(bào)告+進(jìn)程調(diào)度+作業(yè)調(diào)度等.doc_第1頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告+進(jìn)程調(diào)度+作業(yè)調(diào)度等.doc_第2頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告+進(jìn)程調(diào)度+作業(yè)調(diào)度等.doc_第3頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告+進(jìn)程調(diào)度+作業(yè)調(diào)度等.doc_第4頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告+進(jìn)程調(diào)度+作業(yè)調(diào)度等.doc_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

操作系統(tǒng)實(shí)驗(yàn)報(bào)告+進(jìn)程調(diào)度+作業(yè)調(diào)度等 操作系統(tǒng)實(shí)驗(yàn)報(bào)告 1、進(jìn)程調(diào)度 2、作業(yè)調(diào)度 3、主存空間的分配與回收4、文件系統(tǒng) 學(xué)生學(xué)院_計(jì)算機(jī)學(xué)院_專業(yè)班級(jí)_網(wǎng)絡(luò)工程(3)班_學(xué)號(hào)_3107007062_學(xué)生姓名_張菲_指導(dǎo)教師_胡欣如_ xx年12月20日 班_姓名張菲協(xié)作者無教師評(píng)定_實(shí)驗(yàn)題目進(jìn)程調(diào)度 一、實(shí)驗(yàn)?zāi)康?用高級(jí)語言編寫和調(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)度程序,采用“簡(jiǎn)單時(shí)間片輪轉(zhuǎn)法”調(diào)度算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度。 每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊(PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、到達(dá)時(shí)間、需要運(yùn)行時(shí)間、已運(yùn)行時(shí)間、進(jìn)程狀態(tài)等等。 進(jìn)程的到達(dá)時(shí)間及需要的運(yùn)行時(shí)間可以事先人為地指定(也可以由隨機(jī)數(shù)產(chǎn)生)。進(jìn)程的到達(dá)時(shí)間為進(jìn)程輸入的時(shí)間。進(jìn)程的運(yùn)行時(shí)間以時(shí)間片為單位進(jìn)行計(jì)算。每個(gè)進(jìn)程的狀態(tài)可以是就緒W(Wait)、運(yùn)行R(Run)兩種狀態(tài)之一。 就緒進(jìn)程獲得CPU后都只能運(yùn)行一個(gè)時(shí)間片。用運(yùn)行時(shí)間加1來表示。 如果運(yùn)行一個(gè)時(shí)間片后,進(jìn)程的已占用CPU時(shí)間已達(dá)到所需要的運(yùn)行時(shí)間,則撤消該進(jìn)程,如果運(yùn)行一個(gè)時(shí)間片后進(jìn)程的已占用CPU時(shí)間還未達(dá)所需要的運(yùn)行時(shí)間,也就是進(jìn)程還需要繼續(xù)運(yùn)行,此時(shí)應(yīng)分配時(shí)間片給就緒隊(duì)列中排在該進(jìn)程之后的進(jìn)程,并將它插入就緒隊(duì)列隊(duì)尾。每進(jìn)行一次調(diào)度程序都打印一次運(yùn)行進(jìn)程、就緒隊(duì)列、以及各個(gè)進(jìn)程的PCB,以便進(jìn)行檢查。 重復(fù)以上過程,直到所要進(jìn)程都完成為止。三、實(shí)驗(yàn)主要儀器設(shè)備和材料 硬件環(huán)境:IBM-PC或兼容機(jī)軟件環(huán)境:C語言編程環(huán)境四、實(shí)驗(yàn)原理及設(shè)計(jì)方案 1、進(jìn)程調(diào)度算法:采用多級(jí)反饋隊(duì)列調(diào)度算法。其基本思想是:當(dāng)一個(gè)新進(jìn)程進(jìn)入內(nèi)在后,首先將它放入第一個(gè)隊(duì)列的末尾,按FCFS原則排隊(duì)等待高度。當(dāng)輪到該進(jìn)程執(zhí)行時(shí),如能在該時(shí)間片內(nèi)完成,便可準(zhǔn)備撤離系統(tǒng);如果它在一個(gè)時(shí)間片結(jié)束時(shí)尚為完成,調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第二隊(duì)列的末尾,再同樣地按FCFS原則等待調(diào)度執(zhí)行,以此類推。 2、實(shí)驗(yàn)步驟: (1)按先來先服務(wù)算法將進(jìn)程排成就緒隊(duì)列。 (2)檢查所有隊(duì)列是否為空,若空則退出,否則將隊(duì)首進(jìn)程調(diào)入執(zhí)行。 (3)檢查該運(yùn)行進(jìn)程是否運(yùn)行完畢,若運(yùn)行完畢,則撤消進(jìn)程,否則,將該進(jìn)程插 入到下一個(gè)邏輯隊(duì)列的隊(duì)尾。 (4)是否再插入新的進(jìn)程,若是則把它放到第一邏輯隊(duì)列的列尾。(5)重復(fù)步驟(2)、(3)、(4),直到就緒隊(duì)列為空。 五、流程圖 六、結(jié)果過程及截圖初始化隊(duì)列 按Y鍵繼續(xù)運(yùn)行進(jìn)程: 按Y鍵繼續(xù)運(yùn)行進(jìn)程: 運(yùn)行若干次后的狀態(tài): 添加新的進(jìn)程: 七、所遇困難的解決以及心得體會(huì) 在這個(gè)多級(jí)反饋的實(shí)驗(yàn)中,我采取了用一條實(shí)際上的鏈表隊(duì)列來模擬多個(gè)邏輯上的隊(duì)列,通過維護(hù)幾個(gè)鏈表的狀態(tài)信息來找到每個(gè)進(jìn)程運(yùn)行完后應(yīng)該插入的地方,還有一個(gè)標(biāo)志位Fend用來表明新插入的隊(duì)列的位置。雖然實(shí)驗(yàn)原理很簡(jiǎn)單,但是在編寫代碼的過程中遇到了不少的問題,在兩個(gè)小時(shí)之內(nèi)已經(jīng)完成的大體代碼的編寫,但是之中存在不少的問題,導(dǎo)致了用了差不多四個(gè)小時(shí)的時(shí)間去調(diào)試才把它弄好, 這主要?dú)w咎于在開始設(shè)計(jì)代碼的不太 合理,在后期使得代碼結(jié)構(gòu)有些混亂,使得調(diào)試更加的麻煩,以及對(duì)編程的不熟悉。通過這個(gè)實(shí)驗(yàn)不僅使我對(duì)進(jìn)程的調(diào)度算法有了更深的認(rèn)識(shí),使得理論知識(shí)得到的實(shí)踐,也使我的編程能力得到了進(jìn)一步提高。七、思考題 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)先獲得處理機(jī),進(jìn)程在進(jìn)去運(yùn)行完響應(yīng)的時(shí)間片后,如沒完成,優(yōu)先權(quán)減1,從新回到就緒隊(duì)列等待分配處理機(jī)。 時(shí)間片的輪轉(zhuǎn)法:系統(tǒng)將所有進(jìn)程排成一個(gè)隊(duì)列,按照先來先服務(wù)的原則,對(duì)隊(duì)列首的進(jìn)程進(jìn)行處理,每個(gè)進(jìn)程在用完自己的時(shí)間片后,從新回到隊(duì)尾進(jìn)行排隊(duì)。每運(yùn)行一次,進(jìn)程的需要時(shí)間減1,直到就緒隊(duì)列為空!八、源代碼 #include#include #include #definegetpch(type)(type*)malloc(sizeof(type)#defineNULL0 #defineTIME2/時(shí)間片長(zhǎng)度 typedefstructpcb/進(jìn)程管理塊charname10;/進(jìn)程名字charstate;/進(jìn)程狀態(tài) intqueue;intntime;intrtime;intetime; /進(jìn)程所在的隊(duì)列 /進(jìn)程需要運(yùn)行的時(shí)間 /進(jìn)程已經(jīng)運(yùn)行的時(shí)間 /進(jìn)程在本隊(duì)列可運(yùn)行的時(shí)間片 structpcb*link; PCB; PCB*ready=NULL,*pinsert=NULL,*pfend=NULL,*p=NULL;位置的變量 intgeti()/使用戶僅能輸入整數(shù) charch;inti=0;fflush(stdin);ch=getchar();while(ch=n) /就緒隊(duì)列,進(jìn)程插入 printf( fflush(stdin);ch=getchar(); while(ch!=n) if(ch9|ch fflush(stdin);i=0;ch=getchar(); elsei=i*10+(ch-0); ch=getchar(); returni; voidfindpos()/更新狀態(tài)量 PCB*ps=pfend; if(!ps|!ps-link|(ps-link-queue-ps-queue)1)pinsert=ps;elsewhile(ps-link&ps-link-queue!=(pfend-queue+2) ps=ps-link;pinsert=ps; voidinsert()/插入進(jìn)程 if(!ready) ready=p; pfend=p;pinsert=p; elseif(ready-queue=1)/第一隊(duì)列存在 p-link=pfend-link;pfend-link=p;pfend=p;findpos(); voidinput()/*建立進(jìn)程控制塊函數(shù)*/ inti,num; printf( for(i=0;i p=getpch(PCB); printf( printf( p-queue=1; p-etime=TIME;p-link=NULL; insert();/*調(diào)用insert函數(shù)*/elsep-link=ready;ready=p; findpos(); voiddisp(PCB*pr)/*建立進(jìn)程現(xiàn)實(shí)函數(shù),用于顯示當(dāng)前進(jìn)程*/ printf( voidcheck()/*建立進(jìn)程查看函數(shù)*/ voidsort()/調(diào)整進(jìn)程隊(duì)列 if(!ready-link|ready-queuelink-queue)return;p=ready-link;ready-link=pinsert-link;pinsert-link=ready;pinsert=ready;ready=p;if(ready&ready-queue=pinsert-queue)findpos();PCB*pr;printf( voidaddnew()/添加新的進(jìn)程 if(ready-queue!=1)(ready-queue)+;ready-etime*=2;ready-state=w;sort();/*調(diào)用sort函數(shù)*/input();elseinput(); voiddestroy()/*建立進(jìn)程撤銷函數(shù)(進(jìn)程運(yùn)行結(jié)束,撤銷進(jìn)程)*/ voidrunning()/*建立進(jìn)程就緒函數(shù)(進(jìn)程運(yùn)行時(shí)間到,置就緒狀態(tài))*/ voidmain() charch;input();while(ready!=NULL)printf( ready-state=R;check();running();printf( 計(jì)算機(jī)學(xué)院網(wǎng)絡(luò)工程專業(yè)班_姓名張菲協(xié)作者無教師評(píng)定_實(shí)驗(yàn)題目作業(yè)調(diào)度 一、實(shí)驗(yàn)?zāi)康?本實(shí)驗(yàn)要求學(xué)生模擬作業(yè)調(diào)度的實(shí)現(xiàn),用高級(jí)語言編寫和調(diào)試一個(gè)或多個(gè)作業(yè)調(diào)度的模擬程序,了解作業(yè)調(diào)度在操作系統(tǒng)中的作用,以加深對(duì)作業(yè)調(diào)度算法的理解。 二、實(shí)驗(yàn)內(nèi)容和要求 1、編寫并調(diào)度一個(gè)多道程序系統(tǒng)的作業(yè)調(diào)度模擬程序。 作業(yè)調(diào)度算法:采用基于先來先服務(wù)的調(diào)度算法??梢詤⒖颊n本中的方法進(jìn)行設(shè)計(jì)。對(duì)于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數(shù)量、調(diào)度作業(yè)時(shí)必須考慮到每個(gè)作業(yè)的資源要求。 三、實(shí)驗(yàn)主要儀器設(shè)備和材料 硬件環(huán)境:IBM-PC或兼容機(jī) 軟件環(huán)境:C語言編程環(huán)境 四、實(shí)驗(yàn)原理及設(shè)計(jì)方案 采用多道程序設(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è)說明書規(guī)定的步驟進(jìn)行控制。 采用先來先服務(wù)算法算法模擬設(shè)計(jì)作業(yè)調(diào)度程序。 (1)、作業(yè)調(diào)度程序負(fù)責(zé)從輸入井選擇若干個(gè)作業(yè)進(jìn)入主存,為它們分配必要的資源,當(dāng)它們能夠被進(jìn)程調(diào)度選中時(shí),就可占用處理器運(yùn)行。作業(yè)調(diào)度選擇一個(gè)作業(yè)的必要條件是系統(tǒng)中現(xiàn)有的尚未分配的資源可滿足該作業(yè)的資源要求。但有時(shí)系統(tǒng)中現(xiàn)有的尚未分配的資源既可滿足某個(gè)作業(yè)的要求也可滿足其它一些作業(yè)的要求,那么,作業(yè)調(diào)度必須按一定的算法在這些作業(yè)中作出選擇。先來先服務(wù)算法是按照作業(yè)進(jìn)入輸入井的先后次序來挑選作業(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)流程圖: 五、結(jié)果過程及截圖 讀取文件jobs.txt來初始化主存,磁帶機(jī)的個(gè)數(shù),并打印出來。 初始時(shí)間是9:00: 按Y運(yùn)行5分鐘: 按Y運(yùn)行5分鐘: 按Y運(yùn)行5分鐘: 多次運(yùn)行后最后狀態(tài): 六、所遇困難的解決以及心得體會(huì) 這個(gè)實(shí)驗(yàn)是花的時(shí)間最多的一個(gè)實(shí)驗(yàn),第一次做的時(shí)候由于理解有些問題,所以做錯(cuò)了。之后重新做了一遍,收獲還是很多的,遇到了很多的細(xì)節(jié)問題,例如像是時(shí)間化成浮點(diǎn)數(shù)和浮點(diǎn)數(shù)化成時(shí)間等一些問題,從中也暴露了自己的編程能力欠缺,之后要多多的寫程序。 七、思考題 1、寫出每種算法的調(diào)度策略,最后比較各種算法的優(yōu)缺點(diǎn)。 答:先來先服務(wù)算法是根據(jù)作業(yè)的進(jìn)入時(shí)間來排序,到達(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í)間來排序,估計(jì)運(yùn)行時(shí)間短的先運(yùn)行,優(yōu)點(diǎn)是運(yùn)行時(shí)間快,缺點(diǎn)是實(shí)現(xiàn)起來比較復(fù)雜。 2、選擇調(diào)度算法的依據(jù)是什么? 答:如果作業(yè)要求的速度不高,而且作業(yè)比較小型,那就最好用先來先服務(wù)算法。 如果作業(yè)要求的速度高,作業(yè)流程復(fù)雜,那就最好用短作業(yè)優(yōu)先算法。 八、源代碼 #include #include #include #include #definegetjcb()(JCB*)malloc(sizeof(JCB) typedefstruct/資源的總量 intmemory;inttape; RESOURCE; typedefstructJCB/作業(yè)控制塊 charusername20;/用戶名 charjobname10;/作業(yè)名 charstate;/作業(yè)狀態(tài)charatime5;/到達(dá)時(shí)間floatrtime;/運(yùn)行時(shí)間RESOURCEresource;/資源數(shù)量structJCB*link;JCB; RESOURCEsource=100,5; JCB*pjcb=getjcb();/作業(yè)鏈表頭 charnowtime5;/現(xiàn)在時(shí)間,初始時(shí)間為9:00 FILE*ignore(FILE*fp)/忽略文件中的空白符 if(feof(fp)returnfp;charch=fgetc(fp);while(!feof(fp)&(ch=|ch=)ch=fgetc(fp);/if(!feof(fp)returnfp;fseek(fp,-1,SEEK_CUR); returnfp; FILE*findchar(FILE*fp,charc)/在文件中找到一個(gè)字符的位置(讀取文件時(shí)用) if(feof(fp)returnfp;charch=fgetc(fp);while(!feof(fp)&(ch!=c)ch=fgetc(fp);fseek(fp,-1,SEEK_CUR);returnfp; voiddestory()/釋放鏈表所占的內(nèi)存 JCB*p=pjcb-link;while(pjcb)free(pjcb);pjcb=p;if(p)p=p-link; floatstof(char*time)/把時(shí)間轉(zhuǎn)化為浮點(diǎn)型數(shù) floath=0,m=0;inti=0;while(timei!=:)h=h*10+timei-0;i+;while(timei!=0)m=m*10+timei-0;i+;i+; return(h+m/60); char*ftos(doubleftime)/把浮點(diǎn)型數(shù)值轉(zhuǎn)化為時(shí)間 floattimesub(char*time1,char*time2)/兩個(gè)時(shí)間相減,得到時(shí)間差 voidprint()/打印輸出 JCB*p=pjcb-link;printf( p-atime,p-rtime,p-resource.memory,p-resource.tape); voidsendsource()/為作業(yè)分配資源 JCB*p;p=pjcb-link;while(p)/為到達(dá)的作業(yè)調(diào)度p=p-link; if(p-state=W&source.memory-p-resource.memory=0&source.tape-p-resource.tape=0) p=p-link;p-state=R;source.memory-=p-resource.memory;source.tape-=p-resource.tape;printf( voidinit()/初始化,讀取文件中的作業(yè)信息 FILE*fp;JCB*p=NULL,*q=pjcb;if(fp=fopen( fp=ignore(fp);p-rtime=0;/不初始化則會(huì)發(fā)生錯(cuò)誤,?fscanf(fp, intcheckend()/檢查是否所有的作業(yè)都已經(jīng)運(yùn)行完了 JCB*p=pjcb-link;while(p)if(p-state!=F)return0;p=p-link;return1; voidrun()/運(yùn)行作業(yè) if(checkend()/檢查是否所有的作業(yè)都已經(jīng)運(yùn)行完了printf( p=p-link;p=pjcb-link;while(p)/計(jì)算到達(dá)的作業(yè)if(strcmp(nowtime,p-atime)=0&p-state=N)p-state=W;printf( intmain() charch; doubletime=9.00; doublestep=float(5)/60+0.00001;ftos(9.0);init();dorun();puts( 班_姓名張菲協(xié)作者無教師評(píng)定_ 實(shí)驗(yàn)題目主存空間的分配和回收 一、實(shí)驗(yàn)?zāi)康?熟悉主存的分配與回收。理解在不同的存儲(chǔ)管理方式下,如何實(shí)現(xiàn)主存空間的分配與回收。掌握動(dòng)態(tài)分區(qū)分配方式中的數(shù)據(jù)結(jié)構(gòu)和分配算法及動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式及其實(shí)現(xiàn)過程。 二、實(shí)驗(yàn)內(nèi)容和要求 主存的分配和回收的實(shí)現(xiàn)是與主存儲(chǔ)器的管理方式有關(guān)的。所謂分配,就是解決多道作業(yè)或多進(jìn)程如何共享主存空間的問題。所謂回收,就是當(dāng)作業(yè)運(yùn)行完成時(shí)將作業(yè)或進(jìn)程所占的主存空間歸還給系統(tǒng)。 可變分區(qū)管理是指在處理作業(yè)過程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的需求,并且分區(qū)個(gè)數(shù)是可以調(diào)整的。當(dāng)要裝入一個(gè)作業(yè)時(shí),根據(jù)作業(yè)需要的主存量查看是否有足夠的空閑空間,若有,則按需要量分割一個(gè)分區(qū)分配給該作業(yè);若無,則作業(yè)不能裝入,作業(yè)等待。隨著作業(yè)的裝入、完成,主存空間被分成許多大大小小的分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。 實(shí)驗(yàn)要求使用可變分區(qū)存儲(chǔ)管理方式,分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)采用空閑分區(qū)表和空閑分區(qū)鏈來進(jìn)行,分區(qū)分配中所用的算法采用首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三種算法來實(shí)現(xiàn)主存的分配與回收。同時(shí),要求設(shè)計(jì)一個(gè)實(shí)用友好的用戶界面,并顯示分配與回收的過程。 三、實(shí)驗(yàn)主要儀器設(shè)備和材料 硬件環(huán)境:IBM-PC或兼容機(jī) 軟件環(huán)境:VC+6.0 四、實(shí)驗(yàn)原理及設(shè)計(jì)方案 1、循環(huán)首次適應(yīng)算法 在該算法中,把主存中所有空閑區(qū)按其物理地址遞增的次序排列。在為作業(yè)分配存儲(chǔ)空間時(shí),從上次找到的空閑分區(qū)的下一個(gè)空閑分區(qū)開始查找,直到找到第一個(gè)能滿足要求的空閑區(qū),從中劃出與請(qǐng)求的大小相等的存儲(chǔ)空間分配給作業(yè),余下的空閑區(qū)仍留在空閑區(qū)表或鏈中。 2、實(shí)驗(yàn)步驟 (1)初始化空閑分區(qū); (2)反復(fù)對(duì)現(xiàn)有的空閑分區(qū)進(jìn)行進(jìn)程創(chuàng)建和撤消,即內(nèi)存分配和回收; (3)退出。 3、流程圖 五、結(jié)果過程及截圖 初始化主存大小后的狀態(tài) 按1后分配一塊內(nèi)存: 按1后分配一塊內(nèi)存: 按2釋/news/55b7d663b60055b5.html放內(nèi)存: 六、所遇困難的解決以及心得體會(huì) 本實(shí)驗(yàn)我采取用一條鏈表同時(shí)表示空閑分區(qū)鏈和主存空間占用情況,因?yàn)橹鞔婵偞笮∈枪潭ǖ模芽臻e分區(qū)鏈所表示的區(qū)域從總的內(nèi)存里去除就是被占用的空間的大小,這個(gè)實(shí)驗(yàn)還是比較簡(jiǎn)單的,因此很快就完成了,通過它使我學(xué)習(xí)了主存空間的分配與回收,同時(shí)也讓我意識(shí)到了在回收內(nèi)存時(shí)的一些問題,使我對(duì)課本知識(shí)有了更進(jìn)一步的理解。 七、思考題 1、內(nèi)存的主要分配方式有哪些?回收時(shí)可能出現(xiàn)的什么情況?應(yīng)怎樣處理這些情況?答:有定分區(qū)分配和動(dòng)態(tài)分區(qū)分配兩種,回收時(shí)可能出現(xiàn)內(nèi)存分區(qū)被切成若干在小不等小分 區(qū),過小的分區(qū)浪費(fèi)內(nèi)存資源,這要求我們要用緊湊技術(shù)修整。 2、動(dòng)態(tài)分區(qū)管理的常用內(nèi)存分配算法有哪幾種?比較它們各自的使用范圍。 答:有首次適應(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è)。 八、源代碼 #include #include #include #definegetMEM()(MEM*)(malloc(sizeof(MEM) typedefstructMemory/可用分區(qū)鏈表節(jié)點(diǎn) intbase;/基地址 intsize;/大小 structMemory*next; MEM; MEM*pm=getMEM();/可用分區(qū)的鏈表頭 MEM*temp;/ intSIZE;/總的內(nèi)存的大小,由用戶輸入 intgeti()/讓用戶只能輸入正整數(shù) charch;inti=0;fflush(stdin);ch=getchar();while(ch=n)printf( boolcheck(MEM*pm,intbase,intsize)/檢查用戶輸入的合法性 MEM*p=pm; p=pm;while(p-next)if(p-base+p-sizenext-base&p-next-base=base returntrue;+size) p=p-next;if(!p-next&p-base+p-sizebase+p-size=base+size) returnfalse; boolrelease(MEM*pm,intbase,intsize)/釋放內(nèi)存空間 MEM*p=pm; intallocMem(MEM*pm,intsize)/分配內(nèi)存空間 MEM*p=pm;intbase;if(!check(pm,base,size)returnfalse;while(p-next)if(base+sizenext-base)break;p=p-next;if(base=p-base+p-size)/低地址相鄰if(p-next&p-next-base=base+size)/釋放區(qū)上下都相鄰p-size+=size+p-next-size;temp=p-next;p-next=p-next-next;free(temp);else/僅與地地址相鄰p-size+=size;elseif(p-next&p-next-base=base+size)/僅高地址相鄰p-next-base=base;p-next-size+=size;else/釋放區(qū)上下與空閑區(qū)都不相鄰returntrue;temp=getMEM();temp-size=size;temp-base=base;temp-next=p-next;p-next=temp; if(p-next-size=size)break;p=p-next;if(!p-next)return-1; if(p-next-size=size)/空閑分區(qū)大小剛好等于所需分區(qū) base=p-next-base; p-next=p-next-next; else p-next-size-=size; base=p-next-base; p-next-base+=size; returnbase; voidprint(MEM*pm)/打印空閑分區(qū)表和空閑分區(qū)鏈 MEM*p=pm-next; puts( puts( while(p) printf( p=p-next; puts( puts( p=pm; while(p-next) printf( if(p-base+p-size printf( voidinit()/初始化總內(nèi)存大小和空閑分區(qū)鏈的頭結(jié)點(diǎn) pm-base=0; pm-size=0; pm-next=getMEM(); puts( SIZE=geti();pm-next-size=SIZE;pm-next-base=0;pm-next-next=NULL; intmain() intsize=0,base=0;intch;init();print(pm);while(1)puts( 班_姓名張菲協(xié)作者無教師評(píng)定_實(shí)驗(yàn)題目文件系統(tǒng) 一、實(shí)驗(yàn)?zāi)康?模擬文件系統(tǒng)實(shí)現(xiàn)的基本功能,了解文件系統(tǒng)的基本結(jié)構(gòu)和文件的各種管理方法,加深理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實(shí)現(xiàn)。通過用高級(jí)語言編寫和調(diào)試一個(gè)簡(jiǎn)單的文件系統(tǒng),模擬文件管理的工作過程,從而對(duì)各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解。 二、實(shí)驗(yàn)內(nèi)容和要求 編程模擬一個(gè)簡(jiǎn)單的文件系統(tǒng),實(shí)現(xiàn)文件系統(tǒng)的管理和控制功能。要求本文件系統(tǒng)采用兩級(jí)目錄,即設(shè)置主文件目錄MFD和用戶文件目錄UED。另外,為打開文件設(shè)置運(yùn)行文件目錄AFD。設(shè)計(jì)一個(gè)10個(gè)用戶的文件系統(tǒng),每次用戶可保存10個(gè)文件,一次運(yùn)行用戶可以打開5個(gè)文件,并對(duì)文件必須設(shè)置保護(hù)措施。在用戶程序中通過使用文件系統(tǒng)提供的Create、open、read、write、close、delete等文件命令,對(duì)文件進(jìn)行操作 三、實(shí)驗(yàn)主要儀器設(shè)備和材料 硬件環(huán)境:IBM-PC或兼容機(jī) 軟件環(huán)境:C語言編程環(huán)境 四、實(shí)驗(yàn)原理及設(shè)計(jì)方案 1、實(shí)驗(yàn)原理 運(yùn)用二級(jí)目錄思想來模擬文件系統(tǒng)。 為每個(gè)用戶建立一個(gè)單獨(dú)的用戶文件目錄UFD。這些文件目錄具有相似的結(jié)構(gòu),它由用戶文件的文件塊組成。此外,在系統(tǒng)再建立一個(gè)主文件目錄MFD;在主文件目錄中,每個(gè)用戶目錄都占有一個(gè)目錄項(xiàng),其目錄項(xiàng)中包含文件名和指向該文件目錄文件的指針。 3、程序流程圖 五、結(jié)果過程及截圖 系統(tǒng)的使用簡(jiǎn)要說明: 登陸: create命令新建文件 file5 Create失敗 delete命令刪除文件 Delete失?。?open打開命令,及write命令來追加文件 Read命令和close命令關(guān)閉 對(duì)沒打開的文件讀寫: 六、所遇困難的解決以及心得體會(huì) 本實(shí)驗(yàn)的代碼長(zhǎng)度的最常的,但是原理很簡(jiǎn)單,并且實(shí)驗(yàn)要求的是模擬,所以大大降低了實(shí)驗(yàn)的難度,在操作系統(tǒng)課中我們還有一個(gè)課程設(shè)計(jì),也是文件管理系統(tǒng),但是要比這個(gè)難很多,通過這個(gè)實(shí)驗(yàn),我對(duì)文件管理系統(tǒng)的運(yùn)行機(jī)制有了深入的了解,因?yàn)橐龊眠@個(gè)實(shí)驗(yàn)必須要懂得文件管理系統(tǒng)的架構(gòu),這也迫使我認(rèn)認(rèn)真真的研究了操作系統(tǒng)中關(guān)于文件管理這一章的內(nèi)容。同時(shí)這個(gè)程序也為以后的課程設(shè)計(jì)奠定了基礎(chǔ),并且很多的代碼也是可以重用的。 七、思考題 1、文件系統(tǒng)要解決哪些問題? 答:要解決文件和用戶是否同名,文件創(chuàng)建數(shù)是否超額,所要求文件是否存在等問題。 2、什么是文件目錄?什么是文件目錄中包含哪些信息?目前廣泛采用的目錄結(jié)構(gòu)形式是哪種? 答:文件目錄就是用來展示一個(gè)用戶的所有文件的一個(gè)表格,文件目錄應(yīng)包含文件名,保密碼,文件大小,目前廣泛采用的目錄結(jié)構(gòu)形式是多級(jí)目錄形式。 八、源代碼 #include #include #include #include #defineNULL0 typedefstructmdf/MDF結(jié)構(gòu)體 charusername20;/用戶名charfilename20;/文件名 structmdf*next; MDF; typedefstructufd/UFD結(jié)構(gòu)體 charfilename20;/文件名 intprotect;/文件保護(hù)碼unsignedintlength;/文件長(zhǎng)度 structufd*next; UFD; typedefstructafd/AFD結(jié)構(gòu)體 charfilename20;/文件名intprotect;/文件保護(hù)碼unsignedintpoint;/文件讀寫指針 structafd*next; AFD; MDF*pmdf;/全局鏈表頭指針 UFD*pufd; AFD*pafd; charUserUFD20;/已經(jīng)登陸成功的用戶名 voidinitMDF()/初始化MDF表 FILE*fp;pmdf=(MDF*)malloc(sizeof(MDF);MDF*p=pmdf;if(fp=fopen( exit(1);while(!feof(fp)/把MDF文件中的內(nèi)容裝入鏈表p-next=(MDF*)malloc(sizeof(MDF);p=p-next;fscanf(fp, voidprintUFD()/打印MDF表 UFD*p=pufd-next;puts( voidinitUFD(char*name)/初始化UFD表 FILE*fp;pufd=(UFD*)malloc(sizeof(UFD);UFD*p=pufd;if(fp=fopen(name, p-next=NULL;fclose(fp); intcheck

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論