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

正文內(nèi)容

操作系統(tǒng)課程設計實驗報告-可變分區(qū)存儲管理和多級隊列調(diào)度算法模擬實現(xiàn)-wenkub

2022-11-23 16:43:10 本頁面
 

【正文】 tnext = NULL。 //初始化新加入的已分配分區(qū)結(jié)點 tjid = tmpid。 //用于標記新作業(yè)是否能被分配, 0 為不能 for (fNode * i = fl。 } doFitAlgorithm()。 if (jl == NULL) //將新作業(yè)加入作業(yè)鏈表中 { //若 jl 鏈為空,則 直接將 jl 指向該結(jié)點 jl = job。 jobsize = size。 count++。 printf(請輸入要加入的作業(yè)的編號(整型): )。 tsize = tmpSize。 //將剩余鏈中找到的分區(qū)交換到剩余鏈的最前端 tmpSize = isize。 } break。 } break。 i = inext) { t = i。 int tmpStartAddress = 0。 printf(請輸入序號: )。 printf( 2最壞適應算法 \n)。 fl = tmp。 tmpstartAddress = 0。 printf(\n 請設置用戶區(qū)的大?。ㄕ停?)。 jl = NULL。對空閑塊的排序思路可以使用冒泡排序算法的思想??梢园堰@些內(nèi)容以記錄式文件的形式保存到磁盤上,也可以把他們存放在二維數(shù)組中。 三、各功能模塊分析實現(xiàn) 需要設計合理的數(shù)據(jù)結(jié)構(gòu)來描述存儲空間,包括:被程序占用的存儲空間、空閑的存儲空間、多個程序的組織。 ? 實現(xiàn)分區(qū)存儲管理的內(nèi)存分配功能,要求選擇至少兩種適應算法(如首次適應算法,最佳適應算法,最后適應算法,最壞適應算法)。 ? 實現(xiàn)分區(qū)存儲管理的內(nèi)存回收算法:要求能夠正確處理回收分區(qū)與空閑分區(qū)的四種鄰接關(guān)系。通常用鏈表把這些同種類型的存儲空間連接起來,使用結(jié)構(gòu)體來描述每個存儲空間的屬性信息。若保存在文件中,則可以多次使用,如保存在數(shù)組中只能使用一次。 4 記錄和顯示內(nèi)存被 程序占用的情況 5 記錄和顯示內(nèi)存中空閑塊的情況 6 回收存儲空間:程序運行完畢后,要及時回收內(nèi)存空間。 userMemory = 0。 cin userMemory。 tmpsize = userMemory。 } void setFitAlgorithm() //設置適應算法 { fitAlgorithm = 0。 printf( 3首次適 應算法 \n)。 cin fitAlgorithm。 int tmpSize = 0。 for (fNode * j = inext。 } case 2: { if (jsize tsize) //最壞適應算法,找到鏈表中分區(qū)大小最大的分區(qū) { t = j。 } case 4: { if (jstartAddress tstartAddress) //最后適應算法,找到鏈表中分區(qū)起始地址最大的分區(qū) { t = j。 istartAddress = tstartAddress。 } } void addJob() //添加作業(yè) { int num = 0。 cin num。 jNode * job = (jNode *)malloc(sizeof(jNode))。 jobstatus = 0。 } else { //若 jl 不為空,則將該結(jié)點插入 jl 鏈的前端 jobnext = jl。 //在進行內(nèi)存分配之前需執(zhí)行適應算法 if (allocateMemory(job) == 0) //開始內(nèi)存分配 { printf(\n 沒有足夠的內(nèi)存空間分配給該作業(yè)?。?! \n)。 i != NULL。 tsize = tmpsize。 if (al == NULL) //將已分配的分區(qū)接入已分配分區(qū)鏈表中 { //若 al 鏈為空,則直接將 al 指向該結(jié)點 al = t。 } if (isize tmpsize) { //若該分區(qū)大小大于作業(yè)大小,則將剩余大小重新賦給該分區(qū) istartAddress = istartAddress + tmpsize。 } else { ilastnext = inext。 break。 //用于標記該 ID 是否存在, 0 為不存在 int id = 0。 i != NULL。 } } if (flag == 0) { printf(\n 該 ID 不存在?。?! \n)。 jobnextlast = joblast。 } } void deallocateMemory(int jid) //內(nèi)存回收 { aNode * a = (aNode *)malloc(sizeof(aNode))。 i != NULL。 endAddress = startAddress + asize 1。 anextlast = alast。 fNode * ns = NULL。 tlast = NULL。 i = inext) { if ((endAddress + 1) == istartAddress) { //查找與其結(jié)束地址后相鄰的空閑分區(qū) ns = i。 (ns == NULL)) { //沒有相鄰的空閑分區(qū)可以合并,則單獨作為一個分區(qū)插入空閑分區(qū)鏈表 if (fl == NULL) { fl = t。 } } if ((ls != NULL) amp。amp。amp。 nsnextlast = nslast。 //記錄已分配空間的總大小 for (aNode * i = al。 } if (fl != NULL) //fl 不為空表示還存在空閑空間,否則不存在空閑空間 { flnext = NULL。 } void reload()//重新裝入作業(yè)鏈中未裝入內(nèi)存的作業(yè) { for (jNode * i = jl。 } else { istatus = 1。 printf( 分區(qū)起始地址 分區(qū)大小 \n)。 printf( )。 printf(\n)。 for (aNode * i = al。 printf(|%10d, isize)。 } printf(\n)。 printf( 作業(yè) ID 作業(yè)編號 作業(yè)大小 作業(yè)狀態(tài) \n)。 printf( )。 printf( )。 } printf(\n)。 printf( 主界面\n)。 printf( 4顯示當前空閑分區(qū)鏈的信息 \n)。 printf( 8重新裝入未裝入內(nèi)存的作業(yè) \n)。 printf(\n)。 在這次操作系統(tǒng)的課程設計我使用了 C 語言編寫系統(tǒng)軟件,對 OS 中可變分區(qū)存儲管理有了更深刻的理解。在教案中提供了雙向鏈表的實現(xiàn)方法,但是感覺對于性能提升影響不大,但是對于編程復雜度提高較多,實際做下來感覺這個方法比較雞肋??偠灾?,究其原因還是自己平時沒學牢固 。 ? 由于只是模擬實現(xiàn),調(diào)度的對象 — 進程實際上并不包括程序和數(shù)據(jù),而僅僅包括一個 PCB 數(shù)據(jù)結(jié)構(gòu),用 PCB 來代表一個進程,調(diào)度算法調(diào)度的對象只包括進程的 PCB在運行指針和就緒隊列之間進行移動來實現(xiàn)?,F(xiàn)代操作系統(tǒng)廣泛采用多道程序設計的技術(shù)來提高系統(tǒng)吞吐量,提高程序的并發(fā)度和資源利用率。該算法實際上綜合了兩種調(diào)度算法:隊列內(nèi)部是 FCFS,隊列之間是優(yōu)先調(diào)度。 操作系統(tǒng) 課程設計報告 3 初始化 輸入 a ; a=2 N 創(chuàng)建進程 Y a=2? N 撤消進程 a=3? N 阻塞進程 Y Y a=4? 喚醒進程 N Y a=0? 退出系統(tǒng) Y
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1