97超级碰碰碰久久久_精品成年人在线观看_精品国内女人视频免费观_福利一区二区久久

操作系統(tǒng)課程設(shè)計(jì)報(bào)告

時(shí)間:2022-06-28 13:58:21 數(shù)據(jù)庫操作系統(tǒng) 我要投稿
  • 相關(guān)推薦

操作系統(tǒng)課程設(shè)計(jì)報(bào)告模板

  操作系統(tǒng)是信息管理與信息系統(tǒng)專業(yè)一門重要的專業(yè)理論課程,了解和掌握操作系統(tǒng)的基本概念、功能和實(shí)現(xiàn)原理,對(duì)認(rèn)識(shí)整個(gè)計(jì)算機(jī)系統(tǒng)的工作原理十分重要。以下是小編整理的操作系統(tǒng)課程設(shè)計(jì)報(bào)告模板,歡迎閱讀。

操作系統(tǒng)課程設(shè)計(jì)報(bào)告模板

  一、課程設(shè)計(jì)任務(wù)劃分

  二、基本原理

  (一)頁面置換算法定義

  在地址映射過程中,若在頁面中發(fā)現(xiàn)所要訪問的頁面不再內(nèi)存中,則產(chǎn)生缺頁中斷。當(dāng)發(fā)生缺頁中斷時(shí)操作系統(tǒng)必須在內(nèi)存選擇一個(gè)頁面將其移出內(nèi) 存,以便為即將調(diào)入的頁面讓出空間。而用來選擇淘汰哪一頁的規(guī)則叫做頁面置換算法。

 。ǘ┧褂玫乃惴

  1) 最佳置換算法(OPT):將以后永不使用的或許是在最

  長(zhǎng)(未來)時(shí)間內(nèi) 不再被訪問的頁面換出。

  2) 先進(jìn)先出算法(FIFO):淘汰最先進(jìn)入內(nèi)存的頁面,即 選擇在內(nèi)存中駐留時(shí)間最久的頁面予以淘汰。

  3) 最近最久未使用算法(LRU):淘汰最近最久未被使用 的頁面。

 。ㄈ┰O(shè)計(jì)思想

  選擇置換算法,先輸入所有頁面號(hào),為系統(tǒng)分配物理塊,依次進(jìn)行置換:

  OPT基本思想:

  是用一維數(shù)組page[pSIZE]存儲(chǔ)頁面號(hào)序列,memery[mSIZE]是存儲(chǔ)裝入物理塊中的頁面。數(shù)組next[mSIZE]記錄物理塊中對(duì)應(yīng)頁面的最后訪問時(shí)間。每當(dāng)發(fā)生缺頁時(shí),就從物理塊中找出最后訪問時(shí)間最大的頁面,調(diào)出該頁,換入所缺的頁面。 FIFO基本思想:

  是用隊(duì)列存儲(chǔ)內(nèi)存中的頁面,隊(duì)列的特點(diǎn)是先進(jìn)先出,與該算法是一致的,所以每當(dāng)發(fā)生缺頁時(shí),就從隊(duì)頭刪除一頁,而從隊(duì)尾加入缺頁;蛘呓柚o助數(shù)組time[mSIZE]記錄物理塊中對(duì)應(yīng)頁面的進(jìn)入時(shí)間,每次需要置換時(shí)換出進(jìn)入時(shí)間最小的頁面。 LRU基本思想:

  是用一維數(shù)組page[pSIZE]存儲(chǔ)頁面號(hào)序列,memery[mSIZE]是存儲(chǔ)裝入物理塊中的頁面。數(shù)組flag[10]標(biāo)記頁面的訪問時(shí)間。每當(dāng)使用頁面時(shí),刷新訪問時(shí)間。發(fā)生缺頁時(shí),就從物理塊中頁面標(biāo)記最小的一頁,調(diào)出該頁,換入所缺的頁面。

  三、基本思路

  實(shí)驗(yàn)環(huán)境:vc++,編程語言:c語言 #include #include /*全局變量*/

  int mSIZE; /*物理塊數(shù)*/

  int pSIZE; /*頁面號(hào)引用串個(gè)數(shù)*/

  static int memery[10]={0}; /*物理塊中的頁號(hào)*/ static int page[100]={0}; /*頁面號(hào)引用串*/ static int temp[100][10]={0}; /*輔助數(shù)組*/ /*置換算法函數(shù)*/ void FIFO(); void LRU(); void OPT(); /*輔助函數(shù)*/

  void print(unsigned int t); void designBy(); void download();

  void mDelay(unsigned int Delay); /*主函數(shù)*/ void main() {

  int i,k,code; system("color 0A"); designBy(); printf("┃請(qǐng)按任意鍵進(jìn)行初始化操作... ┃ "); printf("┗━━━━━━━━━━━━━━━━━━━━━┛ "); printf(" >>>"); getch(); system("cls"); system("color 0B"); printf("請(qǐng)輸入物理塊的個(gè)數(shù)(M<=10):"); scanf("%d",&mSIZE); printf("請(qǐng)輸入頁面號(hào)引用串的個(gè)數(shù)(P<=100):"); scanf("%d",&pSIZE); puts("請(qǐng)依次輸入頁面號(hào)引用串(連續(xù)輸入,無需隔開):"); for(i=0;i<psize;i++)< p="">

  scanf("%1d",&page[i]); download(); system("cls"); system("color 0E"); do{ puts("輸入的頁面號(hào)引用串為:"); for(k=0;k<=(pSIZE-1)/20;k++)

  { for(i=20*k;(i<psize)&&(i<20*(k+1));i++) 20="=0)||(((i+1))&&</p">

  (i==pSIZE-1))) printf("%d ",page[i]); else printf("%d ",page[i]); } } printf("* * * * * * * * * * * * * * * * * * * * * * * "); printf("* 請(qǐng)選擇頁面置換算法: * "); printf("* ----------------------------------------- * ");

  printf("* 1.先進(jìn)先出(FIFO) 2.最近最久未使用(LRU) * "); printf("* 3.最佳(OPT) 4.退出 * "); printf("* * * * * * * * * * * * * * * * * * * * * * * "); printf("請(qǐng)選擇操作:[ ]"); scanf("%d",&code); switch(code) {

  case 1:

  FIFO(); break; case 2:

  LRU(); break; case 3:

  OPT(); break; case 4: system("cls"); system("color 0A"); designBy(); /*顯示設(shè)計(jì)者信息后退出*/ printf("┃謝謝使用頁面置換算法演示器!

  ┃ "); printf("┗━━━━━━━━━━━━━━━━━━┛ "); exit(0); default: printf("輸入錯(cuò)誤,請(qǐng)重新輸入:"); } printf("按任意鍵重新選擇置換算法:>>>"); getch();

  system("cls"); }while (code!=4); getch(); }

  /*載入數(shù)據(jù)*/ void download() { int i; system("color 0D"); printf("╔════════════╗ "); printf("║正在載入數(shù)據(jù),請(qǐng)稍候 !!!║ "); printf("╚════════════╝ "); printf("Loading... "); printf(" for(i=0;i<51;i++) printf(""); for(i=0;i<50;i++) { mDelay((pSIZE+mSIZE)/2); printf(">"); } printf(" Finish. 載入成功,按任意鍵進(jìn)入置換算法選擇界面:

  >>>"); getch(); }

  /*設(shè)置延遲*/

  void mDelay(unsigned int Delay) {

  unsigned int i;

  for(;Delay>0;Delay--) { for(i=0;i<124;i++) { printf(" "); } } }

  /*顯示設(shè)計(jì)者信息*/ void designBy() { printf("┏━━━━━━━━━━━━━━━━━━━━┓ "); printf("┃ 頁面置換算法 ┃ "); printf("┃ 12級(jí)1班 ┃ ");

  O");

  printf("┃ 姓名:張海洋,李奔 ┃ "); printf("┣━━━━━━━━━━━━━━━━━━━━┫ "); }

  void print(unsigned int t) { int i,j,k,l; int flag; for(k=0;k<=(pSIZE-1)/20;k++) { for(i=20*k;(i<psize)&&(i<20*(k+1));i++) 20="=0)||(((i+1))&&(i==pSIZE-1)))" else="" d="" j="0;j<mSIZE;j++)" i="">=j) printf(" |%d|",temp[i][j]); else printf(" | |"); } for(i=mSIZE+20*k;(i<psize)&&(i<20*(k+1));i++) {="" for(flag="0,l=0;l<mSIZE;l++)" if(temp[i][l]="=temp[i-1][l])" flag++;="" if(flag="=mSIZE)/*頁面在物理塊中*/" printf("="" ");="" else="" |%d|",temp[i][j]);="" }="" *每行顯示20個(gè)*="" if(i="=0)" continue;="" printf(" ");="" printf("---------------------------------------- ");="" printf("缺頁次數(shù):%d ",t+msize);="" printf("缺頁率:%d="" %d ",t+msize,psize);<="" p="">

  printf("置換次數(shù):%d ",t); printf("訪問命中率:%d%% ",(pSIZE-(t+mSIZE))*100/pSIZE); printf("---------------------------------------- "); }

  /*計(jì)算過程延遲*/ void compute() { int i; printf("正在進(jìn)行相關(guān)計(jì)算,請(qǐng)稍候"); for(i=1;i<20;i++) { mDelay(15); if(i%4==0) printf(" "); else printf("Θ"); } for(i=0;i++<30;printf("")); for(i=0;i++<30;printf(" ")); for(i=0;i++<30;printf("")); }

  /*先進(jìn)先出頁面置換算法*/ void FIFO() {

  int memery[10]={0};

  int time[10]={0}; /*記錄進(jìn)入物理塊的時(shí)間*/ int i,j,k,m;

  int max=0; /*記錄換出頁*/ int count=0; /*記錄置換次數(shù)*/ /*前mSIZE個(gè)數(shù)直接放入*/ for(i=0;i<msize;i++) {<="" p="">

  memery[i]=page[i]; time[i]=i;

  for(j=0;j<msize;j++) temp[i][j]="memery[j];" }<="" p="">

  for(i=mSIZE;i<psize;i++) {="" *判斷新頁面號(hào)是否在物理塊中*="" for(j="0,k=0;j<mSIZE;j++)" {<="" p="">

  if(memery[j]!=page[i]) k++;

  }

  if(k==mSIZE) /*如果不在物理塊中*/ {

  count++; /*計(jì)算換出頁*/

  max=time[0]<time[1]?0:1; for(m="2;m<mSIZE;m++)" if(time[m]

  time[max]=i; /*記錄該頁進(jìn)入物理塊的時(shí)間*/ for(j=0;j<msize;j++) temp[i][j]="memery[j];" }="" else="" {<="" p="">

  for(j=0;j<msize;j++) temp[i][j]="memery[j];" }="" compute();="" print(count);="" }<="" p="">

  /*最近最久未使用置換算法*/ void LRU() {

  int memery[10]={0};

  int flag[10]={0}; /*記錄頁面的訪問時(shí)間*/ int i,j,k,m;

  int max=0; /*記錄換出頁*/ int count=0; /*記錄置換次數(shù)*/ /*前mSIZE個(gè)數(shù)直接放入*/ for(i=0;i<msize;i++) {<="" p="">

  memery[i]=page[i]; flag[i]=i;

  for(j=0;j<msize;j++) temp[i][j]="memery[j];" }<="" p="">

  for(i=mSIZE;i<psize;i++) {="" *判斷新頁面號(hào)是否在物理塊中*="" for(j="0,k=0;j<mSIZE;j++)" {<="" p="">

  if(memery[j]!=page[i]) k++; else flag[j]=i; /*刷新該頁的訪問時(shí)間*/ }

  if(k==mSIZE) /*如果不在物理塊中*/ {

  count++; /*計(jì)算換出頁*/

  max=flag[0]<flag[1]?0:1; for(m="2;m<mSIZE;m++)" if(flag[m]

  flag[max]=i; /*記錄該頁的訪問時(shí)間*/ for(j=0;j<msize;j++) temp[i][j]="memery[j];" }="" else="" {<="" p="">

  for(j=0;j<msize;j++) temp[i][j]="memery[j];" }="" compute();="" print(count);="" }<="" p="">

  /*最佳置換算法*/ void OPT() {

  int memery[10]={0};

  int next[10]={0}; /*記錄下一次訪問時(shí)間*/ int i,j,k,l,m;

  int max; /*記錄換出頁*/

  int count=0; /*記錄置換次數(shù)*/ /*前mSIZE個(gè)數(shù)直接放入*/ for(i=0;i<msize;i++) {<="" p="">

  memery[i]=page[i]; for(j=0;j<msize;j++) temp[i][j]="memery[j];" }<="" p="">

  for(i=mSIZE;i<psize;i++) {<="" p="">

  /*判斷新頁面號(hào)是否在物理塊中*/ for(j=0,k=0;j<msize;j++) {<="" p="">

  if(memery[j]!=page[i]) k++; }

  if(k==mSIZE) /*如果不在物理塊中*/ { count++; /*得到物理快中各頁下一次訪問時(shí)間*/ for(m=0;m=next[1]?0:1; for(m=2;mnext[max]) max=m; /*下一次訪問時(shí)間都為pSIZE,則置換物理塊中第一個(gè) */ memery[max]=page[i]; for(j=0;j<msize;j++) temp[i][j]="memery[j];" }="" else="" {<="" p="">

  for(j=0;j<msize;j++) temp[i][j]="memery[j];" }="" compute();="" print(count);="" }<="" p="">

  四、調(diào)試及實(shí)驗(yàn)結(jié)果

  第一組數(shù)據(jù):

  1.運(yùn)行結(jié)果

  2. 按任意鍵進(jìn)行初始化:

  3. 載入數(shù)據(jù):

  4. 進(jìn)入置換算法選擇界面:

  5.運(yùn)算中延遲操作:

  6.三種算法演示結(jié)果

  7.退出算法

  第二組數(shù)據(jù):

  1.運(yùn)行結(jié)果

  2.按任意鍵進(jìn)行初始化:

  3.載入數(shù)據(jù):

  4.進(jìn)入置換算法選擇界面:

  5.運(yùn)算中延遲操作:

  6. 三種算法演示結(jié)果

  7.退出算法

  五、個(gè)人體會(huì)

  由于時(shí)間有限,本次設(shè)計(jì)完成的并不是很完美,下面從以下幾點(diǎn)來說明本次課程設(shè)計(jì)的個(gè)人體會(huì):

  1.本次課程設(shè)計(jì)中做的比較好的地方:

  做的好的地方就是在于對(duì)題目意思的正確理解,以及在此基礎(chǔ)上的模型設(shè)計(jì)。最開始一看題目的時(shí)候感覺很迷茫,有點(diǎn)不知道如何著手,等靜下心來仔細(xì)分析了程序,明確了目標(biāo),明確了思路,才對(duì)程序有了一個(gè)較為完整的實(shí)現(xiàn)。

  2.做得不太好的地方,以及以后如何改正:

  做得不太好的地方就是不能把自己所學(xué)的C知識(shí)和本次課程設(shè)計(jì)的相關(guān)知識(shí)很好的結(jié)合起來,以至于沒有很好的表達(dá)出本次課程設(shè)計(jì)的細(xì)節(jié)。在以后的過程中,我會(huì)運(yùn)用本次課程設(shè)計(jì)中所學(xué)的知識(shí),以及思考問題的方式和方法,爭(zhēng)取能夠發(fā)揚(yáng)優(yōu)點(diǎn),盡量克服不細(xì)心,不嚴(yán)謹(jǐn)?shù)热秉c(diǎn)。

  3.從本次設(shè)計(jì)中得到的收獲:

  通過本次課程設(shè)計(jì),我學(xué)會(huì)了綜合運(yùn)用所學(xué)相關(guān)知識(shí)的能力,動(dòng)手能力以及獨(dú)立思考問題的能力。下面具體的收一個(gè)邊學(xué)程序是遇到的困難,首先就是如何把想法變?yōu)樽龇ǖ膯栴},最開始一拿到題目,我就覺得無從下手,因?yàn)槲业拈啔v,不知道如何把這樣一個(gè)問題變成程序,變成能夠讓人一目了然的東西,于是,我就先寫下了p,v操作的實(shí)現(xiàn)過程,因?yàn)檫@個(gè)對(duì)我來說簡(jiǎn)單一些,然后,在此基礎(chǔ)之上,就好辦了,結(jié)果最后用了2個(gè)函數(shù)就解決問題了,所以,我覺得有時(shí)候思考問題不要太死腦筋,換一個(gè)角度的話,也許會(huì)更好,說不定就能達(dá)到事半功倍的效果。