天天看點

記憶體/虛拟記憶體

除CPU外,記憶體是作業系統管理的重要資源,程式要運作,必須先加載到記憶體。在作業系統出現以前,程式并不需要加載到記憶體才能運作,程式曾是存放在卡片上,計算機每讀一張卡片,就運作一條指令。程式直接從卡片到執行。但這種從外部存儲媒介上直接執行指令的做法效率極低,切靈活性很差。是以,人們發明了記憶體儲器來講需要運作的程式先加載,在自動執行,進而提高效率和靈活性。這也導緻了“存儲的程式”概念,而存儲的概念又導緻計算機及軟體系統的革命性變化。此後,人們對記憶體的要求越來越多。

記憶體/虛拟記憶體

緩存的特點:低容量(相對于主存來說),高速度,高價格;(一般最多也就幾兆)

主存的特點:中容量,中速度,中價格;(一般是幾G)

磁盤的特點:大容量,低速度,低價格的存儲媒介;(一般是幾百G到幾T)

錄音帶的貼點:大容量,低速度,低價格的存儲媒介;

看一下程式指令執行的過程:程式指令在執行前被加載到記憶體,然後從記憶體中一條條指令讀出 執行(從硬體層來看,指令的“讀取-執行”循環式計算機的基本操作)。每條指令在執行的是時候需要讀取操作數和寫入運算結果。而讀取操作數,就需要給出操作數所在的記憶體位址,這個位址不能使實體主存位址。這是因為該程式在何種硬體配置的機器上運作不能事先确定,作業系統自然不可能對症下藥的發出對應于某台機器的實體主存。是以,指令裡面的位址是程式空間(虛拟空間)的虛拟位址(程式位址),即程式發出的位址與具體機器的實體主存位址是獨立的。這是記憶體管理要達到的另外一個目标。

記憶體管理一般要達到的兩個目标:

- 位址保護:一個程式不能通路另一個程式位址空間。

- 位址獨立:程式發出的位址應與實體主存位址無關。

虛拟記憶體這個概念聽上去有點太虛拟,但他的實質并不難了解,我們知道一個程式如果要運作,必須加載到實體主存裡。但是實體主存是非常有限的,是以一個程式如果要全部加在到實體主存,我們所能編寫的程式将是很小的程式。實體主存的容量受制于主存容量(還要減去作業系統所占的空間和一些臨時緩存空間)。另外,即使我們編寫的每個程式都小于實體主存容量,但還是存在一個問題:主存能夠存放的程式數量将極其有限,而這将極大的限制多道程式設計的發展。

那如何解決實體主存容量偏小的缺陷呢?最簡單的辦法就是購買更大的實體主存,而這将大幅的提升計算的成本,可能ineicun緻使許多人買不起計算機。有沒有辦法在不太增加成本的情況下擴大記憶體容量呢? 有,那就是虛拟記憶體。

虛拟記憶體的中心思想是将實體主存擴大到便宜的。大容量的磁盤上,即将磁盤空間看做是主存的一部分。使用者程式存放在磁盤上就相當于存放在主存内,使用者程式既可以完全存放在磁盤中,也可以完全存放在主存中,也可以部分存放在主存、部分存放在磁盤。而程式執行的時候,程式發出的位址到底是在主存還是在磁盤則由作業系統的記憶體管理子產品負責判斷,并到相應的地方進行讀寫操作,事實上我們可以進一步将緩存、錄音帶也包括進來,構成一個效率、價格、容量錯落有緻的存貯架構。即虛拟記憶體要提供的就是一個空間像磁盤一樣大、速度想緩存那樣高的主存儲系統。(而對程式位址所在位置‘緩存、主存、磁盤’的判斷是記憶體管理系統的中心功能)

繼續閱讀