實驗三、儲存管理
一、實驗目的:
乙個好的計算機系統不僅要有乙個足夠容量的、訪問速度高的、穩定可靠的主儲存器,而且要能合理地分配和使用這些儲存空間。當使用者提出申請儲存器空間時,儲存管理必須根據申請者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閒區域分配給申請者。當作業撤離或主動歸還主存資源時,則儲存管理要收回作業占用的主存空間或歸還部分主存空間。
主存的分配和**的實現雖與主儲存器的管理方式有關的,通過本實驗理解在不同的儲存管理方式下應怎樣實現主存空間的分配和**。
在計算機系統中,為了提高主存利用率,往往把輔助儲存器(如磁碟)作為主儲存器的擴充,使多道執行的作業的全部邏輯位址空間總和可以超出主存的絕對位址空間。用這種辦法擴充的主儲存器稱為虛擬儲存器。通過本實驗理解在分頁式儲存管理中怎樣實現虛擬儲存器。
在本實驗中,通過編寫和除錯儲存管理的模擬程式以加深對儲存管理方案的理解。熟悉虛存管理的各種頁面淘汰演算法通過編寫和除錯位址轉換過程的模擬程式以加強對位址轉換過程的了解。
二、實驗題目:
設計乙個可變式分割槽分配的儲存管理方案。並模擬實現分割槽的分配和**過程。
對分割槽的管理法可以是下面三種演算法之一: (任選一種演算法實現)
首次適應演算法
迴圈首次適應演算法
最佳適應演算法
三.實驗源程式檔名
執行檔名
四、實驗分析:
1)本實驗採用可變分割槽管理,使用首次適應演算法實現主存的分配和**
1、可變分割槽管理是指在處理作業過程中建立分割槽,使分割槽大小正好適合作業的需求,並且分割槽個數是可以調整的。當要裝入乙個作業時,根據作業需要的主存量檢視是否有足夠的空閒空間,若有,則按需要量分割乙個分割槽分配給該作業;若無,則作業不能裝入,作業等待。隨著作業的裝入、完成,主存空間被分成許多大大小小的分割槽,有的分割槽被作業占用,而有的分割槽是空閒的。
為了說明那些分割槽是空閒的,可以用來裝入新作業,必須有一張空閒說明表
空閒區說明**式如下:
其中,起址——指出乙個空閒區的主存起始位址,長度指出空閒區的大小。
長度——指出從起始位址開始的乙個連續空閒的長度。
狀態——有兩種狀態,一種是「未分配」狀態,指出對應的由起址指出的某個長度的區域是空閒區;另一種是「空表目」狀態,表示表中對應的登記專案是空白(無效),可用來登記新的空閒區(例如,作業完成後,它所佔的區域就成了空閒區,應找乙個「空表目」欄登記歸還區的起址和長度且修改狀態)。由於分割槽的個數不定,所以空閒區說明表中應有適量的狀態為「空表目」的登記欄目,否則造成**「溢位」無法登記。
2、當有乙個新作業要求裝入主存時,必須查空閒區說明表,從中找出乙個足夠大的空閒區。有時找到的空閒區可能大於作業需要量,這時應把原來的空閒區變成兩部分:一部分分給作業占用;另一部分又成為乙個較小的空閒區,留在空閒區表中。
為了儘量減少由於分割造成的空閒區,盡可能分配低位址部分的空閒區,而盡量儲存高位址部分有較大的連續空閒區域,以利於大型作業的裝入。為此,在空閒區說明表中,把每個空閒區按其位址順序從低到高登記,即每個後繼的空閒區其起始位址總是比前者大。為了方便查詢還可使**「緊縮」,總是讓「空表目」項留在**的後部。
3、採用最先適應演算法(順序分配演算法)分配主存空間。
按照作業的需要量,查空閒區說明表,順序檢視登記欄,找到第乙個能滿足要求的空閒區。當空閒區大於需要量時,一部分用來裝入作業,另一部分仍為空閒區登記在空閒區說明表中。
由於本實驗是模擬主存的分配,所以把主存區分配給作業後並不實際啟動裝入程式裝入作業,而用輸出「分配情況」來代替。
4、當乙個作業執行完成撤離時,作業所佔的分割槽應該歸還給系統,歸還的分割槽如果與其它空閒區相鄰,則應合成乙個較大的空閒區,登記在空閒區說明表中。例如,在上述中列舉的情況下,如果作業2撤離,歸還所佔主存區域時,應與上、下相鄰的空閒區一起合成乙個大的空閒區登記在空閒區說明表中。
2)流程圖:
<1> 主存**演算法
2>首次適應分配模擬演算法
3)源程式:
#include<>
#include<>
#define null 0
#define getjcb(type) (type*)malloc(sizeof(type))
#define getsub(type) (type*)malloc(sizeof(type))
int num,num2; //要排程的作業數和要**的區域數
int m=0; //已分配作業數
int flag; //分配成功標誌
int isup,isdown; //**區域存在上鄰和下鄰的標誌
int is=0;
struct jcb *ready =null, *p,*q,*as=null;//作業佇列ready,已分配作業佇列as
typedef struct jcb jcb;
struct subarea分割槽塊
char name[10];
int addr; //分割槽首位址
int size; //分割槽大小
char state;
struct subarea *link;
} *sub=null,*r,*s,*cur; //空閒分割槽佇列sub,當前分割槽指標cur
typedef struct subarea sub;
void sort() /* 建立對作業按到達時間進行排列的函式,直接插在佇列之尾*/
}void sort3建立對已分配作業佇列的排列函式,直接插在佇列之尾*/
m++;
}void input() /* 建立作業控制塊函式*/
printf("\n 按任一鍵繼續......\n");
getch();
}void input2() /*建立要**區域的函式*/
else
/*輸入作業名不存在標誌*/
} if(has==0)
}void print()
{printf("\n\n\n\n");
printf("\t\tn");
printf("\t\t\t三.儲存管理實驗演示\n");
printf("\t\tn\n\n");
printf("\t\t\t\t覃曉花\n");
printf("\t\t\t\t計算機學院\n");
printf("\t\t\t\t計科01班\n");
實驗五儲存管理 實驗報告格式
實驗五 儲存管理 一 實驗目的 1 熟悉記憶體空閒分割槽的分配方式 2 理解動態分割槽儲存管理方式 3 掌握動態分割槽的分配與 的過程。二 實驗環境 微型計算機,ubuntu linux10.04 gedit,gcc 三 實驗內容 根據流程圖和參考程式,完成模擬記憶體分配和 過程。記憶體空間大小為1...
作業系統實驗報告 儲存管理實驗
儲存管理實驗 通過編寫和除錯儲存管理的模擬程式以加深對儲存管理方案的理解。熟悉虛存管理的各種頁面淘汰演算法。通過編寫和除錯位址轉換過程的模擬程式以加強對位址轉換過程的了解。作業系統 windows xp 編譯環境 visual c 6.0 由於在單道批處理系統中,作業一投入執行,它就占有計算機的一切...
DSP整理語音壓縮儲存和回放實驗報告
目錄一 課程的目的和要求2 二 設計原理2 三 設計步驟9 四 心得體會18 語音壓縮 儲存和回放 一.課程的目的和要求 1.設計要求及目標 基本部分 1 使用dsp實現語音壓縮和解壓縮的基本演算法,演算法型別自定,例如可以採用g.711 g.729等語音壓縮演算法。2 採用a d轉換器從mic輸入...