2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  實驗報告題目:</b></p><p><b>  自制時鐘</b></p><p><b>  問題描述</b></p><p>  編制和調(diào)試一個自制時鐘,在屏幕右上角當(dāng)時的時間;按XX:XX:XX形式顯示,并且能正確進(jìn)位,24小時應(yīng)消零。系統(tǒng)每隔55ms就自動調(diào)用新

2、的中斷,在主程序中取系統(tǒng)時間,并駐留程序。在新的1Ch號中斷中顯示時間。 編制一個匯編程序,它應(yīng)包括兩個部分: 1) 新的1CH中斷處理程序,其功能是,首先執(zhí)行原1CH中斷處理,然后取當(dāng) 時系統(tǒng)時間,處理進(jìn)位,正確顯示當(dāng)時的時間。 2) 初始化程序:其功能是,首先取原1CH中斷向量,然后設(shè)置新1CH中斷向 量,最后駐留新1CH中斷處理程序</p><p><b>  數(shù)據(jù)結(jié)構(gòu)及符號說明</

3、b></p><p>  CLOCK: 設(shè)置新的1CH中斷處理程序并常駐內(nèi)存。</p><p>  DISPLAY:利用宏定義及宏調(diào)用保存光標(biāo)位置,并寫入字符。</p><p>  SHOW: 在在屏幕右上角顯示正確變化的當(dāng)時時間</p><p>  TRNS: 利用宏定義及宏調(diào)用將時間的二進(jìn)制轉(zhuǎn)換成ASCII字符顯示出來

4、。</p><p>  CURSOR: 在屏幕右上角顯示當(dāng)時的系統(tǒng)時鐘,如20:05:33。</p><p>  DEAL: 對時間的進(jìn)位進(jìn)行處理控制。</p><p><b>  流程圖</b></p><p><b>  源程序及說明</b></p><p>&l

5、t;b>  .286</b></p><p>  DATAS SEGMENT</p><p><b>  h1 db 0</b></p><p><b>  h2 db 0</b></p><p><b>  m1 db 0</b></p>&l

6、t;p><b>  m2 db 0</b></p><p><b>  s1 db 0</b></p><p><b>  s2 db 0</b></p><p>  DATAS ENDS</p><p>  CODES SEGMENT</p><p&

7、gt;  ASSUME CS:CODES,DS:DATAS</p><p><b>  START:</b></p><p>  MOV AX,DATAS</p><p>  MOV DS,AX</p><p>  mainprocfar</p><p>  ;保存原有1ch中斷</p

8、><p>  mov al,1ch</p><p>  mov ah,35h</p><p><b>  int 21h</b></p><p><b>  push es</b></p><p><b>  push bx</b></p>&

9、lt;p><b>  push ds</b></p><p>  ;設(shè)置新的1ch中斷</p><p>  mov ax,seg clock</p><p><b>  mov ds,ax</b></p><p>  mov dx,offset clock</p><p&g

10、t;  mov al,1ch</p><p>  mov ah,25h</p><p><b>  int 21h</b></p><p><b>  ;常駐內(nèi)存</b></p><p>  mov ax,3100h</p><p><b>  int 21h<

11、;/b></p><p>  ;恢復(fù)原有1ch中斷</p><p><b>  pop ds</b></p><p><b>  pop dx</b></p><p><b>  pop ds</b></p><p>  mov al,1ch<

12、;/p><p>  mov ah,25h</p><p><b>  int 21h</b></p><p><b>  ;退出</b></p><p>  mov ax,4c00h</p><p><b>  int 21h</b></p>

13、<p>  main endp</p><p>  clockprocfar</p><p>  call gettime</p><p><b>  iret</b></p><p>  clockendp</p><p><b>  ;獲取系統(tǒng)時間</b>

14、;</p><p>  gettime procnear</p><p><b>  pusha</b></p><p>  mov ah,2ch</p><p><b>  int 21h</b></p><p>  ;將除數(shù)10保存在bl中</p><

15、;p>  mov bl,10d</p><p><b>  ;處理小時</b></p><p><b>  mov al,ch</b></p><p><b>  cbw</b></p><p><b>  div bl</b></p>

16、<p><b>  mov h1,al</b></p><p><b>  mov h2,ah</b></p><p><b>  ;處理分鐘</b></p><p><b>  mov al,cl</b></p><p><b> 

17、 cbw</b></p><p><b>  div bl</b></p><p><b>  mov m1,al</b></p><p><b>  mov m2,ah</b></p><p><b>  ;處理秒</b></p>

18、<p><b>  mov al,dh</b></p><p><b>  cbw</b></p><p><b>  div bl</b></p><p><b>  mov s1,al</b></p><p><b>  mov

19、 s2,ah</b></p><p><b>  ;顯示時間</b></p><p>  call showtime</p><p><b>  popa</b></p><p><b>  ret</b></p><p>  gettime

20、endp</p><p><b>  ;顯示時間</b></p><p>  showtime proc near</p><p><b>  pusha</b></p><p><b>  ;獲取當(dāng)前光標(biāo)位置</b></p><p><b&g

21、t;  mov bh,0h</b></p><p>  mov ah,03h</p><p><b>  int 10h</b></p><p><b>  push dx</b></p><p><b>  push cx</b></p><p

22、><b>  ;重置光標(biāo)</b></p><p><b>  mov bh,0d</b></p><p><b>  mov dh,0d</b></p><p>  mov dl,72d</p><p>  mov ah,02h</p><p>&

23、lt;b>  int 10h</b></p><p><b>  ;顯示時間</b></p><p>  add h1,30h</p><p><b>  mov al,h1</b></p><p>  mov ah,0eh</p><p><b>

24、;  int 10h</b></p><p>  add h2,30h</p><p><b>  mov al,h2</b></p><p>  mov ah,0eh</p><p><b>  int 10h</b></p><p><b>  ;顯

25、示":"</b></p><p>  mov al,3ah</p><p>  mov ah,0eh</p><p><b>  int 10h</b></p><p><b>  ;顯示分鐘</b></p><p>  add m1,30h&

26、lt;/p><p><b>  mov al,m1</b></p><p>  mov ah,0eh</p><p><b>  int 10h</b></p><p>  add m2,30h</p><p><b>  mov al,m2</b><

27、/p><p>  mov ah,0eh</p><p><b>  int 10h</b></p><p><b>  ;顯示":"</b></p><p>  mov al,3ah</p><p>  mov ah,0eh</p><p&

28、gt;<b>  int 10h</b></p><p><b>  ;顯示秒</b></p><p>  add s1,30h</p><p><b>  mov al,s1</b></p><p>  mov ah,0eh</p><p><b

29、>  int 10h</b></p><p>  add s2,30h</p><p><b>  mov al,s2</b></p><p>  mov ah,0eh</p><p><b>  int 10h</b></p><p><b> 

30、 ;恢復(fù)原來光標(biāo)位置</b></p><p><b>  pop cx</b></p><p><b>  pop dx</b></p><p><b>  mov bh,0h</b></p><p>  mov ah,02h</p><p>

31、;<b>  int 10h</b></p><p><b>  popa</b></p><p><b>  ret</b></p><p>  showtime endp</p><p>  CODES ENDS</p><p><b> 

32、 END START</b></p><p><b>  運行結(jié)果</b></p><p><b>  實驗說明</b></p><p>  1.實驗過程中應(yīng)該定義保存原1CH中斷的向量單元。</p><p>  2.實驗中用到以下的功能調(diào)用:25H(置中斷向量),35H(取中斷向量),

33、2CH(取系統(tǒng)時間)以及“int 10h“中的02H(置光標(biāo)位置)、03(讀光標(biāo)位置)、0E(寫字符),我們應(yīng)熟悉上述功能調(diào)用的實現(xiàn),否則在實現(xiàn)過程中將會出現(xiàn)麻煩。</p><p>  3.實驗過程中,不僅僅需要能在DOS中顯示時間,并且應(yīng)保證其他程序能使用DOS。</p><p>  4.在具體的實踐過程中要注意顯示時間時光標(biāo)位置的重置問題。</p><p>  

34、5.掌握宏定義以及宏調(diào)用的相關(guān)規(guī)范,實驗過程中,要先進(jìn)行宏的定義后進(jìn)行宏的調(diào)用</p><p><b>  實驗報告題目</b></p><p><b>  處理器調(diào)度</b></p><p><b>  問題描述</b></p><p>  (1) 假定系統(tǒng)有五個進(jìn)程,每一個

35、進(jìn)程用一個進(jìn)程控制塊PCB來代表,進(jìn)程控制塊的格式為:</p><p>  其中,進(jìn)程名——作為進(jìn)程的標(biāo)識,假設(shè)五個進(jìn)程的進(jìn)程名分別為P1,P2,P3,P4,P5。</p><p>  指針——按優(yōu)先數(shù)的大小把五個進(jìn)程連成隊列,用指針指出下一個進(jìn)程的進(jìn)程控制塊的首地址,最后一個進(jìn)程中的指針為“0”。</p><p>  要求運行時間——假設(shè)進(jìn)程需要運行的單位時間數(shù)。

36、</p><p>  優(yōu)先數(shù)——賦予進(jìn)程的優(yōu)先數(shù),調(diào)度時總是選取優(yōu)先數(shù)大的進(jìn)程先執(zhí)行。</p><p>  狀態(tài)——可假設(shè)有兩種狀態(tài),“就緒”狀態(tài)和“結(jié)束”狀態(tài)。五個進(jìn)程的初始狀態(tài)都為“就緒”,用“R”表示,當(dāng)一個進(jìn)程運行結(jié)束后,它的狀態(tài)為“結(jié)束”,用“E”表示。</p><p>  (2) 在每次運行你所設(shè)計的處理器調(diào)度程序之前,為每個進(jìn)程任意確定它的“優(yōu)先數(shù)”和

37、“要求運行時間”。</p><p>  (3) 為了調(diào)度方便,把五個進(jìn)程按給定的優(yōu)先數(shù)從大到小連成隊列。用一單元指出隊首進(jìn)程,用指針指出隊列的連接情況。例:</p><p><b>  隊首標(biāo)志</b></p><p><b>  K2 </b></p><p>  (4) 處理器調(diào)度總是選隊

38、首進(jìn)程運行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進(jìn)程每運行一次優(yōu)先數(shù)就減“1”。由于本實驗是模擬處理器調(diào)度,所以,對被選中的進(jìn)程并不實際的啟動運行,而是執(zhí)行:</p><p><b>  優(yōu)先數(shù)-1</b></p><p><b>  要求運行時間-1</b></p><p>  來模擬進(jìn)程的一次運行。</p><

39、;p>  提醒注意的是:在實際的系統(tǒng)中,當(dāng)一個進(jìn)程被選中運行時,必須恢復(fù)進(jìn)程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待事件或運行結(jié)束。在這里省去了這些工作。</p><p>  (5) 進(jìn)程運行一次后,若要求運行時間0,則再將它加入隊列(按優(yōu)先數(shù)大小插入,且置隊首標(biāo)志);若要求運行時間=0,則把它的狀態(tài)修改成“結(jié)束”(E),且退出隊列。</p><p>  (6) 若“就緒”狀態(tài)的進(jìn)程

40、隊列不為空,則重復(fù)上面(4)和(5)的步驟,直到所有進(jìn)程都成為“結(jié)束”狀態(tài)。</p><p>  (7) 在所設(shè)計的程序中應(yīng)有顯示或打印語句,能顯示或打印每次被選中進(jìn)程的進(jìn)程名以及運行一次后進(jìn)程隊列的變化。</p><p>  (8) 為五個進(jìn)程任意確定一組“優(yōu)先數(shù)”和“要求運行時間”,啟動所設(shè)計的處理器調(diào)度程序,顯示或打印逐次被選中進(jìn)程的進(jìn)程名以及進(jìn)程控制塊的動態(tài)變化過程。</p&

41、gt;<p><b>  數(shù)據(jù)結(jié)構(gòu)及符號說明</b></p><p>  進(jìn)程控制塊PCB的結(jié)構(gòu)</p><p>  #define num 3 //假定系統(tǒng)中進(jìn)程個數(shù)為3</p><p>  struct PCB{</p><p>  char ID;//進(jìn)程名</p><p>

42、;  int runtime;//要求運行時間</p><p>  int pri;//優(yōu)先數(shù)</p><p>  char state; //狀態(tài),R-就緒,F(xiàn)-結(jié)束</p><p><b>  };</b></p><p>  struct PCB pcblist[num];//定義進(jìn)程控制塊數(shù)組</p>

43、<p><b>  流程圖</b></p><p><b>  源程序及說明</b></p><p>  設(shè)置進(jìn)程和CPU單位運行時間</p><p>  #include"ProcPCB.h"</p><p>  #include"stdio.h&quo

44、t;</p><p>  #include"stdlib.h"</p><p>  extern int unitTime;</p><p>  int procInit(procPCB **pcbHead)</p><p><b>  {</b></p><p>  int

45、procNum;</p><p>  procPCB *head=NULL,*pcb1=NULL,*pcb2=NULL;</p><p>  printf("請輸入進(jìn)程個數(shù):\n");</p><p>  scanf("%d",&procNum);</p><p>  for(int i=0;i

46、<procNum;i++)</p><p><b>  {</b></p><p>  printf("進(jìn)程名 需要時間\n");</p><p>  pcb2=(procPCB *)malloc(sizeof(procPCB));</p><p>  scanf("%s%d"

47、;,pcb2->name,&pcb2->requiredTime);</p><p>  pcb2->status="Ready";</p><p>  pcb2->runTime=0;</p><p>  if(pcb1==NULL)</p><p>  head=pcb2;</p&

48、gt;<p><b>  else</b></p><p>  pcb1->next=pcb2;</p><p>  pcb1=pcb2;</p><p><b>  }</b></p><p>  //如果進(jìn)程個數(shù)不為0</p><p>  if(pro

49、cNum!=0)</p><p><b>  {</b></p><p>  pcb2->next=head;</p><p>  printf("請輸入CPU單位時間:\n");</p><p>  scanf("%d",&unitTime);</p>

50、<p><b>  }</b></p><p>  *pcbHead=head;</p><p>  return procNum;</p><p><b>  }</b></p><p><b>  顯示進(jìn)程</b></p><p>  #

51、include"ProcPCB.h"</p><p>  #include"windows.h"</p><p>  #include"stdio.h"</p><p>  COORD whereXY()</p><p><b>  {</b></p>

52、;<p>  HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);</p><p>  CONSOLE_SCREEN_BUFFER_INFO csbi;</p><p>  GetConsoleScreenBufferInfo(handle,&csbi);</p><p>  return csbi.dw

53、CursorPosition;</p><p><b>  }</b></p><p>  void gotoXY(COORD pos)</p><p><b>  {</b></p><p>  HANDLE handle=::GetStdHandle(STD_OUTPUT_HANDLE);<

54、;/p><p>  SetConsoleCursorPosition(handle,pos);</p><p><b>  }</b></p><p>  void SetCursorVisible(bool bVisible)</p><p><b>  {</b></p><p&

55、gt;  HANDLE handle=::GetStdHandle(STD_OUTPUT_HANDLE);</p><p>  CONSOLE_CURSOR_INFO cci;</p><p>  cci.bVisible=bVisible;</p><p>  cci.dwSize=10;</p><p>  ::SetConsoleCur

56、sorInfo(handle,&cci);</p><p><b>  }</b></p><p>  void ProcShow(procPCB *head,bool bVisible)</p><p><b>  {</b></p><p>  bool flag=true;</p

57、><p>  procPCB *p=head;</p><p>  Sleep(500);</p><p>  SetCursorVisible(bVisible);</p><p>  printf("進(jìn)程名 需要時間 運行時間 運行狀態(tài)\n");</p><p>  while(h

58、ead!=p||flag)</p><p><b>  {</b></p><p>  flag=false;</p><p>  printf("%-8s %-10d %-10d %-8s\n",p->name,p->requiredTime,p->runTime,p->status);<

59、;/p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  運行結(jié)果</b></p><p><b>  設(shè)置進(jìn)程</b></p>

60、;<p>  設(shè)置CPU時間并運行</p><p><b>  實驗說明</b></p><p>  通過本次實驗,我對時間片輪轉(zhuǎn)的調(diào)度思想有了進(jìn)一步的了解,通過動手實現(xiàn)其調(diào)度算法,更加深刻的理解了時間片輪轉(zhuǎn)調(diào)度算法與其他幾種算法的不同和優(yōu)點。同時,在實驗過程中,回顧書本上的理論知識,鞏固了我的知識</p><p><b&g

61、t;  實驗報告題目</b></p><p><b>  內(nèi)存的分配和回收</b></p><p><b>  問題描述</b></p><p>  本實驗主要是模擬基于多道程序設(shè)計系統(tǒng)在可變分區(qū)式和分頁式兩種存儲管理方式下的主存分配和回收。在程序中采用鏈表方式來管理作業(yè)和頁表項,采用隊列來管理等待作業(yè)。在模擬

62、可變分區(qū)式存儲管理時,采用最先適應(yīng)算法實現(xiàn)主存的分配與回收,建立了已分配區(qū)表和未分配區(qū)表,等待隊列。在模擬分頁式存儲管理時,采用位示圖來表示主存,建立了作業(yè)表和頁表,在主存中的作業(yè)隊列和等待隊列。需要說明的是,我們沒有考慮系統(tǒng)可容納作業(yè)的道數(shù)和作業(yè)對除主存以外的其它資源的要求,認(rèn)為只要系統(tǒng)主存可以滿足要求作業(yè)就加載到主存。同時等待隊列是采用先進(jìn)先出的管理方式</p><p><b>  數(shù)據(jù)結(jié)構(gòu)和符號說

63、明</b></p><p>  可變分區(qū)式存儲管理的已分配區(qū)表和未分配區(qū)表的結(jié)構(gòu)用記錄描述如下:</p><p>  /***全局變量*****/</p><p>  int bitMap[N][N]={0};</p><p>  int freeBlock=N*N;</p><p>  /********

64、/</p><p><b>  建立頁表并初始化</b></p><p>  *pt=(PageTable *)malloc(sizeof(PageTable)*p->pageCount);</p><p>  PageTable *ptcopy=*pt;</p><p>  for(int k=0;k<p-

65、>pageCount;k++)</p><p><b>  {</b></p><p>  (*pt+k)->pageNum=k;</p><p>  (*pt+k)->blockNum=-1;</p><p><b>  }</b></p><p>  P

66、ageTable *pageTable[N*N]={NULL};//指向進(jìn)程頁表的指針數(shù)組</p><p>  void ShowMenu()</p><p><b>  {</b></p><p>  printf("1.申請內(nèi)存\n");</p><p>  printf("2.回收內(nèi)存

67、\n");</p><p>  printf("3.顯示內(nèi)存\n");</p><p>  printf("4.顯示頁表\n");</p><p>  printf("5.退出\n");</p><p><b>  } </b></p>

68、<p>  頁表的結(jié)構(gòu)用記錄描述:</p><p>  //作業(yè)的頁表結(jié)構(gòu)體typedef struct{ int pagenum;//頁號 int blocknum;//塊號}PageTable;</p><p><b>  流程圖</b></p><p><b>  源程序及說明</b></p>

69、;<p><b>  內(nèi)存的分配</b></p><p>  #include"Process.h"</p><p>  #include"PageTable.h"</p><p>  #include"MemoryManager.h"</p><p&

70、gt;  #include"stdio.h"</p><p>  #include"stdlib.h"</p><p>  bool MemoryAllocation(Process* &p,PageTable **pt)</p><p><b>  {</b></p><p&

71、gt;  if(p->pageCount>freeBlock)</p><p><b>  {</b></p><p>  printf("內(nèi)存不足\n");</p><p>  free(p);//釋放申請的進(jìn)程空間</p><p><b>  p=NULL;</b>

72、;</p><p>  return false;</p><p><b>  }</b></p><p>  //建立頁表并初始化</p><p>  *pt=(PageTable *)malloc(sizeof(PageTable)*p->pageCount);</p><p>  Pa

73、geTable *ptcopy=*pt;</p><p>  for(int k=0;k<p->pageCount;k++)</p><p><b>  {</b></p><p>  (*pt+k)->pageNum=k;</p><p>  (*pt+k)->blockNum=-1;</

74、p><p><b>  }</b></p><p>  for(int i=0;i<N;i++)</p><p><b>  {</b></p><p>  for(int j=0;j<N;j++)</p><p><b>  {</b><

75、/p><p>  if(ptcopy-*pt==p->pageCount)</p><p><b>  {</b></p><p>  return true;</p><p><b>  }</b></p><p>  if(bitMap[i][j]==0)</p&

76、gt;<p><b>  {</b></p><p>  bitMap[i][j]=1;</p><p>  freeBlock--;</p><p>  ptcopy->blockNum=i*8+j;</p><p><b>  ptcopy++;</b></p>

77、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  內(nèi)存的回收</b></p>

78、<p>  #include"MemoryManager.h"</p><p>  #include"PageTable.h"</p><p>  #include"Process.h"</p><p>  #include"stdio.h"</p><p&

79、gt;  #include"stdlib.h"</p><p>  void MemoryRecory(Process* &p,PageTable* &pt)</p><p><b>  {</b></p><p><b>  int x,y;</b></p><p&

80、gt;  for(int i=0;i<p->pageCount;i++)</p><p><b>  {</b></p><p>  x=(pt+i)->blockNum/N;</p><p>  y=(pt+i)->blockNum%N;</p><p>  bitMap[x][y]=0;<

81、;/p><p>  freeBlock++;</p><p><b>  }</b></p><p><b>  free(p);</b></p><p><b>  p=NULL;</b></p><p><b>  free(pt);<

82、;/b></p><p><b>  pt=NULL;</b></p><p><b>  }</b></p><p><b>  3、主程序調(diào)用</b></p><p>  #include"Process.h"</p><p&g

83、t;  #include"stdio.h"</p><p>  #include"MemoryAllocation.h"</p><p>  #include"MemoryRecory.h"</p><p>  #include"ShowBitMap.h"</p><

84、p>  #include"stdlib.h"</p><p>  #include"string.h"</p><p>  #include"windows.h"</p><p>  #define N 8</p><p>  /***全局變量*****/</p>

85、<p>  int bitMap[N][N]={0};</p><p>  int freeBlock=N*N;</p><p>  /********/</p><p>  PageTable *pageTable[N*N]={NULL};//指向進(jìn)程頁表的指針數(shù)組</p><p>  Process *process[N*N]

86、={NULL};</p><p>  int processCount=0;</p><p>  int index=0;</p><p>  int NextIndex()</p><p><b>  {</b></p><p>  for(int i=0;i<processCount;i

87、++)</p><p><b>  {</b></p><p>  if(process[i]==NULL)</p><p><b>  return i;</b></p><p><b>  }</b></p><p><b>  retur

88、n i;</b></p><p><b>  }</b></p><p>  void InitProcess(Process* &p)</p><p><b>  {</b></p><p>  p=(Process *)malloc(sizeof(Process));<

89、/p><p>  printf("請輸入:\n進(jìn)程名 進(jìn)程分頁數(shù)\n");</p><p>  scanf("%s%d",p->name,&p->pageCount);</p><p><b>  }</b></p><p>  bool IsProcessEm

90、pty()</p><p><b>  {</b></p><p>  if(processCount==0)</p><p><b>  {</b></p><p>  printf("當(dāng)前沒有進(jìn)程運行\(zhòng)n");</p><p>  return tru

91、e;</p><p><b>  }</b></p><p>  return false;</p><p><b>  }</b></p><p>  int SearchProcess()</p><p><b>  {</b></p>

92、<p>  if(IsProcessEmpty())</p><p>  return -1;</p><p>  char processName[10];</p><p>  printf("請輸入進(jìn)程名:\n");</p><p>  scanf("%s",processName);&

93、lt;/p><p>  for(int i=0;i<N*N;i++)</p><p><b>  {</b></p><p>  if(process[i]!=NULL&&strcmp(processName,process[i]->name)==0)</p><p><b>  ret

94、urn i;</b></p><p><b>  }</b></p><p>  printf("沒有名為%s的進(jìn)程\n",processName);</p><p>  return -1;</p><p><b>  }</b></p><p&

95、gt;  void ShowPageTable()</p><p><b>  {</b></p><p>  int tempCount;</p><p>  if(IsProcessEmpty())</p><p><b>  return;</b></p><p>  

96、for(int i=0;i<N*N;i++)</p><p><b>  {</b></p><p>  if(process[i]!=NULL)</p><p><b>  {</b></p><p>  tempCount++;</p><p>  printf(&

97、quot;進(jìn)程名:%s,頁面數(shù):%d\n",process[i]->name,process[i]->pageCount);</p><p>  printf("頁號:");</p><p>  for(int j=0;j<(*(process+i))->pageCount;j++)</p><p>  prin

98、tf("%d ",(pageTable[i]+j)->pageNum);</p><p>  printf("\n塊號:");</p><p>  for(j=0;j<process[i]->pageCount;j++)</p><p>  printf("%d ",(pageTable[

99、i]+j)->blockNum);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  if(tempCount==processCount)</p><p><b>  return;</b></p>

100、<p><b>  }</b></p><p><b>  }</b></p><p>  void ShowMenu()</p><p><b>  {</b></p><p>  printf("1.申請內(nèi)存\n");</p>&

101、lt;p>  printf("2.回收內(nèi)存\n");</p><p>  printf("3.顯示內(nèi)存\n");</p><p>  printf("4.顯示頁表\n");</p><p>  printf("5.退出\n");</p><p><b&

102、gt;  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  int select;</p><p>  while(true)</p><p><b>  {</b></p><

103、p>  ShowMenu();</p><p>  scanf("%d",&select);</p><p>  switch(select)</p><p><b>  {</b></p><p><b>  case 1:</b></p><

104、;p>  InitProcess(process[index]);</p><p>  if(MemoryAllocation(process[index],&pageTable[index]))</p><p>  processCount++;</p><p>  index=NextIndex();</p><p><

105、;b>  break;</b></p><p><b>  case 2:</b></p><p>  index=SearchProcess();</p><p>  if(index==-1)</p><p><b>  break;</b></p><p&

106、gt;  MemoryRecory(process[index],pageTable[index]);</p><p>  processCount--;</p><p>  index=NextIndex();</p><p><b>  break;</b></p><p><b>  case 3:<

107、;/b></p><p>  ShowBitMap();</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  ShowPageTable();</p><p><b>  break;<

108、;/b></p><p><b>  case 5:</b></p><p><b>  exit(0);</b></p><p><b>  break;</b></p><p><b>  default:</b></p><

109、p>  printf("請輸入正確編號:\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  //ShowBitMap();</p><p><b>  }</b></p><

110、;p><b>  //</b></p><p><b>  運行結(jié)果</b></p><p><b>  1、運行主界面</b></p><p>  2、申請內(nèi)存p1并顯示內(nèi)存</p><p><b>  3、再申請內(nèi)存p2</b></p>

111、;<p><b>  4、顯示頁表</b></p><p>  5、回收內(nèi)存p1再顯示內(nèi)存</p><p><b>  實驗說明</b></p><p>  在清楚主存儲器分配和回收的情況下,做些實驗還是比較簡單的。關(guān)鍵是注意當(dāng)找到一個大的塊時,如何將這個大塊分成兩小塊,一塊用于分配,另一塊依舊是未分配。希望

溫馨提示

  • 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

提交評論