操作系統以頁框為單位為各個進程分配內存空間。進程的每個頁面分別放入一個頁框中。也就是說,進程的頁面與內存的頁 框有一一對應的關系。 這里給大家分享一些關于操作系統內存知識,希望對大家能有所幫助。
內存的用戶空間和內核空間:
Linux虛擬內存的大小為2^32(在32位的x86機器上),內核將這4G字節的空間分為兩部分。最高的1G字節(從虛地址0xC0000000到0xFFFFFFFF)供內核使用,稱為“內核空間”。而較低的3G字節(從虛地址0x00000000到0xBFFFFFFF),供各個進程使用,稱為“用戶空間”。
因為每個進程可以通過系統調用進入內核,因此,Linux內核空間由系統內的所有進程共享。
于是,從具體進程的角度來看,每個進程可以擁有4G字節的虛擬地址空間(也叫虛擬內存).每個進程有各自的私有用戶空間(0~3G),這個空間對系統中的其他進程是不可見的。最高的1GB內核空間則為所有進程以及內核所共享。另外,進程的“用戶空間”也叫“地址空間”,在后面的敘述中,我們對這兩個術語不再區分。
用戶空間不是進程共享的,而是進程隔離的。每個進程最大都可以有3GB的用戶空間。一個進程對其中一個地址的訪問,與其它進程對于同一地址的訪問絕不沖突。
什么是內存?有何作用?
內存可存放數據。程序執行前需要先放到內存中才能被CPU處理——緩和CPU與硬盤之間的速度矛盾。
在多道程序環境下,系統中會有多個程序并發執行,也就 是說會有多個程序的數據需要同時放到內存中。那么會給內存的存儲單元編地址。
內存地址從0 開始,每個 地址對應一 個存儲單元。
如果計算機“按字節編址”, 則每個存儲單元大小為 1字節,即 1B,即 8個二進制位。
如果字長為16位的計算機 “按字編址”,則每個存 儲單元大小為 1個字;每個字的大小為 16 個二進制位。
指令的工作原理:
指令的工作基于“地址”。 每個地址對應一個數據的存儲單元。
程序經過編譯、鏈接 后生成的指令中指明 的是邏輯地址(相對地址),即:相對于進程的起始地址而言。 在邏輯空間中每條指令的地址和指令中要訪問的操作數地址統稱為邏輯地址 。很簡單,邏輯地址就是你源程序里使用的地址,或者源代碼經過編譯以后編譯器將一些標號,變量轉換成的地址。
物理地址 :內存是由若干個存儲單元組成的,每個存儲單元有一個編號,這種編號可唯一標識一個存儲單元(絕對地址)
虛擬地址 (virtual address): CPU啟動保護模式后,程序運行在虛擬地址空間中。虛擬地址是Windows程序時運行在386保護模式下,這樣程序訪問存儲器所使用的邏輯地址稱為虛擬地注意,并不是所有的“程序”都是運行在虛擬地址中。CPU在啟動的時候是運行在實模式的,Bootloader以及內核在初始化頁表之前并不使用虛擬地址,而是直接使用物理地址的。
線性地址(Linear Address): 是邏輯地址到物理地址變換之間的中間層。在分段部件中邏輯地址是段中的偏移地址,然后加上基地址就是線性地址。
目標程序與可執行程序:
目標程序:又稱為“目的程序”,為源程序經編譯可直接被計算機運行的機器碼集合,在計算機文件上以.obj作擴展名,由語言處理程序(匯編程序,編譯程序,解釋程序)將源程序處理(匯編,編譯,解釋)成與之等價的由機器碼構成的。
可執行程序:目標代碼盡管已經是機器指令,但是還不能運行,因為目標程序還沒有解決函數調用問題,需要將各個目標程序與庫函數連接(鏈接),才能形成完整的可執行程序。
程序如何運行:
編譯:由編譯程序(Compiler)將用戶源代碼編譯成cpu可執行的目標代碼,產生了若干個目標模塊(Object Module)(即若干程序段)。形成的目標代碼,每個目標代碼都是以0為基址順序進行編址,原來用符號名訪問的單元用具體的數據——單元號取代。這樣生成的目標程序占據一定的地址空間,稱為作業的邏輯地址空間,簡稱邏輯空間。
鏈接: 由鏈接程序(Linker)將編譯后形成的一組目標模塊(程序段),以及它們所需要的庫函數鏈接在一起,形成一個完整的裝入模塊(Load Module)。
裝入:由裝入程序(Loader)將裝入模塊裝入物理內存。物理內存是真實存在的插在主板內存槽上的內存條的容量的大小。
操作系統內存知識相關文章:
★ 電腦入門基礎知識匯總
★ 介紹幾個妙招加快內存運行速度
★ 電腦技巧
★ BIOS常見字母對照表附帶解釋
★ 如何合理設置電腦虛擬內存,提高電腦運行速度
★ 電腦學習
★ 最新計算機實訓心得體會5篇
★ c語言學習心得
★ 全國統考計算機真題及答案解答
★ 計算機硬件實習心得