操作系統(tǒng)-基本分頁(yè)存儲(chǔ)管理(內(nèi)有代碼)_第1頁(yè)
操作系統(tǒng)-基本分頁(yè)存儲(chǔ)管理(內(nèi)有代碼)_第2頁(yè)
操作系統(tǒng)-基本分頁(yè)存儲(chǔ)管理(內(nèi)有代碼)_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余7頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、操作系統(tǒng)-基本分頁(yè)存儲(chǔ)管理(內(nèi)有代碼)操作系統(tǒng)實(shí)驗(yàn)報(bào)告姓名:關(guān)海超 學(xué)號(hào):0209 專業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí):2008級(jí)2班基本分頁(yè)存儲(chǔ)管理實(shí)驗(yàn)?zāi)康倪B續(xù)內(nèi)存分配方式會(huì)形成許多“碎片”,雖然可以通過(guò)“緊湊”方法將許多碎片拼接成可用的大塊空間,但須為之付出很大開(kāi)銷。如果允許將一個(gè)進(jìn)程直接分散地裝入到許多不相鄰接的分區(qū)中,則無(wú)需再進(jìn)行“緊湊”?;谶@一思想而產(chǎn)生了離散分配方式。如果離散分配的基本單位是頁(yè),則稱為分頁(yè)存儲(chǔ)管理方式;如果離散分配的基本單位是段,則稱為分段存儲(chǔ)管理方式。在分頁(yè)存儲(chǔ)管理方式中,如果不具備頁(yè)面兌換功能,則稱為基本的分頁(yè)存儲(chǔ)管理方式,或稱為純分頁(yè)存儲(chǔ)管理方式,它不具備支持虛擬

2、存儲(chǔ)器的功能,它要求把每個(gè)作業(yè)全部裝入內(nèi)存后方能運(yùn)行。本實(shí)驗(yàn)通過(guò)程序模擬操作系統(tǒng)的基本分頁(yè)存儲(chǔ)管理方式,進(jìn)一步理解這一內(nèi)存分配方式的原理和特點(diǎn),加深對(duì)理論知識(shí)的掌握。實(shí)驗(yàn)要求1、用C語(yǔ)言或Java語(yǔ)言編寫程序模擬操作系統(tǒng)對(duì)內(nèi)存的基本分頁(yè)存儲(chǔ)管理方式2、程序要能正確對(duì)“內(nèi)存”進(jìn)行“分配”和“回收”,能接受用戶的輸入,顯示內(nèi)存的分配情況,并有一定的容錯(cuò)能力。3、每個(gè)人獨(dú)立按時(shí)完成實(shí)驗(yàn)內(nèi)容。實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)假定內(nèi)存空間已經(jīng)按塊劃分,目標(biāo)程序無(wú)需關(guān)心內(nèi)存塊大小等底層細(xì)節(jié),只需按算法對(duì)內(nèi)存塊進(jìn)行分配即可。程序應(yīng)該實(shí)現(xiàn)以下功能:1、內(nèi)存初始化。假定內(nèi)存塊共有N個(gè),初始化后的內(nèi)存空間應(yīng)該有一部分已經(jīng)被使用,這

3、可以用隨機(jī)數(shù)或程序內(nèi)部的其他算法完成。2、程序應(yīng)該能接受用戶輸入的進(jìn)程信息,并為之分配內(nèi)存,返回分配結(jié)果(成功或失?。?,注意,此處應(yīng)該考慮到不合法的輸入并進(jìn)行相應(yīng)處理。3、程序能回收用戶指定的進(jìn)程所占用的內(nèi)存空間,因此,程序可能需要為每個(gè)進(jìn)程分配一個(gè)唯一的進(jìn)程號(hào)并給出詳細(xì)的提示信息。4、能直觀合理地顯示內(nèi)存分配情況。5、程序界面友好,便于操作和查看運(yùn)行結(jié)果。實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)總結(jié)基本分頁(yè)的思想是比較簡(jiǎn)單的,而且實(shí)驗(yàn)前老師已經(jīng)給出了一種可行的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)程序中需要用到的數(shù)據(jù),因此這個(gè)實(shí)驗(yàn)在構(gòu)思上是沒(méi)有多少難度的。由于程序中主要使用的是數(shù)組,操作起來(lái)比較方便,不像前兩個(gè)實(shí)驗(yàn)需要用到大量的鏈表操作。在這

4、次試驗(yàn)中,我主要遇到了以下一些問(wèn)題:1、程序剛寫完時(shí),記錄“內(nèi)存”中的進(jìn)程數(shù)的變量和當(dāng)前剩余總內(nèi)存的變量的值不正確,經(jīng)檢查后發(fā)現(xiàn)是在結(jié)束進(jìn)程時(shí)沒(méi)有同時(shí)更新這些數(shù)據(jù)。2、內(nèi)存使用情況應(yīng)該以哪種形式輸出以及輸出哪些信息。最終我選擇了盡可能詳細(xì)地輸出有用信息,通過(guò)空格、空行、對(duì)齊等手段盡力使輸出格式簡(jiǎn)潔美觀。比如,在輸出每個(gè)進(jìn)程的內(nèi)存使用情況時(shí),首先輸出該進(jìn)程占用的總內(nèi)存,然后以統(tǒng)一的對(duì)齊方式依次輸出各個(gè)內(nèi)存塊編號(hào)。當(dāng)然,對(duì)于不同的模塊輸出的信息也應(yīng)該不一樣,比如,內(nèi)存初始化結(jié)束后應(yīng)該輸出哪個(gè)內(nèi)存塊被占用了,否則無(wú)法判斷后續(xù)的內(nèi)存分配是否正確,但在以后查看內(nèi)存使用情況時(shí)則不必把所有已占用的內(nèi)存塊輸出

5、,因?yàn)槊總€(gè)進(jìn)程都會(huì)單獨(dú)把自己占用的內(nèi)存塊顯示出來(lái)。為了達(dá)到這種效果,我使用了一個(gè)全局變量作為判斷依據(jù),詳細(xì)情況見(jiàn)附錄中代碼。3、程序的容錯(cuò)性。這是一個(gè)容易被忽略的問(wèn)題。這個(gè)程序起初基本沒(méi)考慮這個(gè)問(wèn)題,但在后來(lái)的調(diào)試過(guò)程中,逐漸加上了一些基本的容錯(cuò)功能,比如用戶在結(jié)束某進(jìn)程時(shí),其輸入的進(jìn)程號(hào)可能根本不存在,這時(shí)應(yīng)該給出用戶出錯(cuò)提示,并要求用戶重新輸入,但這里用了一個(gè)編程中不太推薦的方式:goto 語(yǔ)句??傮w而言,這次實(shí)驗(yàn)還是比較順利的,沒(méi)有遇到什么特別難解決的問(wèn)題。通過(guò)自己編程模擬內(nèi)存分配,我不僅加深了對(duì)這種內(nèi)存管理方式的理解,也增強(qiáng)了C語(yǔ)言的編程能力。通過(guò)這幾次的實(shí)驗(yàn),我感覺(jué)手工寫一個(gè)幾百行的

6、程序不像以前那么困難了。附錄#include <>#include <>#define N 100 / 共有100個(gè)內(nèi)存塊int processNN+1; / 存放每個(gè)進(jìn)程的頁(yè)表int blockN; / 內(nèi)存塊狀態(tài)標(biāo)志數(shù)組,0:空閑,1:使用int blockCount; / 記錄當(dāng)前內(nèi)存剩余空間int processCount; / 記錄當(dāng)前進(jìn)程數(shù)bool flag = true;void init();void output();bool createProcess();bool endProcess();void init()int i, j;/ 初始化內(nèi)存狀態(tài)

7、標(biāo)志數(shù)組for (i=0; i<N; i+)blocki = 0;for (i=0; i<20; i+)blockrand()%(N-1) = 1;blockCount = 0;for (i=0; i<N; i+)if (blocki = 0)blockCount+;/ 初始化存放進(jìn)程的數(shù)組for (i=0; i<N; i+)processi0 = 0;for (j=1; j<N; j+)processij = -1;processCount = 0;printf("初始化結(jié)果如下:");output();flag = false;void o

8、utput()printf("n內(nèi)存總量:%d 塊, 已用空間:%d 塊, 剩余空間:%d 塊, 進(jìn)程總數(shù):%d 個(gè)n", N, N-blockCount, blockCount, processCount);if (flag && blockCount < N)printf("已使用的內(nèi)存塊(%d):n", N-blockCount);for (int k=0,count=0; k<N; k+)if (blockk = 1)printf("%2d ", k, +count);if (count = 15)

9、putchar('n');count = 0;putchar('n');/ 輸出各進(jìn)程占用內(nèi)存詳細(xì)情況if (processCount > 0)printf("內(nèi)存詳細(xì)使用情況如下:n");for (int i=0; i<N; i+)if (processi0 > 0)printf("進(jìn)程號(hào):%d n占用內(nèi)存塊(%2d):", i, processi0);for (int j=1,count=0; j<=processi0; j+)printf("%2d ", processij

10、, count+);if (count = 15)putchar('n');printf(" ");count = 0;putchar('n');elseprintf("當(dāng)前內(nèi)存無(wú)進(jìn)程!n");/*/ 輸出空閑內(nèi)存塊if (blockCount > 0)printf("空閑內(nèi)存塊(%d):n", blockCount);for (int k=0,count=0; k<N; k+)if (blockk = 0)printf("%2d ", k, +count);if (co

11、unt = 15)putchar('n');count = 0;putchar('n');*/putchar('n');bool createProcess()int pid, pages, k = 0;loop:printf("請(qǐng)輸入進(jìn)程號(hào)(小于%d)和所需頁(yè)面數(shù):", N);scanf("%d%d", &pid, &pages);if (pid > 99)printf("錯(cuò)誤!進(jìn)程號(hào)過(guò)大!n");goto loop;if (pages > blockCou

12、nt)return false;blockCount -= pages;processpid0 = pages;for (int i=1; i<=pages; i+) while (blockk=1 && k<100)k+;processpidi = k;blockk = 1;k+;processCount+;return true;bool endProcess()int pid, pages;if (processCount < 1)printf("當(dāng)前內(nèi)存沒(méi)有進(jìn)程!nn");return false;printf("當(dāng)前內(nèi)存

13、中的進(jìn)程有 %d 個(gè), 進(jìn)程號(hào)為:", processCount);for (int i=0; i<N; i+)if (processi0 > 0)printf("%2d ", i);putchar('n');printf("請(qǐng)輸入您要結(jié)束的進(jìn)程號(hào)(小于%d):", N);scanf("%d", &pid);pages = processpid0;if (pages = 0)printf("對(duì)不起!該進(jìn)程不存在!n");return false;for (int j=1

14、; j<pages; j+)blockprocesspidj = 0;processpidj = -1;processpid0 = 0;processCount-;blockCount += pages;return true;void menu()int choice;while (true)printf("操作菜單:n");printf(" 1 -> 創(chuàng)建進(jìn)程n 2 -> 結(jié)束進(jìn)程n 3 -> 查看內(nèi)存n 0 -> 退出程序n");printf("請(qǐng)輸入您要進(jìn)行的操作:");scanf("%d", &choice);switch (choice)case 1: if (createProcess() printf("創(chuàng)建新進(jìn)程成功!nn");elseprintf("抱歉!內(nèi)存空間不足,創(chuàng)建新進(jìn)程失

溫馨提示

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

評(píng)論

0/150

提交評(píng)論