版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《操作系統(tǒng)》課程設計報告</p><p> 基本分頁存儲管理的模擬實現(xiàn) </p><p> 學 院 計算機科學與技術 </p><p> 專 業(yè) 計算機科學與技術( 師范) </p><p> 學 號 □□□□□
2、</p><p> 學 生 姓 名 □□ </p><p> 指導教師姓名 □□□ </p><p> 2012年6月 20日</p><p> 一 、設計目的與內(nèi)容 </p><p> 1、 課程設計的目的:</p&
3、gt;<p> 操作系統(tǒng)課程設計是計算機專業(yè)重要的教學環(huán)節(jié),它為學生提供了一個既動手又動腦, 將課本上的理論知識和實際有機的結(jié)合起來,獨立分析和解決實際問題的機會。 </p><p> ★進一步鞏固和復習 作系統(tǒng)的基礎知識。 </p><p> ★培養(yǎng)學生結(jié)構化程序、模塊化程序設計的方法和能力。 </p><p> ★提高學生調(diào)試程序的技巧和軟
4、件設計的能力。 </p><p> ★提高學生分析問題、解決問題以及綜合利用C語言進行程序設計的能力。</p><p><b> 2、 設計內(nèi)容: </b></p><p> 根據(jù)設計要求實現(xiàn)對基本分頁存儲管理的模擬 </p><p><b> 3、 設計要求: </b></p>
5、<p> ★選擇恰當?shù)臄?shù)據(jù)結(jié)構表示頁表 </p><p> ★進程名,進程所需頁數(shù),進程進行的操作 (裝入/退出)等操作可有鍵盤輸入,也可從文件讀出。 </p><p> ★每進行一次進程的裝入或者退出操作,就顯示出操作執(zhí)行后內(nèi)存中各頁的分配情況。</p><p> 二、算法的基本思想</p><p><b>
6、; 主要功能函數(shù):</b></p><p> Void creatA() //內(nèi)存初始化函數(shù)</p><p> void NewNode(LinkList &L) //建立新進程函數(shù)</p><p> void FreeNode(LinkList &L) //回收進程函數(shù)&l
7、t;/p><p> void Printf(LinkList L) //顯示所有進程信息</p><p> void look(LinkList L) // 查看某個進程信息</p><p> void showit() //顯示內(nèi)存塊使用情況</p><p><b> 算法思想:</b><
8、/p><p> 通過creatA()函數(shù)將內(nèi)存初始化,設置為未被占用,通過NewNode(LinkList &L)建立新進程,輸入進程號、進程名、進程大小,并計算出該進程所需的頁數(shù),分配物理塊。通過FreeNode(LinkList &L)刪除你所要刪除進程的一切信息,并空出內(nèi)存。用Printf(LinkList L)顯示以上兩個函數(shù)產(chǎn)生的所有進程信息。look(LinkList L)可以查看某個進
9、程信息。Showit()函數(shù)內(nèi)存塊使用情況。</p><p> 三、主要功能模塊流程圖 </p><p><b> 建立進程</b></p><p><b> 四、四、系統(tǒng)測試</b></p><p><b>
10、 主要運行界面如下:</b></p><p><b> 建立進程:</b></p><p><b> 回收進程:</b></p><p><b> 內(nèi)存使用情況:</b></p><p><b> 進程查看:</b></p>
11、;<p><b> 五、結(jié)論</b></p><p> 此基本分頁存儲管理模擬系統(tǒng)滿足了基本要求,可以對進程進行內(nèi)存塊分配,并能對調(diào)用結(jié)束的進程回收內(nèi)存塊。用戶界面設計為菜單模式,使用戶能夠容易使用。該程序不是通過頁面映像表(即頁表)顯示。由于時間關系和知識儲備不夠,對文件讀入程序無法實現(xiàn)。 </p><p><b> 六、源程序<
12、/b></p><p> #include "stdio.h"</p><p> #include "stdlib.h"</p><p> #include "string.h"</p><p> int A[100]; //內(nèi)存物理塊,0:未使用,非0:已使
13、用</p><p> int max = 99; //記錄內(nèi)存的物理塊數(shù),值為A[100]最大下標</p><p> int count = 100;//記錄內(nèi)存未使用物理塊數(shù)</p><p> typedef struct LNode{</p><p> int f; //進程號</p>&
14、lt;p> char name[8];//進程名</p><p> int size; //進程大小</p><p> int n; //進程頁數(shù)</p><p> int ye[100];//頁表,下標表示頁號,內(nèi)容表示進程各頁所在物理塊</p><p> struct LNode *next;&
15、lt;/p><p> }LNode,*LinkList;</p><p><b> //內(nèi)存初始化</b></p><p> void CreatA()</p><p><b> {</b></p><p> int i = 0;</p><p&g
16、t; for(i = 0;i <= max; i++)</p><p><b> A[i] = 0;</b></p><p><b> }</b></p><p><b> //建立新進程</b></p><p> void NewNode(LinkList &
17、amp;L)</p><p><b> {</b></p><p><b> int i,j;</b></p><p><b> int m,k;</b></p><p> LinkList p;</p><p> LinkList new_n
18、ode;</p><p> new_node= (LinkList)malloc(sizeof(LNode));</p><p><b> p = L;</b></p><p> printf("\n輸入進程號:");</p><p> scanf("%d",&
19、new_node->f);</p><p><b> j=0;</b></p><p> while(p != NULL&&j<3) //查找進程號是否重復</p><p><b> {</b></p><p> if(p->f!=new_node->
20、f)</p><p> p = p->next;</p><p><b> else</b></p><p><b> {</b></p><p> printf("\n該進程已存在,重新輸入:");</p><p> scanf(&quo
21、t;%d",&new_node->f); </p><p> p = L;//p重新指向頭結(jié)點</p><p><b> j++;</b></p><p><b> }</b></p><p><b> }</b></p><
22、p><b> if(j<3)</b></p><p> {printf("\n輸入進程名稱:");</p><p> scanf("%s",new_node->name);</p><p> printf("\n輸入進程的大小:");</p>&
23、lt;p> scanf("%d",&new_node->size);</p><p> new_node->n=new_node->size/1024;</p><p> k=new_node->size%1024;</p><p><b> if(k!=0)</b></p
24、><p> new_node->n=new_node->n+1;</p><p> printf("所需要的頁數(shù)為:");</p><p> printf("%d\n",new_node->n);</p><p> if(new_node->n> count)</
25、p><p><b> {</b></p><p> printf("\n內(nèi)存物理塊不足,新建進程失敗!!!\n\n");</p><p><b> }</b></p><p><b> else</b></p><p><b
26、> {</b></p><p> count -=new_node->n;</p><p><b> m = 0;</b></p><p> for(i= 0; i<= max; i++)</p><p> if(A[i] == 0 && m < new_
27、node->n)</p><p><b> {</b></p><p> A[i]=new_node->f;</p><p> new_node->ye[m] = i;</p><p><b> m++;</b></p><p><b>
28、 }</b></p><p> if(L == NULL)</p><p> L = new_node;</p><p><b> else</b></p><p><b> {</b></p><p><b> p = L;</b&g
29、t;</p><p> //查找最后一個節(jié)點</p><p> while(p->next != NULL)</p><p><b> {</b></p><p> p = p->next;</p><p><b> }</b></p>&
30、lt;p> p->next = new_node;</p><p><b> }</b></p><p> new_node->next = NULL;</p><p><b> }</b></p><p><b> }</b></p&g
31、t;<p><b> else </b></p><p><b> {</b></p><p> printf("\n錯誤次數(shù)過多,返回主菜單:");</p><p><b> }</b></p><p><b> }<
32、;/b></p><p> //回收進程,釋放內(nèi)存</p><p> void FreeNode(LinkList &L)</p><p><b> {</b></p><p> LinkList p,q;</p><p><b> int z;</b>
33、;</p><p> printf("請輸入要刪除的進程號:");</p><p> scanf("%d",&z);</p><p> p = L;//查找進程;用p記錄</p><p><b> q = p;</b></p><p>
34、while(p != NULL)</p><p><b> {</b></p><p> if(p->f==z)</p><p><b> {</b></p><p> printf("該進程已刪除");</p><p><b>
35、 break;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> q = p;</b></p><p>
36、p = p->next;</p><p><b> }</b></p><p><b> }</b></p><p> if(p == NULL)</p><p><b> {</b></p><p> printf("\n該
37、進程不存在!!!\n");</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> for(int i = 0; i < p->n; i++)</p>
38、;<p> A[p->ye[i]] = 0;</p><p> count += p->n;</p><p> if(p->f== q->f)//要刪除的是頭結(jié)點</p><p><b> {</b></p><p> L = p->next;</p>
39、<p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> q->next = p->next;</p><p><b> }</b></p>
40、<p><b> }</b></p><p><b> }</b></p><p> //顯示所有進程占用的物理塊</p><p> void Printf(LinkList L)</p><p><b> {</b></p><p&
41、gt; int i = 0;</p><p> printf("\n內(nèi)存物理塊分配情況:\n");</p><p> LinkList p = L;</p><p> printf("\n各進程信息:\n");</p><p> printf("進程號\t\t進程名稱\t進程頁數(shù)\t
42、所用物理塊\n");</p><p> while(p != NULL)</p><p><b> {</b></p><p> printf("%d\t\t",p->f);</p><p> printf("%s\t\t",p->name);<
43、/p><p> printf("%d\t\t",p->n);</p><p><b> int i;</b></p><p> for(i = 0;i < p->n; i++)</p><p> printf("%d,",p->ye[i]);</p
44、><p> printf("\n");</p><p> p = p->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> // 查看進程</b></p&
45、gt;<p> void look(LinkList L)</p><p><b> {</b></p><p><b> int z;</b></p><p> printf("輸入要查詢的進程號");</p><p> scanf("%d&q
46、uot;,&z);</p><p> LinkList p = L;</p><p> while (p!=NULL)</p><p><b> {</b></p><p> if(p->f ==z)</p><p><b> {</b></p&
47、gt;<p> printf("進程號\t\t進程名稱\t進程頁數(shù)\t所用物理塊\n");</p><p> printf("%d\t\t",p->f);</p><p> printf("%s\t\t",p->name);</p><p> printf("%d
48、\t\t",p->n);</p><p><b> int i;</b></p><p> for(i = 0;i < p->n; i++)</p><p> printf("%d,",p->ye[i]);</p><p> printf("\n&q
49、uot;);</p><p><b> break;</b></p><p><b> }</b></p><p> else p=p->next; </p><p><b> }</b></p><p> if(p==NULL)<
50、/p><p> printf("要查詢的進程不存在\n");</p><p><b> }</b></p><p> //顯示內(nèi)存塊使用情況,不分進程</p><p> void showit()</p><p><b> {</b></p&g
51、t;<p> int i = 0;</p><p> printf("\n****************************\n");</p><p> printf("| 內(nèi)存物理塊分配情況 |\n");</p><p> printf("******************
52、**********\n");</p><p> for(i = 0; i <= max; i++)</p><p><b> {</b></p><p> printf("%d\t",A[i]);</p><p> if(i%10 == 9)</p><
53、;p> printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b
54、> CreatA();</b></p><p> printf("\n******* 基本分頁算法 *******\n");</p><p> LinkList L = NULL;</p><p> int i = 0;</p><p><b> do</b></p&
55、gt;<p><b> {</b></p><p> printf("\n***********菜單*************\n");</p><p> printf( " 1 進程裝入\n");</p><p> printf( " 2 進程
56、退出\n");</p><p> printf( " 3 內(nèi)存使用情況\n");</p><p> printf( " 4 進程查看\n");</p><p> printf( " 5 退出程序\n");</p><p> p
57、rintf( "****************************\n");</p><p> printf("請輸入你的選擇(select):");</p><p> scanf("%d",&i);</p><p> switch(i){</p><p>
58、 case 1:</p><p> NewNode(L);//建立新的進程</p><p> Printf(L);//輸出內(nèi)存物理塊分配情況和各進程概況</p><p><b> break;</b></p><p> case 2:</p><p> Fre
59、eNode(L);//刪除某進程</p><p> Printf(L);//輸出內(nèi)存物理塊分配情況和各進程概況</p><p><b> break;</b></p><p> case 3:</p><p> showit();//顯示當前內(nèi)存的使用情況</p><p>
60、<b> break;</b></p><p><b> case 4:</b></p><p><b> look(L);</b></p><p><b> break;</b></p><p><b> case 5:</b&
61、gt;</p><p> printf("謝謝使用\n\n");</p><p><b> exit(0);</b></p><p><b> break;</b></p><p><b> }</b></p><p> }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)-基本分頁存儲管理(內(nèi)有代碼)
- 操作系統(tǒng)課程設計--模擬實現(xiàn)可變分區(qū)存儲管理
- 操作系統(tǒng)課程設計---老化算法模擬分頁系統(tǒng)
- 可變分區(qū)存儲管理算法模擬課程設計
- 課程設計--請求調(diào)頁存儲管理方式的模擬
- 串的存儲表示及基本操作_課程設計
- 模擬頁式存儲管理-操作系統(tǒng)課程設計
- 模擬頁式存儲管理 操作系統(tǒng)課程設計
- 模擬頁式存儲管理-操作系統(tǒng)課程設計報告
- 課程設計---存儲器管理系統(tǒng)設計
- 數(shù)據(jù)結(jié)構順序表課程設計--順序表基本實現(xiàn)和存儲結(jié)構
- 操作系統(tǒng)課程設計--模擬請求頁式存儲管理
- 課程設計報告-可變分區(qū)存儲管理
- 操作系統(tǒng)課程設計存儲管理
- ping命令的模擬實現(xiàn)課程設計
- 存儲器動態(tài)分區(qū)算法模擬課程設計報告
- 存儲和運輸課程設計
- 停車場模擬管理程序的設計與實現(xiàn) 課程設計
- 圖的基本操作與實現(xiàn)的課程設計報告
- 課程設計--請求頁式存儲器管理
評論
0/150
提交評論