版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、-PAGE . z.操作系統(tǒng)課程設(shè)計(jì)連續(xù)動(dòng)態(tài)分區(qū)存 管理模擬實(shí)現(xiàn)目錄操作系統(tǒng)課程設(shè)計(jì)1 引言3課程設(shè)計(jì)目的和容 3 需求分析3 概要設(shè)計(jì)3開發(fā)環(huán)境 4系統(tǒng)分析設(shè)計(jì) 4有關(guān)了解存管理的相關(guān)理論4存管理概念4存管理的必要性4存的物理組織4什么是虛擬存5連續(xù)動(dòng)態(tài)分區(qū)存管理方式5單一連續(xù)分配單個(gè)分區(qū)) 5固定分區(qū)存儲(chǔ)管理5可變分區(qū)存儲(chǔ)管理動(dòng)態(tài)分區(qū) 5可重定位分區(qū)存儲(chǔ)管理5問題描述和分析6程序流程圖6數(shù)據(jù)構(gòu)造體分析8主要程序代碼分析9分析并實(shí)現(xiàn)四種存分配算法 11最先適應(yīng)算11下次適應(yīng)分配算法13最優(yōu)適應(yīng)算法16最壞適應(yīng)算法 18回收存算法20調(diào)試與操作說明22初始界面22模擬存分配23已分配分區(qū)說明外
2、表24空閑區(qū)說明表界面24回收存界面25重新申請(qǐng)存界面26.總結(jié)與體會(huì) 28參考文獻(xiàn) 28引言操作系統(tǒng)是最重要的系統(tǒng)軟件,同時(shí)也是最活潑的學(xué)科之一。我們通過操作系統(tǒng)可以理解計(jì)算機(jī)系統(tǒng)的資源如何組織,操作系統(tǒng)如何有效地管理這些系統(tǒng)資源,用戶如何通過操作系統(tǒng)與計(jì)算機(jī)系統(tǒng)打交道。存儲(chǔ)器是計(jì)算機(jī)系統(tǒng)的重要組成局部,近年來,存儲(chǔ)器容量雖然一直在不斷擴(kuò)大,但仍不能滿足現(xiàn)代軟件開展的需要,因此,存儲(chǔ)器仍然是一種珍貴而又緊俏的資源。如何對(duì)它加以有效的管理,不僅直接影響到存儲(chǔ)器的利用率,而且還對(duì)系統(tǒng)性能有重大影響。而動(dòng)態(tài)分區(qū)分配屬于連續(xù)分配的一種方式,它至今仍在存分配方式中占有一席之地。課程設(shè)計(jì)目的和容: 理解
3、存管理的相關(guān)理論,掌握連續(xù)動(dòng)態(tài)分區(qū)存管理的理論;通過對(duì)實(shí)際問題的編程實(shí)現(xiàn),獲得實(shí)際應(yīng)用和編程能力。 編寫程序?qū)崿F(xiàn)連續(xù)動(dòng)態(tài)分區(qū)存管理方式,該程序管理一塊虛擬存,實(shí)現(xiàn)存分配和回收功能。 分析并實(shí)現(xiàn)四種存分配算法,即最先適應(yīng)算法,下次最先適應(yīng)算法,最優(yōu)適應(yīng)算法,最壞適應(yīng)算法。存分配算法和回收算法的實(shí)現(xiàn)。需求分析動(dòng)態(tài)分區(qū)分配是根據(jù)進(jìn)程的實(shí)際需要,動(dòng)態(tài)地為之分配存空間。在實(shí)現(xiàn)動(dòng)態(tài)分區(qū)分配時(shí),將涉及到分區(qū)分配中所用的數(shù)據(jù)構(gòu)造、分區(qū)分配算法和分區(qū)的分配和回收操作這樣三個(gè)問題。常用的數(shù)據(jù)構(gòu)造有動(dòng)態(tài)分區(qū)表和動(dòng)態(tài)分區(qū)鏈。在對(duì)數(shù)據(jù)構(gòu)造有一定掌握程度的情況下設(shè)計(jì)合理的數(shù)據(jù)構(gòu)造來描述存儲(chǔ)空間,實(shí)現(xiàn)分區(qū)存儲(chǔ)管理的存分配功
4、能,應(yīng)該選擇最適宜的適應(yīng)算法首次適應(yīng)算法,最正確適應(yīng)算法,最后適應(yīng)算法,最壞適應(yīng)算法,在動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式中主要實(shí)現(xiàn)存分配和存回收算法,在這些存儲(chǔ)管理中間必然會(huì)有碎片的產(chǎn)生,當(dāng)碎片產(chǎn)生時(shí),進(jìn)展碎片的拼接等相關(guān)的容概要設(shè)計(jì)本程序采用機(jī)構(gòu)化模塊化的設(shè)計(jì)方法,共分為四大模塊。最先適應(yīng)算法實(shí)現(xiàn) 從空閑分區(qū)表的第一個(gè)表目起查找該表,把最先能夠滿足要求的空閑區(qū)分配給作業(yè),這種方法目的在于減少查找時(shí)間。為適應(yīng)這種算法,空閑分區(qū)表空閑區(qū)鏈中的空閑分區(qū)要按地址由低到高進(jìn)展排序。該算法優(yōu)先使用低址局部空閑區(qū),在低址空間造成許多小的空閑區(qū),在高地址空間保存大的空閑區(qū)。下次適應(yīng)分配算法實(shí)現(xiàn)該算法是最先適應(yīng)算法的變種
5、。在分配存空間時(shí),不再每次從表頭鏈?zhǔn)组_場(chǎng)查找,而是從上次找到空閑區(qū)的下一個(gè)空閑開場(chǎng)查找,直到找到第一個(gè)能滿足要求的的空閑區(qū)為止,并從中劃出一塊與請(qǐng)求大小相等的存空間分配給作業(yè)。該算法能使存中的空閑區(qū)分布得較均勻。最優(yōu)適應(yīng)算法實(shí)現(xiàn)它從全部空閑區(qū)中找出能滿足作業(yè)要求的、且大小最小的空閑分區(qū),這種方法能使碎片盡量小。為適應(yīng)此算法,空閑分區(qū)表空閑區(qū)鏈中的空閑分區(qū)要按從小到大進(jìn)展排序,自表頭開場(chǎng)查找到第一個(gè)滿足要求的自由分區(qū)分配。最壞算法實(shí)現(xiàn)最壞適應(yīng)分配算法要掃描整個(gè)空閑分區(qū)或鏈表,總是挑選一個(gè)最大的空閑分區(qū)分割給作業(yè)使用。該算法要求將所有的空閑分區(qū)按其容量從大到小的順序形成一空閑分區(qū)鏈,查找時(shí)只要看第
6、一個(gè)分區(qū)能否滿足作業(yè)要求。開發(fā)環(huán)境: win7 下 VC+6.0系統(tǒng)分析設(shè)計(jì): 相關(guān)算法原理,算法流程圖,涉及的數(shù)據(jù)構(gòu)造容都相應(yīng)包含在各章節(jié)中有關(guān)了解存管理的相關(guān)理論存管理概念: 存管理,是指軟件運(yùn)行時(shí)對(duì)計(jì)算機(jī)存資源的分配和使用的技術(shù)。其最主要的目的是如何高效,快速的分配,并且在適當(dāng)?shù)臅r(shí)候釋放和回收存資源。存不是預(yù)先劃分好的,而是在系統(tǒng)運(yùn)行的過程中建立分區(qū).當(dāng)作業(yè)裝入主存時(shí),根據(jù)作業(yè)所需要的主存容量查看是否有足夠的主存空間,假設(shè)有則按需要分割一個(gè)分區(qū)給該作業(yè);否則令該作業(yè)等待.分區(qū)長(zhǎng)度不固定分區(qū)個(gè)數(shù)不固定。這種存儲(chǔ)管理的方法克制了固定分區(qū)嚴(yán)重浪費(fèi)主存的問題,提高了主存資源的利用率。存管理的必要
7、性:存管理對(duì)于編寫出高效率的 Windows 程序是非常重要的,這是因?yàn)閃indows 是多任務(wù)系統(tǒng),它的存管理和單任務(wù)的 DOS 相比有很大的差異。DOS是單任務(wù)操作系統(tǒng),應(yīng)用程序分配到存后,如果它不主動(dòng)釋放,系統(tǒng)是不會(huì)對(duì)它作任何改變的;但 Windows 卻不然,它在同一時(shí)刻可能有多個(gè)應(yīng)用程序共享存,有時(shí)為了使*個(gè)任務(wù)更好地執(zhí)行,Windows 系統(tǒng)可能會(huì)對(duì)其它任務(wù)分配的存進(jìn)展移動(dòng),甚至刪除。因此,我們?cè)?Windows 應(yīng)用程序中使用存時(shí),要遵循Windows 存管理的一些約定,以盡量提高 Windows 存的利用率。 1.3 存的物理組織:物理地址: 把存分成假設(shè)干個(gè)大小相等的存儲(chǔ)單元
8、,每個(gè)存儲(chǔ)單元占 8 位,稱作字節(jié)byte。每個(gè)單元給一個(gè)編號(hào),這個(gè)編號(hào)稱為物理地址存地址、絕對(duì)地址、實(shí)地址。二、物理地址空間: 物理地址的集合稱為物理地址空間主存地址空間,它是一個(gè)一維空間。什么是虛擬存:虛擬存是存管理技術(shù)的一個(gè)極其實(shí)用的創(chuàng)新。它是一段程序由操作系統(tǒng)調(diào)度,持續(xù)監(jiān)控著所有物理存中的代碼段、數(shù)據(jù)段,并保證他們?cè)谶\(yùn)行中的效率以及可靠性,對(duì)于每個(gè)用戶層user-level的進(jìn)程分配一段虛擬存空間。當(dāng)進(jìn)程建立時(shí),不需要在物理存件之間搬移數(shù)據(jù),數(shù)據(jù)儲(chǔ)存于磁盤的虛擬存空間,也不需要為該進(jìn)程去配置主存空間,只有當(dāng)該進(jìn)程被被調(diào)用的時(shí)候才會(huì)被加載到主存。連續(xù)動(dòng)態(tài)分區(qū)存管理方式的實(shí)現(xiàn)在早期的操作系
9、統(tǒng)中,主存分配廣泛采用連續(xù)分配方式。 連續(xù)分配方式,是指為一個(gè)用戶程序分配一個(gè)連續(xù)的存空間,該連續(xù)存空間指的的是物理存。下面介紹連續(xù)分配的四種方式。單一連續(xù)分配單個(gè)分區(qū)最簡(jiǎn)單的存儲(chǔ)管理方式,用于多道程序設(shè)計(jì)技術(shù)之前。 存分為系統(tǒng)區(qū)和用戶區(qū),系統(tǒng)區(qū)由操作系統(tǒng)使用。用戶區(qū)作為一個(gè)連續(xù)的分區(qū)分配給一個(gè)作業(yè)。 分區(qū)存儲(chǔ)管理是滿足多道程序設(shè)計(jì)的最簡(jiǎn)單的一種存儲(chǔ)管理方法,它允許多 4個(gè)用戶程序同時(shí)存在系統(tǒng)存中,即共享存空間。 按分區(qū)劃分方式可分為固定分區(qū)和可變分區(qū)。固定分區(qū)存儲(chǔ)管理 把存的用戶區(qū)預(yù)先劃分成多個(gè)分區(qū),每個(gè)分區(qū)大小可以一樣,也可以不同。分區(qū)的劃分由計(jì)算機(jī)的操作員或者由操作系統(tǒng)給出,并給出主存分
10、配表 分區(qū)個(gè)數(shù)固定,分區(qū)的大小固定。 一個(gè)分區(qū)中可裝入一個(gè)作業(yè),作業(yè)執(zhí)行過程中不會(huì)改變存放區(qū)域。 早期的 IBM 的 OS/MFT具有固定任務(wù)數(shù)的多道程序系統(tǒng)采用了這種固定分區(qū)的方法。可變分區(qū)存儲(chǔ)管理動(dòng)態(tài)分區(qū)存不是預(yù)先劃分好的,而是在系統(tǒng)運(yùn)行的過程中建立分區(qū).當(dāng)作業(yè)裝入主存時(shí),根據(jù)作業(yè)所需要的主存容量查看是否有足夠的主存空間,假設(shè)有則按需要分割一個(gè)分區(qū)給該作業(yè);否則令該作業(yè)等待。 分區(qū)長(zhǎng)度不固定分區(qū)個(gè)數(shù)不固定。 這種存儲(chǔ)管理的方法克制了固定分區(qū)嚴(yán)重浪費(fèi)主存的問題,提高了主存資源的利用率。 操作系統(tǒng)采用可變分區(qū)存儲(chǔ)管理??芍囟ㄎ环謪^(qū)存儲(chǔ)管理 解決碎片問題的一種簡(jiǎn)單方法是采用可重定位分區(qū)分配.。
11、其中心思想是,把不同程序,且在存中地址不連續(xù)的想法讓他們連續(xù)。例:存中現(xiàn)有 3 個(gè)空閑區(qū),現(xiàn)有一作業(yè)到達(dá),要求獲得 30k 存空間,沒有分區(qū)滿足容量要求,假設(shè)想把作業(yè)裝入,可將存中所有作業(yè)進(jìn)展移動(dòng),這樣把原來分散的空閑區(qū)聚集成一個(gè)大的空閑區(qū)。 將存中的作業(yè)進(jìn)展移動(dòng)使它們連接在一起把原來分散的多個(gè)小分區(qū)拼接成一個(gè)大的空閑區(qū).這個(gè)過程稱為緊湊或移動(dòng)。 需解決的問題:每次緊湊后程序或數(shù)據(jù)裝入的物理地址變化采用動(dòng)態(tài)重定位。問題描述和分析系統(tǒng)應(yīng)利用*種分配算法,從空閑分區(qū)鏈表中找到所需大小的分區(qū),如果空閑分區(qū)大小大于請(qǐng)求分區(qū)大小,則從該分區(qū)中按改請(qǐng)求的大小劃分出一塊存空間大小劃分出一塊存空間分配出去,余
12、下的局部仍留在空閑鏈表中。然后,將分配區(qū)的首址返回給調(diào)用者。當(dāng)進(jìn)程運(yùn)行完畢師存時(shí),系統(tǒng)根據(jù)回收區(qū)的首址,從空閑區(qū)中找到相應(yīng)的插入點(diǎn),此時(shí)可能出現(xiàn)以下四種情況之一:該空閑區(qū)的上下兩相鄰分區(qū)都是空閑區(qū):將三個(gè)空閑區(qū)合并為一個(gè)空閑區(qū)。新空閑區(qū)的起始地址為上空閑區(qū)的起始地址,大小為三個(gè)空閑區(qū)之和。空閑區(qū)合并后,取消可用表或自由鏈中下空閑區(qū)的表目項(xiàng)或鏈指針,修改上空閑區(qū)的對(duì)應(yīng)項(xiàng)。 該空閑區(qū)的上相鄰區(qū)是空閑區(qū):將釋放區(qū)與上空閑區(qū)合并為一個(gè)空閑區(qū),其起始地址為上空閑區(qū)的起始地址,大小為上空閑區(qū)與釋放區(qū)之和。合并后,修改上空閑區(qū)對(duì)應(yīng)的可用表的表目項(xiàng)或自由鏈指針。 該空閑區(qū)的下相鄰區(qū)是空閑區(qū):將釋放區(qū)與下空閑區(qū)
13、合并,并將釋放區(qū)的起始地址作為合并區(qū)的起始地址。合并區(qū)的長(zhǎng)度為釋放區(qū)與下空閑區(qū)之和。同理,合并后修改可用表或自由鏈中相應(yīng)的表目項(xiàng)或鏈指針。兩相鄰區(qū)都不是空閑區(qū):釋放區(qū)作為一個(gè)新空閑可用區(qū)插入可用表或自由鏈。程序流程圖存分配流程圖,如圖存回收流程圖,如圖數(shù)據(jù)構(gòu)造體分析進(jìn)程屬性構(gòu)造體typedef struct readyque char name10; int size;readyque,*readyqueue;空閑鏈表構(gòu)造體typedef struct idlyspace int from; int size; idlyspace * ne*t;idlyspace,*idly;已分配鏈表構(gòu)造體
14、typedef struct busyspace int from; readyque r; busyspace * ne*t;busyspace,*busy主要程序代碼分析主函數(shù)/代碼請(qǐng)?zhí)砑舆m當(dāng)?shù)淖⑨?。int main() Is=(idly)malloc(sizeof(idlyspace); Is-from=0; Is-size=256; Is-ne*t=NULL; Is2=Is; Bs=(busy)malloc(sizeof(busyspace); Bs-ne*t=NULL; int t,t1; printf(n歡送來到動(dòng)態(tài)分區(qū)存儲(chǔ)管理系統(tǒng)nn); printf(請(qǐng)選擇要執(zhí)行的算法:n);
15、 printf( 1.最先適應(yīng)算法 n); printf( 2.下次適應(yīng)算法 n); printf(3.最優(yōu)適應(yīng)算法 n); printf( 4.最壞適應(yīng)算法 n); printf(n); printf(請(qǐng)輸入您的選擇:); scanf(%d,&t); int i; while(i!=5) printf(n); printf(操作菜單如下:請(qǐng)選擇n); printf(1.輸入進(jìn)程分配空間 n); printf( 2.進(jìn)程撤銷回收空間 n); printf( 3.輸出所有空閑分區(qū) n); printf(4.輸出所有已分配分區(qū)n); printf( 5.退 出 n); printf(n); sca
16、nf(%d,&i); switch(i) case 1: switch(t) case 1: t1=FF(); break; case 2: t1=NF(); break; case 3: t1=BF(); break; case 4: t1=WF(); break; default: printf(選擇算法錯(cuò)誤n); return 1; if(t1) printf(分配空間成功n); else printf(分配空間失敗n); break; case 2: t1=recover(); if(t1) printf(回收成功n); else printf(回收失敗n); break; case
17、3: Isprint(); break; case 4: Bsprint(); break; return 0;第三章 :分析并實(shí)現(xiàn)四種存分配算法最先適應(yīng)算法空閑區(qū)按地址從小到大的次序排列。 分配:當(dāng)進(jìn)程申請(qǐng)大小為 SIZE 的存時(shí),系統(tǒng)順序查找空閑區(qū)表鏈,直到找到容量滿足要求SIZE的空閑區(qū)為止。從該空閑區(qū)中劃出大小為 SIZE的分區(qū)分配給進(jìn)程,余下的局部仍作為一個(gè)空閑區(qū),但要修改其首址和大小。 優(yōu)點(diǎn):這種算法是盡可能地利用低地址局部的空閑區(qū),而盡量地保證高地址 6局部的大空閑區(qū),有利于大作業(yè)的裝入。缺點(diǎn):主存低地址和高地址分區(qū)利用不均衡。在低地址局部集中了許多非常小的空閑區(qū)碎片降低了主存的
18、利用率。最先適應(yīng)算法int FF() int t=0; readyque D; printf請(qǐng)輸入進(jìn)程名:); scanf%,D.name); printf輸入進(jìn)程申請(qǐng)空間大小:); scanf%,&D.size); idly l=Is; int mt=256; busy b=Bs; idly min=NULL; while(l)/尋找空閑表小滿足申請(qǐng)進(jìn)程所需大小并且起址最小的空閑結(jié)點(diǎn) if(D.sizesize) if(l-fromfrom; min=l; t=1; l=l-ne*t; if(mt!=256)/如果找到則為進(jìn)程分配空間 busy j; j=(busy)malloc(sizeo
19、f(busyspace); j-from=min-from; for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t) if(b-ne*t-fromfrom) b=b-ne*t; else break; j-ne*t=b-ne*t; b-ne*t=j; min-from=min-from+D.size; min-size=min-size-D.size; return t;下次適應(yīng)分配算法 最先適應(yīng)算法的變種??偸菑目臻e區(qū)上次掃描完畢處順序查找空閑區(qū)表鏈,直到找到第一個(gè)滿足容量要求的空閑區(qū)為止,分割一局部給作業(yè),剩余局部仍作為空閑
20、區(qū)。下次適應(yīng)分配算法int NF() int t=0; readyque D; printf請(qǐng)輸入進(jìn)程名:); scanf%,D.name); printf輸入進(jìn)程申請(qǐng)空間大小:); scanf%,&D.size); int mt=256; idly l=Is2; idly min=NULL; busy b=Bs; while(l) /尋找空閑表小滿足申請(qǐng)進(jìn)程所需大小并且起址最小的空閑結(jié)點(diǎn) if(D.sizesize) if(l-fromfrom; min=l; t=1; l=l-ne*t; if(mt!=256)/如果找到則為進(jìn)程分配空間 busy j; j=(busy)malloc(siz
21、eof(busyspace); j-from=min-from; for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t) if(b-ne*t-fromfrom) b=b-ne*t; else break; /將申請(qǐng)空間進(jìn)程插入到已分配鏈表中 j-ne*t=b-ne*t; b-ne*t=j; /修改相應(yīng)空閑節(jié)點(diǎn)的起址和大小 min-from=min-from+D.size; min-size=min-size-D.size; Is2=min-ne*t;/ls2指向修改結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn) t=1; return t; l=Is;/l指
22、向空閑表的頭 while(l!=Is2)/循環(huán)查找 if(D.sizesize) if(l-fromfrom; min=l; t=1; l=l-ne*t; if(mt!=256) busy j; j=(busy)malloc(sizeof(busyspace); j-from=min-from; for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t) if(b-ne*t-fromfrom) b=b-ne*t; else break; j-ne*t=b-ne*t; b-ne*t=j; min-from=min-from+D.siz
23、e; min-size=min-size-D.size; Is2=min-ne*t; t=1; return t; return t;最優(yōu)適應(yīng)算法空閑區(qū)按容量遞增的次序排列。 分配:當(dāng)進(jìn)程申請(qǐng)存儲(chǔ)空間,系統(tǒng)順序查找空閑區(qū)表鏈,直到找到第一個(gè)滿足容量要求的空閑區(qū)為止。 采用最優(yōu)適應(yīng)算法選中的空閑區(qū)是滿足容量要求的最小空閑區(qū)。 優(yōu)點(diǎn):選中的空閑區(qū)是滿足容量要求的最小空閑區(qū),而不致于毀掉較大的空閑區(qū)。 缺點(diǎn):空閑區(qū)的大小一般與申請(qǐng)分區(qū)大小不相等,因此將其一分為二,留下來的空閑區(qū)一般情況下是很小的,以致無法使用。隨著時(shí)間的推移,系統(tǒng)中的小空閑區(qū)會(huì)越來越多,從而造成存儲(chǔ)空間的浪費(fèi)。最優(yōu)適應(yīng)算法int B
24、F()int t=0; readyque D; printf請(qǐng)輸入進(jìn)程名:); scanf%,D.name); printf輸入進(jìn)程申請(qǐng)空間大小:); scanf%,&D.size); idly l=Is; idly min=NULL; int mt=256; busy b=Bs; while(l)/在空閑鏈中尋找第一個(gè)大于所輸入的進(jìn)程大小的空閑塊 if(D.sizesize) if(l-sizesize; min=l; t=1; l=l-ne*t; if(mt!=256)/找到第一個(gè)滿足要求的空閑塊 busy j; j=(busy)malloc(sizeof(busyspace);/申請(qǐng)分配
25、用于存放進(jìn)程的存空間 j-from=min-from;/將第一個(gè)滿足要求的空閑塊min的首地址賦給j for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t)/按從小到大的順序查找新進(jìn)程在已分配區(qū)中的位置 if(b-ne*t-fromfrom) b=b-ne*t; else break; j-ne*t=b-ne*t; b-ne*t=j;/將所輸入的進(jìn)程插入進(jìn)程鏈 min-from=min-from+D.size;/改變?cè)摽臻e塊的起始地址 min-size=min-size-D.size;/改變?cè)摽臻e塊的剩余大小 return t;
26、最壞適應(yīng)算法 為了克制最正確適應(yīng)算法把空閑區(qū)切割得太小的缺點(diǎn),人們提出了一種最壞適應(yīng)算法,即每次分配時(shí),總是將最大的空閑區(qū)切去一局部分配給請(qǐng)求者,剩余的局部仍是一個(gè)較大的空閑區(qū)。防止了空閑區(qū)越分越小的問題。 要求空閑區(qū)按容量遞減的順序排列。 分配:進(jìn)程申請(qǐng)存儲(chǔ)區(qū)時(shí),檢查空閑區(qū)表鏈的第一個(gè)空閑區(qū)的大小是否滿足要求,假設(shè)不滿足則令進(jìn)程等待;假設(shè)滿足則從該空閑區(qū)中分配一局部存儲(chǔ)區(qū)給用戶,剩下的局部仍作為空閑區(qū)。最壞適應(yīng)算法int WF() int t=0; readyque D; printf請(qǐng)輸入進(jìn)程名:); scanf%,D.name); printf輸入進(jìn)程申請(qǐng)空間大小:); scanf%,&
27、D.size);/輸入進(jìn)程申請(qǐng)的空間大小 idly l=Is;/l指向空閑鏈表ls頭 idly min=NULL; int mt=0; busy b=Bs;/b指向已分配鏈表Bs頭 /找到空閑分區(qū)小滿足進(jìn)程的請(qǐng)求且尺寸最大的結(jié)點(diǎn) while(l) if(D.sizesize)/判斷進(jìn)程所申請(qǐng)的大小是否小于空閑區(qū)的各結(jié)點(diǎn)大小 if(l-sizemt) mt=l-size; min=l;/min指向空閑區(qū)中尺寸最大的結(jié)點(diǎn)t=1; l=l-ne*t;/l指向空閑鏈表下一個(gè)結(jié)點(diǎn) if(mt!=0)/判斷是否找到了空閑區(qū)的滿足結(jié)點(diǎn) busy j; j=(busy)malloc(sizeof(busysp
28、ace); j-from=min-from; for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t)/尋找插入到已分配鏈表中的位置 if(b-ne*t-fromfrom) b=b-ne*t; else break; /把此進(jìn)程結(jié)點(diǎn)j插入到已分配鏈表中 j-ne*t=b-ne*t; b-ne*t=j; /修改空閑鏈表的相應(yīng)結(jié)點(diǎn)的參數(shù) min-from=min-from+D.size; min-size=min-size-D.size; return t;可變分區(qū)的回收當(dāng)*個(gè)進(jìn)程釋放*存儲(chǔ)區(qū)時(shí),系統(tǒng)首先檢查釋放區(qū)是否與系統(tǒng)中的空閑區(qū)
29、相鄰假設(shè)相鄰則把釋放區(qū)合并到相鄰的空閑區(qū)去,否則把釋放區(qū)作為一個(gè)空閑區(qū)插入到空閑表的適當(dāng)位置。釋放區(qū)與空閑區(qū)相鄰的四種情況。釋放區(qū)與前空閑區(qū)相鄰:把釋放區(qū)與前空閑區(qū)合并到一個(gè)空閑區(qū)。其首址仍為前空閑區(qū)首址,大小為釋放區(qū)大小與空閑區(qū)大小之和。釋放區(qū)與后空閑區(qū)相鄰:則把釋放區(qū)合并到后空閑區(qū),其首地址為釋放區(qū)首地址,大小為二者之和。釋放區(qū)與前后兩空閑區(qū)相鄰:這三個(gè)區(qū)合為一個(gè)空閑區(qū),首地址為前空閑區(qū)首址,大小為這三個(gè)空閑區(qū)之和,并取消后空閑區(qū)表目。釋放區(qū)不與任何空閑區(qū)相鄰:將釋放區(qū)作為一個(gè)空閑區(qū),將其大小和首址插入到空閑區(qū)表的適當(dāng)位置?;厥沾嫠惴╥nt recover() readyque D; pr
30、intf請(qǐng)輸入想要回收的進(jìn)程名); scanf%,D.name); busy b=Bs; idly l=Is; while(b-ne*t) /查找輸入的進(jìn)程名是否在已分配鏈表中 bool yo=1; for(int i=0;ine*i=D.namei) yo=yo*1; else yo=0; /如果在已分配鏈表中則釋放該結(jié)點(diǎn)所占空間 if(yo) int t=b-ne*t-from; int ts=b-ne*t-r.size; while(l) if(l-fromt+ts)/所回收進(jìn)程與空閑結(jié)點(diǎn)上下都不鄰接 idly tl; tl=(idly)malloc(sizeof(idlyspace); tl-from=t; tl-size=ts; tl-ne*t=l; Is=tl; break; if(l-from=t+ts)/所回收進(jìn)程與空閑結(jié)點(diǎn)下鄰接 l-from=t; l-size=l-size+ts; busy tb=b-ne*t; b-ne*t=b-ne*t-ne*t; free(tb); return 1; if(l-from+l-sizefrom=t; tl-size=ts; tl-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資股權(quán)合同范本
- 稅務(wù)擔(dān)保合同范本
- 薦股合作協(xié)議合同
- 蜜蜂賠償協(xié)議書
- 視頻錄像協(xié)議書
- 認(rèn)籌購(gòu)房協(xié)議書
- 設(shè)備折舊協(xié)議書
- 設(shè)備退車協(xié)議書
- 評(píng)審合作協(xié)議書
- 試聘期合同協(xié)議
- 2025年廣西公需科目答案6卷
- 黔東南州2024-2025學(xué)年度第一學(xué)期期末文化水平測(cè)試七年級(jí)數(shù)學(xué)試卷
- 特氣系統(tǒng)培訓(xùn)
- 食品加工項(xiàng)目可行性研究報(bào)告
- 工程材料知到智慧樹章節(jié)測(cè)試課后答案2024年秋中國(guó)石油大學(xué)(華東)
- 鍍鋅鋼管供貨及售后服務(wù)方案
- 鋼板樁支護(hù)施工方案完整版
- 攪拌車包月合同模板
- 2020海灣DH-GSTN5208測(cè)溫式電氣火災(zāi)監(jiān)控探測(cè)器安裝使用說明書
- 音樂與健康智慧樹知到期末考試答案2024年
- 國(guó)開電大《人文英語4》一平臺(tái)機(jī)考總題庫(kù)珍藏版
評(píng)論
0/150
提交評(píng)論