基本分頁存儲管理系統的設計-操作系統課程設計_第1頁
基本分頁存儲管理系統的設計-操作系統課程設計_第2頁
基本分頁存儲管理系統的設計-操作系統課程設計_第3頁
基本分頁存儲管理系統的設計-操作系統課程設計_第4頁
基本分頁存儲管理系統的設計-操作系統課程設計_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

課程設計任務書及成績評定課題名稱基本分頁存儲管理系統的設計、題目的目的和要求: 鞏固和加深對操作系統(OS)原理的理解,初步掌握操作系統組成模塊和應用接口的使用方法,提高進行工程設計和系統分析的能力;通過選做上面的課題,實現OS最基本模塊的管理功能,重點放在數據結構設計、文檔規范化和程序設計風格。、設計進度及完成情況日 期內 容6.16-7.18選取參考書,查閱有關文獻資料,完成課程設計說明書內容1部分。 完成課程設計說明書內容2-4部分6.196.23創建相關數據結構,錄入源程序6.246.25調試程序并記錄調試中的問題,完成課程設計說明書第5部分。6.26系統測試,演示設計成果,考核成績。6.27整理課程設計說明書,上午11時,由學習委員交課程設計說明書(計算機科學系9#213或直接交給指導教師)、主要參考文獻及資料1 湯子贏等. 計算機操作系統(第二版).西安電子科技大學出版社,2006.82 馮耀霖等. 操作系統,西安電子科技大學出版社.19923 譚耀銘. 操作系統.中國人民大學出版社,2003.4 4 任愛華 操作系統實用教程 清華大學出版社,2001 5 張堯學 史美林 計算機操作系統教程(第2版) 清華大學出版社2000、成績評定:設計成績: (教師填寫)指導老師: (簽字)二八 年 六 月二十七日目 錄第一章 概述1第二章 系統分析2第三章 系統設計3第四章 程序設計流程圖或N-S圖5第五章 源程序清單8第六章 調試過程中的問題及系統測試情況14第七章 結束語16第一章 概述課程設計是實踐性教學中的一個重要環節,它以某一課程為基礎,可以涉及和課程相關的各個方面,是一門獨立于課程之外的特殊課程。課程設計是讓同學們對所學的課程更全面的學習和應用,理解和掌握課程的相關知識。計算機操作系統一門重要的專業課,是開發操作系統和軟件系統的理論和應用基礎。存儲器是計算機系統的重要組成部分。近幾年,雖然存儲器的容量一直在不斷的擴大,價格也越來越便宜,但是仍然不能滿足現代軟件發展的需要。因此存儲器仍是一種寶貴的資源。因此盡可能的方便用戶和提高主存儲器的使用效率,使主存儲器在成本、速度和規模之間獲得較好的權衡是存儲器管理的主要任務。存儲器管理應具有內存分配、內存保護、地址映射和內存擴充等功能。本設計的目的是熟悉存貯器管理系統的設計方法;加深對所學基本分頁存儲管理方案的了解;設計地址變換機構,并將變換后的結果顯示出來。模擬環境應盡量接近真實。此次設計利用了大量數據結構中關于鏈表的相關知識,對以前所學的數據結構相關內容進行了回顧,從而掌握的更加深刻。另外,對存儲器的結構和工作過程也有了直觀而深刻的理解。語言方面,本次課程設計運用了C+語言。原因是通過分析認為只有C+和C語言比較合適,而C+在結構上更加清晰,也比較容易表達,并且代碼較少。通過代碼編寫和結構表達,對C+的內容有了更進一步的掌握。總之,對所學的數據結構和C+知識進行了很好的回顧和掌握,收獲很大。第二章 系統分析本設計的目的是熟悉存貯器管理系統的設計方法;加深對所學各種存貯器管理方案的了解;要求采用一些常用的存貯器分配算法,設計一個存貯器管理系統模擬系統并調試運行。模擬環境應盡量接近真實。因此根據設計要求,本存儲器管理系統利用最佳適應算法和首次適應算法實現了一定大小的分區分配和分區回收,并以次來模擬存儲器管理。本系統模擬實現可變分區管理,存儲管理主要是對存儲空間的分配和回收,當有用戶申請空間時,進行分配,空間不用了,及時回收,以免造成游離空間,使得該空間再也無法使用,可變分區管理的分配和回收功能類似于visual c+的reclaim()和free()的功能,分區收回算法,才用首次使用算法和最佳適應算法。在多道程序環境下,要使程序運行,必須先為之創建進程。而創建進程的第一步是將程序和數據裝入內存。存儲器實現的功能主要是內存分配等功能,本模擬系統所要實現的就是將進程的程序和數據裝入內存(物理塊)。具體需要實現的功能如下:1、退出,輸入0然后按任意鍵退出;2、分配主存,輸入作業名和作業所需長度,回到主菜單;3、回收主存,選擇后輸入要回收的作業名,有則顯示回收,無則顯示無該作業;4、顯示主存,能夠顯示分配的頁面的狀態信息,包括地址范圍和讀入的內存物理塊號(未讀入與讀入的區別顯示),頁面是否在主存中。第三章 系統設計3.1 數據結構的設計#define n 10 /*假定系統允許的最大作業數為n,假定模擬實驗中n值為10*/ #define m 10 /*假定系統允許的空閑區表最大為m,假定模擬實驗中m值為10*/3.1.1已分配區表的設計struct float address; /*已分配分區起始地址*/ float length; /*已分配分區長度,單位為字節*/ int flag; /*已分配區表登記欄標志,用0表示空欄目*/ used_tablen; /*已分配區表*/3.1.2 空閑區表的設計struct float address; /*空閑區起始地址*/ float length; /*空閑區長度,單位為字節*/ int flag; /*空閑區表登記欄標志,用0表示空欄目,用1表示未分配*/ free_tablem; /*空閑區表*/3.2 存儲器分配算法設計本次設計采用最佳適應分配算法:allocate(char J,float xk)分配分區給用戶,在這個過程中,每當分配一個分區給用戶時,可能造成空閑區表和已分配區表。分配時從空閑區表中找到一塊可以容納要分配的空間的最小空閑區。然后分配,空閑分區被分配時,如果分配后剩余的空間小于minisize,則將該空閑分區全部分配,若大于minisize,則切割分配。分配時修改相應的空閑區表和已分配區表。如果沒有找到可以容納要分配的空間的空閑區就返回“無可用空閑區”信息。3.4存儲器回收算法設計最佳適應策略的結點是按照空閑區大小從小到大排列的,可分4種情況:(1) 上鄰空閑區,下鄰空閑區,三項合并;(2) 上鄰空閑區,下鄰非空閑區,與上鄰合并;(3) 上鄰非空閑區,下鄰為空閑區,與下鄰合并;(4) 上下鄰均為非空閑區,回收區域直接填入。3.4 主函數模塊的設計首先提供一個功能菜單,接受用戶的輸入;然后根據用戶的輸入,分別提供相應的功能,功能有以下幾個:0-退出1-分配主存2-回收主存3-顯示主存。用戶輸入數字后執行相應模塊。第四章 程序設計流程圖或N-S圖4.1主程序流程圖:4.2分配函數流程圖:4.3回收函數流程圖:第五章 源程序清單#include#include #include#include#include#define n 10 /*假定系統允許的最大作業數為n,假定模擬實驗中n值為10*/ #define m 10 /*假定系統允許的空閑區表最大為m,假定模擬實驗中m值為10*/ #define minisize 100 /*空閑分區被分配時,如果分配后剩余的空間小于minisize,則將該空閑分區全部分配,若大于minisize,則切割分配*/struct float address; /*已分配分區起始地址*/ float length; /*已分配分區長度,單位為字節*/ int flag; /*已分配區表登記欄標志,用0表示空欄目*/ used_tablen; /*已分配區表*/ struct float address; /*空閑區起始地址*/ float length; /*空閑區長度,單位為字節*/ int flag; /*空閑區表登記欄標志,用0表示空欄目,用1表示未分配*/ free_tablem; /*空閑區表*/ void allocate(char J,float xk) /*給J作業,采用最佳分配算法分配xk大小的空間*/ int i,k; float ad; k=-1; for(i=0;i=xk&free_tablei.flag=1) if(k=-1|free_tablei.lengthfree_tablek.length) k=i; if(k=-1)/*未找到可用空閑區,返回*/ printf(無可用空閑區n); return; /*找到可用空閑區,開始分配:若空閑區大小與要求分配的空間差小于minisize大小,則空閑區全部分配;若空閑區大小與要求分配的空間差大于minisize大小,則從空閑區劃出一部分分配*/ if(free_tablek.length-xk=minisize) free_tablek.flag=0; ad=free_tablek.address; xk=free_tablek.length; else free_tablek.length=free_tablek.length-xk; ad=free_tablek.address+free_tablek.length; /*修改已分配區表*/ i=0; while(used_tablei.flag!=0&i=n) /*無表目可填寫已分配分區*/ printf(無表目填寫已分分區,錯誤n); /*修正空閑區表*/ if(free_tablek.flag=0) /*前面找到的是整個空閑分區*/ free_tablek.flag=1; else /*前面找到的是某個空閑分區的一部分*/ free_tablek.length=free_tablek.length+xk; return; else /*修改已分配表*/ used_tablei.address=ad; used_tablei.length=xk; used_tablei.flag=J; return; /*主存分配函數結束*/ void reclaim(char J) /*回收作業名為J的作業所占主存空間*/ int i,k,j,s,t; float S,L; /*尋找已分配表中對應登記項*/ s=0; while(used_tables.flag!=J|used_tables.flag=0)&s=n)/*在已分配表中找不到名字為J的作業*/ printf(找不到該作業n); return; /*修改已分配表*/ used_tables.flag=0; /*取得歸還分區的起始地址S和長度L*/ S=used_tables.address; L=used_tables.length; j=-1;k=-1;i=0; /*尋找回收分區的空閑上下鄰,上鄰表目k,下鄰表目j*/ while(im&(j=-1|k=-1) if(free_tablei.flag=1) if(free_tablei.address+free_tablei.length=S)k=i;/*找到上鄰*/ if(free_tablei.address=S+L)j=i;/*找到下鄰*/ i+; if(k!=-1) if(j!=-1) /* 上鄰空閑區,下鄰空閑區,三項合并*/ free_tablek.length=free_tablej.length+free_tablek.length+L; free_tablej.flag=0; else /*上鄰空閑區,下鄰非空閑區,與上鄰合并*/ free_tablek.length=free_tablek.length+L; else if(j!=-1) /*上鄰非空閑區,下鄰為空閑區,與下鄰合并*/ free_tablej.address=S; free_tablej.length=free_tablej.length+L; else /*上下鄰均為非空閑區,回收區域直接填入*/ /*在空閑區表中尋找空欄目*/ t=0; while(free_tablet.flag=1&t=m)/*空閑區表滿,回收空間失敗,將已分配表復原*/ printf(主存空閑表沒有空間,回收空間失敗n); used_tables.flag=J; return; free_tablet.address=S; free_tablet.length=L; free_tablet.flag=1; return; /*主存回收函數結束*/ int main( ) int i,a; float xk; char J; /*空閑分區表初始化:*/ free_table0.address=10240; /*起始地址假定為10240*/ free_table0.length=10240; /*長度假定為10240,即10k*/ free_table0.flag=1; /*初始空閑區為一個整體空閑區*/ for(i=1;im;i+) free_tablei.flag=0; /*其余空閑分區表項未被使用*/ /*已分配表初始化:*/ for(i=0;in;i+) used_tablei.flag=0; /*初始時均未分配*/ while(1) printf(選擇功能項:n0-退出n1-分配主存n2-回收主存n3-顯示主存)n); printf(選擇功項(0-3):n); scanf(%d,&a); switch(a) case 0: exit(0); /*a=0程序結束*/ case 1: /*a=1分配主存空間*/ printf(輸入作業名J和作業所需長度xk: ); scanf(%*c%c%f,&J,&xk); allocate(J,xk); /*分配主存空間*/ break; case 2: /*a=2回收主存空間*/ printf(輸入要回收分區的作業名); scanf(%*c%c,&J); reclaim(J); /*回收主存空間*/ break; case 3: /*a=3顯示主存情況*/ /*輸出空閑區表和已分配表的內容*/ printf(輸出空閑區表:n起始地址 分區長度 標志n); for(i=0;im;i+) printf(%6.0f%9.0f%6dn,free_tablei.address,free_tablei.length, free_tablei.flag); printf( 按任意鍵,輸出已分配區表n); getch(); printf( 輸出已分配區表:n起始地址 分區長度 標志n); for(i=0;in;i+) if(used_tablei.flag!=0) printf(%6.0f%9.0f%6cn,used_tablei.address,used_tablei.length, used_tablei.flag); else

溫馨提示

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

評論

0/150

提交評論