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

正文內(nèi)容

最新基于c語(yǔ)言的小型模擬操作系統(tǒng)設(shè)計(jì)(編輯修改稿)

2025-07-19 07:39 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 功能是輸出內(nèi)存初始化下的內(nèi)存占用信息以及在系統(tǒng)執(zhí)行撤銷(xiāo)進(jìn)程函數(shù)endProcess()后輸出內(nèi)存占用情況。0123452368911......頁(yè)號(hào)塊號(hào)頁(yè)表圖341 頁(yè)表 流程圖開(kāi)始processCount 0process[id][0] 0j=process[id][0]。輸出 頁(yè)號(hào):count 塊號(hào):process[id][j]count++;printf(||\n)。printf(| 頁(yè)號(hào)| 塊號(hào)|\n)。printf(||\n)。結(jié)束j=1,count=0。j++falsetruetruefalse輸入要查看的進(jìn)程:id輸出:內(nèi)存無(wú)進(jìn)程!false圖 342 查看內(nèi)存流程圖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。)。 } if (processCount 0) { int id。 printf(請(qǐng)輸入要查看的進(jìn)程號(hào): )。 scanf(%d,amp。id)。 printf(內(nèi)存詳細(xì)使用情況如下:\n)。 if (process[id][0] 0) { printf(**************\n)。 printf(進(jìn)程號(hào): %d \n, id)。 printf(||\n)。 printf(| 頁(yè)號(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(***輸出結(jié)束***\n)。 } } else printf(當(dāng)前內(nèi)存無(wú)進(jìn)程!\n)。 putchar(39。\n39。)。} 測(cè)試結(jié)果圖 344 運(yùn)行進(jìn)程 時(shí)間片輪轉(zhuǎn)調(diào)度算法所有就緒進(jìn)程按 FCFS排成一個(gè)隊(duì)列,總是把處理機(jī)分配給隊(duì)首的進(jìn)程,各進(jìn)程占用CPU的時(shí)間片相同。即將CPU的處理時(shí)間劃分成一個(gè)個(gè)相同的時(shí)間片,就緒隊(duì)列的諸進(jìn)程輪流運(yùn)行一個(gè)時(shí)間片。當(dāng)一個(gè)時(shí)間片結(jié)束時(shí),如果運(yùn)行進(jìn)程用完它的時(shí)間片后還未完成,就強(qiáng)迫運(yùn)行機(jī)制進(jìn)程讓出CPU,就把它送回到就緒隊(duì)列的末尾,等待下一次調(diào)度。同時(shí),進(jìn)程調(diào)度又去選擇就緒隊(duì)列中的隊(duì)首進(jìn)程,分配給它一時(shí)間片,以投入運(yùn)行。直至所有的進(jìn)程運(yùn)行完畢。 算法工作安排(1) 用戶(hù)可以自行輸入進(jìn)程的數(shù)量,每一個(gè)進(jìn)程由進(jìn)程控制塊( PCB)表示,各種隊(duì)列均采用鏈表數(shù)據(jù)結(jié)構(gòu)。(2) 按照進(jìn)程輸入的先后順序排成一個(gè)隊(duì)列。再設(shè)一個(gè)隊(duì)首指針指向第一個(gè)到達(dá)進(jìn)程的首址。(3) 執(zhí)行處理機(jī)調(diào)度時(shí),開(kāi)始選擇隊(duì)首的第一個(gè)進(jìn)程運(yùn)行。另外,再設(shè)一個(gè)當(dāng)前運(yùn)行進(jìn)程的指針,指向當(dāng)前正在運(yùn)行的進(jìn)程。(4) 在規(guī)定的時(shí)間片內(nèi)進(jìn)程是根據(jù)先來(lái)先服務(wù)的方式配列的,每個(gè)進(jìn)程只運(yùn)行時(shí)間片大小的時(shí)間然后轉(zhuǎn)到下一個(gè)進(jìn)程運(yùn)行,直到所有進(jìn)程運(yùn)行完為止。 流程圖ready!= NULL開(kāi)始run=ready。 ready=readynext。tailnext =run。runstate=39。R39。調(diào)用輸出函數(shù):prt()。run != NULLruncputime=runcputime+timeSlice。runneedtime=runneedtimetimeSlice。runround+=timeSlice。runcount++。run != tailtailnext = ready。ready = NULL。runstate = 39。F39。 run = NULL。 run = NULL。ready!= NULLrun=ready。runstate=39。R39。ready=readynext。runstate = 39。W39。tail = run。run = ready。 run state = 39。R39。 ready = ready next。調(diào)用輸出函數(shù):prt()。結(jié)束runneedtime= 0runneedtime = 0。runnext = finish。 finish = run。falsetruefalsefalsetruetrue輸入時(shí)間片:timeSlice圖 353(a)進(jìn)程運(yùn)行流程圖開(kāi)始run!=NULLq=ready。q!=NULLamp。amp。q!=runqnext== runq = qnext。q=finish。q!=NULLq=qnext。結(jié)束輸出運(yùn)行隊(duì)列時(shí)間片信息輸出就緒隊(duì)列時(shí)間片信息輸出完成隊(duì)列時(shí)間片信息truefalsetruefalsetruefalse圖 353(b)prt輸出函數(shù)流程圖 主要代碼bool Roundrun(){ int timeSlice。 if(processCount1) { printf(當(dāng)前程序無(wú)進(jìn)程,請(qǐng)重新輸入!\n\n)。 return 0。 } printf( 請(qǐng)輸入時(shí)間片的大小: )。 scanf(%d,amp。timeSlice)。 printf( 時(shí)間片輪轉(zhuǎn)法輸出信息\n)。 printf(*****************************************************************************\n)。 run=ready。 ready=readynext。 tailnext =run。 runstate=39。R39。 prt()。 while(run != NULL) { runcputime = runcputime + timeSlice。 runneedtime = runneedtime timeSlice。 runround+=timeSlice。 runcount++。 if(runneedtime = 0) { runneedtime = 0。 runnext = finish。 finish = run。 if(run != tail) { tailnext = ready。 } else { ready = NULL。 } runstate = 39。F39。 run = NULL。 if(ready != NULL) { firstin()。 } } else { if(ready != NULL) { runstate = 39。W39。 tail = run。 run = ready。 run state = 39。R39。 ready = ready next。 } } prt()。 } printf(*****************************************************************************\n)。 printf( 輸出結(jié)束\n)。return true。} 測(cè)試結(jié)果圖 452 撤銷(xiāo)進(jìn)程 結(jié)束進(jìn)程控制塊當(dāng)用戶(hù)提出結(jié)束進(jìn)程命令,系統(tǒng)依次用指針?biāo)阉骶途w隊(duì)列和完成隊(duì)列,如果找到要結(jié)束的的進(jìn)程控制塊就將其刪去,這里的刪去并不是真正的從內(nèi)存中把它抹掉,而是把它從鏈表中分離出來(lái),只要撤銷(xiāo)原來(lái)的鏈接關(guān)系即可??梢栽O(shè)兩個(gè)指針變量p1和p2,先使p1指向第一個(gè)結(jié)點(diǎn)(圖 361(a) )。如果刪除的不是第一個(gè)結(jié)點(diǎn),則使p1后移指向下一個(gè)結(jié)點(diǎn)(p1next賦給p1),在此之前應(yīng)將p1的值賦給p2,使p2指向剛才檢查過(guò)的那個(gè)結(jié)點(diǎn),見(jiàn)圖 361 (b)。如此一次一次地使p1后移,直到找到所要?jiǎng)h除的結(jié)點(diǎn)或檢查完全部鏈表都找不到要?jiǎng)h除的結(jié)點(diǎn)為止。如果找到某一節(jié)點(diǎn)是要?jiǎng)h除的節(jié)點(diǎn),還要區(qū)分兩種情況: (1)要?jiǎng)h除的是第一個(gè)結(jié)點(diǎn)(p1的值等于ready的值,如圖361(a) 那樣),則應(yīng)將p1next賦給ready,見(jiàn)圖361 (c)。這時(shí)ready指向原來(lái)的第二個(gè)結(jié)點(diǎn)。第一個(gè)結(jié)點(diǎn)雖然仍存在,但它已與鏈表脫離。(2) 如果要?jiǎng)h除的不是第一個(gè)結(jié)點(diǎn),則將p1next賦給p2next,見(jiàn)圖361 (d)。123readyp1(a)NULL123readyp2p1NULL(b)123NULL(c)readyp1123NULL(d)readyp1p2圖 351 回收內(nèi)存數(shù)組在模擬回收內(nèi)存的算法中主要采用的是數(shù)組形式和一些計(jì)數(shù)的變量,所以在回收內(nèi)存數(shù)組中并沒(méi)有真正的回收內(nèi)存,而是通過(guò)改變其中的變量模擬回收的過(guò)程。首先找到要回收的內(nèi)存數(shù)組的進(jìn)程號(hào),并用process[ID][0]記錄所要回收的頁(yè)面數(shù)。然后清除process[ID][]這一行的內(nèi)容,同時(shí)置內(nèi)存標(biāo)志數(shù)組block[N]為0表示釋放。最后進(jìn)程計(jì)數(shù)器processCount減1,相應(yīng)的把剩余塊計(jì)數(shù)器blockCount加
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1