




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)實驗報告+進(jìn)程調(diào)度+作業(yè)調(diào)度等 操作系統(tǒng)實驗報告 1、進(jìn)程調(diào)度 2、作業(yè)調(diào)度 3、主存空間的分配與回收4、文件系統(tǒng) 學(xué)生學(xué)院_計算機(jī)學(xué)院_專業(yè)班級_網(wǎng)絡(luò)工程(3)班_學(xué)號_3107007062_學(xué)生姓名_張菲_指導(dǎo)教師_胡欣如_ xx年12月20日 班_姓名張菲協(xié)作者無教師評定_實驗題目進(jìn)程調(diào)度 一、實驗?zāi)康?用高級語言編寫和調(diào)試一個進(jìn)程調(diào)度程序,以加深對進(jìn)程的概念及進(jìn)程調(diào)度算法的理解。 二、實驗內(nèi)容和要求 編寫并調(diào)試一個模擬的進(jìn)程調(diào)度程序,采用“簡單時間片輪轉(zhuǎn)法”調(diào)度算法對五個進(jìn)程進(jìn)行調(diào)度。 每個進(jìn)程有一個進(jìn)程控制塊(PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、到達(dá)時間、需要運行時間、已運行時間、進(jìn)程狀態(tài)等等。 進(jìn)程的到達(dá)時間及需要的運行時間可以事先人為地指定(也可以由隨機(jī)數(shù)產(chǎn)生)。進(jìn)程的到達(dá)時間為進(jìn)程輸入的時間。進(jìn)程的運行時間以時間片為單位進(jìn)行計算。每個進(jìn)程的狀態(tài)可以是就緒W(Wait)、運行R(Run)兩種狀態(tài)之一。 就緒進(jìn)程獲得CPU后都只能運行一個時間片。用運行時間加1來表示。 如果運行一個時間片后,進(jìn)程的已占用CPU時間已達(dá)到所需要的運行時間,則撤消該進(jìn)程,如果運行一個時間片后進(jìn)程的已占用CPU時間還未達(dá)所需要的運行時間,也就是進(jìn)程還需要繼續(xù)運行,此時應(yīng)分配時間片給就緒隊列中排在該進(jìn)程之后的進(jìn)程,并將它插入就緒隊列隊尾。每進(jìn)行一次調(diào)度程序都打印一次運行進(jìn)程、就緒隊列、以及各個進(jìn)程的PCB,以便進(jìn)行檢查。 重復(fù)以上過程,直到所要進(jìn)程都完成為止。三、實驗主要儀器設(shè)備和材料 硬件環(huán)境:IBM-PC或兼容機(jī)軟件環(huán)境:C語言編程環(huán)境四、實驗原理及設(shè)計方案 1、進(jìn)程調(diào)度算法:采用多級反饋隊列調(diào)度算法。其基本思想是:當(dāng)一個新進(jìn)程進(jìn)入內(nèi)在后,首先將它放入第一個隊列的末尾,按FCFS原則排隊等待高度。當(dāng)輪到該進(jìn)程執(zhí)行時,如能在該時間片內(nèi)完成,便可準(zhǔn)備撤離系統(tǒng);如果它在一個時間片結(jié)束時尚為完成,調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第二隊列的末尾,再同樣地按FCFS原則等待調(diào)度執(zhí)行,以此類推。 2、實驗步驟: (1)按先來先服務(wù)算法將進(jìn)程排成就緒隊列。 (2)檢查所有隊列是否為空,若空則退出,否則將隊首進(jìn)程調(diào)入執(zhí)行。 (3)檢查該運行進(jìn)程是否運行完畢,若運行完畢,則撤消進(jìn)程,否則,將該進(jìn)程插 入到下一個邏輯隊列的隊尾。 (4)是否再插入新的進(jìn)程,若是則把它放到第一邏輯隊列的列尾。(5)重復(fù)步驟(2)、(3)、(4),直到就緒隊列為空。 五、流程圖 六、結(jié)果過程及截圖初始化隊列 按Y鍵繼續(xù)運行進(jìn)程: 按Y鍵繼續(xù)運行進(jìn)程: 運行若干次后的狀態(tài): 添加新的進(jìn)程: 七、所遇困難的解決以及心得體會 在這個多級反饋的實驗中,我采取了用一條實際上的鏈表隊列來模擬多個邏輯上的隊列,通過維護(hù)幾個鏈表的狀態(tài)信息來找到每個進(jìn)程運行完后應(yīng)該插入的地方,還有一個標(biāo)志位Fend用來表明新插入的隊列的位置。雖然實驗原理很簡單,但是在編寫代碼的過程中遇到了不少的問題,在兩個小時之內(nèi)已經(jīng)完成的大體代碼的編寫,但是之中存在不少的問題,導(dǎo)致了用了差不多四個小時的時間去調(diào)試才把它弄好, 這主要歸咎于在開始設(shè)計代碼的不太 合理,在后期使得代碼結(jié)構(gòu)有些混亂,使得調(diào)試更加的麻煩,以及對編程的不熟悉。通過這個實驗不僅使我對進(jìn)程的調(diào)度算法有了更深的認(rèn)識,使得理論知識得到的實踐,也使我的編程能力得到了進(jìn)一步提高。七、思考題 1、分析不同調(diào)度算法的調(diào)度策略,比較不同調(diào)度算法的優(yōu)缺點,總結(jié)它們的適用范圍。答:動態(tài)有限權(quán)算法:動態(tài)優(yōu)先權(quán)是指在創(chuàng)建進(jìn)程時所創(chuàng)建的優(yōu)先權(quán),會隨進(jìn)程的推進(jìn)或者等待時間的增加而改變,以便獲得更好的調(diào)度性能。處理機(jī)為每個進(jìn)程分配一定的時間片,在就緒隊列中,優(yōu)先權(quán)高的進(jìn)程將優(yōu)先獲得處理機(jī),進(jìn)程在進(jìn)去運行完響應(yīng)的時間片后,如沒完成,優(yōu)先權(quán)減1,從新回到就緒隊列等待分配處理機(jī)。 時間片的輪轉(zhuǎn)法:系統(tǒng)將所有進(jìn)程排成一個隊列,按照先來先服務(wù)的原則,對隊列首的進(jìn)程進(jìn)行處理,每個進(jìn)程在用完自己的時間片后,從新回到隊尾進(jìn)行排隊。每運行一次,進(jìn)程的需要時間減1,直到就緒隊列為空!八、源代碼 #include#include #include #definegetpch(type)(type*)malloc(sizeof(type)#defineNULL0 #defineTIME2/時間片長度 typedefstructpcb/進(jìn)程管理塊charname10;/進(jìn)程名字charstate;/進(jìn)程狀態(tài) intqueue;intntime;intrtime;intetime; /進(jìn)程所在的隊列 /進(jìn)程需要運行的時間 /進(jìn)程已經(jīng)運行的時間 /進(jìn)程在本隊列可運行的時間片 structpcb*link; PCB; PCB*ready=NULL,*pinsert=NULL,*pfend=NULL,*p=NULL;位置的變量 intgeti()/使用戶僅能輸入整數(shù) charch;inti=0;fflush(stdin);ch=getchar();while(ch=n) /就緒隊列,進(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)/第一隊列存在 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ù),用于顯示當(dāng)前進(jìn)程*/ printf( voidcheck()/*建立進(jìn)程查看函數(shù)*/ voidsort()/調(diào)整進(jìn)程隊列 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)程運行結(jié)束,撤銷進(jìn)程)*/ voidrunning()/*建立進(jìn)程就緒函數(shù)(進(jìn)程運行時間到,置就緒狀態(tài))*/ voidmain() charch;input();while(ready!=NULL)printf( ready-state=R;check();running();printf( 計算機(jī)學(xué)院網(wǎng)絡(luò)工程專業(yè)班_姓名張菲協(xié)作者無教師評定_實驗題目作業(yè)調(diào)度 一、實驗?zāi)康?本實驗要求學(xué)生模擬作業(yè)調(diào)度的實現(xiàn),用高級語言編寫和調(diào)試一個或多個作業(yè)調(diào)度的模擬程序,了解作業(yè)調(diào)度在操作系統(tǒng)中的作用,以加深對作業(yè)調(diào)度算法的理解。 二、實驗內(nèi)容和要求 1、編寫并調(diào)度一個多道程序系統(tǒng)的作業(yè)調(diào)度模擬程序。 作業(yè)調(diào)度算法:采用基于先來先服務(wù)的調(diào)度算法??梢詤⒖颊n本中的方法進(jìn)行設(shè)計。對于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數(shù)量、調(diào)度作業(yè)時必須考慮到每個作業(yè)的資源要求。 三、實驗主要儀器設(shè)備和材料 硬件環(huán)境:IBM-PC或兼容機(jī) 軟件環(huán)境:C語言編程環(huán)境 四、實驗原理及設(shè)計方案 采用多道程序設(shè)計方法的操作系統(tǒng),在系統(tǒng)中要經(jīng)常保留多個運行的作業(yè),以提高系統(tǒng)效率。作業(yè)調(diào)度從系統(tǒng)已接納的暫存在輸入井中的一批作業(yè)中挑選出若干個可運行的作業(yè),并為這些被選中的作業(yè)分配所需的系統(tǒng)資源。對被選中運行的作業(yè)必須按照它們各自的作業(yè)說明書規(guī)定的步驟進(jìn)行控制。 采用先來先服務(wù)算法算法模擬設(shè)計作業(yè)調(diào)度程序。 (1)、作業(yè)調(diào)度程序負(fù)責(zé)從輸入井選擇若干個作業(yè)進(jìn)入主存,為它們分配必要的資源,當(dāng)它們能夠被進(jìn)程調(diào)度選中時,就可占用處理器運行。作業(yè)調(diào)度選擇一個作業(yè)的必要條件是系統(tǒng)中現(xiàn)有的尚未分配的資源可滿足該作業(yè)的資源要求。但有時系統(tǒng)中現(xiàn)有的尚未分配的資源既可滿足某個作業(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è)時,那么順序挑選后面的作業(yè)。 (2)假定某系統(tǒng)可供用戶使用的主存空間共100k,并有5臺磁帶機(jī)。 3)流程圖: 五、結(jié)果過程及截圖 讀取文件jobs.txt來初始化主存,磁帶機(jī)的個數(shù),并打印出來。 初始時間是9:00: 按Y運行5分鐘: 按Y運行5分鐘: 按Y運行5分鐘: 多次運行后最后狀態(tài): 六、所遇困難的解決以及心得體會 這個實驗是花的時間最多的一個實驗,第一次做的時候由于理解有些問題,所以做錯了。之后重新做了一遍,收獲還是很多的,遇到了很多的細(xì)節(jié)問題,例如像是時間化成浮點數(shù)和浮點數(shù)化成時間等一些問題,從中也暴露了自己的編程能力欠缺,之后要多多的寫程序。 七、思考題 1、寫出每種算法的調(diào)度策略,最后比較各種算法的優(yōu)缺點。 答:先來先服務(wù)算法是根據(jù)作業(yè)的進(jìn)入時間來排序,到達(dá)時間短的先運行,優(yōu)點是實現(xiàn)簡單,缺點是運行時間慢。 短作業(yè)優(yōu)先算法是根椐作業(yè)的估計運行時間來排序,估計運行時間短的先運行,優(yōu)點是運行時間快,缺點是實現(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á)時間floatrtime;/運行時間RESOURCEresource;/資源數(shù)量structJCB*link;JCB; RESOURCEsource=100,5; JCB*pjcb=getjcb();/作業(yè)鏈表頭 charnowtime5;/現(xiàn)在時間,初始時間為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)/在文件中找到一個字符的位置(讀取文件時用) 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)/把時間轉(zhuǎ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)/把浮點型數(shù)值轉(zhuǎn)化為時間 floattimesub(char*time1,char*time2)/兩個時間相減,得到時間差 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;/不初始化則會發(fā)生錯誤,?fscanf(fp, intcheckend()/檢查是否所有的作業(yè)都已經(jīng)運行完了 JCB*p=pjcb-link;while(p)if(p-state!=F)return0;p=p-link;return1; voidrun()/運行作業(yè) if(checkend()/檢查是否所有的作業(yè)都已經(jīng)運行完了printf( p=p-link;p=pjcb-link;while(p)/計算到達(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é)作者無教師評定_ 實驗題目主存空間的分配和回收 一、實驗?zāi)康?熟悉主存的分配與回收。理解在不同的存儲管理方式下,如何實現(xiàn)主存空間的分配與回收。掌握動態(tài)分區(qū)分配方式中的數(shù)據(jù)結(jié)構(gòu)和分配算法及動態(tài)分區(qū)存儲管理方式及其實現(xiàn)過程。 二、實驗內(nèi)容和要求 主存的分配和回收的實現(xiàn)是與主存儲器的管理方式有關(guān)的。所謂分配,就是解決多道作業(yè)或多進(jìn)程如何共享主存空間的問題。所謂回收,就是當(dāng)作業(yè)運行完成時將作業(yè)或進(jìn)程所占的主存空間歸還給系統(tǒng)。 可變分區(qū)管理是指在處理作業(yè)過程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的需求,并且分區(qū)個數(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ū)鏈來進(jìn)行,分區(qū)分配中所用的算法采用首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三種算法來實現(xiàn)主存的分配與回收。同時,要求設(shè)計一個實用友好的用戶界面,并顯示分配與回收的過程。 三、實驗主要儀器設(shè)備和材料 硬件環(huán)境:IBM-PC或兼容機(jī) 軟件環(huán)境:VC+6.0 四、實驗原理及設(shè)計方案 1、循環(huán)首次適應(yīng)算法 在該算法中,把主存中所有空閑區(qū)按其物理地址遞增的次序排列。在為作業(yè)分配存儲空間時,從上次找到的空閑分區(qū)的下一個空閑分區(qū)開始查找,直到找到第一個能滿足要求的空閑區(qū),從中劃出與請求的大小相等的存儲空間分配給作業(yè),余下的空閑區(qū)仍留在空閑區(qū)表或鏈中。 2、實驗步驟 (1)初始化空閑分區(qū); (2)反復(fù)對現(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)存: 六、所遇困難的解決以及心得體會 本實驗我采取用一條鏈表同時表示空閑分區(qū)鏈和主存空間占用情況,因為主存總大小是固定的,把空閑分區(qū)鏈所表示的區(qū)域從總的內(nèi)存里去除就是被占用的空間的大小,這個實驗還是比較簡單的,因此很快就完成了,通過它使我學(xué)習(xí)了主存空間的分配與回收,同時也讓我意識到了在回收內(nèi)存時的一些問題,使我對課本知識有了更進(jìn)一步的理解。 七、思考題 1、內(nèi)存的主要分配方式有哪些?回收時可能出現(xiàn)的什么情況?應(yīng)怎樣處理這些情況?答:有定分區(qū)分配和動態(tài)分區(qū)分配兩種,回收時可能出現(xiàn)內(nèi)存分區(qū)被切成若干在小不等小分 區(qū),過小的分區(qū)浪費內(nèi)存資源,這要求我們要用緊湊技術(shù)修整。 2、動態(tài)分區(qū)管理的常用內(nèi)存分配算法有哪幾種?比較它們各自的使用范圍。 答:有首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三種。 首次適應(yīng)算法適用于小型作業(yè),而且分配速度不怎么要求的作業(yè),循環(huán)首次適應(yīng)算法適用于一些大的作業(yè),避免大作業(yè)長期得不到分配,最佳適應(yīng)算法適應(yīng)于對分配速度要求高,作業(yè)容量比較大的作業(yè)。 八、源代碼 #include #include #include #definegetMEM()(MEM*)(malloc(sizeof(MEM) typedefstructMemory/可用分區(qū)鏈表節(jié)點 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é)點 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é)作者無教師評定_實驗題目文件系統(tǒng) 一、實驗?zāi)康?模擬文件系統(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個用戶的文件系統(tǒng),每次用戶可保存10個文件,一次運行用戶可以打開5個文件,并對文件必須設(shè)置保護(hù)措施。在用戶程序中通過使用文件系統(tǒng)提供的Create、open、read、write、close、delete等文件命令,對文件進(jìn)行操作 三、實驗主要儀器設(shè)備和材料 硬件環(huán)境:IBM-PC或兼容機(jī) 軟件環(huán)境:C語言編程環(huán)境 四、實驗原理及設(shè)計方案 1、實驗原理 運用二級目錄思想來模擬文件系統(tǒng)。 為每個用戶建立一個單獨的用戶文件目錄UFD。這些文件目錄具有相似的結(jié)構(gòu),它由用戶文件的文件塊組成。此外,在系統(tǒng)再建立一個主文件目錄MFD;在主文件目錄中,每個用戶目錄都占有一個目錄項,其目錄項中包含文件名和指向該文件目錄文件的指針。 3、程序流程圖 五、結(jié)果過程及截圖 系統(tǒng)的使用簡要說明: 登陸: create命令新建文件 file5 Create失敗 delete命令刪除文件 Delete失?。?open打開命令,及write命令來追加文件 Read命令和close命令關(guān)閉 對沒打開的文件讀寫: 六、所遇困難的解決以及心得體會 本實驗的代碼長度的最常的,但是原理很簡單,并且實驗要求的是模擬,所以大大降低了實驗的難度,在操作系統(tǒng)課中我們還有一個課程設(shè)計,也是文件管理系統(tǒng),但是要比這個難很多,通過這個實驗,我對文件管理系統(tǒng)的運行機(jī)制有了深入的了解,因為要做好這個實驗必須要懂得文件管理系統(tǒng)的架構(gòu),這也迫使我認(rèn)認(rèn)真真的研究了操作系統(tǒng)中關(guān)于文件管理這一章的內(nèi)容。同時這個程序也為以后的課程設(shè)計奠定了基礎(chǔ),并且很多的代碼也是可以重用的。 七、思考題 1、文件系統(tǒng)要解決哪些問題? 答:要解決文件和用戶是否同名,文件創(chuàng)建數(shù)是否超額,所要求文件是否存在等問題。 2、什么是文件目錄?什么是文件目錄中包含哪些信息?目前廣泛采用的目錄結(jié)構(gòu)形式是哪種? 答:文件目錄就是用來展示一個用戶的所有文件的一個表格,文件目錄應(yīng)包含文件名,保密碼,文件大小,目前廣泛采用的目錄結(jié)構(gòu)形式是多級目錄形式。 八、源代碼 #include #include #include #include #defineNULL0 typedefstructmdf/MDF結(jié)構(gòu)體 charusername20;/用戶名charfilename20;/文件名 structmdf*next; MDF; typedefstructufd/UFD結(jié)構(gòu)體 charfilename20;/文件名 intprotect;/文件保護(hù)碼unsignedintlength;/文件長度 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等.壓縮文件請下載最新的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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國腹腔鏡壓榨機(jī)行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國脫水冷凍水果行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國膠合板行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國聚醚消泡劑行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國聚光鏡行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 基于大數(shù)據(jù)的營銷活動分析報告
- 2025至2030中國美甲行業(yè)市場發(fā)展現(xiàn)狀及發(fā)展趨勢與投資發(fā)展報告
- 2025至2030中國羊奶粉行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 2025至2030中國網(wǎng)絡(luò)動漫行業(yè)營銷模式與投資契機(jī)深度評估報告
- 2025至2030中國罐式集裝箱行業(yè)發(fā)展研究與產(chǎn)業(yè)戰(zhàn)略規(guī)劃分析評估報告
- 工會審計實務(wù)課件
- 預(yù)防艾滋病、梅毒和乙肝母嬰傳播相關(guān)報表、上報流程和要求
- 《鐵路技術(shù)管理規(guī)程》(普速鐵路部分)-14年新版
- 食用油儲存期品質(zhì)變化的太赫茲光譜無損識別
- 胎盤早剝預(yù)案演練腳本
- 五山文學(xué)全集第一卷
- 聚磷腈功能高分子材料的合成及應(yīng)用
- 中國鐵路總公司《鐵路技術(shù)管理規(guī)程》(高速鐵路部分)2014年7月
- 鈣加維生素Dppt課件(PPT 14頁)
- TRD深基坑止水帷幕施工方案(22頁)
- 企業(yè)組織架構(gòu)圖模板
評論
0/150
提交評論