中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

操作系統(tǒng)實(shí)驗(yàn)報(bào)告

時(shí)間:2023-06-14 15:20:56 工作報(bào)告 我要投稿
  • 相關(guān)推薦

操作系統(tǒng)實(shí)驗(yàn)報(bào)告(通用5篇)

  在生活中,大家逐漸認(rèn)識(shí)到報(bào)告的重要性,我們?cè)趯?xiě)報(bào)告的時(shí)候要注意語(yǔ)言要準(zhǔn)確、簡(jiǎn)潔。其實(shí)寫(xiě)報(bào)告并沒(méi)有想象中那么難,以下是小編精心整理的操作系統(tǒng)實(shí)驗(yàn)報(bào)告,僅供參考,希望能夠幫助到大家。

操作系統(tǒng)實(shí)驗(yàn)報(bào)告(通用5篇)

  操作系統(tǒng)實(shí)驗(yàn)報(bào)告 1

  一、實(shí)驗(yàn)?zāi)康?/p>

  用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)進(jìn)程調(diào)度程序,以加深對(duì)進(jìn)程的概念及進(jìn)程調(diào)度算法的理解。

  二、實(shí)驗(yàn)內(nèi)容和要求

  編寫(xiě)并調(diào)試一個(gè)模擬的進(jìn)程調(diào)度程序,采用“簡(jiǎn)單時(shí)間片輪轉(zhuǎn)法”調(diào)度算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度。

  每個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊( PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、到達(dá)時(shí)間、需要運(yùn)行時(shí)間、已運(yùn)行時(shí)間、進(jìn)程狀態(tài)等等。

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

  就緒進(jìn)程獲得 CPU后都只能運(yùn)行一個(gè)時(shí)間片。用運(yùn)行時(shí)間加1來(lái)表示。

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

  重復(fù)以上過(guò)程,直到所要進(jìn)程都完成為止。

  三、實(shí)驗(yàn)主要儀器設(shè)備和材料

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

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

  四、實(shí)驗(yàn)原理及設(shè)計(jì)方案

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

  2、實(shí)驗(yàn)步驟:

 。1)按先來(lái)先服務(wù)算法將進(jìn)程排成就緒隊(duì)列。

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

 。3)檢查該運(yùn)行進(jìn)程是否運(yùn)行完畢,若運(yùn)行完畢,則撤消進(jìn)程,否則,將該進(jìn)程插入到下一個(gè)邏輯隊(duì)列的隊(duì)尾。

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

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

  五、流程圖

  六、結(jié)果過(guò)程及截圖 初始化隊(duì)列

  按Y鍵繼續(xù)運(yùn)行進(jìn)程:

  按Y鍵繼續(xù)運(yùn)行進(jìn)程:

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

  添加新的進(jìn)程:

  七、所遇困難的解決以及心得體會(huì)

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

  七、思考題

  1、 分析不同調(diào)度算法的調(diào)度策略,比較不同調(diào)度算法的優(yōu)缺點(diǎn),總結(jié)它們的適用范圍。

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

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

  八、源代碼

  #include #include

  #include

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

  #define TIME 2//時(shí)間片長(zhǎng)度

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

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

  //進(jìn)程所在的隊(duì)列

  //進(jìn)程需要運(yùn)行的時(shí)間

  //進(jìn)程已經(jīng)運(yùn)行的時(shí)間

  //進(jìn)程在本隊(duì)列可運(yùn)行的時(shí)間片

  struct pcb *link;

  }PCB;

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

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

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

  //就緒隊(duì)列,進(jìn)程插入

  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īng)顟B(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 ()//插入進(jìn)程 {

  if(!ready ){

  ready = p;

  pfend = p; p = p;

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

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

  }

  void input()/*建立進(jìn)程控制塊函數(shù)*/ {

  int i,num;

  printf(

  for(i=0; i

  p=getpch(PCB);

  printf(

  printf(

  p->queue =1;

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

  ();/*調(diào)用函數(shù)*/ } else{ p->link = ready; ready = p; }

  findpos();

  }

  void disp(PCB *pr)/*建立進(jìn)程現(xiàn)實(shí)函數(shù),用于顯示當(dāng)前進(jìn)程*/ {

  printf(

  }

  void check()/*建立進(jìn)程查看函數(shù)*/

  {

  }

  void sort()//調(diào)整進(jìn)程隊(duì)列

  {

  } 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()//添加新的進(jìn)程

  {

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

  }

  }

  void destroy()/*建立進(jìn)程撤銷(xiāo)函數(shù)(進(jìn)程運(yùn)行結(jié)束,撤銷(xiāo)進(jìn)程)*/

  {

  }

  void running()/*建立進(jìn)程就緒函數(shù)(進(jìn)程運(yùn)行時(shí)間到,置就緒狀態(tài))*/

  {

  }

  void main()

  {

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

  }

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

  操作系統(tǒng)實(shí)驗(yàn)報(bào)告 2

  一、實(shí)驗(yàn)?zāi)康?/strong>

  本實(shí)驗(yàn)要求學(xué)生模擬作業(yè)調(diào)度的實(shí)現(xiàn),用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)或多個(gè)作業(yè)調(diào)度的模擬程序,了解作業(yè)調(diào)度在操作系統(tǒng)中的作用,以加深對(duì)作業(yè)調(diào)度算法的理解。

  二、實(shí)驗(yàn)內(nèi)容和要求

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

  作業(yè)調(diào)度算法:采用基于先來(lái)先服務(wù)的調(diào)度算法。可以參考課本中的方法進(jìn)行設(shè)計(jì)。 對(duì)于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數(shù)量、調(diào)度作業(yè)時(shí)必須考慮到每個(gè)作業(yè)的資源要求。

  三、實(shí)驗(yàn)主要儀器設(shè)備和材料

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

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

  四、實(shí)驗(yàn)原理及設(shè)計(jì)方案

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

  采用先來(lái)先服務(wù)算法算法模擬設(shè)計(jì)作業(yè)調(diào)度程序。

  (1)、作業(yè)調(diào)度程序負(fù)責(zé)從輸入井選擇若干個(gè)作業(yè)進(jìn)入主存,為它們分配必要的資源,當(dāng)它們能夠被進(jìn)程調(diào)度選中時(shí),就可占用處理器運(yùn)行。作業(yè)調(diào)度選擇一個(gè)作業(yè)的必要條件是系統(tǒng)中現(xiàn)有的尚未分配的資源可滿(mǎn)足該作業(yè)的資源要求。但有時(shí)系統(tǒng)中現(xiàn)有的尚未分配的資源既可滿(mǎn)足某個(gè)作業(yè)的要求也可滿(mǎn)足其它一些作業(yè)的'要求,那么,作業(yè)調(diào)度必須按一定的算法在這些作業(yè)中作出選擇。先來(lái)先服務(wù)算法是按照作業(yè)進(jìn)入輸入井的先后次序來(lái)挑選作業(yè),先進(jìn)入輸入井的作業(yè)優(yōu)先被挑選,當(dāng)系統(tǒng)中現(xiàn)有的尚未分配的資源不能滿(mǎn)足先進(jìn)入輸入井的作業(yè)時(shí),那么順序挑選后面的作業(yè)。

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

 。3)流程圖:

  五、結(jié)果過(guò)程及截圖

  讀取文件jobs.txt來(lái)初始化主存,磁帶機(jī)的個(gè)數(shù),并打印出來(lái)。

  初始時(shí)間是9:00:

  按Y運(yùn)行5分鐘:

  按Y運(yùn)行5分鐘:

  按Y運(yùn)行5分鐘:

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

  六、所遇困難的解決以及心得體會(huì)

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

  七、思考題

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

  答:先來(lái)先服務(wù)算法是根據(jù)作業(yè)的進(jìn)入時(shí)間來(lái)排序,到達(dá)時(shí)間短的先運(yùn)行,優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是運(yùn)行時(shí)間慢。

  短作業(yè)優(yōu)先算法是根椐作業(yè)的估計(jì)運(yùn)行時(shí)間來(lái)排序,估計(jì)運(yùn)行時(shí)間短的先運(yùn)行,優(yōu)點(diǎn)是運(yùn)行時(shí)間快,缺點(diǎn)是實(shí)現(xiàn)起來(lái)比較復(fù)雜。

  2、 選擇調(diào)度算法的依據(jù)是什么?

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

  如果作業(yè)要求的速度高,作業(yè)流程復(fù)雜,那就最好用短作業(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];//用戶(hù)名

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

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

  RESOURCE source = {100,5};

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

  char nowtime[5];//現(xiàn)在時(shí)間,初始時(shí)間為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)//在文件中找到一個(gè)字符的位置(讀取文件時(shí)用) {

  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()//釋放鏈表所占的內(nèi)存

  {

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

  }

  }

  float stof(char *time)//把時(shí)間轉(zhuǎn)化為浮點(diǎn)型數(shù)

  {

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