物理內(nèi)存與虛擬內(nèi)存
內(nèi)存是計(jì)算機(jī)每部的一些存儲(chǔ)器,,用于保存cpu運(yùn)算的中間數(shù)據(jù)和計(jì)算結(jié)果,。
所謂物理內(nèi)存就是RAM(Random Access Memory隨機(jī)存儲(chǔ)器),具有高速存取,、讀寫時(shí)間相等,,如計(jì)算機(jī)內(nèi)存,在計(jì)算機(jī)中還有一種結(jié)構(gòu)叫做寄存器,,可以用于存儲(chǔ)計(jì)算單元執(zhí)行指令(如浮點(diǎn),、整數(shù)的運(yùn)算)的中間結(jié)果。寄存機(jī)的大小決定了一次計(jì)算可使用的最大數(shù)值,。
連接處理器和RAM或者處理器和寄存器的是地址總線,,這個(gè)地址的總線寬度影響了物理地址的索引范圍,因?yàn)榭偩€的寬度決定了處理器一次可以從寄存器或者內(nèi)存中獲取多少位個(gè)bit,。同時(shí)也決定了處理器最大可以尋址的地址空間,,內(nèi)存尋址是需要根據(jù)地址來得,一個(gè)32位的地址總線最多可以代表2^32=4294967296個(gè)內(nèi)存位置,,每個(gè)地址會(huì)引用一個(gè)字節(jié),,所以32為的總線寬度2^32B=2^22KB=2^12MB=2^2G。所以一個(gè)32位寬度的計(jì)算機(jī)總內(nèi)存最大為4G,。
通常,,地址總線和寄存器或者RAM具有相同的位數(shù),這樣更容易傳輸數(shù)據(jù),,X86會(huì)有例外,。
運(yùn)行程序都要先向操作系統(tǒng)申請(qǐng)內(nèi)存,操作系統(tǒng)中內(nèi)存的分配是按照進(jìn)程為單位來進(jìn)行分配的,,每個(gè)進(jìn)程擁有一段自己獨(dú)立的內(nèi)存空間,,每個(gè)內(nèi)存空間不能重合,操作系統(tǒng)也會(huì)保證每個(gè)進(jìn)程只能訪問自己的內(nèi)存空間,,這主要是從程序安全性來考慮的,。這里的獨(dú)立只是邏輯上獨(dú)立,也就是這個(gè)獨(dú)立是操作系統(tǒng)來保證的,,但真正的物理內(nèi)存是否只能由一個(gè)進(jìn)程來使用就不一定了,。
虛擬內(nèi)存使得應(yīng)用程序認(rèn)為它擁有連續(xù)的可用的內(nèi)存(一個(gè)連續(xù)完整的地址空間),而實(shí)際上,,它通常是被分隔成多個(gè)物理內(nèi)存碎片,,還有部分暫時(shí)存儲(chǔ)在外部磁盤存儲(chǔ)器上,,在需要時(shí)進(jìn)行數(shù)據(jù)交換。虛擬內(nèi)存的出現(xiàn)使得多個(gè)進(jìn)程同時(shí)運(yùn)行時(shí)共享物理內(nèi)存,,這里的共享只是空間上共享,,邏輯上時(shí)不能相互訪問的。虛擬地址可以讓進(jìn)程共享物理內(nèi)存,、提高內(nèi)存利用率,,還能擴(kuò)展內(nèi)存的地址空間,如一段內(nèi)存可以映射到物理內(nèi)存文件或者其他可以尋址的存儲(chǔ)上,。
內(nèi)核空間與用戶空間
內(nèi)核空間主要指操作系統(tǒng)用于程序調(diào)度,、虛擬內(nèi)存的使用或者連接硬件資源等的程序邏輯。為了保證操作系統(tǒng)的穩(wěn)定向,,運(yùn)行在操作系統(tǒng)中的用戶進(jìn)程不能訪問操作系統(tǒng)所使用的內(nèi)存空間,。如果用戶程需要訪問硬件資源,如網(wǎng)絡(luò)連接等,,可以調(diào)用操作系統(tǒng)提供的接口來實(shí)現(xiàn),,這個(gè)接口的調(diào)用其實(shí)也是系統(tǒng)調(diào)用。每次系統(tǒng)調(diào)用都會(huì)存在兩個(gè)內(nèi)存空間的切換,,通常的網(wǎng)絡(luò)傳輸也是一次系統(tǒng)調(diào)用,,通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)先是從內(nèi)核空間從遠(yuǎn)程主機(jī)接受數(shù)據(jù),然后再從內(nèi)核空間復(fù)制到用戶空間,,供程序使用,。這種復(fù)制手段很費(fèi)時(shí),雖然包住了程序運(yùn)行時(shí)的安全性與穩(wěn)定性,,但是也犧牲了部分效率?,F(xiàn)在linux系統(tǒng)上提供了sendfile文件傳輸方式來減少這種復(fù)制方式的成本。
內(nèi)核空間和用戶空間大小分配也是個(gè)需要權(quán)衡的問題,,如果是一臺(tái)登錄服務(wù)器要分配更多的內(nèi)核空間,,因?yàn)闆]有個(gè)登錄用戶操作系統(tǒng)都會(huì)初始化一個(gè)用戶進(jìn)程,這個(gè)進(jìn)程大部分在內(nèi)核空間運(yùn)行,。當(dāng)前windows內(nèi)核:用戶為1:1(也就是大約2G內(nèi)核空間,,2G用戶空間),linux為1:3,。
|