基本分頁存儲管理的模擬實現(xiàn) 課程設(shè)計_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《操作系統(tǒng)》課程設(shè)計報告</p><p>  基本分頁存儲管理的模擬實現(xiàn) </p><p>  學(xué) 院 計算機(jī)科學(xué)與技術(shù) </p><p>  專 業(yè) 計算機(jī)科學(xué)與技術(shù)( 師范) </p><p>  學(xué) 號 □□□□□

2、</p><p>  學(xué) 生 姓 名 □□ </p><p>  指導(dǎo)教師姓名 □□□ </p><p>  2012年6月 20日</p><p>  一 、設(shè)計目的與內(nèi)容 </p><p>  1、 課程設(shè)計的目的:</p&

3、gt;<p>  操作系統(tǒng)課程設(shè)計是計算機(jī)專業(yè)重要的教學(xué)環(huán)節(jié),它為學(xué)生提供了一個既動手又動腦, 將課本上的理論知識和實際有機(jī)的結(jié)合起來,獨立分析和解決實際問題的機(jī)會。 </p><p>  ★進(jìn)一步鞏固和復(fù)習(xí) 作系統(tǒng)的基礎(chǔ)知識。 </p><p>  ★培養(yǎng)學(xué)生結(jié)構(gòu)化程序、模塊化程序設(shè)計的方法和能力。 </p><p>  ★提高學(xué)生調(diào)試程序的技巧和軟

4、件設(shè)計的能力。 </p><p>  ★提高學(xué)生分析問題、解決問題以及綜合利用C語言進(jìn)行程序設(shè)計的能力。</p><p><b>  2、 設(shè)計內(nèi)容: </b></p><p>  根據(jù)設(shè)計要求實現(xiàn)對基本分頁存儲管理的模擬 </p><p><b>  3、 設(shè)計要求: </b></p>

5、<p>  ★選擇恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)表示頁表 </p><p>  ★進(jìn)程名,進(jìn)程所需頁數(shù),進(jìn)程進(jìn)行的操作 (裝入/退出)等操作可有鍵盤輸入,也可從文件讀出。 </p><p>  ★每進(jìn)行一次進(jìn)程的裝入或者退出操作,就顯示出操作執(zhí)行后內(nèi)存中各頁的分配情況。</p><p>  二、算法的基本思想</p><p><b>

6、;  主要功能函數(shù):</b></p><p>  Void creatA() //內(nèi)存初始化函數(shù)</p><p>  void NewNode(LinkList &L) //建立新進(jìn)程函數(shù)</p><p>  void FreeNode(LinkList &L) //回收進(jìn)程函數(shù)&l

7、t;/p><p>  void Printf(LinkList L) //顯示所有進(jìn)程信息</p><p>  void look(LinkList L) // 查看某個進(jìn)程信息</p><p>  void showit() //顯示內(nèi)存塊使用情況</p><p><b>  算法思想:</b><

8、/p><p>  通過creatA()函數(shù)將內(nèi)存初始化,設(shè)置為未被占用,通過NewNode(LinkList &L)建立新進(jìn)程,輸入進(jìn)程號、進(jìn)程名、進(jìn)程大小,并計算出該進(jìn)程所需的頁數(shù),分配物理塊。通過FreeNode(LinkList &L)刪除你所要刪除進(jìn)程的一切信息,并空出內(nèi)存。用Printf(LinkList L)顯示以上兩個函數(shù)產(chǎn)生的所有進(jìn)程信息。look(LinkList L)可以查看某個進(jìn)

9、程信息。Showit()函數(shù)內(nèi)存塊使用情況。</p><p>  三、主要功能模塊流程圖 </p><p><b>  建立進(jìn)程</b></p><p><b>  四、四、系統(tǒng)測試</b></p><p><b>

10、  主要運(yùn)行界面如下:</b></p><p><b>  建立進(jìn)程:</b></p><p><b>  回收進(jìn)程:</b></p><p><b>  內(nèi)存使用情況:</b></p><p><b>  進(jìn)程查看:</b></p>

11、;<p><b>  五、結(jié)論</b></p><p>  此基本分頁存儲管理模擬系統(tǒng)滿足了基本要求,可以對進(jìn)程進(jìn)行內(nèi)存塊分配,并能對調(diào)用結(jié)束的進(jìn)程回收內(nèi)存塊。用戶界面設(shè)計為菜單模式,使用戶能夠容易使用。該程序不是通過頁面映像表(即頁表)顯示。由于時間關(guān)系和知識儲備不夠,對文件讀入程序無法實現(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]最大下標(biāo)</p><p>  int count = 100;//記錄內(nèi)存未使用物理塊數(shù)</p><p>  typedef struct LNode{</p><p>  int f; //進(jìn)程號</p>&

14、lt;p>  char name[8];//進(jìn)程名</p><p>  int size; //進(jìn)程大小</p><p>  int n; //進(jìn)程頁數(shù)</p><p>  int ye[100];//頁表,下標(biāo)表示頁號,內(nèi)容表示進(jìn)程各頁所在物理塊</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>  //建立新進(jìn)程</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輸入進(jìn)程號:");</p><p>  scanf("%d",&

19、new_node->f);</p><p><b>  j=0;</b></p><p>  while(p != NULL&&j<3) //查找進(jìn)程號是否重復(fù)</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該進(jì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輸入進(jìn)程名稱:");</p><p>  scanf("%s",new_node->name);</p><p>  printf("\n輸入進(jì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)存物理塊不足,新建進(jìn)程失敗!!!\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>  //回收進(jìn)程,釋放內(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("請輸入要刪除的進(jìn)程號:");</p><p>  scanf("%d",&z);</p><p>  p = L;//查找進(jìn)程;用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("該進(jìn)程已刪除");</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、進(jìn)程不存在!!!\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>  //顯示所有進(jìn)程占用的物理塊</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各進(jìn)程信息:\n");</p><p>  printf("進(jìn)程號\t\t進(jìn)程名稱\t進(jìn)程頁數(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>  // 查看進(jìn)程</b></p&

45、gt;<p>  void look(LinkList L)</p><p><b>  {</b></p><p><b>  int z;</b></p><p>  printf("輸入要查詢的進(jìn)程號");</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("進(jìn)程號\t\t進(jìn)程名稱\t進(jìn)程頁數(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("要查詢的進(jìn)程不存在\n");</p><p><b>  }</b></p><p>  //顯示內(nèi)存塊使用情況,不分進(jìn)程</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 進(jìn)程裝入\n");</p><p>  printf( " 2 進(jìn)程

56、退出\n");</p><p>  printf( " 3 內(nèi)存使用情況\n");</p><p>  printf( " 4 進(jìn)程查看\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);//建立新的進(jìn)程</p><p>  Printf(L);//輸出內(nèi)存物理塊分配情況和各進(jìn)程概況</p><p><b>  break;</b></p><p>  case 2:</p><p>  Fre

59、eNode(L);//刪除某進(jìn)程</p><p>  Printf(L);//輸出內(nèi)存物理塊分配情況和各進(jìn)程概況</p><p><b>  break;</b></p><p>  case 3:</p><p>  showit();//顯示當(dāng)前內(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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論