存儲分配方式
㈠ 內存的連續分配有哪些方式,各有什麼特點
內存的連續分配方式有:單一連續分配、固定分區分配、動態分區分配以及動態重定位分區分配四種方式。
單一連續分配:只能用於單用戶、單任務的操作系統中。
固定分區分配:可運行多道程序的存儲管理方式。
動態分區分配:根據進程的實際需要,動態地為之分配內存空間。
可重定位分區分配:必須把一個系統或用戶程序裝入一連續的內存空間。
㈡ 儲位分配有那三種方式
第一種方式是機械,第二個方式是自動,第三種方式是半自動
㈢ 內存的分配方式有幾種
內存分配方式有三種:
[1]從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變數,static變數。
[2]在棧上創建。在執行函數時,函數內局部變數的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,效率很高,但是分配的內存容量有限。
[3]從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc或new申請任意多少的內存,程序員自己負責在何時用free或delete釋放內存。動態內存的生存期由程序員決定,使用非常靈活,但如果在堆上分配了空間,就有責任回收它,否則運行的程序會出現內存泄漏,頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。
㈣ 連續分配存儲管理方式
一、單一連續分配
最簡單的一種存儲管理方式,只能用於單用戶、單任務的操作系統中。
優點:易於管理。
缺點:對要求內存空間少的程序,造成內存浪費;程序全部裝入,很少使用的程序部分也佔用內存。
二、固定分區分配
把內存分為一些大小相等或不等的分區(partition),每個應用進程佔用一個分區。操作系統佔用其中一個分區。支持多個程序並發執行,適用於多道程序系統和分時系統。最早的多道程序存儲管理方式。
缺點:內碎片(一個分區內的剩餘空間)造成浪費;劃分為幾個分區,便只允許幾道作業並發,分區總數固定,限制並發執行的程序數目。
三、動態分區分配
1、分區的大小不固定:在裝入程序時根據進程實際需要,動態分配內存空間,即——需要多少劃分多少。
2、空閑分區表項:從1項到n項:內存會從初始的一個大分區不斷被劃分、回收從而形成內存中的多個分區。
3、優點:並發進程數沒有固定數的限制,不產生內碎片。缺點:有外碎片(分區間無法利用的空間)
4、分區分配演算法
①首次適應演算法FF(first-fit)
空閑分區排序:以地址遞增的次序鏈接。
檢索:分配內存時,從鏈首開始順序查找直至找到一個大小能滿足要求的空閑分區;
分配:從該分區中劃出一塊作業要求大小的內存空間分配給請求者,餘下的空閑分區大小改變仍留在空閑鏈中。
若從頭到尾檢索不到滿足要求的分區則分配失敗
優點:優先利用內存低址部分,保留了高地址部分的大空閑區;
缺點:但低址部分不斷劃分,會產生較多小碎片;而且每次查找從低址部分開始,會逐漸增加查找開銷。
②循環首次適應演算法
空閑分區排序:按地址
檢索:從上次找到的空閑分區的下一個空閑分區開始查找,直到找到一個能滿足要求的空閑分區。為實現演算法,需要設置一個起始查尋指針並採用循環查找方式
分配:分出需要的大小
優點:空閑分區分布均勻,減少查找開銷
缺點:缺乏大的空閑分區
③最佳適應演算法
總是把能滿足要求、又是最小的空閑分區分配給作業,避免「大材小用」。
空閑分區排序:所有空閑分區按容量從小到大排序成空閑分區表或鏈。
檢索:從表或鏈的頭開始,找到的第一個滿足的就分配
分配:分出需要的大小
缺點:每次找到最合適大小的分區割下的空閑區也總是最小,會產生許多難以利用的小空閑區(外碎片)
④最差適應演算法/最壞匹配法
基本不留下小空閑分區,但會出現缺乏較大的空閑分區的情況。
⑤快速適應演算法
根據進程常用空間大小進行劃分,相同大小的串成一個鏈,需管理多個各種不同大小的分區的鏈表。進程需要時,從最接近大小需求的鏈中摘一個分區。
能快速找到合適分區,但鏈表信息會很多;實際上是空間換時間。
5、回收分區
(1)回收區(首址a)與一個分區f1末尾(首址b+大小)鄰接:將回收區與f1合並,修改f1的表項的分區大小
(2)回收區(首址a+大小)與一個分區f2的首址b鄰接:將回收區與f2合並,修改f2的表項的首址、分區大小
(3) (1)(2)兩種情況都有,則將回收區與前後兩個分區F1、F2鄰接:將三個分區合並,使用F1的表項和F1的首址,取消F2的表項,大小為三者之和
(4) 回收區沒有鄰接的分區:為回收區單獨建立新表項,填寫回收區的首址與大小,根據其首址插到空閑鏈中的適當位置
四、動態重定位分區分配——有緊湊功能的動態分區分配
動態重定位分區分配演算法與動態分區分配演算法基本相同,差別在於增加了緊湊的功能。
夥伴系統
分區大小有規定,且分區動態變化
1、無論已分配還是空閑分區,大小都為2的k此冪。若整個可分配空間大小為2m,則1≤k≤m.
2、隨著系統運行,內存被不斷劃分,形成若干不連續的空閑分區。對每一類具有相同大小的空閑分區設置一雙向鏈表,即會有k個鏈表,鏈表中的分區大小都是2m。
3、進程申請n個大小的空間時,計算n= 2i。則找i對應的鏈表。若i大小的鏈表沒有,則找i+1的鏈表。找到的分區對半劃分後,一半用於分配,一半鏈接到較小一級的鏈表裡去。
4、一次分配和回收都可能對應多次的劃分和合並。
五、內存空間管理之對換
當內存空間還是滿足不了需求時,把內存中暫時不能運行、或暫時不用的程序和數據調到外存上,以騰出足夠的內存;把已具備運行條件的進程和進程所需要的程序和數據,調入內存。
整體對換(或進程對換):以整個進程為單位(連續分配)
頁面對換或分段對換:以頁或段為單位(離散分配)
㈤ 內存的分配方式,進程和線程的區別,進程間
內存的分配方式的分配方式有幾種?
1. 從靜態存儲區分配:此時的內存在程序編譯的時候已經分配好,並且在程序的整個運行期間都存在。全局變數,static變數等在此存儲。
2. 在棧區分配:相關代碼執行時創建,執行結束時被自動釋放。局部變數在此存儲。棧內存分配運算內置於處理器的指令集中,效率高,但容量有限。
3. 在堆區分配:動態分配內存。用new/malloc時開辟,delete/free時釋放。生存期由用戶指定,靈活。但有內存泄露等問題。
進程和線程的區別
線程是指進程內的一個執行單元,也是進程內的可調度實體。與進程的區別:
(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位。
(2)並發性:不僅進程之間可以並發執行,同一個進程的多個線程之間也可並發執行。
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源.
(4)系統開銷:在創建或撤消進程時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於創建或撤消線程時的開銷
,
1)管道:管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系的進程之間使用。進程的親緣關系通常是指父子進程關系。
2)有名管道(FIFO):有名管道也是半雙工的通信方式,但是允許在沒有親緣關系的進程之間使用,管道是先進先出的通信方式。
3)信號量:信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作為一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。
4)消息隊列:消息隊列是有消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式位元組流以及緩沖區大小受限等缺點。
5)信號 ( sinal ) :信號是一種比較復雜的通信方式,用於通知接收進程某個事件已經發生。
6)共享內存( shared memory ) :共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號量,配合使用,來實現進程間的同步和通信。
7)套接字( socket ) :套接字也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同機器間的進程通信。
㈥ c語言內存有幾種分配方式
基本上C程序的元素存儲在內存的時候有3種分配策略:
靜態分配
如果一個變數聲明為全局變數或者是函數的靜態變數,這個變數的存儲將使用靜態分配方式。靜態分配的內存一般會被編譯器放在數據段或代碼段來存儲,具體取決於實現。這樣做的前提是,在編譯時就必須確定變數的大小。 以IA32的x86平台及gcc編譯器為例,全局及靜態變數放在數據段的低端;全局及靜態常量放在代碼段的高端
自動分配
函數的自動局部變數應該隨著函數的返回會自動釋放(失效),這個要求在一般的體系中都是利用棧(Stack)來滿足的。相比於靜態分配,這時候,就不必絕對要求這個變數在編譯時就必須確定變數的大小,運行時才決定也不遲,但是C89仍然要求在編譯時就要確定,而C99放鬆了這個限制。但無論是C89還是C99,都不允許一個已經分配的自動變數運行時改變大小。
所以說C函數永遠不應該返回一個局部變數的地址。
要指出的是,自動分配也屬於動態分配,甚至可以用alloca函數來像分配堆(Heap)一樣進行分配,而且釋放是自動的。
動態分配
還有一種更加特殊的情況,變數的大小在運行時有可能改變,或者雖然單個變數大小不變,變數的數目卻有很大彈性,不能靜態分配或者自動分配,這時候可以使用堆(Heap)來滿足要求。ANSI C定義的堆操作函數是malloc、calloc、realloc和free。
使用堆(Heap)內存將帶來額外的開銷和風險。
㈦ 常見的存儲分配策略有幾種它們都適合於什麼性質的語言
1 靜態分配若在編譯階段就能確定源程序中各個數據實體的存儲空間大小,則可以採用較簡單的靜態存儲管理。適合靜態管理的語言應具備條件:數組上下界是常數、過程調用不允許遞歸、不允許動態建立數據實體。
2棧式分配適用於允許遞歸調用的程序設計語言
3 堆式分配對於允許程序在運行時為變數動態申請和釋放存儲空間的語言,採用堆式分配是最有效的解決方案
㈧ 分區存儲管理中常用哪些分配策略
1、固定分區存儲管理
其基本思想是將內存劃分成若干固定大小的分區,每個分區中最多隻能裝入一個作業。當作業申請內存時,系統按一定的演算法為其選擇一個適當的分區,並裝入內存運行。由於分區大小是事先固定的,因而可容納作業的大小受到限制,而且當用戶作業的地址空間小於分區的存儲空間時,造成存儲空間浪費。
一、空間的分配與回收
系統設置一張「分區分配表」來描述各分區的使用情況,登記的內容應包括:分區號、起始地址、長度和佔用標志。其中佔用標志為「0」時,表示目前該分區空閑;否則登記佔用作業名(或作業號)。有了「分區分配表」,空間分配與回收工作是比較簡單的。
二、地址轉換和存儲保護
固定分區管理可以採用靜態重定位方式進行地址映射。
為了實現存儲保護,處理器設置了一對「下限寄存器」和「上限寄存器」。當一個已經被裝入主存儲器的作業能夠得到處理器運行時,進程調度應記錄當前運行作業所在的分區號,且把該分區的下限地址和上限地址分別送入下限寄存器和上限寄存器中。處理器執行該作業的指令時必須核對其要訪問的絕對地址是否越界。
三、多作業隊列的固定分區管理
為避免小作業被分配到大的分區中造成空間的浪費,可採用多作業隊列的方法。即系統按分區數設置多個作業隊列,將作業按其大小排到不同的隊列中,一個隊列對應某一個分區,以提高內存利用率。
2、可變分區存儲管理
可變分區存儲管理不是預先將內存劃分分區,而是在作業裝入內存時建立分區,使分區的大小正好與作業要求的存儲空間相等。這種處理方式使內存分配有較大的靈活性,也提高了內存利用率。但是隨著對內存不斷地分配、釋放操作會引起存儲碎片的產生。
一、空間的分配與回收
採用可變分區存儲管理,系統中的分區個數與分區的大小都在不斷地變化,系統利用「空閑區表」來管理內存中的空閑分區,其中登記空閑區的起始地址、長度和狀態。當有作業要進入內存時,在「空閑區表」中查找狀態為「未分配」且長度大於或等於作業的空閑分區分配給作業,並做適當調整;當一個作業運行完成時,應將該作業佔用的空間作為空閑區歸還給系統。
可以採用首先適應演算法、最佳(優)適應演算法和最壞適應演算法三種分配策略之一進行內存分配。
二、地址轉換和存儲保護
可變分區存儲管理一般採用動態重定位的方式,為實現地址重定位和存儲保護,系統設置相應的硬體:基址/限長寄存器(或上界/下界寄存器)、加法器、比較線路等。
基址寄存器用來存放程序在內存的起始地址,限長寄存器用來存放程序的長度。處理機在執行時,用程序中的相對地址加上基址寄存器中的基地址,形成一個絕對地址,並將相對地址與限長寄存器進行計算比較,檢查是否發生地址越界。
三、存儲碎片與程序的移動
所謂碎片是指內存中出現的一些零散的小空閑區域。由於碎片都很小,無法再利用。如果內存中碎片很多,將會造成嚴重的存儲資源浪費。解決碎片的方法是移動所有的佔用區域,使所有的空閑區合並成一片連續區域,這一技術稱為移動技術(緊湊技術)。移動技術除了可解決碎片問題還使內存中的作業進行擴充。顯然,移動帶來系統開銷加大,並且當一個作業如果正與外設進行I/O時,該作業是無法移動的。
3、頁式存儲管理
基本原理
1.等分內存
頁式存儲管理將內存空間劃分成等長的若干區域,每個區域的大小一般取2的整數冪,稱為一個物理頁面有時稱為塊。內存的所有物理頁面從0開始編號,稱作物理頁號。
2.邏輯地址
系統將程序的邏輯空間按照同樣大小也劃分成若干頁面,稱為邏輯頁面也稱為頁。程序的各個邏輯頁面從0開始依次編號,稱作邏輯頁號或相對頁號。每個頁面內從0開始編址,稱為頁內地址。程序中的邏輯地址由兩部分組成:
邏輯地址
頁號p
頁內地址 d
3.內存分配
系統可用一張「位示圖」來登記內存中各塊的分配情況,存儲分配時以頁面(塊)為單位,並按程序的頁數多少進行分配。相鄰的頁面在內存中不一定相鄰,即分配給程序的內存塊之間不一定連續。
對程序地址空間的分頁是系統自動進行的,即對用戶是透明的。由於頁面尺寸為2的整數次冪,故相對地址中的高位部分即為頁號,低位部分為頁內地址。
3.5.2實現原理
1.頁表
系統為每個進程建立一張頁表,用於記錄進程邏輯頁面與內存物理頁面之間的對應關系。地址空間有多少頁,該頁表裡就登記多少行,且按邏輯頁的順序排列,形如:
邏輯頁號
主存塊號
0
B0
1
B1
2
B2
3
B3
2.地址映射過程
頁式存儲管理採用動態重定位,即在程序的執行過程中完成地址轉換。處理器每執行一條指令,就將指令中的邏輯地址(p,d)取來從中得到邏輯頁號(p),硬體機構按此頁號查頁表,得到內存的塊號B』,便形成絕對地址(B』,d),處理器即按此地址訪問主存。
3.頁面的共享與保護
當多個不同進程中需要有相同頁面信息時,可以在主存中只保留一個副本,只要讓這些進程各自的有關項中指向內存同一塊號即可。同時在頁表中設置相應的「存取許可權」,對不同進程的訪問許可權進行各種必要的限制。
4、段式存儲管理
基本原理
1.邏輯地址空間
程序按邏輯上有完整意義的段來劃分,稱為邏輯段。例如主程序、子程序、數據等都可各成一段。將一個程序的所有邏輯段從0開始編號,稱為段號。每一個邏輯段都是從0開始編址,稱為段內地址。
2.邏輯地址
程序中的邏輯地址由段號和段內地址(s,d)兩部分組成。
3.內存分配
系統不進行預先劃分,而是以段為單位進行內存分配,為每一個邏輯段分配一個連續的內存區(物理段)。邏輯上連續的段在內存不一定連續存放。
3.6.2實現方法
1.段表
系統為每個進程建立一張段表,用於記錄進程的邏輯段與內存物理段之間的對應關系,至少應包括邏輯段號、物理段首地址和該段長度三項內容。
2.建立空閑區表
系統中設立一張內存空閑區表,記錄內存中空閑區域情況,用於段的分配和回收內存。
3.地址映射過程
段式存儲管理採用動態重定位,處理器每執行一條指令,就將指令中的邏輯地址(s,d)取來從中得到邏輯段號(s),硬體機構按此段號查段表,得到該段在內存的首地址S』, 該段在內存的首地址S』加上段內地址d,便形成絕對地址(S』+d),處理器即按此地址訪問主存。
5、段頁式存儲管理
頁式存儲管理的特徵是等分內存,解決了碎片問題;段式存儲管理的特徵是邏輯分段,便於實現共享。為了保持頁式和段式上的優點,結合兩種存儲管理方案,形成了段頁式存儲管理。
段頁式存儲管理的基本思想是:把內存劃分為大小相等的頁面;將程序按其邏輯關系劃分為若干段;再按照頁面的大小,把每一段劃分成若干頁面。程序的邏輯地址由三部分組成,形式如下:
邏輯地址
段號s
頁號p
頁內地址d
內存是以頁為基本單位分配給每個程序的,在邏輯上相鄰的頁面內存不一定相鄰。
系統為每個進程建立一張段表,為進程的每一段各建立一張頁表。地址轉換過程,要經過查段表、頁表後才能得到最終的物理地址。
㈨ 存儲器管理的連續分配存儲管理方式有哪些
連續分配方式.它是指為了一個用戶程序分配一個連續的內存空間.可以分為單一連續分配、固定分區分配、動態分區分配以及動態重定位分區分配四種方式。不過今天我們講的是固定分區分配和動態分區分配。
固定分區分配是最簡單的一種可運行多道程序的存儲管理方式。 一、基本思想:在系統中把用戶區預先劃分成若干個固定分區(每個分區首地址固定,每個分區長度是固定),每個分區可供一個用戶程序獨占使用。注意:每個分區大小可以相同,也可以不相同。 二、主存分配與回收:藉助主存分配表。 三、地址轉換(靜態重定位):物理地址=分區起始地址+邏輯地址。其中劃分分區方法包括分區大小相等和分區大小不等。
動態分區分配是根據進程的實際需要,動態地為之分配內存空間。一、基本思想:按用戶程序需求動態劃分主存供用戶程序使用。(每個分區首地址是動態的,每個分區的長度也是動態的) 二、主存分配與回收-->(1)未分配表(登記未分配出去的分區情況);(2)已分配表(登記已經分配出去的分區情況)。 三、地址轉換:物理地址=分區起始地址+邏輯地址。 四、分區分配演算法:從空閑分區中選擇分區分www.hbbz08.com 配給用戶程序的策略。 (1)首次適應演算法(最先適應)順序查詢為分配表,從表中找出第一個可以滿足作業申請的分區劃分部分分配給用戶作業。 (2)循環首次適應演算法 (3)最佳適應演算法:從空閑分區中找出一個能滿足用戶作業申請的最小空閑分區劃分給用戶作業使用(有利於大作業執行) (4)最壞適應演算法:從空閑分區中挑最大的分區劃分給用戶程序使用(有利於中、小作業執行)
㈩ 內存為程序分配空間的四種分配方式
存儲器是個寶貴但卻有限的資源。一流的操作系統,需要能夠有效地管理及利用存儲器。
內存為程序分配空間有四種分配方式:
1、連續分配方式
2、基本分頁存儲管理方式
3、基本分段存儲管理方式
4、段頁式存儲管理方式
首先講連續分配方式。 連續分配方式 出現的時間比較早,曾廣泛應用於20世紀60~70年代的OS中,但是它至今仍然在內存管理方式中佔有一席之地,原因在於它 實現起來比較方便,所需的硬體支持最少 。連續分配方式又可細分為四種: 單一連續分配、固定分區分配、動態分區分配和動態重定位分區分配 。
其中固定分區的分配方式,因為分區固定,所以缺乏靈活性,即 當程序太小時,會造成內存空間的浪費( 內部碎片 ) ; 程序太大時,一個分區又不足以容納,致使程序無法運行( 外部碎片 ) 。但盡管如此,當一台計算機去控制多個相同對象的時候,由於這些對象內存大小相同,所以完全可以採用這種內存管理方式,而且是最高效的。這里我們可以看出存儲器管理機制的多面性:沒有那種存儲器管理機制是完全沒有用的,在適合的場合下,一種被認為最不合理的分配方案卻可能稱為最高效的分配方案。 一切都要從實際問題出發,進行設計。
為了解決固定分區分配方式的缺乏靈活性,出現了 動態分配方式 。動態分配方式採用一些 尋表(Eg: 空閑鏈表 ) 的方式,查找能符合程序需要的空閑內存分區。但代價是增加了系統運行的開銷,而且內存空閑表本身是一個文件,必然會佔用一部分寶貴的內存資源,而且有些演算法還會增加內存碎片。
可重定位分區分配通過對程序實現成定位,從而可以將內存塊進行搬移,將小塊拼成大塊,將小空閑「緊湊」成大空閑,騰出較大的內存以容納新的程序進程。
連續分配方式 會形成許多「碎片」,雖然可以通過「緊湊」方式將許多碎片拼接成可用的大塊空間,但須為之付出很大開銷。所以提出了「 離散分配方式 」的想法。如果 離散分配的基本單位是頁 ,則稱為 分頁管理方式 ;如果離散分配的基本單位是段,則稱為 分段管理方式 。
分頁存儲管理是將一個進程的邏輯地址空間分成若干個大小相等的片,稱為頁面或頁,並為各頁加以編號,從0開始,如第0頁、第1頁等。相應地,也把內存空間分成與頁面相同大小的若干個存儲塊,稱為(物理)塊或頁框(frame),也同樣為它們加以編號,如0#塊、1#塊等等。在為進程分配內存時,以塊為單位將進程中的若干個頁分別裝入到多個可以不相鄰接的物理塊中。由於進程的最後一頁經常裝不滿一塊而形成了不可利用的碎片,稱之為「 頁內碎片 」。
在分頁系統中,允許將進程的各個頁離散地存儲在內存不同的物理塊中(所以能實現離散分配方式) ,但系統應能保證進程的正確運行,即能在內存中找到每個頁面所對應的物理塊。為此,系統又為每個進程建立了一張頁面映像表,簡稱 頁表 。在進程地址空間內的所有頁,依次在頁表中有一頁表項,其中記錄了相應頁在內存中對應的物理塊號。在配置了頁表後,進程執行時,通過查找該表,即可找到每頁在內存中的物理塊號。可見, 頁表的作用是實現從頁號到物理塊號的地址映射 。
為了能夠將用戶地址空間中的 邏輯地址,變換為內存空間中的物理地址 ,在系統中必須設置 地址變換機構 。地址變換任務是藉助於頁表來完成的。
頁表 的功能可由一組專門的寄存器來實現。由於寄存器成本較高,且大多數現代計算機的頁表又很大,使頁表項總數可達幾千甚至幾十萬個,顯然這些頁表項不可能都用寄存器來實現,因此,頁表大多駐留在內存中。因為一個進程可以通過它的PCB來時時保存自己的狀態,等到CPU要處理它的時候才將PCB交給寄存器,所以,系統中雖然可以運行多個進程,但也只需要一個頁表寄存器就可以了。
由於 頁表是存放在內存中 的,這使得 CPU在每存取一個數據時,都要兩次訪問內存 。為了提高地址變換速度,在地址變化機構中增設了一個 具有並行查詢能力的高速緩沖寄存器 ,又稱為「聯想寄存器」(Associative Lookaside Buffer)。
在單級頁表的基礎上,為了適應非常大的邏輯空間,出現了兩級和多級頁表,但是,他們的原理和單級頁表是一樣的,只不過為了適應地址變換層次的增加,需要在地址變換機構中增設外層的頁表寄存器。
分段存儲管理方式 的目的,主要是為了滿足用戶(程序員)在編程和使用上多方面的要求,其中有些要求是其他幾種存儲管理方式所難以滿足的。因此,這種存儲管理方式已成為當今所有存儲管理方式的基礎。
分段管理方式和分頁管理方式在實現思路上是很相似的,只不過他們的基本單位不同。分段有 段表 ,也有 地址變換機構 ,為了提高檢索速度,同樣增設 聯想寄存器(具有並行查詢能力的高速緩沖寄存器) 。所以有些具體細節在這個不再贅述。
分頁和分段的主要區別:
1、兩者相似之處:兩者 都採用離散分配方式,且都要通過地址映射機構來實現地址變換 。
2、兩者的不同之處:
(1)頁是信息的 物理單位 ,分頁是為實現離散分配方式,以消減內存的外零頭,提高內存的利用率。或者說,分頁僅僅是由於 系統管理的需要 而不是用戶的需要。段則是信息的 邏輯單位 ,它含有一組其意義相對完整的信息。 分段的目的是為了能更好地滿足用戶的需要 。
(2) 頁的大小固定 且由系統決定,而 段的長度卻不固定 。
(3)分頁的作業地址空間是 一維 的,即單一的線性地址空間;而分段的作業地址空間則是 二維 的。
前面所介紹的分頁和分段存儲管理方式都各有優缺點。 分頁系統能有效地 提高內存利用率 ,而分段系統則能很好地 滿足用戶需求 。 我們希望能夠把兩者的優點結合,於是出現了段頁式存儲管理方式。
段頁式系統的基本原理,是分段和分頁原理的結合,即 先將用戶程序分成若干個段,再把每個段分成若干個頁 ,並為每一個段賦予一個段名。在段頁式系統中,地址結構由段號、段內頁號和頁內地址三部分組成。
和前兩種存儲管理方式相同,段頁式存儲管理方式同樣需要增設聯想寄存器。
離散分配方式 基於將一個進程直接分散地分配到許多不相鄰的分區中的思想,分為分頁式存儲管理,分段式存儲管理和段頁式存儲管理. 分頁式存儲管理旨在提高內存利用率,滿足系統管理的需要,分段式存儲管理則旨在滿足用戶(程序員)的需要,在實現共享和保護方面優於分頁式存儲管理,而段頁式存儲管理則是將兩者結合起來,取長補短,即具有分段系統便於實現,可共享,易於保護,可動態鏈接等優點,又能像分頁系統那樣很好的解決外部碎片的問題,以及為各個分段可離散分配內存等問題,顯然是一種比較有效的存儲管理方式。
更多Linux內核視頻教程文檔資料免費領取【 內核 】自行獲取。
內核學習網站:
Linux內核源碼/內存調優/文件系統/進程管理/設備驅動/網路協議棧-學習視頻教程-騰訊課堂