freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

最新基于c語言的小型模擬操作系統(tǒng)設(shè)計(jì)(已改無錯(cuò)字)

2023-07-23 07:39:02 本頁面
  

【正文】 上回收的頁面數(shù)。 流程圖開始輸入結(jié)束進(jìn)程號(hào):IDp1=ready||finishID!=p1pidamp。amp。p1next!=NULLp2=p1。 p1=p1next。 p1=p1next。ID==p1pidp1==readyp1==finishready=p1next。finish=p1next。p2next=p1next。輸出:已經(jīng)刪除進(jìn)程結(jié)束輸出:結(jié)束進(jìn)程不存在falsefalsetruetruefalsefalsetruefalsetrue圖 363 撤銷進(jìn)程流程圖 主要代碼bool endProcess(){ int ID, pages。 if (processCount 1) { printf(當(dāng)前內(nèi)存沒有進(jìn)程!\n\n)。 return false。 } printf(當(dāng)前內(nèi)存中的進(jìn)程有 %d 個(gè), 進(jìn)程號(hào)為:, processCount)。 for (int i=0。 iN。 i++) if (process[i][0] 0) printf(%2d , i)。 putchar(39。\n39。)。 printf(請(qǐng)輸入您要結(jié)束的進(jìn)程號(hào)(小于%d):, N)。 scanf(%d, amp。ID)。 PCB *p1,*p2。 if(p1=ready) { while(ID!=p1pidamp。amp。p1next!=NULL) { p2=p1。 p1=p1next。 } if(ID==p1pid) { if(p1==ready) ready=p1next。 else p2next=p1next。 printf(已刪除進(jìn)程%d \n,ID)。 } else printf(對(duì)不起!您所要結(jié)束的進(jìn)程%d不存在,請(qǐng)重新輸入\n\n,ID)。 } else if(p1=finish) { while(ID!=p1pidamp。amp。p1next!=NULL) { p2=p1。 p1=p1next。 } if(ID==p1pid) { if(p1==finish) ready=p1next。 else p2next=p1next。 printf(已刪除進(jìn)程%d \n,ID)。 } else printf(對(duì)不起!您所要結(jié)束的進(jìn)程%d不存在,請(qǐng)重新輸入\n\n,ID)。 } else printf(對(duì)不起!您所要結(jié)束的進(jìn)程%d不存在,請(qǐng)重新輸入\n\n,ID)。 pages = process[ID][0]。 for (int j=1。 jpages。 j++) { block[process[ID][j]] = 0。 process[ID][j] =1。 } process[ID][0] = 0。 processCount。 blockCount+= pages。 return true。} 測(cè)試結(jié)果圖 3654 問題與總結(jié)在模擬進(jìn)程管理和存儲(chǔ)管理的模擬操作系統(tǒng)設(shè)計(jì)中,處于核心的問題是如何實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度算法和基本分頁存儲(chǔ)算法。其中最難的是模擬時(shí)間片輪轉(zhuǎn)算法的執(zhí)行過程和控制流程,經(jīng)過閱讀相關(guān)代碼和C語言的學(xué)習(xí)解決了這一問題。基本分頁的思想是比較簡(jiǎn)單的,而且應(yīng)用了一種可行的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)程序中需要用到的數(shù)據(jù),因此這個(gè)實(shí)驗(yàn)在構(gòu)思上是沒有多少難度的。由于程序中主要使用的是數(shù)組,操作起來比較方便,不像前時(shí)間片輪轉(zhuǎn)算法需要用到大量的鏈表操作。在這次設(shè)計(jì)中,主要遇到了以下一些問題:(1) 內(nèi)存使用情況應(yīng)該以哪種形式輸出以及輸出哪些信息。最終選擇了盡可能詳細(xì)地輸出有用信息,通過空格、空行、對(duì)齊等手段盡力使輸出格式簡(jiǎn)潔美觀。比如,在輸出每個(gè)進(jìn)程的內(nèi)存使用情況時(shí),首先輸出該進(jìn)程占用的總內(nèi)存,然后以統(tǒng)一的對(duì)齊方式依次輸出各個(gè)內(nèi)存塊編號(hào)。當(dāng)然,對(duì)于不同的模塊輸出的信息也應(yīng)該不一樣,比如,內(nèi)存初始化結(jié)束后應(yīng)該輸出哪個(gè)內(nèi)存塊被占用了,否則無法判斷后續(xù)的內(nèi)存分配是否正確,但在以后查看內(nèi)存使用情況時(shí)則不必把所有已占用的內(nèi)存塊輸出,因?yàn)槊總€(gè)進(jìn)程都會(huì)單獨(dú)把自己占用的內(nèi)存塊顯示出來。為了達(dá)到這種效果,使用了一個(gè)全局變量作為判斷依據(jù),詳細(xì)情況見附錄中代碼。(2)程序的容錯(cuò)性。這是一個(gè)容易被忽略的問題。這個(gè)程序起初基本沒考慮這個(gè)問題,但在后來的調(diào)試過程中,逐漸加上了一些基本的容錯(cuò)功能,比如用戶在結(jié)束某進(jìn)程時(shí),其輸入的進(jìn)程號(hào)可能根本不存在,這時(shí)應(yīng)該給出用戶出錯(cuò)提示,并要求用戶重新輸入,但這里用了一個(gè)編程中不太推薦的方式:goto 語句。 總體而言,這次設(shè)計(jì)還是比較順利的,沒有遇到什么特別難解決的問題。通過自己編程模擬內(nèi)存分配,我不僅加深了對(duì)進(jìn)程調(diào)度和這類內(nèi)存管理方式的理解,也增強(qiáng)了C語言的編程能力。 附錄全局變量代碼:include include includeincludedefine N 100 // 共有100個(gè)內(nèi)存塊int process[N][N+1]。 // 存放每個(gè)進(jìn)程的頁表int block[N]。 // 內(nèi)存塊狀態(tài)標(biāo)志數(shù)組,0:空閑,1:使用int blockCount。 // 記錄當(dāng)前內(nèi)存剩余空間int processCount。 // 記錄當(dāng)前進(jìn)程數(shù)bool flag = true。int M。typedef struct node{ int pid。 int round。 int needtime。 int cputime。 int count。 int state。 struct node *next。}PCB。PCB *finish,*ready,*tail,*run。//void init()。void output()。//bool createProcess()。//bool endProcess()。初始化模塊代碼:void init(){ int i, j。 // 初始化內(nèi)存狀態(tài)標(biāo)志數(shù)組 for (i=0。 iN。 i++) block[i] = 0。 for (i=0。 i80。 i++) block[rand()%(N1)] = 1。 blockCount = 0。 for (i=0。 iN。 i++) if (block[i] == 0) blockCount++。 // 初始化存放進(jìn)程的數(shù)組 for (i=0。 iN。 i++){ process[i][0] = 0。 for (j=1。 jN。 j++) process[i][j] = 1。 } processCount = 0。 printf(初始化結(jié)果如下:)。 output()。 flag = false。}輸出模塊代碼:void output(){ printf(\n內(nèi)存總量:%d 塊, 已用空間:%d 塊, 剩余空間:%d 塊, 進(jìn)程總數(shù):%d 個(gè)\n, N, NblockCount, blockCount, processCount)。 if (flag amp。amp。 blockCount N) { printf(已使用的內(nèi)存塊(%d):\n, NblockCount)。 for (int k=0,count=0。 kN。 k++) { if (block[k] == 1) printf(%2d , k, ++count)。 if (count == 10) { putchar(39。\n39。)。 count = 0。 } } putchar(39。\n39。)。 } // 輸出各進(jìn)程占用內(nèi)存詳細(xì)情況 if (processCount 0) { int id。 printf(請(qǐng)輸入要查看的進(jìn)程號(hào): )。 scanf(%d,amp。id)。 //if(id==ID) //break。 printf(內(nèi)存詳細(xì)使用情況如下:\n)。 // for (int i=0。 iN。 i++) //{ if (process[id][0] 0) { printf(**************\n)。 printf(進(jìn)程號(hào): %d \n, id)。 printf(||\n)。 printf(| 頁號(hào)| 塊號(hào)|\n)。 printf(||\n)。 for (int j=1,count=0。 j=process[id][0]。 j++) { printf(| %2d | %2d |\n,count,process[id][j],count++)。 printf(||\n)。 //printf(%2d , process[i][j], count++)。 /*if (count == 15) { putchar(39。\n39。)。 printf( )。 count = 0。 }*/ } printf(***輸出結(jié)束***\n)。 // putchar(39。\n39。)。 } // } } else printf(當(dāng)前內(nèi)存無進(jìn)程!\n)。 putchar(39。\n39。)。}void firstin(){ run=ready。 runstate=39。R39。 ready=readynext。}void prt1(PCB *q){ printf(* %10d %10d %10d %10d %10d %10c*\n, qpid,qcputime,qneedtime,qcount,qround,qstate)。}void prt(){ PCB *q。 printf(* 進(jìn)程號(hào) cpu時(shí)間 所需時(shí)間 記數(shù) 時(shí)間片 狀態(tài) *\n)。 if(run!=NULL) prt1(run)。 q=ready。 while(q!=NULLamp。amp。q!=run) { prt1(q)
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1