可變分區(qū)存儲管理_第1頁
可變分區(qū)存儲管理_第2頁
可變分區(qū)存儲管理_第3頁
可變分區(qū)存儲管理_第4頁
可變分區(qū)存儲管理_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、沈 陽 工 程 學 院學 生 實 驗 報 告(課程名稱: 操作系統(tǒng) )實驗題目: 可變分區(qū)存儲管理 班 級 計本131 學 號 2013414116 姓 名 孫長明 地 點 實訓F608 指導教師 呂海華 劉娜 實 驗 日 期 : 2015 年 5 月 19 日一、 實驗題目主存儲器空間分配實驗。二、實驗要求編寫一段程序來模擬可變分區(qū)管理方法。要求能通過文件形式定義空閑區(qū)表;能隨意輸入作業(yè)及需要分配的空間;能分別使用首次適應算法、最佳適應算法和最壞適應算法對輸入的作業(yè)進行空間分配;能顯示系統(tǒng)空閑表和已分配空間表。三、實驗目的通過首次適應算法、最佳適應算法和最壞適應算法實現(xiàn)主存空間的分配,可以使

2、讀者可好地理解存儲分配算法。四、實驗原理分析可變分區(qū)方式是按作業(yè)需要的主存空間大小來分區(qū)。當裝入一個作業(yè)時,首先要查看是否有足夠的空閑空間來分配,若有則按指定的分配方式進行分配;否則作業(yè)不能裝入。隨著作業(yè)的裝入和撤離主存空間被分為若干個大大小小的不連續(xù)的區(qū)間,為了表明各區(qū)間的狀態(tài)可以用一個內存分區(qū)表如表1所示來表示。表1 內存分區(qū)表起始地址長度標志120k20k作業(yè)1200k50k空閑這樣我們可以定義一個如下的結構表示內存分區(qū)信息。typedef struct nodeint start;/起始地址int length; /長度char tag20;/標志job;可變分區(qū)的三種算法就是為作業(yè)分

3、配主存空間的方法。 首次適應算法:在空閑區(qū)間中查詢滿足作業(yè)需要的空間,并將作業(yè)裝入第一個滿足條件的空間中去。 最佳適應算法:在空閑區(qū)間中查詢滿足作業(yè)需要的空間,并將作業(yè)裝入滿足條件的空閑空間中最小的一個空間中去。 最壞適應算法:在空閑區(qū)間中查詢滿足作業(yè)需要的空間,并將作業(yè)裝入滿足條件的空閑空間中最大的一個空間中去。從三種算法的說明可以看出,分配空間的過程主要可以分兩步: 查詢所有滿足作業(yè)需求的空間塊。 按照指定的算法將作業(yè)裝入空間塊中。在操作的最初主存空間實際就是一個大的空閑區(qū),不涉及到如何分配的問題。為直接模擬運行一段時間后主存中出現(xiàn)了多個空閑塊的狀態(tài),題目要求從一個文件讀入空閑區(qū)表。在這里

4、我們可以設計一個空閑區(qū)表文件的結構為如表2所示:表2 空閑區(qū)表起始地址長度200k50k這樣也可以方便地將空閑表一次讀入程序中,而不必再一個個的輸入。主要變量及函數(shù)說明如表3所示。表3 變量與函數(shù)說明表typedef struct node內存塊結構job frees空閑區(qū)表job occupys已分配區(qū)表free_quantity空閑區(qū)數(shù)量occupy_quantity已分配區(qū)數(shù)量void initial()初始化函數(shù)int readData()從文件讀入空閑表函數(shù)void sort()排序空閑表void view()顯示分區(qū)信息void earliest()最先適應分配算法void exc

5、ellent()最優(yōu)適應分配算法void worst()最壞適應算法mem.txt空閑表文件5、 實驗過程記錄及結果分析1. 首次適應算法初始狀態(tài)分配作業(yè)分配結果2. 最佳適應初始狀態(tài)作業(yè)分配分配結果3. 最壞適應算法初始狀態(tài)作業(yè)分配分配結果五、成績評定優(yōu)良中及格不及格出 勤內 容格 式分 析總 評指導教師: 年 月 日#include<stdio.h>#include<stdlib.h>#include<string.h>#define max 100typedef struct nodeint start;int length;char tag20;jo

6、b;job freesmax;job occupysmax;int free_quantity,occupy_quantity;int SIZE;void initial() /初始化函數(shù)int i;for(i=0;i<max;i+)freesi.start=-1;freesi.length=0;strcpy(freesi.tag,"free");occupysi.start=-1;occupysi.length=0;strcpy(occupysi.tag,"");free_quantity=0;occupy_quantity=0;void wri

7、tedata() /把分區(qū)函數(shù)寫入磁盤文件FILE *fp;char fname20;int i,j;printf("請輸入初始空閑表文件名:n");scanf("%s",&fname);printf("現(xiàn)在進行初始化空閑分區(qū)!n");printf("請輸入您要建立的空閑分區(qū)數(shù):n");scanf("%d",&SIZE);for(i=0;i<SIZE;i+)j=i+1;printf("輸入第%d個分區(qū)的起始地址:n",j);scanf("%d&

8、quot;,&freesi.start);printf("輸入第%d個分區(qū)的長度:n",j);scanf("%d",&freesi.length);if(fp=fopen(fname,"wb")=NULL)printf("錯誤,文件打不開,請檢查文件名n");for(i=0;i<SIZE;i+)if(fwrite(&freesi,sizeof(struct node),1,fp)!=1)printf("文件寫入錯誤!n");fclose(fp);void readd

9、ata() /從文件讀入分區(qū)表函數(shù)FILE *fp; char fname20; printf("請輸入讀入空閑表文件名:");/輸入空閑表文件的文件名 scanf("%s",&fname); if(fp=fopen(fname,"rb")=NULL)printf("錯誤,文件打不開,請檢查文件名n");exit(0);elsefor(int i=0;i<SIZE;i+)fread(&freesi,sizeof(struct node),1,fp);free_quantity+;fclose(

10、fp);void sort() /排序空閑表for(int i=0;i<free_quantity-1;i+)int t=i;for(int j=i+1;j<free_quantity;j+)if(freesj.start<=freest.start)t=j;freesfree_quantity.start=freesi.start;freesfree_quantity.length=freesi.length;freesi.start=freest.start;freesi.length=freest.length;freest.start=freesfree_quanti

11、ty.start;freest.length=freesfree_quantity.length;void view() /顯示分區(qū)信息printf("空閑分區(qū)表顯示如下:n");printf("起始地址t長度t狀態(tài)標志n");for(int i=0;i<free_quantity;i+)printf("%6dkt%10dkt%stn",freesi.start,freesi.length,freesi.tag);printf("nn已分配分區(qū)表顯示如下:n");printf("起始地址t長度t占用

12、作業(yè)名n");for(int j=0;j<occupy_quantity;j+)printf("%6dkt%10dkt%stn",occupysj.start,occupysj.length,occupysj.tag);getchar();getchar();void earliest() /首次適應算法char jobname20;int joblength,f=0;int i,j;printf("請輸入作業(yè)名:n");scanf("%s",&jobname);printf("輸入作業(yè)的長度:n&q

13、uot;);scanf("%d",&joblength);for(i=0;i<free_quantity;i+)if(freesi.length>=joblength) f=1;if(f=0)printf("n當前沒有能滿足你申請長度的空閑內存,請稍候再試n");getchar();else/找到了滿足的空間int t=0; j=0; while(t=0)if(freesj.length>=joblength)t=1; j+; j-; occupysoccupy_quantity.start=freesj.start;/分配滿足

14、條件的空間 strcpy(occupysoccupy_quantity.tag,jobname); occupysoccupy_quantity.length=joblength; occupy_quantity+; if(freesj.length>joblength)freesj.start+=joblength;freesj.length-=joblength;elsefor(i=j;i<free_quantity-1;i+)freesi.start=freesi+1.start; freesi.length=freesi+1.length; free_quantity-;p

15、rintf("作業(yè)申請內存空間成功!n");getchar();getchar();void excellent() /最佳適應法char jobname20;int joblength,f=0;int i,j;printf("請輸入作業(yè)名:n");scanf("%s",&jobname);printf("輸入作業(yè)的長度:n");scanf("%d",&joblength);for(i=0;i<free_quantity;i+)if(freesi.length>=jo

16、blength) f=1;if(f=0)printf("n當前沒有能滿足你申請長度的空閑內存,請稍候再試n");getchar();else /找到了滿足的空間int t=0; j=0; while(t=0)if(freesj.length>=joblength)t=1; j+; j-;for(i=0;i<free_quantity;i+)if(freesi.length>=joblength&&freesi.length<freesj.length)j=i;occupysoccupy_quantity.start=freesj.st

17、art; /分配空閑空間 strcpy(occupysoccupy_quantity.tag,jobname); occupysoccupy_quantity.length=joblength; occupy_quantity+; if(freesj.length>joblength) freesj.start+=joblength;freesj.length-=joblength;elsefor(i=j;i<free_quantity-1;i+)freesi.start=freesi+1.start; freesi.length=freesi+1.length; free_qua

18、ntity-; printf("作業(yè)申請內存空間成功!n"); getchar(); getchar(); void worst()char jobname20;int joblength,f=0;int i,j;printf("請輸入作業(yè)名:n");scanf("%s",&jobname);printf("輸入作業(yè)的長度:n");scanf("%d",&joblength);for(i=0;i<free_quantity;i+)if(freesi.length>=j

19、oblength) f=1;if(f=0)printf("n當前沒有能滿足你申請長度的空閑內存,請稍候再試n");getchar();getchar();else /找到了滿足的空間int t=0; j=0; while(t=0)if(freesj.length>=joblength)t=1; j+; j-;for(i=0;i<free_quantity;i+)if(freesi.length>=joblength&&freesi.length>freesj.length)j=i;occupysoccupy_quantity.star

20、t=freesj.start; /分配空閑空間 strcpy(occupysoccupy_quantity.tag,jobname); occupysoccupy_quantity.length=joblength; occupy_quantity+; if(freesj.length>joblength) freesj.start+=joblength;freesj.length-=joblength;elsefor(i=j;i<free_quantity-1;i+)freesi.start=freesi+1.start; freesi.length=freesi+1.length; free_quantity-;printf("作業(yè)申請內存空間成功!n");getchar();getchar();void main()initial();int n;writedata();system("cls");readda

溫馨提示

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

評論

0/150

提交評論