記憶體空間

記憶體空間

記憶體是計算機系統中一個主要部件, 用於保存進程運行時的程式和數據,也稱可執行存儲器。在計算機中,記憶體空間一般是指主存儲器空間(物理地址空間)或系統為一個用戶程式分配記憶體空間。擴展記憶體空間的方法一般有增加記憶體大小和虛擬記憶體。

基本介紹

  • 中文名:記憶體空間
  • 外文名:Memory Space
  • 學科:計算機
  • 定義:系統為一個用戶程式分配記憶體空間
  • 有關術語:記憶體
  • 領域:計算機系統
簡介,分配記憶體空間方法,單一連續分配,固定分區分配,動態分區分配,動態重定位分區分配,擴充記憶體空間的方法,虛擬記憶體,物理地址擴展,

簡介

地址空間(address space)表示任何一個計算機實體所占用的記憶體大小。源程式經過彙編或編譯後再經過連結編輯程式加工形成的程式的裝配模組,及轉換為相對地址編址的模組,它是以0為基址順序進行編址的。相對地址也稱為邏輯地址或虛擬地址,把程式中由相對地址組成的空間叫做邏輯地址空間。相對地址空間通過地址再定位機構轉換到絕對地址空間,絕對地址空間也叫物理地址空間。記憶體空間一般是指主存儲器空間(物理地址空間)或系統為一個用戶程式分配記憶體空間。系統為一個用戶程式分配記憶體空間方法有單一連續分配、固定分區分配、動態分區分配以及動態重定位分區分配四種方式。

分配記憶體空間方法

單一連續分配

這是最簡單的一種存儲管理方式,但只能用於單用戶、單任務的作業系統中。採用這種存儲管理方式時,可把記憶體分為系統區和用戶區兩部分,系統區僅提供給 OS 使用,通常是放在記憶體的低址部分;用戶區是指除系統區以外的全部記憶體空間,提供給用戶使用。雖然在早期的單用戶、單任務作業系統中,有不少都配置了存儲器保護機構,用於防止用戶程式對作業系統的破壞, 但近年來常見的幾種單用戶作業系統中, 如 CP/M、 MS-DOS及 RT11 等,都未採取存儲器保護措施。這是因為,一方面可以節省硬體,另一方面也因為這是可行的。在單用戶環境下,機器由一用戶獨占,不可能存在其他用戶干擾的問題;這時可能出現的破壞行為也只是用戶程式自己去破壞作業系統,其後果並不嚴重,只是會影響該用戶程式的運行,且作業系統也很容易通過系統的再啟動而重新裝入記憶體。

固定分區分配

固定分區式分配是最簡單的一種可運行多道程式的存儲管理方式。這是將記憶體用戶空間劃分為若干個固定大小的區域,在每個分區中只裝入一道作業,這樣,把用戶空間劃分為幾個分區,便允許有幾道作業並發運行。當有一空閒分區時,便可以再從外存的後備作業佇列中選擇一個適當大小的作業裝入該分區,當該作業結束時,又可再從後備作業佇列中找出另一作業調入該分區。
劃分分區的方法
可用下述兩種方法將記憶體的用戶空間劃分為若干個固定大小的分區:
(1) 分區大小相等,即使所有的記憶體分區大小相等。其缺點是缺乏靈活性,即當程式太小時,會造成記憶體空間的浪費;當程式太大時,一個分區又不足以裝入該程式,致使該程式無法運行。儘管如此,這種劃分方式仍被用於利用一台計算機去控制多個相同對象的場合,因為這些對象所需的記憶體空間是大小相等的。例如,爐溫群控系統,就是利用一台計算機去控制多台相同的冶煉爐。
(2) 分區大小不等。為了克服分區大小相等而缺乏靈活性的這個缺點,可把記憶體區劃分成含有多個較小的分區、適量的中等分區及少量的大分區。這樣,便可根據程式的大小為之分配適當的分區。
記憶體分配
為了便於記憶體分配,通常將分區按大小進行排隊,並為之建立一張分區使用表,其中各表項包括每個分區的起始地址、大小及狀態(是否已分配)。當有一用戶程式要裝入時,由記憶體分配程式檢索該表,從中找出一個能滿足要求的、尚未分配的分區,將之分配給該程式,然後將該表項中的狀態置為“已分配” ;若未找到大小足夠的分區,則拒絕為該用戶程式分配記憶體。

動態分區分配

動態分區分配又稱為可變分區分配,是一種動態劃分記憶體的分區方法。這種分區方法不預先將記憶體劃分,而是在進程裝入記憶體時,根據進程的大小動態地建立分區,並使分區的大小正好適合進程的需要。因此系統中分區的大小和數目是可變的。
動態分區在開始分配時是很好的,但是之後會導致記憶體中出現許多小的記憶體塊。隨著時間的推移,記憶體中會產生越來越多的碎片,記憶體的利用率隨之下降。這些小的記憶體塊稱為外部碎片,指在所有分區外的存儲空間會變成越來越多的碎片,這與固定分區中的內部碎片正好相對。克服外部碎片可以通過緊湊(Compaction)技術來解決,就是作業系統不時地對進程進行移動和整理。但是這需要動態重定位暫存器的支持,且相對費時。緊湊的過程實際上類似於Windows系統中的磁碟整理程式,只不過後者是對外存空間的緊湊。
在進程裝入或換入主存時,如果記憶體中有多個足夠大的空閒塊,作業系統必須確定分配哪個記憶體塊給進程使用,這就是動態分區的分配策略,考慮以下幾種算法:
首次適應(First Fit)算法:空閒分區以地址遞增的次序連結。分配記憶體時順序查找,找到大小能滿足要求的第一個空閒分區。
最佳適應(Best Fit)算法:空閒分區按容量遞增形成分區鏈,找到第一個能滿足要求的空閒分區。
最壞適應(Worst Fit)算法:又稱最大適應(Largest Fit)算法,空閒分區以容量遞減的次序連結。找到第一個能滿足要求的空閒分區,也就是挑選出最大的分區。
鄰近適應(Next Fit)算法:又稱循環首次適應算法,由首次適應算法演變而成。不同之處是分配記憶體時從上次查找結束的位置開始繼續查找。
在這幾種方法中,首次適應算法不僅是最簡單的,而且通常也是最好和最快的。在UNIX 系統的最初版本中,就是使用首次適應算法為進程分配記憶體空間,其中使用數組的數據結構 (而非鍊表)來實現。不過,首次適應算法會使得記憶體的低地址部分出現很多小的空閒分區,而每次分配查找時,都要經過這些分區,因此也增加了查找的開銷。
鄰近適應算法試圖解決這個問題,但實際上,它常常會導致在記憶體的末尾分配空間(因為在一遍掃描中,記憶體前面部分使用後再釋放時,不會參與分配),分裂成小碎片。它通常比首次適應算法的結果要差。
最佳適應算法雖然稱為“最佳”,但是性能通常很差,因為每次最佳的分配會留下很小的難以利用的記憶體塊,它會產生最多的外部碎片。
最壞適應算法與最佳適應算法相反,選擇最大的可用塊,這看起來最不容易產生碎片,但是卻把最大的連續記憶體劃分開,會很快導致沒有可用的大的記憶體塊,因此性能也非常差。

動態重定位分區分配

在連續分配方式中,必須把一個系統或用戶程式裝入一連續的記憶體空間。如果在系統中只有若干個小的分區,即使它們容量的總和大於要裝入的程式,但由於這些分區不相鄰接,也無法把該程式裝入記憶體。這種不能被利用的小分區稱為“零頭”或“碎片” 。
若想把作業裝入,可採用的一種方法是:將記憶體中的所有作業進行移動,使它們全都相鄰接,這樣,即可把原來分散的多個小分區拼接成一個大分區,這時就可把作業裝入該區。這種通過移動記憶體中作業的位置,以把原來多個分散的小分區拼接成一個大分區的方法,稱為“拼接”或“緊湊” 。由於經過緊湊後的某些用戶程式在記憶體中的位置發生了變化, 此時若不對程式和數據的地址加以修改(變換), 則程式必將無法執行。 為此,在每次“湊”後,都必須對移動了的程式或數據進行重定位。
在動態運行時裝入的方式中,作業裝入記憶體後的所有地址都仍然是相對地址,將相對地址轉換為物理地址的工作,被推遲到程式指令要真正執行時進行。為使地址的轉換不會影響到指令的執行速度,必須有硬體地址變換機構的支持,即須在系統中增設一個重定位暫存器,用它來存放程式(數據)在記憶體中的起始地址。程式在執行時,真正訪問的記憶體地址是相對地址與重定位暫存器中的地址相加而形成的。

擴充記憶體空間的方法

虛擬記憶體

虛擬記憶體是計算機系統記憶體管理的一種技術。它使得應用程式認為它擁有連續可用的記憶體(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理記憶體碎片,還有部分暫時存儲在外部磁碟存儲器上,在需要時進行數據交換。與沒有使用虛擬記憶體技術的系統相比,使用這種技術的系統使得大型程式的編寫變得更容易,對真正的物理記憶體(例如RAM)的使用也更有效率。
虛擬存儲器是由硬體和作業系統自動實現存儲信息調度和管理的。它的工作過程包括6個步驟:
中央處理器訪問主存的邏輯地址分解成組號a和組內地址b,並對組號a進行地址變換,即將邏輯組號a作為索引,查地址變換表,以確定該組信息是否存放在主存內。
②如該組號已在主存內,則轉而執行④;如果該組號不在主存內,則檢查主存中是否有空閒區,如果沒有,便將某個暫時不用的組調出送往輔存,以便將這組信息調入主存。
③從輔存讀出所要的組,並送到主存空閒區,然後將那個空閒的物理組號a和邏輯組號a登錄在地址變換表中。
④從地址變換表讀出與邏輯組號a對應的物理組號a。
⑤從物理組號a和組內位元組地址b得到物理地址。
⑥根據物理地址從主存中存取必要的信息。
調度方式有分頁式、段式、段頁式3種。頁式調度是將邏輯和物理地址空間都分成固定大小的頁。主存按頁順序編號,而每個獨立編址的程式空間有自己的頁號順序,通過調度輔存中程式的各頁可以離散裝入主存中不同的頁面位置,並可據表一一對應檢索。頁式調度的優點是頁內零頭小,頁表對程式設計師來說是透明的,地址變換快,調入操作簡單;缺點是各頁不是程式的獨立模組,不便於實現程式和數據的保護。段式調度是按程式的邏輯結構劃分地址空間,段的長度是隨意的,並且允許伸長,它的優點是消除了記憶體零頭,易於實現存儲保護,便於程式動態裝配;缺點是調入操作複雜。將這兩種方法結合起來便構成段頁式調度。在段頁式調度中把物理空間分成頁,程式按模組分段,每個段再分成與物理空間頁同樣小的頁面。段頁式調度綜合了段式和頁式的優點。其缺點是增加了硬體成本,軟體也較複雜。大型通用計算機系統多數採用段頁式調度。

物理地址擴展

物理地址擴展(Physical Address Extension,縮寫為PAE),又釋實體位置延伸,是x86處理器的一個功能,讓中央處理器32位作業系統下存取超過4GB的實體記憶體。
PAE為IntelPentium Pro及以上級別的CPU(包括除了匯流排頻率為400MHz的這個版本的奔騰M之外的所有新型號奔騰系列處理器)所支持,其他兼容的處理器,如速龍(Athlon)和AMD的較新型號的CPU也支持PAE。
x86的處理器增加了額外的地址線以選擇那些增加了的記憶體,所以實體記憶體的大小從32位增加到了36位。最大的實體記憶體由4GB增加到了64GB。
32位的虛擬地址線性地址)則沒有變,所以一般的套用軟體可以繼續使用地址為32位的指令;如果用平面記憶體模式的話,這些軟體的地址空間也被限制為4GB。作業系統用頁表將這4GB的地址空間映射到大小為64GB的實體記憶體,而這個映射對各個進程一般是不一樣的。這樣一來,即使不能為單單一個程式所用,那些增加了的物理記憶體仍然可以發揮作用。

相關詞條

熱門詞條

聯絡我們