• 操作系統課程設計報告

    時間:2022-06-28 13:58:21 數據庫操作系統 我要投稿
    • 相關推薦

    操作系統課程設計報告模板

      操作系統是信息管理與信息系統專業一門重要的專業理論課程,了解和掌握操作系統的基本概念、功能和實現原理,對認識整個計算機系統的工作原理十分重要。以下是小編整理的操作系統課程設計報告模板,歡迎閱讀。

    操作系統課程設計報告模板

      一、課程設計任務劃分

      二、基本原理

     。ㄒ唬╉撁嬷脫Q算法定義

      在地址映射過程中,若在頁面中發現所要訪問的頁面不再內存中,則產生缺頁中斷。當發生缺頁中斷時操作系統必須在內存選擇一個頁面將其移出內 存,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換算法。

     。ǘ┧褂玫乃惴

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

      長(未來)時間內 不再被訪問的頁面換出。

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

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

     。ㄈ┰O計思想

      選擇置換算法,先輸入所有頁面號,為系統分配物理塊,依次進行置換:

      OPT基本思想:

      是用一維數組page[pSIZE]存儲頁面號序列,memery[mSIZE]是存儲裝入物理塊中的頁面。數組next[mSIZE]記錄物理塊中對應頁面的最后訪問時間。每當發生缺頁時,就從物理塊中找出最后訪問時間最大的頁面,調出該頁,換入所缺的頁面。 FIFO基本思想:

      是用隊列存儲內存中的頁面,隊列的特點是先進先出,與該算法是一致的,所以每當發生缺頁時,就從隊頭刪除一頁,而從隊尾加入缺頁;蛘呓柚o助數組time[mSIZE]記錄物理塊中對應頁面的進入時間,每次需要置換時換出進入時間最小的頁面。 LRU基本思想:

      是用一維數組page[pSIZE]存儲頁面號序列,memery[mSIZE]是存儲裝入物理塊中的頁面。數組flag[10]標記頁面的訪問時間。每當使用頁面時,刷新訪問時間。發生缺頁時,就從物理塊中頁面標記最小的一頁,調出該頁,換入所缺的頁面。

      三、基本思路

      實驗環境:vc++,編程語言:c語言 #include #include /*全局變量*/

      int mSIZE; /*物理塊數*/

      int pSIZE; /*頁面號引用串個數*/

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

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

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

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

      scanf("%1d",&page[i]); download(); system("cls"); system("color 0E"); do{ puts("輸入的頁面號引用串為:"); 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("* 請選擇頁面置換算法: * "); printf("* ----------------------------------------- * ");

      printf("* 1.先進先出(FIFO) 2.最近最久未使用(LRU) * "); printf("* 3.最佳(OPT) 4.退出 * "); printf("* * * * * * * * * * * * * * * * * * * * * * * "); printf("請選擇操作:[ ]"); 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(); /*顯示設計者信息后退出*/ printf("┃謝謝使用頁面置換算法演示器!

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

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

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

      >>>"); getch(); }

      /*設置延遲*/

      void mDelay(unsigned int Delay) {

      unsigned int i;

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

      /*顯示設計者信息*/ void designBy() { printf("┏━━━━━━━━━━━━━━━━━━━━┓ "); printf("┃ 頁面置換算法 ┃ "); printf("┃ 12級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個*="" if(i="=0)" continue;="" printf(" ");="" printf("---------------------------------------- ");="" printf("缺頁次數:%d ",t+msize);="" printf("缺頁率:%d="" %d ",t+msize,psize);<="" p="">

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

      /*計算過程延遲*/ void compute() { int i; printf("正在進行相關計算,請稍候"); 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("")); }

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

      int memery[10]={0};

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

      int max=0; /*記錄換出頁*/ int count=0; /*記錄置換次數*/ /*前mSIZE個數直接放入*/ 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++) {="" *判斷新頁面號是否在物理塊中*="" for(j="0,k=0;j<mSIZE;j++)" {<="" p="">

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

      }

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

      count++; /*計算換出頁*/

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

      time[max]=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="">

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

      int memery[10]={0};

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

      int max=0; /*記錄換出頁*/ int count=0; /*記錄置換次數*/ /*前mSIZE個數直接放入*/ 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++) {="" *判斷新頁面號是否在物理塊中*="" for(j="0,k=0;j<mSIZE;j++)" {<="" p="">

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

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

      count++; /*計算換出頁*/

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

      flag[max]=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="">

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

      int memery[10]={0};

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

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

      int count=0; /*記錄置換次數*/ /*前mSIZE個數直接放入*/ 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="">

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

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

      if(k==mSIZE) /*如果不在物理塊中*/ { count++; /*得到物理快中各頁下一次訪問時間*/ for(m=0;m=next[1]?0:1; for(m=2;mnext[max]) max=m; /*下一次訪問時間都為pSIZE,則置換物理塊中第一個 */ 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="">

      四、調試及實驗結果

      第一組數據:

      1.運行結果

      2. 按任意鍵進行初始化:

      3. 載入數據:

      4. 進入置換算法選擇界面:

      5.運算中延遲操作:

      6.三種算法演示結果

      7.退出算法

      第二組數據:

      1.運行結果

      2.按任意鍵進行初始化:

      3.載入數據:

      4.進入置換算法選擇界面:

      5.運算中延遲操作:

      6. 三種算法演示結果

      7.退出算法

      五、個人體會

      由于時間有限,本次設計完成的并不是很完美,下面從以下幾點來說明本次課程設計的個人體會:

      1.本次課程設計中做的比較好的地方:

      做的好的地方就是在于對題目意思的正確理解,以及在此基礎上的模型設計。最開始一看題目的時候感覺很迷茫,有點不知道如何著手,等靜下心來仔細分析了程序,明確了目標,明確了思路,才對程序有了一個較為完整的實現。

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

      做得不太好的地方就是不能把自己所學的C知識和本次課程設計的相關知識很好的結合起來,以至于沒有很好的表達出本次課程設計的細節。在以后的過程中,我會運用本次課程設計中所學的知識,以及思考問題的方式和方法,爭取能夠發揚優點,盡量克服不細心,不嚴謹等缺點。

      3.從本次設計中得到的收獲:

      通過本次課程設計,我學會了綜合運用所學相關知識的能力,動手能力以及獨立思考問題的能力。下面具體的收一個邊學程序是遇到的困難,首先就是如何把想法變為做法的問題,最開始一拿到題目,我就覺得無從下手,因為我的閱歷,不知道如何把這樣一個問題變成程序,變成能夠讓人一目了然的東西,于是,我就先寫下了p,v操作的實現過程,因為這個對我來說簡單一些,然后,在此基礎之上,就好辦了,結果最后用了2個函數就解決問題了,所以,我覺得有時候思考問題不要太死腦筋,換一個角度的話,也許會更好,說不定就能達到事半功倍的效果。

    黄频国产免费高清视频_富二代精品短视频在线_免费一级无码婬片aa_精品9E精品视频在线观看