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