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

正文內(nèi)容

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

2024-11-28 16:43 本頁面
 

【正文】 操作系統(tǒng)課程設(shè)計(jì)報告 姓 名: 學(xué) 號: 班 級: 院 系: 日 期 : 指導(dǎo) 教師: 實(shí)驗(yàn) 一:可變分區(qū)存儲管理 一、實(shí)驗(yàn)要求 ? 設(shè)計(jì)合理的數(shù)據(jù)結(jié)構(gòu)來描述存儲空間:對于未分配出去的部分,可以用空閑分區(qū)隊(duì)列來描述,對于已經(jīng)分配出去的部分,由裝入內(nèi)存的作業(yè)占據(jù),可以將作業(yè)組織成鏈表或數(shù)組。 ? 實(shí)現(xiàn)分區(qū)存儲管理的內(nèi)存分配功能,要求選擇至少兩種適應(yīng)算法(如首次適應(yīng)算法,最佳適應(yīng)算法,最后適應(yīng)算法,最壞適應(yīng)算法)。 ? 實(shí)現(xiàn)分區(qū)存儲管理的內(nèi)存回收算法:要求能夠正確處理回收分區(qū)與空閑分區(qū)的四種鄰接關(guān)系。 ? 當(dāng)碎片產(chǎn)生時,能夠進(jìn)行碎片的拼接。 二、設(shè)計(jì)目的 在掌握了計(jì)算機(jī)可變分區(qū)存儲管理方式的原理的基礎(chǔ)上,利用 C 語言在windows 操作系統(tǒng)下 模擬實(shí)現(xiàn)操作系統(tǒng)的可變分區(qū)存儲管理的功能,以便加深對可變分區(qū)存儲管理原理的理解,提高根據(jù)已有原理通過編程解決操作系統(tǒng)實(shí)際問題的能力 ,另一方面提高根據(jù)已有原理通過編程解決實(shí)際問題的能力,為進(jìn)行系統(tǒng)軟件開發(fā)和針對實(shí)際問題提出高效的軟件解決方案打下基礎(chǔ)。 三、各功能模塊分析實(shí)現(xiàn) 需要設(shè)計(jì)合理的數(shù)據(jù)結(jié)構(gòu)來描述存儲空間,包括:被程序占用的存儲空間、空閑的存儲空間、多個程序的組織。通常用鏈表把這些同種類型的存儲空間連接起來,使用結(jié)構(gòu)體來描述每個存儲空間的屬性信息。 根據(jù)可變分區(qū)存儲管理的基本原理,程序的實(shí)現(xiàn)主要包括以下幾 個部分: 1 內(nèi)存的初始化:包括確定內(nèi)存的起始地址、內(nèi)存的大小等。 2 要進(jìn)入內(nèi)存的程序鏈表的產(chǎn)生:多個要進(jìn)入內(nèi)存運(yùn)行的程序的產(chǎn)生,包括程序編號、所占存儲空間的大小??梢园堰@些內(nèi)容以記錄式文件的形式保存到磁盤上,也可以把他們存放在二維數(shù)組中。若保存在文件中,則可以多次使用,如保存在數(shù)組中只能使用一次。 3 為程序分配存儲空間: 可以采用首次適應(yīng)、最佳適應(yīng)、最后適應(yīng)算法來實(shí)現(xiàn)。主要是按照這三種算法的思想對空閑塊進(jìn)行排序,以便找出符合要求的那個空閑塊。對空閑塊的排序思路可以使用冒泡排序算法的思想。 4 記錄和顯示內(nèi)存被 程序占用的情況 5 記錄和顯示內(nèi)存中空閑塊的情況 6 回收存儲空間:程序運(yùn)行完畢后,要及時回收內(nèi)存空間。 四 、 主 程序流程 圖 step=’1’ step=’2’ step=’6’ step=’3’step=’4’ step=’5’ step=’7’ 創(chuàng)建分區(qū)頭節(jié)點(diǎn) 刪除上次的結(jié)果文件 鍵盤輸入字符 step 字符 step 為? Exit Put job into memory Finish job Show current free list Show current memory used by jobs Move fragment together Initializiation 五 丶 主要實(shí)驗(yàn)代碼 void init() //初始化,設(shè)置物理內(nèi)存中用戶區(qū)的大小,選取適應(yīng)算法 { fl = NULL。 //將各值復(fù)位 al = NULL。 jl = NULL。 userMemory = 0。 fitAlgorithm = 0。 count = 0。 printf(\n 請?jiān)O(shè)置用戶區(qū)的大?。ㄕ停?)。 cin userMemory。 setFitAlgorithm()。 fNode * tmp = (fNode *)malloc(sizeof(fNode))。 tmpstartAddress = 0。 tmpsize = userMemory。 //初始化時,將整個用戶內(nèi)存劃分到一個分區(qū)里 tmplast = NULL。 tmpnext = NULL。 fl = tmp。 } void setFitAlgorithm() //設(shè)置適應(yīng)算法 { fitAlgorithm = 0。 while(fitAlgorithm 4 || fitAlgorithm 1) { printf( 請選擇適應(yīng)算法\n)。 printf( 1最佳適應(yīng)算法 \n)。 printf( 2最壞適應(yīng)算法 \n)。 printf( 3首次適 應(yīng)算法 \n)。 printf( 4最后適應(yīng)算法 \n)。 printf(\n)。 printf(請輸入序號: )。 cin fitAlgorithm。 } doFitAlgorithm()。 } void doFitAlgorithm() //執(zhí)行適應(yīng)算法 { fNode * t = (fNode *)malloc(sizeof(fNode))。 int tmpStartAddress = 0。 int tmpSize = 0。 for (fNode * i = fl。 i != NULL。 i = inext) { t = i。 for (fNode * j = inext。 j != NULL。 j = jnext) { switch(fitAlgorithm) { case 1: { if (jsize tsize) //最佳適應(yīng)算法,找到鏈表中 分區(qū)大小最小的分區(qū) { t = j。 } break。 } case 2: { if (jsize tsize) //最壞適應(yīng)算法,找到鏈表中分區(qū)大小最大的分區(qū) { t = j。 } break。 } case 3: { if (jstartAddress tstartAddress) //首次適應(yīng)算法,找到鏈表中分區(qū)起始地址最小的分區(qū) { t = j。 } break。 } case 4: { if (jstartAddress tstartAddress) //最后適應(yīng)算法,找到鏈表中分區(qū)起始地址最大的分區(qū) { t = j。 } break。 } } } tmpStartAddress = istartAddress。 //將剩余鏈中找到的分區(qū)交換到剩余鏈的最前端 tmpSize = isize。 istartAddress = tstartAddress。 isize = tsize。 tstartAddress = tmpStartAddress。 tsize = tmpSize。 } } void addJob() //添加作業(yè) { int num = 0。 int size = 0。 printf(\n)。 printf(請輸入要加入的作業(yè)的編號(整型): )。 cin num。 printf(請輸入要 加入的作業(yè)的大小(整型): )。 cin size。 count++。 jNode * job = (jNode *)malloc(sizeof(jNode))。 //初始化一個新作業(yè)結(jié)點(diǎn) jobid = count。 jobnum = num。 jobsize = size。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1