操作系統(tǒng)課程設(shè)計報告-連續(xù)動態(tài)分區(qū)內(nèi)存管理模擬實現(xiàn)_第1頁
操作系統(tǒng)課程設(shè)計報告-連續(xù)動態(tài)分區(qū)內(nèi)存管理模擬實現(xiàn)_第2頁
操作系統(tǒng)課程設(shè)計報告-連續(xù)動態(tài)分區(qū)內(nèi)存管理模擬實現(xiàn)_第3頁
操作系統(tǒng)課程設(shè)計報告-連續(xù)動態(tài)分區(qū)內(nèi)存管理模擬實現(xiàn)_第4頁
操作系統(tǒng)課程設(shè)計報告-連續(xù)動態(tài)分區(qū)內(nèi)存管理模擬實現(xiàn)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、-PAGE . z.操作系統(tǒng)課程設(shè)計連續(xù)動態(tài)分區(qū)存 管理模擬實現(xiàn)目錄操作系統(tǒng)課程設(shè)計1 引言3課程設(shè)計目的和容 3 需求分析3 概要設(shè)計3開發(fā)環(huán)境 4系統(tǒng)分析設(shè)計 4有關(guān)了解存管理的相關(guān)理論4存管理概念4存管理的必要性4存的物理組織4什么是虛擬存5連續(xù)動態(tài)分區(qū)存管理方式5單一連續(xù)分配單個分區(qū)) 5固定分區(qū)存儲管理5可變分區(qū)存儲管理動態(tài)分區(qū) 5可重定位分區(qū)存儲管理5問題描述和分析6程序流程圖6數(shù)據(jù)構(gòu)造體分析8主要程序代碼分析9分析并實現(xiàn)四種存分配算法 11最先適應算11下次適應分配算法13最優(yōu)適應算法16最壞適應算法 18回收存算法20調(diào)試與操作說明22初始界面22模擬存分配23已分配分區(qū)說明外

2、表24空閑區(qū)說明表界面24回收存界面25重新申請存界面26.總結(jié)與體會 28參考文獻 28引言操作系統(tǒng)是最重要的系統(tǒng)軟件,同時也是最活潑的學科之一。我們通過操作系統(tǒng)可以理解計算機系統(tǒng)的資源如何組織,操作系統(tǒng)如何有效地管理這些系統(tǒng)資源,用戶如何通過操作系統(tǒng)與計算機系統(tǒng)打交道。存儲器是計算機系統(tǒng)的重要組成局部,近年來,存儲器容量雖然一直在不斷擴大,但仍不能滿足現(xiàn)代軟件開展的需要,因此,存儲器仍然是一種珍貴而又緊俏的資源。如何對它加以有效的管理,不僅直接影響到存儲器的利用率,而且還對系統(tǒng)性能有重大影響。而動態(tài)分區(qū)分配屬于連續(xù)分配的一種方式,它至今仍在存分配方式中占有一席之地。課程設(shè)計目的和容: 理解

3、存管理的相關(guān)理論,掌握連續(xù)動態(tài)分區(qū)存管理的理論;通過對實際問題的編程實現(xiàn),獲得實際應用和編程能力。 編寫程序?qū)崿F(xiàn)連續(xù)動態(tài)分區(qū)存管理方式,該程序管理一塊虛擬存,實現(xiàn)存分配和回收功能。 分析并實現(xiàn)四種存分配算法,即最先適應算法,下次最先適應算法,最優(yōu)適應算法,最壞適應算法。存分配算法和回收算法的實現(xiàn)。需求分析動態(tài)分區(qū)分配是根據(jù)進程的實際需要,動態(tài)地為之分配存空間。在實現(xiàn)動態(tài)分區(qū)分配時,將涉及到分區(qū)分配中所用的數(shù)據(jù)構(gòu)造、分區(qū)分配算法和分區(qū)的分配和回收操作這樣三個問題。常用的數(shù)據(jù)構(gòu)造有動態(tài)分區(qū)表和動態(tài)分區(qū)鏈。在對數(shù)據(jù)構(gòu)造有一定掌握程度的情況下設(shè)計合理的數(shù)據(jù)構(gòu)造來描述存儲空間,實現(xiàn)分區(qū)存儲管理的存分配功

4、能,應該選擇最適宜的適應算法首次適應算法,最正確適應算法,最后適應算法,最壞適應算法,在動態(tài)分區(qū)存儲管理方式中主要實現(xiàn)存分配和存回收算法,在這些存儲管理中間必然會有碎片的產(chǎn)生,當碎片產(chǎn)生時,進展碎片的拼接等相關(guān)的容概要設(shè)計本程序采用機構(gòu)化模塊化的設(shè)計方法,共分為四大模塊。最先適應算法實現(xiàn) 從空閑分區(qū)表的第一個表目起查找該表,把最先能夠滿足要求的空閑區(qū)分配給作業(yè),這種方法目的在于減少查找時間。為適應這種算法,空閑分區(qū)表空閑區(qū)鏈中的空閑分區(qū)要按地址由低到高進展排序。該算法優(yōu)先使用低址局部空閑區(qū),在低址空間造成許多小的空閑區(qū),在高地址空間保存大的空閑區(qū)。下次適應分配算法實現(xiàn)該算法是最先適應算法的變種

5、。在分配存空間時,不再每次從表頭鏈首開場查找,而是從上次找到空閑區(qū)的下一個空閑開場查找,直到找到第一個能滿足要求的的空閑區(qū)為止,并從中劃出一塊與請求大小相等的存空間分配給作業(yè)。該算法能使存中的空閑區(qū)分布得較均勻。最優(yōu)適應算法實現(xiàn)它從全部空閑區(qū)中找出能滿足作業(yè)要求的、且大小最小的空閑分區(qū),這種方法能使碎片盡量小。為適應此算法,空閑分區(qū)表空閑區(qū)鏈中的空閑分區(qū)要按從小到大進展排序,自表頭開場查找到第一個滿足要求的自由分區(qū)分配。最壞算法實現(xiàn)最壞適應分配算法要掃描整個空閑分區(qū)或鏈表,總是挑選一個最大的空閑分區(qū)分割給作業(yè)使用。該算法要求將所有的空閑分區(qū)按其容量從大到小的順序形成一空閑分區(qū)鏈,查找時只要看第

6、一個分區(qū)能否滿足作業(yè)要求。開發(fā)環(huán)境: win7 下 VC+6.0系統(tǒng)分析設(shè)計: 相關(guān)算法原理,算法流程圖,涉及的數(shù)據(jù)構(gòu)造容都相應包含在各章節(jié)中有關(guān)了解存管理的相關(guān)理論存管理概念: 存管理,是指軟件運行時對計算機存資源的分配和使用的技術(shù)。其最主要的目的是如何高效,快速的分配,并且在適當?shù)臅r候釋放和回收存資源。存不是預先劃分好的,而是在系統(tǒng)運行的過程中建立分區(qū).當作業(yè)裝入主存時,根據(jù)作業(yè)所需要的主存容量查看是否有足夠的主存空間,假設(shè)有則按需要分割一個分區(qū)給該作業(yè);否則令該作業(yè)等待.分區(qū)長度不固定分區(qū)個數(shù)不固定。這種存儲管理的方法克制了固定分區(qū)嚴重浪費主存的問題,提高了主存資源的利用率。存管理的必要

7、性:存管理對于編寫出高效率的 Windows 程序是非常重要的,這是因為Windows 是多任務(wù)系統(tǒng),它的存管理和單任務(wù)的 DOS 相比有很大的差異。DOS是單任務(wù)操作系統(tǒng),應用程序分配到存后,如果它不主動釋放,系統(tǒng)是不會對它作任何改變的;但 Windows 卻不然,它在同一時刻可能有多個應用程序共享存,有時為了使*個任務(wù)更好地執(zhí)行,Windows 系統(tǒng)可能會對其它任務(wù)分配的存進展移動,甚至刪除。因此,我們在 Windows 應用程序中使用存時,要遵循Windows 存管理的一些約定,以盡量提高 Windows 存的利用率。 1.3 存的物理組織:物理地址: 把存分成假設(shè)干個大小相等的存儲單元

8、,每個存儲單元占 8 位,稱作字節(jié)byte。每個單元給一個編號,這個編號稱為物理地址存地址、絕對地址、實地址。二、物理地址空間: 物理地址的集合稱為物理地址空間主存地址空間,它是一個一維空間。什么是虛擬存:虛擬存是存管理技術(shù)的一個極其實用的創(chuàng)新。它是一段程序由操作系統(tǒng)調(diào)度,持續(xù)監(jiān)控著所有物理存中的代碼段、數(shù)據(jù)段,并保證他們在運行中的效率以及可靠性,對于每個用戶層user-level的進程分配一段虛擬存空間。當進程建立時,不需要在物理存件之間搬移數(shù)據(jù),數(shù)據(jù)儲存于磁盤的虛擬存空間,也不需要為該進程去配置主存空間,只有當該進程被被調(diào)用的時候才會被加載到主存。連續(xù)動態(tài)分區(qū)存管理方式的實現(xiàn)在早期的操作系

9、統(tǒng)中,主存分配廣泛采用連續(xù)分配方式。 連續(xù)分配方式,是指為一個用戶程序分配一個連續(xù)的存空間,該連續(xù)存空間指的的是物理存。下面介紹連續(xù)分配的四種方式。單一連續(xù)分配單個分區(qū)最簡單的存儲管理方式,用于多道程序設(shè)計技術(shù)之前。 存分為系統(tǒng)區(qū)和用戶區(qū),系統(tǒng)區(qū)由操作系統(tǒng)使用。用戶區(qū)作為一個連續(xù)的分區(qū)分配給一個作業(yè)。 分區(qū)存儲管理是滿足多道程序設(shè)計的最簡單的一種存儲管理方法,它允許多 4個用戶程序同時存在系統(tǒng)存中,即共享存空間。 按分區(qū)劃分方式可分為固定分區(qū)和可變分區(qū)。固定分區(qū)存儲管理 把存的用戶區(qū)預先劃分成多個分區(qū),每個分區(qū)大小可以一樣,也可以不同。分區(qū)的劃分由計算機的操作員或者由操作系統(tǒng)給出,并給出主存分

10、配表 分區(qū)個數(shù)固定,分區(qū)的大小固定。 一個分區(qū)中可裝入一個作業(yè),作業(yè)執(zhí)行過程中不會改變存放區(qū)域。 早期的 IBM 的 OS/MFT具有固定任務(wù)數(shù)的多道程序系統(tǒng)采用了這種固定分區(qū)的方法??勺兎謪^(qū)存儲管理動態(tài)分區(qū)存不是預先劃分好的,而是在系統(tǒng)運行的過程中建立分區(qū).當作業(yè)裝入主存時,根據(jù)作業(yè)所需要的主存容量查看是否有足夠的主存空間,假設(shè)有則按需要分割一個分區(qū)給該作業(yè);否則令該作業(yè)等待。 分區(qū)長度不固定分區(qū)個數(shù)不固定。 這種存儲管理的方法克制了固定分區(qū)嚴重浪費主存的問題,提高了主存資源的利用率。 操作系統(tǒng)采用可變分區(qū)存儲管理??芍囟ㄎ环謪^(qū)存儲管理 解決碎片問題的一種簡單方法是采用可重定位分區(qū)分配.。

11、其中心思想是,把不同程序,且在存中地址不連續(xù)的想法讓他們連續(xù)。例:存中現(xiàn)有 3 個空閑區(qū),現(xiàn)有一作業(yè)到達,要求獲得 30k 存空間,沒有分區(qū)滿足容量要求,假設(shè)想把作業(yè)裝入,可將存中所有作業(yè)進展移動,這樣把原來分散的空閑區(qū)聚集成一個大的空閑區(qū)。 將存中的作業(yè)進展移動使它們連接在一起把原來分散的多個小分區(qū)拼接成一個大的空閑區(qū).這個過程稱為緊湊或移動。 需解決的問題:每次緊湊后程序或數(shù)據(jù)裝入的物理地址變化采用動態(tài)重定位。問題描述和分析系統(tǒng)應利用*種分配算法,從空閑分區(qū)鏈表中找到所需大小的分區(qū),如果空閑分區(qū)大小大于請求分區(qū)大小,則從該分區(qū)中按改請求的大小劃分出一塊存空間大小劃分出一塊存空間分配出去,余

12、下的局部仍留在空閑鏈表中。然后,將分配區(qū)的首址返回給調(diào)用者。當進程運行完畢師存時,系統(tǒng)根據(jù)回收區(qū)的首址,從空閑區(qū)中找到相應的插入點,此時可能出現(xiàn)以下四種情況之一:該空閑區(qū)的上下兩相鄰分區(qū)都是空閑區(qū):將三個空閑區(qū)合并為一個空閑區(qū)。新空閑區(qū)的起始地址為上空閑區(qū)的起始地址,大小為三個空閑區(qū)之和??臻e區(qū)合并后,取消可用表或自由鏈中下空閑區(qū)的表目項或鏈指針,修改上空閑區(qū)的對應項。 該空閑區(qū)的上相鄰區(qū)是空閑區(qū):將釋放區(qū)與上空閑區(qū)合并為一個空閑區(qū),其起始地址為上空閑區(qū)的起始地址,大小為上空閑區(qū)與釋放區(qū)之和。合并后,修改上空閑區(qū)對應的可用表的表目項或自由鏈指針。 該空閑區(qū)的下相鄰區(qū)是空閑區(qū):將釋放區(qū)與下空閑區(qū)

13、合并,并將釋放區(qū)的起始地址作為合并區(qū)的起始地址。合并區(qū)的長度為釋放區(qū)與下空閑區(qū)之和。同理,合并后修改可用表或自由鏈中相應的表目項或鏈指針。兩相鄰區(qū)都不是空閑區(qū):釋放區(qū)作為一個新空閑可用區(qū)插入可用表或自由鏈。程序流程圖存分配流程圖,如圖存回收流程圖,如圖數(shù)據(jù)構(gòu)造體分析進程屬性構(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ù)/代碼請?zhí)砑舆m當?shù)淖⑨尅nt 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歡送來到動態(tài)分區(qū)存儲管理系統(tǒng)nn); printf(請選擇要執(zhí)行的算法:n);

15、 printf( 1.最先適應算法 n); printf( 2.下次適應算法 n); printf(3.最優(yōu)適應算法 n); printf( 4.最壞適應算法 n); printf(n); printf(請輸入您的選擇:); scanf(%d,&t); int i; while(i!=5) printf(n); printf(操作菜單如下:請選擇n); printf(1.輸入進程分配空間 n); printf( 2.進程撤銷回收空間 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(選擇算法錯誤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;第三章 :分析并實現(xiàn)四種存分配算法最先適應算法空閑區(qū)按地址從小到大的次序排列。 分配:當進程申請大小為 SIZE 的存時,系統(tǒng)順序查找空閑區(qū)表鏈,直到找到容量滿足要求SIZE的空閑區(qū)為止。從該空閑區(qū)中劃出大小為 SIZE的分區(qū)分配給進程,余下的局部仍作為一個空閑區(qū),但要修改其首址和大小。 優(yōu)點:這種算法是盡可能地利用低地址局部的空閑區(qū),而盡量地保證高地址 6局部的大空閑區(qū),有利于大作業(yè)的裝入。缺點:主存低地址和高地址分區(qū)利用不均衡。在低地址局部集中了許多非常小的空閑區(qū)碎片降低了主存的

18、利用率。最先適應算法int FF() int t=0; readyque D; printf請輸入進程名:); scanf%,D.name); printf輸入進程申請空間大小:); scanf%,&D.size); idly l=Is; int mt=256; busy b=Bs; idly min=NULL; while(l)/尋找空閑表小滿足申請進程所需大小并且起址最小的空閑結(jié)點 if(D.sizesize) if(l-fromfrom; min=l; t=1; l=l-ne*t; if(mt!=256)/如果找到則為進程分配空間 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;下次適應分配算法 最先適應算法的變種。總是從空閑區(qū)上次掃描完畢處順序查找空閑區(qū)表鏈,直到找到第一個滿足容量要求的空閑區(qū)為止,分割一局部給作業(yè),剩余局部仍作為空閑

20、區(qū)。下次適應分配算法int NF() int t=0; readyque D; printf請輸入進程名:); scanf%,D.name); printf輸入進程申請空間大小:); scanf%,&D.size); int mt=256; idly l=Is2; idly min=NULL; busy b=Bs; while(l) /尋找空閑表小滿足申請進程所需大小并且起址最小的空閑結(jié)點 if(D.sizesize) if(l-fromfrom; min=l; t=1; l=l-ne*t; if(mt!=256)/如果找到則為進程分配空間 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; /將申請空間進程插入到已分配鏈表中 j-ne*t=b-ne*t; b-ne*t=j; /修改相應空閑節(jié)點的起址和大小 min-from=min-from+D.size; min-size=min-size-D.size; Is2=min-ne*t;/ls2指向修改結(jié)點的下一個結(jié)點 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)適應算法空閑區(qū)按容量遞增的次序排列。 分配:當進程申請存儲空間,系統(tǒng)順序查找空閑區(qū)表鏈,直到找到第一個滿足容量要求的空閑區(qū)為止。 采用最優(yōu)適應算法選中的空閑區(qū)是滿足容量要求的最小空閑區(qū)。 優(yōu)點:選中的空閑區(qū)是滿足容量要求的最小空閑區(qū),而不致于毀掉較大的空閑區(qū)。 缺點:空閑區(qū)的大小一般與申請分區(qū)大小不相等,因此將其一分為二,留下來的空閑區(qū)一般情況下是很小的,以致無法使用。隨著時間的推移,系統(tǒng)中的小空閑區(qū)會越來越多,從而造成存儲空間的浪費。最優(yōu)適應算法int B

24、F()int t=0; readyque D; printf請輸入進程名:); scanf%,D.name); printf輸入進程申請空間大小:); scanf%,&D.size); idly l=Is; idly min=NULL; int mt=256; busy b=Bs; while(l)/在空閑鏈中尋找第一個大于所輸入的進程大小的空閑塊 if(D.sizesize) if(l-sizesize; min=l; t=1; l=l-ne*t; if(mt!=256)/找到第一個滿足要求的空閑塊 busy j; j=(busy)malloc(sizeof(busyspace);/申請分配

25、用于存放進程的存空間 j-from=min-from;/將第一個滿足要求的空閑塊min的首地址賦給j for(int i=0;i=D.namei; j-r.size=D.size; while(b-ne*t)/按從小到大的順序查找新進程在已分配區(qū)中的位置 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;

26、最壞適應算法 為了克制最正確適應算法把空閑區(qū)切割得太小的缺點,人們提出了一種最壞適應算法,即每次分配時,總是將最大的空閑區(qū)切去一局部分配給請求者,剩余的局部仍是一個較大的空閑區(qū)。防止了空閑區(qū)越分越小的問題。 要求空閑區(qū)按容量遞減的順序排列。 分配:進程申請存儲區(qū)時,檢查空閑區(qū)表鏈的第一個空閑區(qū)的大小是否滿足要求,假設(shè)不滿足則令進程等待;假設(shè)滿足則從該空閑區(qū)中分配一局部存儲區(qū)給用戶,剩下的局部仍作為空閑區(qū)。最壞適應算法int WF() int t=0; readyque D; printf請輸入進程名:); scanf%,D.name); printf輸入進程申請空間大小:); scanf%,&

27、D.size);/輸入進程申請的空間大小 idly l=Is;/l指向空閑鏈表ls頭 idly min=NULL; int mt=0; busy b=Bs;/b指向已分配鏈表Bs頭 /找到空閑分區(qū)小滿足進程的請求且尺寸最大的結(jié)點 while(l) if(D.sizesize)/判斷進程所申請的大小是否小于空閑區(qū)的各結(jié)點大小 if(l-sizemt) mt=l-size; min=l;/min指向空閑區(qū)中尺寸最大的結(jié)點t=1; l=l-ne*t;/l指向空閑鏈表下一個結(jié)點 if(mt!=0)/判斷是否找到了空閑區(qū)的滿足結(jié)點 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; /把此進程結(jié)點j插入到已分配鏈表中 j-ne*t=b-ne*t; b-ne*t=j; /修改空閑鏈表的相應結(jié)點的參數(shù) min-from=min-from+D.size; min-size=min-size-D.size; return t;可變分區(qū)的回收當*個進程釋放*存儲區(qū)時,系統(tǒng)首先檢查釋放區(qū)是否與系統(tǒng)中的空閑區(qū)

29、相鄰假設(shè)相鄰則把釋放區(qū)合并到相鄰的空閑區(qū)去,否則把釋放區(qū)作為一個空閑區(qū)插入到空閑表的適當位置。釋放區(qū)與空閑區(qū)相鄰的四種情況。釋放區(qū)與前空閑區(qū)相鄰:把釋放區(qū)與前空閑區(qū)合并到一個空閑區(qū)。其首址仍為前空閑區(qū)首址,大小為釋放區(qū)大小與空閑區(qū)大小之和。釋放區(qū)與后空閑區(qū)相鄰:則把釋放區(qū)合并到后空閑區(qū),其首地址為釋放區(qū)首地址,大小為二者之和。釋放區(qū)與前后兩空閑區(qū)相鄰:這三個區(qū)合為一個空閑區(qū),首地址為前空閑區(qū)首址,大小為這三個空閑區(qū)之和,并取消后空閑區(qū)表目。釋放區(qū)不與任何空閑區(qū)相鄰:將釋放區(qū)作為一個空閑區(qū),將其大小和首址插入到空閑區(qū)表的適當位置?;厥沾嫠惴╥nt recover() readyque D; pr

30、intf請輸入想要回收的進程名); scanf%,D.name); busy b=Bs; idly l=Is; while(b-ne*t) /查找輸入的進程名是否在已分配鏈表中 bool yo=1; for(int i=0;ine*i=D.namei) yo=yo*1; else yo=0; /如果在已分配鏈表中則釋放該結(jié)點所占空間 if(yo) int t=b-ne*t-from; int ts=b-ne*t-r.size; while(l) if(l-fromt+ts)/所回收進程與空閑結(jié)點上下都不鄰接 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)/所回收進程與空閑結(jié)點下鄰接 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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論