亚洲免费人人妻人人,cao78在线视频,福建一级毛片,91精品视频免费观看,高清另类图片操逼,日本特黄特色大片免费看,超碰欧美人人澡曰曰澡夜夜泛

操作系統(tǒng)實驗報告

時間:2025-01-20 10:20:24 林惜 工作報告 我要投稿

操作系統(tǒng)實驗報告(通用5篇)

  在生活中,大家逐漸認識到報告的重要性,我們在寫報告的時候要注意語言要準確、簡潔。其實寫報告并沒有想象中那么難,以下是小編精心整理的操作系統(tǒng)實驗報告,僅供參考,希望能夠幫助到大家。

操作系統(tǒng)實驗報告(通用5篇)

  操作系統(tǒng)實驗報告 1

  一、實驗目的

  用高級語言編寫和調試一個進程調度程序,以加深對進程的概念及進程調度算法的理解。

  二、實驗內容和要求

  編寫并調試一個模擬的進程調度程序,采用“簡單時間片輪轉法”調度算法對五個進程進行調度。

  每個進程有一個進程控制塊( PCB)表示。進程控制塊可以包含如下信息:進程名、到達時間、需要運行時間、已運行時間、進程狀態(tài)等等。

  進程的到達時間及需要的運行時間可以事先人為地指定(也可以由隨機數產生)。進程的到達時間為進程輸入的時間。 進程的運行時間以時間片為單位進行計算。 每個進程的狀態(tài)可以是就緒 W(Wait)、運行R(Run)兩種狀態(tài)之一。

  就緒進程獲得 CPU后都只能運行一個時間片。用運行時間加1來表示。

  如果運行一個時間片后,進程的已占用 CPU時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間片后進程的已占用CPU時間還未達所需要的運行時間,也就是進程還需要繼續(xù)運行,此時應分配時間片給就緒隊列中排在該進程之后的進程,并將它插入就緒隊列隊尾。 每進行一次調度程序都打印一次運行進程、就緒隊列、以及各個進程的 PCB,以便進行檢查。

  重復以上過程,直到所要進程都完成為止。

  三、實驗主要儀器設備和材料

  硬件環(huán)境:IBM-PC或兼容機

  軟件環(huán)境:C語言編程環(huán)境

  四、實驗原理及設計方案

  1、進程調度算法:采用多級反饋隊列調度算法。其基本思想是:當一個新進程進入內在后,首先將它放入第一個隊列的末尾,按FCFS原則排隊等待高度。當輪到該進程執(zhí)行時,如能在該時間片內完成,便可準備撤離系統(tǒng);如果它在一個時間片結束時尚為完成,調度程序便將該進程轉入第二隊列的`末尾,再同樣地按FCFS原則等待調度執(zhí)行,以此類推。

  2、實驗步驟:

 。1)按先來先服務算法將進程排成就緒隊列。

 。2)檢查所有隊列是否為空,若空則退出,否則將隊首進程調入執(zhí)行。

 。3)檢查該運行進程是否運行完畢,若運行完畢,則撤消進程,否則,將該進程插入到下一個邏輯隊列的隊尾。

  (4)是否再插入新的進程,若是則把它放到第一邏輯隊列的列尾。

 。5)重復步驟(2)、(3)、(4),直到就緒隊列為空。

  五、流程圖

  六、結果過程及截圖 初始化隊列

  按Y鍵繼續(xù)運行進程:

  按Y鍵繼續(xù)運行進程:

  運行若干次后的狀態(tài):

  添加新的進程:

  七、所遇困難的解決以及心得體會

  在這個多級反饋的實驗中,我采取了用一條實際上的鏈表隊列來模擬多個邏輯上的隊列,通過維護幾個鏈表的狀態(tài)信息來找到每個進程運行完后應該插入的地方,還有一個標志位Fend用來表明新插入的隊列的位置。雖然實驗原理很簡單,但是在編寫代碼的過程中遇到了不少的問題,在兩個小時之內已經完成的大體代碼的編寫,但是之中存在不少的問題,導致了用了差不多四個小時的時間去調試才把它弄好,這主要歸咎于在開始設計代碼的不太合理,在后期使得代碼結構有些混亂,使得調試更加的麻煩,以及對編程的不熟悉。通過這個實驗不僅使我對進程的調度算法有了更深的認識,使得理論知識得到的實踐,也使我的編程能力得到了進一步提高。

  七、思考題

  分析不同調度算法的調度策略,比較不同調度算法的優(yōu)缺點,總結它們的適用范圍。

  答:動態(tài)有限權算法:動態(tài)優(yōu)先權是指在創(chuàng)建進程時所創(chuàng)建的優(yōu)先權,會隨進程的推進或者等待時間的增加而改變,以便獲得更好的調度性能。處理機為每個進程分配一定的時間片,在就緒隊列中,優(yōu)先權高的進程將優(yōu)先獲得處理機,進程在進去運行完響應的時間片后,如沒完成,優(yōu)先權減1,從新回到就緒隊列等待分配處理機。

  時間片的輪轉法:系統(tǒng)將所有進程排成一個隊列,按照先來先服務的原則,對隊列首的進程進行處理,每個進程在用完自己的時間片后,從新回到隊尾進行排隊。每運行一次,進程的需要時間減1,直到就緒隊列為空!

  八、源代碼

  #include #include

  #include

  #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0

  #define TIME 2//時間片長度

  typedef struct pcb{//進程管理塊 char name[10];//進程名字 char state; //進程狀態(tài)

  int queue; int ntime; int rtime; int etime;

  //進程所在的隊列

  //進程需要運行的時間

  //進程已經運行的時間

  //進程在本隊列可運行的時間片

  struct pcb *link;

  }PCB;

  PCB *ready = NULL, *p = NULL, *pfend = NULL,*p =NULL; 位置的變量

  int geti() //使用戶僅能輸入整數 {

  char ch; int i = 0; fflush(stdin); ch = get); while(ch == ){

  //就緒隊列,進程插入

  printf(

  fflush(stdin); ch = get); }

  while(ch != ){

  if(ch > 9 || ch

  fflush(stdin); i = 0; ch = get);

  }else{ i = i*10 + (ch - 0); }

  ch = get);

  }

  return i;

  }

  void findpos()//更新狀態(tài)量 {

  PCB *ps = pfend;

  if(!ps || !ps -> link || (ps-> link->queue - ps->queue) > 1) p = ps; else{ while (ps->link && ps ->link->queue != (pfend ->queue +2)) }

  ps = ps->link; p = ps;

  }

  void ()//插入進程 {

  if(!ready ){

  ready = p;

  pfend = p; p = p;

  }else if(ready ->queue == 1){//第一隊列存在

  p->link = pfend->link; pfend->link = p; pfend = p; findpos();

  }

  void input()/*建立進程控制塊函數*/ {

  int i,num;

  printf(

  for(i=0; i

  p=getpch(PCB);

  printf(

  printf(

  p->queue =1;

  p->etime = TIME; p->link=NULL;

  ();/*調用函數*/ } else{ p->link = ready; ready = p; }

  findpos();

  }

  void disp(PCB *pr)/*建立進程現實函數,用于顯示當前進程*/ {

  printf(

  }

  void check()/*建立進程查看函數*/

  {

  }

  void sort()//調整進程隊列

  {

  } if(!ready->link ||ready->queue link->queue) return; p = ready ->link; ready ->link = p ->link; p ->link = ready; p = ready; ready = p; if (ready && ready -> queue == p ->queue){ findpos(); } PCB *pr; printf(

  void addnew()//添加新的進程

  {

  if(ready ->queue != 1){ (ready -> queue)++; ready->etime *= 2; ready -> state=w; sort();/*調用sort函數*/ input(); } else{ input();

  }

  }

  void destroy()/*建立進程撤銷函數(進程運行結束,撤銷進程)*/

  {

  }

  void running()/*建立進程就緒函數(進程運行時間到,置就緒狀態(tài))*/

  {

  }

  void main()

  {

  char ch; input(); while(ready != NULL) { printf(

  }

  ready ->state = R; check(); running(); printf(

  操作系統(tǒng)實驗報告 2

  一、實驗目的

  本實驗要求學生模擬作業(yè)調度的實現,用高級語言編寫和調試一個或多個作業(yè)調度的模擬程序,了解作業(yè)調度在操作系統(tǒng)中的作用,以加深對作業(yè)調度算法的理解。

  二、實驗內容和要求

  1、編寫并調度一個多道程序系統(tǒng)的作業(yè)調度模擬程序。

  作業(yè)調度算法:采用基于先來先服務的調度算法?梢詤⒖颊n本中的方法進行設計。 對于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數量、調度作業(yè)時必須考慮到每個作業(yè)的資源要求。

  三、實驗主要儀器設備和材料

  硬件環(huán)境:IBM-PC或兼容機

  軟件環(huán)境:C語言編程環(huán)境

  四、實驗原理及設計方案

  采用多道程序設計方法的操作系統(tǒng),在系統(tǒng)中要經常保留多個運行的作業(yè),以提高系統(tǒng)效率。作業(yè)調度從系統(tǒng)已接納的暫存在輸入井中的一批作業(yè)中挑選出若干個可運行的作業(yè),并為這些被選中的作業(yè)分配所需的系統(tǒng)資源。對被選中運行的作業(yè)必須按照它們各自的作業(yè)說明書規(guī)定的步驟進行控制。

  采用先來先服務算法算法模擬設計作業(yè)調度程序。

 。1)作業(yè)調度程序負責從輸入井選擇若干個作業(yè)進入主存,為它們分配必要的資源,當它們能夠被進程調度選中時,就可占用處理器運行。作業(yè)調度選擇一個作業(yè)的必要條件是系統(tǒng)中現有的尚未分配的資源可滿足該作業(yè)的資源要求。但有時系統(tǒng)中現有的尚未分配的資源既可滿足某個作業(yè)的要求也可滿足其它一些作業(yè)的要求,那么,作業(yè)調度必須按一定的算法在這些作業(yè)中作出選擇。先來先服務算法是按照作業(yè)進入輸入井的先后次序來挑選作業(yè),先進入輸入井的作業(yè)優(yōu)先被挑選,當系統(tǒng)中現有的尚未分配的資源不能滿足先進入輸入井的.作業(yè)時,那么順序挑選后面的作業(yè)。

  (2) 假定某系統(tǒng)可供用戶使用的主存空間共100k,并有5臺磁帶機。

 。3)流程圖:

  五、結果過程及截圖

  讀取文件jobs.txt來初始化主存,磁帶機的個數,并打印出來。

  初始時間是9:00:

  按Y運行5分鐘:

  按Y運行5分鐘:

  按Y運行5分鐘:

  多次運行后最后狀態(tài):

  六、所遇困難的解決以及心得體會

  這個實驗是花的時間最多的一個實驗,第一次做的時候由于理解有些問題,所以做錯了。之后重新做了一遍,收獲還是很多的,遇到了很多的細節(jié)問題,例如像是時間化成浮點數和浮點數化成時間等一些問題,從中也暴露了自己的編程能力欠缺,之后要多多的寫程序。

  七、思考題

  1、 寫出每種算法的調度策略,最后比較各種算法的優(yōu)缺點。

  答:先來先服務算法是根據作業(yè)的進入時間來排序,到達時間短的先運行,優(yōu)點是實現簡單,缺點是運行時間慢。

  短作業(yè)優(yōu)先算法是根椐作業(yè)的估計運行時間來排序,估計運行時間短的先運行,優(yōu)點是運行時間快,缺點是實現起來比較復雜。

  2、 選擇調度算法的依據是什么?

  答:如果作業(yè)要求的速度不高,而且作業(yè)比較小型,那就最好用先來先服務算法。

  如果作業(yè)要求的速度高,作業(yè)流程復雜,那就最好用短作業(yè)優(yōu)先算法。

  八、源代碼

  #include

  #include

  #include

  #include

  #define getjcb() (JCB*)malloc(sizeof(JCB))

  typedef struct {//資源的總量

  int memory; int tape;

  }RESOURCE;

  typedef struct JCB {//作業(yè)控制塊

  char username[20];//用戶名

  char jobname[10];//作業(yè)名

  char state;//作業(yè)狀態(tài) char atime[5];//到達時間 float rtime;//運行時間 RESOURCE resource;//資源數量 struct JCB*link; }JCB;

  RESOURCE source = {100,5};

  JCB *pjcb =getjcb();//作業(yè)鏈表頭

  char nowtime[5];//現在時間,初始時間為9:00

  FILE* ignore(FILE *fp)//忽略文件中的空白符

  {

  if(feof(fp)) return fp; char ch = fgetc(fp); while (!feof(fp) && (ch == || ch == )){ ch = fgetc(fp); } //if(!feof(fp)) return fp; fseek(fp, -1, SEEK_CUR);

  return fp;

  }

  FILE* findFILE *fp,char c)//在文件中找到一個字符的位置(讀取文件時用) {

  if(feof(fp)) return fp; char ch = fgetc(fp); while (!feof(fp) && (ch != c)){ } ch = fgetc(fp); fseek(fp, -1, SEEK_CUR); return fp;

  }

  void destory()//釋放鏈表所占的內存

  {

  JCB *p = pjcb->link; while(pjcb){ free(pjcb); pjcb = p; if(p) p = p->link;

  }

  }

  float stof(char *time)//把時間轉化為浮點型數

  {

  float h = 0, m = 0; int i = 0; while(time[i] != :){ h = h*10 + time[i] - 0; } i++; while(time[i] != ){ m = m*10 + time[i] - 0; } i++; i++;

  return (h + m/60);

  }

  char* ftos(double ftime)//把浮點型數值轉化為時間

  {

  }

  float timesub(char *time1, char *time2)//兩個時間相減,得到時間差

  {

  }

  void print()//打印輸出

  {

  JCB *p = pjcb->link; printf(

  p->atime, p->rtime, p->resource.memory,p->resource.tape);

  }

  void sendsource()//為作業(yè)分配資源

  {

  JCB *p; p = pjcb->link; while(p){//為到達的作業(yè)調度 p = p->link; }

  if(p->state == W && source.memory - p->resource.memory >=0 && source.tape - p->resource.tape >=0){

  } } p = p->link; p->state = R; source.memory -= p->resource.memory; source.tape -= p->resource.tape; printf(

  }

  void init()//初始化,讀取文件中的作業(yè)信息

  {

  FILE *fp; JCB *p= NULL,*q = pjcb ; if((fp = fopen(

  } } fp = ignore(fp); p->rtime = 0;//不初始化則會發(fā)生錯誤,? fscanf(fp,

  int checkend() //檢查是否所有的作業(yè)都已經運行完了

  {

  JCB *p = pjcb ->link; while(p){ if(p ->state != F){ return 0; } p = p->link; } return 1;

  }

  void run()//運行作業(yè)

  {

  if(checkend()){//檢查是否所有的作業(yè)都已經運行完了 printf(

  }

  } p = p->link; } p = pjcb ->link; while(p){//計算到達的作業(yè) if( strcmp(nowtime, p->atime) ==0 && p->state == N){ p->state = W; printf(

  int main()

  {

  char ch;

  double time =9.00;

  }

  double step = float(5)/60+0.00001; ftos(9.0); init(); do{ run(); puts(

  操作系統(tǒng)實驗報告 3

  一、實驗目的

  模擬文件系統(tǒng)實現的基本功能,了解文件系統(tǒng)的基本結構和文件的各種管理方法,加深理解文件系統(tǒng)的內部功能及內部實現。通過用高級語言編寫和調試一個簡單的文件系統(tǒng),模擬文件管理的工作過程,從而對各種文件操作命令的.實質內容和執(zhí)行過程有比較深入的了解。

  二、實驗內容和要求

  編程模擬一個簡單的文件系統(tǒng),實現文件系統(tǒng)的管理和控制功能。要求本文件系統(tǒng)采用兩級目錄,即設置主文件目錄[MFD]和用戶文件目錄[UED]。另外,為打開文件設置運行文件目錄[AFD]。設計一個10個用戶的文件系統(tǒng),每次用戶可保存10個文件,一次運行用戶可以打開5個文件,并對文件必須設置保護措施。在用戶程序中通過使用文件系統(tǒng)提供的Create、open、read、write、close、等文件命令,對文件進行操作

  三、實驗主要儀器設備和材料

  硬件環(huán)境:IBM-PC或兼容機

  軟件環(huán)境:C語言編程環(huán)境

  四、實驗原理及設計方案

  1、實驗原理

  運用二級目錄思想來模擬文件系統(tǒng)。

  為每個用戶建立一個單獨的用戶文件目錄UFD。這些文件目錄具有相似的結構,它由用戶文件的文件塊組成。此外,在系統(tǒng)再建立一個主文件目錄MFD;在主文件目錄中,每個用戶目錄都占有一個目錄項,其目錄項中包含文件名和指向該文件目錄文件的指針。

  3、程序流程圖

  五、結果過程及截圖

  系統(tǒng)的使用簡要說明:

  登陸:

  create命令新建文件

  file5

  Create失敗

  命令刪除文件

  Delete失。

  open打開命令,及write命令來追加文件

  Read命令和close命令關閉

  對沒打開的文件讀寫:

  六、所遇困難的解決以及心得體會

  本實驗的代碼長度的最常的,但是原理很簡單,并且實驗要求的是模擬,所以大大降低了實驗的難度,在操作系統(tǒng)課中我們還有一個課程設計,也是文件管理系統(tǒng),但是要比這個難很多,通過這個實驗,我對文件管理系統(tǒng)的運行機制有了深入的了解,因為要做好這個實驗必須要懂得文件管理系統(tǒng)的架構,這也迫使我認認真真的研究了操作系統(tǒng)中關于文件管理這一章的內容。同時這個程序也為以后的課程設計奠定了基礎,并且很多的代碼也是可以重用的。

  七、思考題

  1、文件系統(tǒng)要解決哪些問題?

  答:要解決文件和用戶是否同名,文件創(chuàng)建數是否超額,所要求文件是否存在等問題。

  2、什么是文件目錄?什么是文件目錄中包含哪些信息?目前廣泛采用的目錄結構形式是哪種?

  答:文件目錄就是用來展示一個用戶的所有文件的一個表格,文件目錄應包含文件名,保密碼,文件大小,目前廣泛采用的目錄結構形式是多級目錄形式。

  八、源代碼

  #include

  #include

  #include

  #include

  #define NULL 0

  typedef struct mdf{//MDF結構體

  char username[20];//用戶名 char filename[20];//文件名

  struct mdf *next;

  }MDF;

  typedef struct ufd{//UFD結構體

  char filename[20];//文件名

  int protect;//文件保護碼 unsigned int length;//文件長度

  struct ufd *next;

  }UFD;

  typedef struct afd{//AFD結構體

  char filename[20];//文件名 int protect;//文件保護碼 unsigned int point;//文件讀寫指針

  struct afd *next;

  }AFD;

  MDF *pmdf;//全局鏈表頭指針

  UFD *pufd;

  AFD *pafd;

  char UserUFD[20];//已經登陸成功的用戶名

  void initM DF()//初始化MDF表

  {

  FILE *fp; pmdf= (MDF*)malloc(sizeof(MDF)); MDF *p = pmdf; if((fp = fopen(

  } exit(1); } while (!feof(fp)){//把MDF文件中的內容裝入鏈表 } p->next = (MDF*)malloc(sizeof(MDF)); p = p->next; fscanf(fp,

  void printUFD()//打印MDF表 {

  UFD *p = pufd->next; puts(

  }

  void initUFD(char *name)//初始化UFD表 {

  FILE *fp; pufd= (UFD*)malloc(sizeof(UFD)); UFD *p = pufd; if((fp = fopen(name,

  } p->next = NULL; fclose(fp);

  int checkuser()//檢測登陸的用戶名 {

  } char username[20]; while(1){ puts(

  void initAFD()//初始化AFD {

  pafd = (AFD*)malloc(sizeof(AFD)); pafd->next = NULL; }

  bool create()//創(chuàng)建文件命令 {

  char filename[20]; UFD *p = pufd->next; AFD *pa = pafd; puts(

  } } if(!p->next) break; p= p->next; p->next = (UFD*)malloc(sizeof(UFD)); p=p->next; strcpy(p->filename, filename); p->protect = 2; p->length = 0; p->next = NULL; while(pa->next){//創(chuàng)建文件后加入到AFD } pa=pa->next; pa->next = (AFD*)malloc(sizeof(AFD)); pa = pa->next; strcpy(pa->filename ,filename); pa->protect = 2; pa->point = 0; pa->next = NULL; return 1;

  }

  bool _()//刪除文件命令 {

  char filename[20]; puts(

  puts(

  return 0;

  }

  bool open()//打開文件命令

  {

  char filename[20]; unsigned int protect; puts(

  } } puts(

  void close()//關閉文件命令

  {

  char filename[20]; UFD *pu = pufd->next; puts(

  int read()//讀文件命令

  {

  char filename[20]; unsigned int length; AFD *p = pafd->next;

  } puts(

  int write()//寫文件命令

  {

  }

  char filename[20]; unsigned int length; AFD *p = pafd->next; puts(

  void destroy()//釋放內存

  {

  }

  void saveUFD()//保存UFD文件

  {

  }

  void bye()//推出系統(tǒng)

  { FILE *fp; UFD *p = pufd->next; if((fp = fopen(UserUFD,

  UFD *pu = pufd->next; while(pa){ if(pa->protect == 2){ while(pu){ } saveUFD(); printUFD(); destroy(); } } if(strcmp(pa->filename, pu->filename) == 0){ } pu->length = pa->point; break; pu = pu->next; pa =pa->next;

  }

  void operate()//命令識別

  {

  while(1){ char command[20]; char name[][8] = {

  }

  } return; }else puts(

  void print()

  {

  puts(

  int main()

  {

  }

  print(); initM DF(); checkuser(); initAFD(); operate();)//命令識別 return 0;

  操作系統(tǒng)實驗報告 4

  1.實習目的

  (一).通過綜合實訓進一步鞏固、深化和擴展學生的專業(yè)技能。

  1.熟練掌握Linux操作系統(tǒng)的安裝及基本配置。

  2.熟練掌握Linux系統(tǒng)管理。

  3.掌握Linux下用戶和組的管理。

  4.掌握Linux下FTP服務器的管理。

  (二)訓練和培養(yǎng)學生獲取信息和處理信息的能力,充分培養(yǎng)和提高學生的動手能力,學會通過網站、書籍等方式收集所需的資料。

  (三)培養(yǎng)學生運用所學的知識和技能解決Linux使用、管理過程中所遇到的實際問題的能力及其基本工作素質。

  (四)培養(yǎng)學生理論聯系實際的工作作風、嚴肅認真的科學態(tài)度以及獨立工作的能力,樹立自信心。

  (五)訓練和培養(yǎng)學上的團隊協(xié)作精神與合作能力。

  2 實習概況

  2.1 實習要求

  具體來講,《linux操作系統(tǒng)》課程包括以下實習內容:

  (一)獨立完成實訓。

  (二)要求熟練掌握Linux操作系統(tǒng)的安裝與基本配置。

  (三)熟練掌握Linux系統(tǒng)管理基本方法。

  (四)掌握Linux下用戶和組的管理。

  (五)掌握Linux下的FTP服務器的管理。

  2.2 實習時間

  20XX年12月16日至20XX年12月20日

  2.3 實習基本情況

  實習地點:四教學樓 4112、4212、4312、4412

  實習環(huán)境 :RedHat9軟件

  實習內容:掌握linux操作系統(tǒng)

  2.4 硬件環(huán)境

  3 實習內容

  3.1 linux安裝 Linux是一類Unix計算機操作系統(tǒng)的統(tǒng)稱。Linux 是以Unix 操作系統(tǒng)為原型的多任務、多用戶的`系統(tǒng)?蛇\行于多種硬件平臺:PC、Alpha、SPARC、

  POWER PC。 今天實習的主要內容是學習了解Linux的安裝過程;Linux登錄和退出 ,熟悉Linux操作系統(tǒng)的圖形界面

  (一)Linux的安裝過程

  1)VMware軟件的安裝

  因為我用的是機房的電腦,所以不用安裝VMware軟件。如果要安裝,過程十分簡單,下載完畢,直接“Next”即可完成安裝。

  2)虛擬機的安裝。打開VMware軟件,單擊“新建虛擬機”命令根據提示選擇一種要安裝的操作系統(tǒng),一般選擇典型設置,然后直接按“下一步”即可。需要注意的就是在分區(qū)的時候需按要求建立合適的分區(qū),如下圖所示。

  圖3-1-1 選擇分區(qū)

  3)Red Hat Linux 9.0安裝

  首先單擊“編輯虛擬機設置”,改寫鏡像為“l(fā)inux9cd1”,然后返回初始界面。點擊“啟動該虛擬機”,便進入到軟件的安裝過程。開始是“歡迎使Red Hat Linux”界面,然后經歷語言選擇、鍵盤配置、鼠標配置、磁盤分區(qū)設置、選擇軟件包組、安裝軟件包等操作后,然后是虛擬機安裝完第一張盤后要進行第二張盤的安裝,如圖3-2經過老師的指點,按住“Ctrl+Alt”,將鼠標調出,雙擊右下方任務欄第一個按鈕,依次選擇第二、三鏡像,繼續(xù)安裝,便安裝成功了。

  操作系統(tǒng)實驗報告 5

  一、課程設計任務劃分

  二、基本原理

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

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

 。ǘ┧褂玫乃惴

  1) 最佳置換算法(OPT):將以后永不使用的或許是在最長(未來)時間內 不再被訪問的頁面換出。

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

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

  (三)設計思想

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

  OPT基本思想:

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

  FIFO基本思想:

  是用隊列存儲內存中的頁面,隊列的特點是先進先出,與該算法是一致的,所以每當發(fā)生缺頁時,就從隊頭刪除一頁,而從隊尾加入缺頁。或者借助輔助數組time[mSIZE]記錄物理塊中對應頁面的進入時間,每次需要置換時換出進入時間最小的頁面。

  LRU基本思想:

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

  三、基本思路

  實驗環(huán)境: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("請依次輸入頁面號引用串(連續(xù)輸入,無需隔開):"); for(i=0;i

  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

  (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=j) printf(" |%d|",temp[i][j]); else printf(" | |"); } for(i=mSIZE+20*k;(i

  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

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

  for(j=0;j

  for(i=mSIZE;i

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

  }

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

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

  max=time[0]

  time[max]=i; /*記錄該頁進入物理塊的時間*/ for(j=0;j

  for(j=0;j

  /*最近最久未使用置換算法*/ 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

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

  for(j=0;j

  for(i=mSIZE;i

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

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

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

  max=flag[0]

  flag[max]=i; /*記錄該頁的訪問時間*/ for(j=0;j

  for(j=0;j

  /*最佳置換算法*/ 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

  memery[i]=page[i]; for(j=0;j

  for(i=mSIZE;i

  /*判斷新頁面號是否在物理塊中*/ for(j=0,k=0;j

  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

  for(j=0;j

  四、調試及實驗結果

  第一組數據:

  1.運行結果

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

  3. 載入數據:

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

  5.運算中延遲操作:

  6.三種算法演示結果

  7.退出算法

  第二組數據:

  1.運行結果

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

  3.載入數據:

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

  5.運算中延遲操作:

  6. 三種算法演示結果

  7.退出算法

  五、個人體會

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

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

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

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

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

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

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

【操作系統(tǒng)實驗報告】相關文章:

科技實驗報告實驗報告08-10

什么是操作系統(tǒng)04-26

什么是操作系統(tǒng)04-26

什么是操作系統(tǒng)04-26

什么是操作系統(tǒng)04-26

什么是操作系統(tǒng)04-26

什么是實驗報告及實驗報告怎么寫05-04

什么是兼容操作系統(tǒng)04-26

什么是網絡操作系統(tǒng)04-26