




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1 計(jì)算機(jī) 學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù) 專業(yè) 班學(xué)號 姓名 教師評定 實(shí)驗(yàn)題目 主存空間的分配和回收 一 實(shí)驗(yàn)?zāi)康囊?實(shí)驗(yàn)?zāi)康?熟悉主存的分配與回收 理解在不同的存儲管理方式下 如何實(shí)現(xiàn)主存空間的分配與 回收 掌握動態(tài)分區(qū)分配方式中的數(shù)據(jù)結(jié)構(gòu)和分配算法及動態(tài)分區(qū)存儲管理方式及其實(shí)現(xiàn) 過程 二 實(shí)驗(yàn)內(nèi)容和要求二 實(shí)驗(yàn)內(nèi)容和要求 主存的分配和回收的實(shí)現(xiàn)是與主存儲器的管理方式有關(guān)的 所謂分配 就是解決多道 作業(yè)或多進(jìn)程如何共享主存空間的問題 所謂回收 就是當(dāng)作業(yè)運(yùn)行完成時將作業(yè)或進(jìn)程 所占的主存空間歸還給系統(tǒng) 可變分區(qū)管理是指在處理作業(yè)過程中建立分區(qū) 使分區(qū)大小正好適合作業(yè)的需求 并 且分區(qū)個數(shù)是可以調(diào)整的 當(dāng)要裝入一個作業(yè)時 根據(jù)作業(yè)需要的主存量查看是否有足夠 的空閑空間 若有 則按需要量分割一個分區(qū)分配給該作業(yè) 若無 則作業(yè)不能裝入 作 業(yè)等待 隨著作業(yè)的裝入 完成 主存空間被分成許多大大小小的分區(qū) 有的分區(qū)被作業(yè) 占用 而有的分區(qū)是空閑的 實(shí)驗(yàn)要求使用可變分區(qū)存儲管理方式 分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)采用空閑分區(qū)表和 空閑分區(qū)鏈來進(jìn)行 分區(qū)分配中所用的算法采用首次適應(yīng)算法 最佳適應(yīng)算法 最差適應(yīng) 算法三種算法來實(shí)現(xiàn)主存的分配與回收 同時 要求設(shè)計(jì)一個實(shí)用友好的用戶界面 并顯 示分配與回收的過程 同時要求設(shè)計(jì)一個實(shí)用友好的用戶界面 并顯示分配與回收的過程 三 實(shí)驗(yàn)主要儀器設(shè)備和材料三 實(shí)驗(yàn)主要儀器設(shè)備和材料 實(shí)驗(yàn)環(huán)境 硬件環(huán)境 IBM PC 或兼容機(jī) 軟件環(huán)境 VC 6 0 四 實(shí)驗(yàn)原理及設(shè)計(jì)分析四 實(shí)驗(yàn)原理及設(shè)計(jì)分析 某系統(tǒng)采用可變分區(qū)存儲管理 在系統(tǒng)運(yùn)行當(dāng)然開始 假設(shè)初始狀態(tài)下 可用的內(nèi)存 空間為 640KB 存儲器區(qū)被分為操作系統(tǒng)分區(qū) 40KB 和可給用戶的空間區(qū) 600KB 作業(yè) 1 申請 130KB 作業(yè) 2 申請 60KB 作業(yè) 3 申請 100KB 作業(yè) 2 釋放 60KB 作業(yè) 4 申請 200KB 作業(yè) 3 釋放 100KB 作業(yè) 1 釋放 130KB 作業(yè) 5 申請 140KB 作業(yè) 6 申請 60KB 作業(yè) 7 申請 50KB 當(dāng)作業(yè) 1 進(jìn)入內(nèi)存后 分給作業(yè) 1 130KB 隨著作業(yè) 1 2 3 的進(jìn)入 分別分配 60KB 100KB 經(jīng)過一段時間的運(yùn)行后 作業(yè) 2 運(yùn)行完畢 釋放所占內(nèi)存 此時 作業(yè) 4 進(jìn) 入系統(tǒng) 要求分配 200KB 內(nèi)存 作業(yè) 3 1 運(yùn)行完畢 釋放所占內(nèi)存 此時又有作業(yè) 5 申請 2 140KB 作業(yè) 6 申請 60KB 作業(yè) 7 申請 50KB 為它們進(jìn)行主存分配和回收 1 采用可變分區(qū)存儲管理 使用空閑分區(qū)鏈實(shí)現(xiàn)主存分配和回收 空閑分區(qū)鏈 使用鏈指針把所有的空閑分區(qū)鏈成一條鏈 為了實(shí)現(xiàn)對空閑分區(qū)的分配和鏈 接 在每個分區(qū)的起始部分設(shè)置狀態(tài)位 分區(qū)的大小和鏈接各個分區(qū)的前向指針 由狀態(tài) 位指示該分區(qū)是否分配出去了 同時 在分區(qū)尾部還設(shè)置有一后向指針 用來鏈接后面的 分區(qū) 分區(qū)中間部分是用來存放作業(yè)的空閑內(nèi)存空間 當(dāng)該分區(qū)分配出去后 狀態(tài)位就由 0 置為 1 設(shè)置一個內(nèi)存空閑分區(qū)鏈 內(nèi)存空間分區(qū)通過空閑分區(qū)鏈來管理 在進(jìn)行內(nèi)存分配時 系統(tǒng)優(yōu)先使用空閑低端的空間 設(shè)計(jì)一個空閑分區(qū)說明鏈 設(shè)計(jì)一個某時刻主存空間占用情況表 作為主存當(dāng)前使用 基礎(chǔ) 初始化空間區(qū)和已分配區(qū)說明鏈的值 設(shè)計(jì)作業(yè)申請隊(duì)列以及作業(yè)完成后釋放順序 實(shí)現(xiàn)主存的分配和回收 要求每次分配和回收后顯示出空閑內(nèi)存分區(qū)鏈的情況 把空閑區(qū) 說明鏈的變化情況以及各作業(yè)的申請 釋放情況顯示打印出來 2 采用可變分區(qū)存儲管理 分別采用首次適應(yīng)算法 最佳適應(yīng)算法和最壞適應(yīng)算法實(shí) 現(xiàn)主存分配和回收 3 主存空間分配 1 首次適應(yīng)算法 在該算法中 把主存中所有空閑區(qū)按其起始地址遞增的次序排列 在為作業(yè)分配 存儲空間時 從上次找到的空閑分區(qū)的下一個空閑分區(qū)開始查找 直到找到第一個能 滿足要求的空閑區(qū) 從中劃出與請求的大小相等的存儲空間分配給作業(yè) 余下的空閑 區(qū)仍留在空閑區(qū)鏈中 2 最佳適應(yīng)算法 在該算法中 把主存中所有空閑區(qū)按其起始地址遞增的次序排列 在為作業(yè)分配 存儲空間時 從上次找到的空閑分區(qū)的下一個空閑分區(qū)開始查找 直到找到一個能滿 足要求的空閑區(qū)且該空閑區(qū)的大小比其他滿足要求的空閑區(qū)都小 從中劃出與請求的 大小相等的存儲空間分配給作業(yè) 余下的空閑區(qū)仍留在空閑區(qū)鏈中 3 最壞適應(yīng)算法 在該算法中 把主存中所有空閑區(qū)按其起始地址遞增的次序排列 在為作業(yè)分配 存儲空間時 從上次找到的空閑分區(qū)的下一個空閑分區(qū)開始查找 直到找到一個能滿 足要求的空閑區(qū)且該空閑區(qū)的大小比其他滿足要求的空閑區(qū)都大 從中劃出與請求的 大小相等的存儲空間分配給作業(yè) 余下的空閑區(qū)仍留在空閑區(qū)鏈中 4 主存空間回收 當(dāng)一個作業(yè)執(zhí)行完成撤離時 作業(yè)所占的分區(qū)應(yīng)該歸還給系統(tǒng) 歸還的分區(qū)如果與 其它空閑區(qū)相鄰 則應(yīng)合成一個較大的空閑區(qū) 登記在空閑區(qū)說明鏈中 此時 相鄰空閑 區(qū)的合并問題 要求考慮四種情況 1 釋放區(qū)下鄰空閑區(qū) 低地址鄰接 2 釋放區(qū)上鄰空閑區(qū) 高地址鄰接 3 釋放區(qū)上下都與空閑區(qū)鄰接 4 釋放區(qū)上下鄰都與空閑區(qū)不鄰接 五 程序流程圖五 程序流程圖 main 函數(shù)里的流程圖 3 初始化 first 和 end 整理分區(qū)序號 顯示空閑分區(qū)鏈 選擇算法 a a 1 首次適應(yīng)算法a 2 最佳適應(yīng)算法a 3 最壞適應(yīng)算法 選擇操作 i i 1 分配空間函數(shù) ai 0 退出程序i 2 回收空間函 數(shù) 結(jié)束 分配空間里的流程圖 4 p data length request 分配不成功 分配空間函數(shù) a 1a 2a 3 輸入申請內(nèi)存大 小 按順序找空閑塊 初始化 q 使它指向空 閑塊中長度小的一塊 輸入申請內(nèi)存 大小 初始化 q 使它指向空 閑塊中長度大的一塊 p data length request p 的狀態(tài)為已分配 剩下 p data length request 輸入申請內(nèi)存 大小 Y Y N N 返回到整理分區(qū)序號 回收空間里的流程圖 5 p 的狀態(tài) 改為空閑 回收 p p 的前一個為 first p 的后一 個是 end p 的后一 個狀態(tài)空 與后面空閑 塊相連 將 p 的 狀態(tài)改為 空閑 將 p 的狀態(tài)改 為空閑 回收空間函數(shù) p 的后一 個是 end Y N Y N YN p 的前一 個狀態(tài)空 p 的前一 個狀態(tài)空 p 的后一 個狀態(tài)空 p 的后一 個狀態(tài)空 p 的后一 個狀態(tài)空 p 的后一 個狀態(tài)空 Y Y Y N N N 與前面空 閑塊相連 p 的狀態(tài) 改為空閑 與前面空 閑塊相連 與后面空閑 塊相連 Y N 返回到整理分區(qū)序號 六 相關(guān)數(shù)據(jù)結(jié)構(gòu)及關(guān)鍵函數(shù)說明六 相關(guān)數(shù)據(jù)結(jié)構(gòu)及關(guān)鍵函數(shù)說明 本程序采用了一個 struct free table 數(shù)據(jù)結(jié)構(gòu) 里面包含分區(qū)序號 num 起始地址 address 分區(qū)長度 length 和分區(qū)狀態(tài) state 還用了線性表的雙性鏈表存儲結(jié)構(gòu) struct Node 里面包含前區(qū)指針 prior 和后繼指針 next 一開始定義一條 含有 first 和 end 的鏈 用開始指針和尾指針開創(chuàng)空間鏈表 然后分別按三種算法進(jìn)行分配和 6 回收 在該程序中關(guān)鍵函數(shù)有 sort allocation recovery 和 First fit Best fit Worst fit 其中 sort 函數(shù)是用來整理分區(qū)序號的 如在刪序號 3 時 她與前面序號 2 相連在一起了 然后序號 2 中的長度總滿足申請的內(nèi)存大小 就會在序號 2 中分配 然后序號在 2 的基礎(chǔ)上加 1 一直加 加到與原本序號 3 的下一個序號也就是 4 相等 這時 sort 就開始有明顯的工作了 allocation 是分配空間的 也是過渡到三 個算法中的 當(dāng)三個算法中滿足或者不滿足分配請求 都會又返回值給 allocation recovery 是用來回收內(nèi)存的 里面包含了四種情況相連結(jié)果 即釋放區(qū)上與空閑區(qū)鄰接 釋放區(qū)下與空閑區(qū)鄰接 釋放區(qū)上下都與空閑區(qū)鄰接 釋放區(qū)上下都與空閑區(qū)不鄰接這四 種情況的結(jié)果 七 源代碼七 源代碼 include include define OK 1 完成 define ERROR 0 出錯 typedef int Status typedef struct free table 定義一個空閑區(qū)說明表結(jié)構(gòu) int num 分區(qū)序號 long address 起始地址 long length 分區(qū)大小 int state 分區(qū)狀態(tài) ElemType typedef struct Node 線性表的雙向鏈表存儲結(jié)構(gòu) ElemType data struct Node prior 前趨指針 struct Node next 后繼指針 Node LinkList LinkList first 頭結(jié)點(diǎn) LinkList end 尾結(jié)點(diǎn) int flag 記錄要刪除的分區(qū)序號 Status Initblock 開創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表 first LinkList malloc sizeof Node end LinkList malloc sizeof Node first prior NULL first next end 7 end prior first end next NULL end data num 1 end data address 40 end data length 600 end data state 0 return OK void sort 分區(qū)序號重新排序 Node p first next q q p next for p NULL p p next for q p next q q q next if p data num q data num q data num 1 顯示主存分配情況 void show int flag 0 用來記錄分區(qū)序號 Node p first p data num 0 p data address 0 p data length 40 p data state 1 sort printf n t t 主存空間分配情況 n printf n n printf 分區(qū)序號 t 起始地址 t 分區(qū)大小 t 分區(qū)狀態(tài) n n while p printf d t t d t t d p data num p data address p data length if p data state 0 printf t t 空閑 n n else printf t t 已分配 n n p p next 8 printf n n 首次適應(yīng)算法 Status First fit int request 為申請作業(yè)開辟新空間且初始化 Node p first next LinkList temp LinkList malloc sizeof Node temp data length request temp data state 1 p data num 1 while p if p data state 0 return OK break else if p data state 0 temp next p temp data address p data address temp data num p data num p prior next temp p prior temp p data address temp data address temp data length p data length request p data num 1 return OK break p p next return ERROR 最佳適應(yīng)算法 Status Best fit int request int ch 記錄最小剩余空間 Node p first 9 Node q NULL 記錄最佳插入位置 LinkList temp LinkList malloc sizeof Node temp data length request temp data state 1 p data num 1 while p 初始化最小空間和最佳位置 if p data state 0 ch p data length request else if q data length p data length q p ch p data length request p p next if q NULL return ERROR 沒有找到空閑塊 else if q data length request q data state 1 return OK else temp prior q prior temp next q temp data address q data address temp data num q data num q prior next temp q prior temp q data address request q data length ch q data num 1 return OK return OK 10 最差適應(yīng)算法 Status Worst fit int request int ch 記錄最大剩余空間 Node p first next Node q NULL 記錄最佳插入位置 LinkList temp LinkList malloc sizeof Node temp data length request temp data state 1 p data num 1 while p 初始化最大空間和最佳位置 if p data state 0 ch p data length request else if q data length data length q p ch p data length request p p next if q NULL return ERROR 沒有找到空閑塊 else if q data length request q data length 1 return OK else temp prior q prior temp next q temp data address q data address temp data num q data num q prior next temp q prior temp q data address request q data length ch 11 q data num 1 return OK return OK 分配主存 Status allocation int a int request 申請內(nèi)存大小 printf 請輸入申請分配的主存大小 單位 KB scanf d if requestnext if q p 12 if q prior data state 0 q prior next q next q next prior q prior q q prior q data state 0 q data num flag 1 if q prior data state 0 q next q next next q next next prior q q data state 0 q data num flag if q prior data state 0 q prior next q next q next prior q prior q q prior q data state 0 q data num flag 1 if q prior data state 0 return OK Status deal2 Node p 處理回收空間 Node q first for q NULL q q next if q p if q prior data state 0 q prior next q next q next prior q prior q p prior q data state 0 q data num flag 1 if q prior data state 0 if q prior data state 0 q prior next q next q next prior q prior q q prior q data state 0 q data num flag 1 if q prior data state 0 return OK 主存回收 Status recovery int flag Node p first for p NULL p p next if p data num flag if p prior first if p next end 當(dāng)前 P 指向的下一個不是最后一個時 if p next data state 0 與后面的空閑塊相連 p data length p next data length 14 p next next prior p p next p next next p data state 0 p data num flag else p data state 0 if p next end 當(dāng)前 P 指向的下一個是最后一個時 p data state 0 結(jié)束 if p prior block first 的情況 else if p prior first if p next end deal1 p else deal2 p 結(jié)束 if p prior block first 的情況 結(jié)束 if p data num flag 的情況 printf t 回收成功 return OK 主函數(shù) void main int i 操作選擇標(biāo)記 int a 算法選擇標(biāo)記 printf n printf t t 用以下三種方法實(shí)現(xiàn)主存空間的分配 n printf t 1 首次適應(yīng)算法 t 2 最佳適應(yīng)算法 t 3 最差適應(yīng)算法 n printf n printf n printf 請輸入所使用的內(nèi)存分配算法 scanf d while a3 printf 輸入錯誤 請重新輸入所使用的內(nèi)存分配算法 n 15 scanf d switch a case 1 printf n t 使用首次適應(yīng)算法 n break case 2 printf n t 使用最佳適應(yīng)算法 n break case 3 printf n t 使用最壞適應(yīng)算法 n break Initblock 開創(chuàng)空間表 while 1 show printf t1 分配內(nèi)存 t2 回收內(nèi)存 t0 退出 n printf 請輸入您的操作 scanf d if i 1 allocation a 分配內(nèi)存 else if i 2 內(nèi)存回收 printf 請輸入您要釋放的分區(qū)號 scanf d recovery flag else if i 0 printf n 退出程序 n break 退出 else 輸入操作有誤 printf 輸入有誤 請重試 continue 八 執(zhí)行結(jié)果和結(jié)果分析八 執(zhí)行結(jié)果和結(jié)果分析 16 初始化首次適應(yīng)算法 當(dāng)作業(yè) 1 2 3 順利分配內(nèi)存空間后 回收序號 2 里面的內(nèi)存 17 分配作業(yè) 4 回收序號 3 里面的內(nèi)存 與上鄰序號 2 相連了 18 回收序號 1 里的內(nèi)存 與下鄰序號 2 相連了 繼續(xù)分配 會發(fā)現(xiàn)總是按順序查找滿足要求的第一個空閑塊 一旦發(fā)現(xiàn)就
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 炸雞店的社會責(zé)任活動
- 高光修容 打造立體面部效果
- 2025年工業(yè)互聯(lián)網(wǎng)平臺網(wǎng)絡(luò)切片技術(shù)在照明電器行業(yè)的應(yīng)用案例報(bào)告
- 環(huán)境災(zāi)害應(yīng)急響應(yīng)預(yù)案培訓(xùn)實(shí)施效果評估重點(diǎn)基礎(chǔ)知識點(diǎn)歸納
- 元旦快樂輕松講故事
- 小型土木工程項(xiàng)目的BIM應(yīng)用揭秘
- 護(hù)理中的研究概述
- 護(hù)理中的產(chǎn)房護(hù)理
- 房地產(chǎn)項(xiàng)目中的環(huán)境因素考慮
- 房地產(chǎn)項(xiàng)目的融資風(fēng)險管理
- 初級銀行從業(yè)資格考試《個人貸款》新版真題卷(2025年含答案)
- 2025年風(fēng)險管理師資格考試試題及答案
- 精神科患者安全管理
- 2024智能交通系統(tǒng)架構(gòu)設(shè)計(jì)試題及答案
- 生地考試測試題及答案
- 熱泵技術(shù)考試題及答案
- 旅游英語考試試題及答案
- 【課件】人體的骨骼課件北師大版生物七年級下冊
- 英語財(cái)務(wù)報(bào)告閱讀試題及答案
- 2025年出版:全球市場光伏硅膠總體規(guī)模、主要生產(chǎn)商、主要地區(qū)、產(chǎn)品和應(yīng)用細(xì)分調(diào)研報(bào)告
- 2025甘肅省農(nóng)墾集團(tuán)有限責(zé)任公司招聘生產(chǎn)技術(shù)人員145人筆試參考題庫附帶答案詳解
評論
0/150
提交評論