1. 程式人生 > >Windows內存管理的方式

Windows內存管理的方式

放下 一次 一個 必須 限制 程序 例如 標識符 優點

一、內存的概念

1. 物理內存:即插在主板上的內存條。他是固定的,內存條的容量多大,物理內存就有多大(集成顯卡系統除外)。

但是如果程序運行很多或者程序本身很大的話,就會導致大量的物理內存占用,甚至導致物理內存消耗殆盡。

2. 虛擬內存:虛擬內存就是在硬盤上劃分一塊頁面文件,充當內存。

當程序在運行時,有一部分資源還沒有用上或者同時打開幾個程序卻只操作其中一個程序時,系統沒必要將程序所有的資源都塞在物理內存中,於是,系統將這些暫時不用的資源放在虛擬內存上,等到需要時在調出來用。

當程序運行時需要從內存中讀出這段程序的代碼。代碼的位置必須在物理內存中才能被運行,由於現在的操作系統中有非常多的程序運行著,內存中不能夠完全放下,所以引出了虛擬內存的概念。

把那些不常用的程序片斷就放入虛擬內存,當需要用到它的時候在load入主存(物理內存)中。這個就是內存管理所要做的事,內存管理還有另外一件事需要做:計算程序片段在主存中的物理位置,以便CPU調度。

3. 虛擬內存可行性的理論基礎: 1、進程中的所有內存訪問地址都是邏輯地址,這些邏輯地址在運行時動態的被轉換為物理地址,這意味著一個進程可以被換入或換出內存,使得進程可以執行過程中的不同時刻占據內存中的不同區域。 2、一個進程可以劃分成許多塊,在執行過程中,這些塊不需要連續的物理內存中。 4. 使用虛擬內存的好處: 1、在內存中保留多個進程。由於對任何特定的進程都僅僅裝入它的某些塊,因此就有足夠的空間來放置更多的進程。 2、進程可以比內存的全部空間還大。程序占用的內存空間的大小是程序設計中最大的限制之一。通過基於分頁或分段的虛擬內存,這些分塊可以按某種覆蓋策略分別加載。

二、windows 內存管理方式主要分為:頁式管理,段式管理,段頁式管理。

1. 固定分區 說明:在系統生成階段,內存被劃分成許多靜態分區。進程可以被裝入到大於或等於自身大小的分區。 優勢:實現簡單,只需要極少的操作系統開銷。 缺點:由於有內部碎片,對內存的使用不充分;活動進程的最大數目是固定的。 2. 動態分區 說明:分區是動態創建的,因而使得每個進程可以被裝入與自身大小正好相等的分區中。 優勢:沒有內部碎片;可以更充分的使用內存。 缺點:由於需要壓縮外部碎片,處理器利用率低。

3. 頁式管理:頁式管理的基本原理是將各進程的虛擬空間劃分為若幹個長度相等的頁;

頁式管理把內存空間按照頁的大小劃分成片或者頁面,然後把頁式虛擬地址與內存地址建立一一對應的頁表;並用相應的硬件地址變換機構來解決離散地址變換問題。

頁式管理采用請求調頁或預調頁技術來實現內外存存儲器的統一管理。不需要裝入一個進程的所有頁,每次只需將進程運行需要的頁裝入到內存中不一定連續的頁框中,非駐留頁在以後需要時自動調入內存。

其優點是沒有外碎片,每個內碎片不超過頁的大小。

缺點是,程序全部裝入內存,要求有相應的硬件支持。例如地址變換機構缺頁中斷的產生和選擇淘汰頁面等都要求有相應的硬件支持。這增加了機器成本,增加了系統開銷。

4. 段式管理:段式管理的基本思想是把程序按照內容或過程函數關系分段,每段都有自己的名字。

一個用戶作業或進程所包括的段對應一個二維線形虛擬空間,也就是一個二維虛擬存儲器。段式管理程序以段為單位分配內存,然後通過地址映射機構把段式虛擬地址轉換為實際內存物理地址。

不需要裝入一個進程的所有段,每次只需將進程運行需要的段裝入到內存中不一定連續的某些動態分區中,非駐留段在以後需要時自動調入內存。

其優點是可以分別編寫和編譯,可以針對不同類型的段采用不同的保護,可以按段為單位來進行共享,包括通過動態鏈接進行代碼共享。

缺點是會產生碎片。

5. 段頁式管理:為了實現段頁式管理,系統必須為每個作業或進程建立一張段表以管理內存分配與釋放、缺段處理等。

另外由於一個段又被劃分成了若幹個頁。每個段必須建立一張頁表以把段中的虛頁變換成內存中的實際頁面。顯然與頁式管理時相同,頁表中也要有相應的實現缺頁中斷處理和頁面保護等功能的表項。

段頁式管理的段式管理與頁式管理方案結合而成的所以具有他們兩者的優點。

但反過來說,由於管理軟件的增加,復雜性和開銷也就隨之增加了。另外需要的硬件以及占用的內存也有所增加。使得速度降下來。

分段和分頁都有它們的長處:
  • 分頁對程序員是透明的,它消除了外部碎片,因而可以更有效地使用內存,並且移入或移出內存的塊是固定的,大小相等的。
  • 分段對程序員是可見的,它具有處理不斷增長的數據結構的能力以及支持共享和保護的能力。
  • 在段頁式的系統中,用戶的地址空間被程序員劃分成許多段。每個段一次劃分成許多固定大小的頁,頁的長度等於內存中頁框的大小。
  • 從程序員的角度看,邏輯地址仍然由段號和段偏移量組成,從系統的角度看,段偏移量可視為指定段中的一個頁號和頁偏移。

頁式和段式的區別:

相似:離散分配,地址映射機構來實現地址轉換

(1)頁是信息的物理單位,分頁是為了實現離散分配方式,減少內存的外零頭,提高內存利用率,或者說是由於系統管理的需要,而不是用戶的需要。段是信息的邏輯單位,它含有一組意義相對完整的信息,分段的目的是為了更好地滿足用戶的需要。

(2)頁大小固定且由系統決定,把邏輯地址劃分為頁號和頁內地址兩部分,是機器硬件實現的,段的長度不固定,卻決定於用戶所編寫的程序,通常由編譯系統在對源程序進行編譯時根據信息的性質來劃分。

(3)頁內系統地址是一維的,即單一的線性地址空間,程序員只需利用一個標識符,即可表示一個地址。分段的作業地址空間是二維的,程序員在標識一個地址時即需要給出段名,又需要給出段內地址。

Windows內存管理的方式