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

正文內(nèi)容

最新基于c語言的小型模擬操作系統(tǒng)設(shè)計-在線瀏覽

2024-08-02 07:39本頁面
  

【正文】 習(xí)起到了很好的鋪墊。介紹課題的背景、設(shè)計目標和意義。介紹進程管理存儲管理的設(shè)計要求以及總設(shè)計框架。介紹各個代碼塊的詳細設(shè)計流程??偨Y(jié)自己設(shè)計過程以及設(shè)計中遇到的主要問題及解決方法。如圖21運行運行完進入時間片用完進程調(diào)度釋放就緒完成圖21 進程基于時間片輪轉(zhuǎn)算法的基本狀態(tài) 進程控制塊進程控制塊PCB(Process Control Block)是進程最重要的數(shù)據(jù)結(jié)構(gòu),它用于描述和控制進程,是進程存在的唯一標識。本系統(tǒng)采用鏈式方式來組織進程控制塊。 進程創(chuàng)建一旦操作系統(tǒng)接收到用戶輸入的創(chuàng)建命令,便調(diào)用進程創(chuàng)建函數(shù)按下列方式為用戶創(chuàng)建一個新進程。(2) 為進程分配內(nèi)存。(4) 將PCB插入到就緒隊列,等待調(diào)度。進程調(diào)度函數(shù)主要完成下列工作:(1) 從就緒隊列中選擇隊首進程插入到運行隊列。(3) 假如進程運行完便插入到完成隊列,從就緒隊列取下一進程到運行隊列。進程撤銷函數(shù)主要完成下列工作:(1) 將進程控制塊PCB移出隊列。(3) 將撤銷信息顯示在屏幕上。所以有必要對內(nèi)存進行分塊和初始化。內(nèi)存分配主要完成下列工作:(1) 初始化內(nèi)存數(shù)組,將其分割成一組不連續(xù)的塊。(3) 將分配的頁號和塊號顯示在屏幕上。(1) 回收的PCB在就緒隊列。 總體設(shè)計要求本系統(tǒng)包括如下代碼塊:(1) 主函數(shù)模塊。(2) 初始化代碼塊。(3) 菜單代碼塊。(4) 創(chuàng)建進程代碼塊。(5) 查看內(nèi)存代碼塊。(6) 運行進程代碼塊。(7) 結(jié)束進程代碼塊。函數(shù)之間的調(diào)用的關(guān)系如圖23所示。 // 存放每個進程的頁表int block[N]。 // 記錄當前內(nèi)存剩余空間int processCount。int M。 int round。 int cputime。 int state。}PCB。 內(nèi)存初始化 內(nèi)存定義定義內(nèi)存塊共有N個,初始化后的內(nèi)存空間應(yīng)該有一部分已經(jīng)被使用,這可以用系統(tǒng)提供的隨機數(shù)函數(shù)rand()完成。采用二維數(shù)組321來模擬進程使用內(nèi)存塊情況。012N10 1 2 N1 N...進程號進程塊數(shù)塊占用標志圖 321 內(nèi)存二維數(shù)組示意圖 主要代碼void init(){ int i, j。 iN。 for (i=0。 i++) block[rand()%(N1)] = 1。 for (i=0。 i++) if (block[i] == 0) blockCount++。 iN。 for (j=1。 j++) process[i][j] = 1。 printf(初始化結(jié)果如下:)。 flag = false。進程控制塊包含如下信息:進程名、輪數(shù)、需要運行時間、已用CPU時間、進程狀態(tài)、指針。 int round。 int cputime。 int state。}PCB。圖332把具有統(tǒng)一狀態(tài)的PCB用鏈接字鏈接成一個隊列。PCB *finish,*ready,*tail,*run。ready!=NULLtailnext =q。pnext=ready。 tail=ready。pcputime=0。 pstate=39。 pround =0。blockCount = pages。i=1i=pagesprocess[na][i] = k。k++。falsetrueetruefalsej++。 int pages, k = 0。 int time。 ready=NULL。 run=NULL。 scanf(%d,amp。 int a[N]。jM。 scanf(%d%d%d, amp。time,amp。 a[j]=na。kj。 goto loop。 goto loop。 return false。 process[na][0] = pages。 i=pages。amp。 process[na][i] = k。 k++。 //strcpy(ppid,pid)。 pcputime=0。 pstate=39。 pround =0。 if(ready!=NULL) insert(p)。 ready=p。 } processCount++。 } return true。為此,系統(tǒng)又為每個進程建立了一張頁面映像表,簡稱頁表。在配置了頁表后,進程執(zhí)行時通過查找頁表,即可找到每頁在內(nèi)存中的物理塊號。0123452368911......頁號塊號頁表圖341 頁表 流程圖開始processCount 0process[id][0] 0j=process[id][0]。printf(| 頁號| 塊號|\n)。結(jié)束j=1,count=0。 if (flag amp。 blockCount N) { printf(已使用的內(nèi)存塊(%d):\n, NblockCount)。 kN。 if (count == 10) { putchar(39。)。 } } putchar(39。)。 printf(請輸入要查看的進程號: )。id)。 if (process[id][0] 0) { printf(**************\n)。 printf(||\n)。 printf(||\n)。 j=process[id][0]。 printf(||\n)。 } } else printf(當前內(nèi)存無進程!\n)。\n39。} 測試結(jié)果圖 344 運行進程 時間片輪轉(zhuǎn)調(diào)度算法所有就緒進程按 FCFS排成一個隊列,總是把處理機分配給隊首的進程,各進程占用CPU的時間片相同。當一個時間片結(jié)束時,如果運行進程用完它的時間片后還未完成,就強迫運行機制進程讓出CPU,就把它送回到就緒隊列的末尾,等待下一次調(diào)度。直至所有的進程運行完畢。(2) 按照進程輸入的先后順序排成一個隊列。(3) 執(zhí)行處理機調(diào)度時,開始選擇隊首的第一個進程運行。(4) 在規(guī)定的時間片內(nèi)進程是根據(jù)先來先服務(wù)的方式配列的,每個進程只運行時間片大小的時間然后轉(zhuǎn)到下一個進程運行,直到所有進程運行完為止。 ready=readynext。runstate=39。調(diào)用輸出函數(shù):prt()。runneedtime=runneedtimetimeSlice。runcount++。ready = NULL。F39。 run = NULL。runstate=39。ready=readynext。W39。run = ready。R39。調(diào)用輸出函數(shù):prt()。runnext = finish。falsetruefalsefalsetruetrue輸入時間片:timeSlice圖 353(a)進程運行流程圖開始run!=NULLq=ready。amp。q=finish。結(jié)束輸出運行隊列時間片信息輸出就緒隊列時間片信息輸出完成隊列時間片信息truefalsetruefalsetruefalse圖 353(b)prt輸出函數(shù)流程圖 主要代碼bool Roundrun(){ int timeSlice。 return 0。 scanf(%d,amp。 printf( 時間片輪轉(zhuǎn)法輸出信息\n)。 run=ready。 tailnext =run。R39。 while(run != NULL) { runcputime = runcputime + timeSlice。 runround+=timeSlice。 if(runneedtime = 0) { runneedtime = 0。 finish = run。 } else { ready = NULL。F39。 if(ready != NULL) { firstin()。W39。 run = ready。R39。 } } prt()。 printf( 輸出結(jié)束\n)。} 測試結(jié)果圖 452 撤銷進程 結(jié)束進程控制塊當用戶提出結(jié)束進程命令,系統(tǒng)依次用指針搜索就緒隊列和完成隊列,如果找到要結(jié)束的的進程控制塊就將其刪去,這里的刪去并不是真正的從內(nèi)存中把它抹掉,而是把它從鏈表中分離出來,只要撤銷原來的鏈接關(guān)系即可。如果刪除的不是第一個結(jié)點,則使p1后移指向下一個結(jié)點(p1next賦給p1),在此之前應(yīng)將p1的值賦給p2,使p2指向剛才檢查過的那個結(jié)點,見圖 361 (b)。如果找到某一節(jié)點是要刪除的節(jié)點,還要區(qū)分兩種情況: (1)要刪除的是第一個結(jié)點(p1的值等于ready的值,如圖361(a) 那樣),則應(yīng)將p1next賦給ready,見圖361 (c)。第一個結(jié)點雖然仍存在,但它已與鏈表脫離。123readyp1(a)NULL123readyp2p1NULL(b)123NULL(c)readyp1123NULL(d)readyp1p2圖 351 回收內(nèi)存數(shù)組在模擬回收內(nèi)存的算法中主要采用的是數(shù)組形式和一些計數(shù)的變量,所以在回收內(nèi)存數(shù)組中并沒有真正的回收內(nèi)存,而是通過改變其中的變量模擬回收的過程。然后清除process[ID][]這一行的內(nèi)容,同時置內(nèi)存標志數(shù)組block[N]為0表示釋放。 流程圖開始輸入結(jié)束進程號:IDp1=ready||finishID!=p1pidamp。p1next!=NULLp2=p1。 p1=p1next。finish=p1next。輸出:已經(jīng)刪除進程結(jié)束
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1