儲存器的發展方向是高速、大容量和小體積,即儲存器嘗試更高讀寫速度,更大儲存容量,更小物理體積。
在計算機中,常見的儲存器有:暫存器,快取,記憶體,硬碟,一般硬碟之類的輔助儲存器又稱外存。
在平均讀寫速度上,有:暫存器》快取》記憶體》外存
在單位容量**上,有:外存《記憶體《快取《暫存器
cpu處理器只能直接訪問記憶體,而不能訪問外存,一般情況記憶體相對外存在容量上是相當稀缺的,如果由程式設計師或者使用者去指定記憶體如何使用,極其容易引起記憶體分配的混亂和浪費,因此作業系統必要的記憶體管理是至關重要的。
由作業系統完成儲存空間的分配和管理,讓程式設計師擺脫儲存分配的麻煩,提高程式設計效率,使用了諸多的資料結構和高效演算法。
往往程式中使用的是邏輯位址,因為程式在記憶體的起始位址在未分配空間之前是未知的,由此需要作業系統實現邏輯與實體地址的轉換
記憶體空間是稀缺的,但由於程式中使用的是邏輯位址,故可用虛擬儲存技術在邏輯上,擴充記憶體的容量
多個程序在記憶體中執行,必須保證相互之間不能發生衝突,相互干擾,相互破壞。而使用者程序也不能超越限制對作業系統軟體的記憶體空間進行肆意更改
記憶體保護的關鍵在於檢查程序是否有記憶體位址越界行為。
在cpu中設定上下限暫存器,用於分別存放作業在主存中的上限和下限位址,當cpu要訪問位址時,與這兩個暫存器的值進行比較即可判斷是否越界,適合邏輯位址即對應相應實體地址的情形(如實體地址與邏輯位址事先就確定只差乙個固定的偏移量)
界位址暫存器存有程序的最大邏輯位址(通過分配記憶體後由起始實體地址與分配空間大小計算得出),可通過邏輯位址是否大於該界位址暫存器的值比較是否發生越界,若不越界,加上重定位暫存器(存有程序的起始實體地址)的值即為實體地址。
程式從外存到記憶體,實現了外存中作業到記憶體中程序的轉變,大體經過編譯,鏈結,裝入三大過程。
編譯過程主要有編譯和彙編兩個階段。編譯階段主要將高階語言轉換為組合語言,彙編階段主要將組合語言翻譯成機器語言。
由鏈結程式將編譯後形成的目標模組以及所需要的庫函式鏈結在一起,形成乙個完整的裝入模組。鏈結主要在編譯時,載入時,執行時進行。鏈結若發生在編譯時,就是靜態編譯,程式執行前完全確定鏈結;而執行時鏈結,表示程式執行到需要的函式庫才鏈結對應物件。它們各有優劣,視具體情況具體應用。
由裝入程式將裝入模組裝入記憶體執行,此時會建立對應程序。裝入分為靜態重定位和動態重定位。涉及的主要問題是程式中的邏輯位址與實際記憶體的實體地址之間如何對映。靜態重定位在裝入時一次性完成邏輯位址與實體地址的對映關係,而動態重定位需要執行時動態確定邏輯位址與實體地址的對映關係。
Linux記憶體管理概述
該圖 作者aryang 下面對各部分進行概述。linux程序的線性位址空間 程序虛擬位址空間分布 0 3g是user位址空間,3 4g是kernel位址空間。適用於arm x86等,mips按0 2g,2 3g劃分 1.緊接著核心資料區向上是mem map全域性page陣列。3.核心動態載入驅動模組...
Spark 記憶體管理概述
spark被稱作記憶體計算引擎,使得很多初學者認為spark執行環境一定需要大量記憶體,更有甚者,認為spark執行期會把原始資料一次性全部載入到記憶體。解開這些疑團,需要了解spark執行時的機制,spark的計算發生在executor,因此,這裡的執行時機制是指executor的行為。對於spa...
linux的記憶體管理概述
今年工作這麼難找?小黃同志要努力啊 咱可不能拖社主義的後退啊 linux將物理記憶體分成每個4k大小的頁,來進行管理。linux中 號稱 pfn,是 page frame number的縮寫。取值範圍是 0 memory size 12 但是由於物理記憶體對映的關係,物理記憶體的0位址對應到到系統上...