




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課設實驗基本分頁存儲管理的模擬實現 基本分頁存儲管理的模擬實現 學 院: 專 業: 學 生 姓 名: 學 號: 指 導 教 師: 2014年3月 18 日 目錄一、設計內容22、 相關操作系統的知識介紹2三、課程設計的目的及要求2四、程序功能說明3五、算法整體思想3六、主要功能模塊進程圖3七、實驗結果4八、實驗總結7九、程序代碼7一、設計內容 根據設計要求實現對基本分頁存儲管理的模擬二、 相關操作系統的知識介紹 連續分配方式會形成許多“碎片”,雖然可通過“緊湊”方法將許多碎片拼接成可用的大塊空間,但須為之付出很大的開銷。如果允許將一個進程直接分散的裝入到許多不相鄰接的分區中,則無需在進行“緊湊
2、”。基于這一思想而產生了離散分配方式。如果離散分配的 基本單位是頁,則稱為分頁存儲管理方式;如果離散分配的基本單位是段,則稱為分段存儲管理方式。 在分頁存儲管理方式中,如果不具備頁面對換功能,則稱為基本的分頁存儲管理方式,或稱為純分頁存儲管理方式,它不具有支持實現虛擬存儲的功能,它要求把每個作業全部裝入內存后方能運行。3、 課程設計的目的及要求 1、課程設計的目的操作系統課程設計是計算機專業重要的教學環節,它為我們提供了一個既動手又動腦,將課本上的理論知識和實際有機的結合起來,獨立分析和解決實際問題的機會。 l 進一步鞏固和復習操作系統的基礎知識。 l 培養我們結構化程序、模塊化程序設計的方法
3、和能力。 l 提高我們調試程序的技巧和軟件設計的能力。l 提高我們分析問題、解決問題以及綜合利用 C 語言進行程序設計的 能力。2、設計要求1. 選擇恰當的數據結構表示頁表2. 進程名,進程所需頁數,進程進行的操作(裝入/退出)等操作可有鍵盤輸入,也可從文件讀出。3. 每進行一次進程的裝入或者退出操作,就顯示出操作執行后內存中各頁的分配情況。四、程序功能說明函數各模塊部分功能void CreatA()/創建內存新函數void NewNode(LinkList &L)/建立新進程void FreeNode(LinkList &L)/回收進程,釋放內存void Printf(Lin
4、kList L)/顯示所有進程所占物理塊信息void look(LinkList L)/查看進程信息void showit()/顯示內存塊使用信息函數的整體功能 這個程序是為了實現離散分配方式,以消減內存的外零頭,提高內存的利用率,由系統把邏輯地址劃分為頁號和頁內地址兩部分。通過這個程序實現了將進程分頁處理,劃分物理塊。五、算法整體思想 先定義A100來記錄內存物理塊; max = 99來記錄內存物理塊數;count = 100來記錄未使用的物理塊數。首先通過CreatA()函數初始化內存而后通過NewNode(LinkList &L)建立新的進程,輸入進程號,進程名,進程大小,計算出
5、所需要的進程頁數以及分配物理塊。通過FreeNode(LinkList &L)來刪除所選擇的進程信息,釋放內存。通過Printf(LinkList L)顯示以上兩個函數所產生的進程信息。而后通過look(LinkList L)查看進程信息。通過showit()顯示內存物理塊的分布情況。 當輸入進程號new_node->f,然后通過j=0至j>3時終止,如若p->f=new node->f當是時進程存在,重新輸入,當不是時p=p->next;如若非此情況則輸入進程名稱和進程大小,然后通過進程頁數n=size/1024,若頁內地址k!=0,n=n+1顯示所需頁
6、數,比較頁數與物理塊的大小,如果頁數大于物理塊數則內存物理塊不足,新建進程失敗;如果小于則分配內存物理塊。六、主要功能模塊進程圖開始輸入進程號new_node->f輸入進程號次數j=0(j>3,終止)Y輸入進程名稱、大小p->f=new node->f進程頁數n=size/1024,若頁內地址k!=0,n=n+1顯示所需頁數p=p->next N頁數n>物理塊數 Y內存物理塊分配不足,新建進程失敗 N分配內存物理塊七、實驗結果添加進程 刪除進程內存使用情況查看進程八、實驗總結通過本次操作系統課設,本次課設為我們提供了一個既動手又動腦,將課本上的理論知識和實際
7、有機的結合起來,獨立分析和解決實際問題的機會。進一步鞏固和復習操作系統的基礎知識。 培養我們結構化程序、模塊化程序設計的方法和能力。提高我們調試程序的技巧和軟件設計的能力。 提高我們分析問題、解決問題以及綜合利用 C 語言進行程序設計的能力。本次課設掌握了如何創建一個進程,添加進程和刪除進程。通過本次課設,我也發現我的好多不足之處,首先在源程序的錄入上就遇到了很大的麻煩,由于英文錄入的速度比較慢,在源程序代碼的錄入上就花費了很多的功夫,還有就是C語言的基本功還不夠扎實,出現了很多不該出現的毛病,還好在設計過程,讓我深深體會到老師在課堂上講的內容和要注意的地方的重要性,也正是老師在課堂上提前給我
8、們做了提醒和學習,我在設計時才沒花費太多的時間去更正這些問題。在以后的學習中,我一定要注意基本功的學習。謝謝老師對我的指導與教誨,在今后的學習中一定會用心再用心,不辜負老師對學生的教誨!九、程序代碼#include "stdio.h" #include "stdlib.h"#include "string.h" int A100; /內存物理塊,0:未使用,非0:已使用 int max = 99; /記錄內存的物理塊數,值為A100最大下標 int count = 100; /記錄內存未使用物理塊數 typedef struct LN
9、ode int f; /進程號 char name8; /進程名 int size; /進程大小 int n; /進程頁數 int ye100; /頁表,下標表示頁號,內容表示進程各頁所在物理塊 struct LNode *next; LNode,*LinkList; /內存初始化 void CreatA() int i = 0; for(i = 0;i <= max; i+) Ai = 0; /建立新進程 void NewNode(LinkList &L) int i,j; int m,k; LinkList p; LinkList new_node; new_node= (L
10、inkList)malloc(sizeof(LNode); p = L; printf("輸入進程號:"); scanf("%d",&new_node->f); j=0; while(p != NULL&&j<3) /查找進程號是否重復 if(p->f!=new_node->f) p = p->next; else printf("n該進程已存在,重新輸入:"); scanf("%d",&new_node->f); p = L;/p重新指向頭結點
11、j+; if(j<3) printf("輸入進程名稱:"); scanf("%s",new_node->name); printf("輸入進程的大小:"); scanf("%d",&new_node->size); new_node->n=new_node->size/1024; k=new_node->size%1024; if(k!=0)new_node->n=new_node->n+1; printf("所需要的頁數為:"); pri
12、ntf("%dn",new_node->n); if(new_node->n> count) printf("n內存物理塊不足,新建進程失敗!nn"); else count -=new_node->n; m = 0; for(i= 0; i<= max; i+) if(Ai = 0 && m < new_node->n) Ai=new_node->f; new_node->yem = i; m+; if(L = NULL) L = new_node; else p = L; /查找最
13、后一個節點 while(p->next != NULL) p = p->next; p->next = new_node; new_node->next = NULL; else printf("n錯誤次數過多,返回主菜單:"); /回收進程,釋放內存 void FreeNode(LinkList &L) LinkList p,q; int z; printf("請輸入要刪除的進程號:"); scanf("%d",&z); p = L;/查找進程;用p記錄 q = p; while(p != N
14、ULL) if(p->f=z) printf("該進程已刪除"); break; else q = p; p = p->next; if(p = NULL) printf("n該進程不存在!n"); else for(int i = 0; i < p->n; i+) Ap->yei = 0; count += p->n; if(p->f= q->f)/要刪除的是頭結點 L = p->next; else q->next = p->next; /顯示所有進程占用的物理塊 void Print
15、f(LinkList L) int i = 0; printf("n內存物理塊分配情況:n"); LinkList p = L; printf("該進程信息:n"); printf("進程號tt進程名稱t進程頁數t所用物理塊n"); while(p != NULL) printf("%dtt",p->f); printf("%stt",p->name); printf("%dtt",p->n); int i; for(i = 0;i < p->n
16、; i+) printf("%d,",p->yei); printf("n"); p = p->next; / 查看進程 void look(LinkList L) int z; printf("輸入要查詢的進程號"); scanf("%d",&z); LinkList p = L; while (p!=NULL) if(p->f =z) printf("進程號tt進程名稱t進程頁數t所用物理塊n"); printf("%dtt",p->f);
17、 printf("%stt",p->name); printf("%dtt",p->n); int i; for(i = 0;i < p->n; i+) printf("%d,",p->yei); printf("n"); break; else p=p->next; if(p=NULL) printf("要查詢的進程不存在n"); /顯示內存塊使用情況,不分進程 void showit() int i = 0; printf("內存物理塊分配情況n
18、"); for(i = 0; i <= max; i+) printf("%dt",Ai); if(i%10 = 9) printf("n"); void main()CreatA();LinkList L=NULL;int i=0;do printf("tt 基本分頁存儲管理算法n"); printf("tt*n");printf("tt*1.添加進程 2.刪除進程*n"); printf("tt*3.內存使用情況 4.查看進程*n"); printf("tt*n");printf("請選擇(select):");scanf("%d",&i);switch(i)case 1:NewNo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七夕節活動方案 (15篇)
- 《綠野仙蹤》讀后感集合15篇
- 綠色制造工藝改造項目可行性研究報告
- 空調與照明系統優化在標準廠房節能中的作用
- 海洋科技創新的路徑與行動計劃
- 光伏電站光伏區技改項目可行性研究報告
- 工業遺產活化利用項目可行性研究報告
- 高效能電機研發項目可行性研究報告
- 家庭對學生心理健康教育
- 新疆維吾爾自治區塔城地區烏蘇市第一中學2022-2023學年高一下學期3月月考政治 含解析
- 《傳染病學:新冠病毒》課件
- 秸稈買賣協議書模板
- 人教版小學二年級下冊數學 第6單元 第6課時 解決問題(2) 課件
- 2024年延安通和電業有限責任公司招聘考試真題
- 2025年中國礦山支護設備行業市場規模及投資前景預測分析報告
- 新形勢下如何抓好“兩個經常性”工作
- 監控立桿采購合同協議
- 貼改色膜合同協議
- 清理罐車合同協議
- 電工比武大賽試題及答案
- 郵政儲蓄大堂引導員培訓
評論
0/150
提交評論