理解内存
?
文章:程序員對(duì)內(nèi)存的理解
虛擬內(nèi)存
虛擬內(nèi)存的基本思想是:用廉價(jià)但緩慢的磁盤來擴(kuò)充快速卻昂貴的內(nèi)存。
在一定時(shí)刻,程序?qū)嶋H需要使用的虛擬內(nèi)存區(qū)段的內(nèi)容就被載入物理內(nèi)存中。
當(dāng)物理內(nèi)存中的數(shù)據(jù)有一段時(shí)間未被使用,它們就可能被轉(zhuǎn)移到硬盤中,節(jié)省下來的物理內(nèi)存空間用于載入需要使用的其他數(shù)據(jù)。
???? 在進(jìn)程執(zhí)行過程中,操作系統(tǒng)負(fù)責(zé)具體細(xì)節(jié),使每個(gè)進(jìn)程都以為自己擁有整個(gè)地址空間的獨(dú)家訪問權(quán)。
這個(gè)幻覺是通過“虛擬內(nèi)存”實(shí)現(xiàn)的。所有進(jìn)程共享機(jī)器的物理內(nèi)存,當(dāng)內(nèi)存使用完時(shí)就用磁盤保存數(shù)據(jù)。
在進(jìn)程運(yùn)行時(shí),數(shù)據(jù)在磁盤和內(nèi)存之間來回移動(dòng)。內(nèi)存管理硬件負(fù)責(zé)把虛擬地址翻譯為物理地址,并讓一個(gè)進(jìn)程始終運(yùn)行于系統(tǒng)的真正內(nèi)存中,
應(yīng)用程序員只看到虛擬地址,并不知道自己的進(jìn)程在磁盤與內(nèi)存之間來回切換。
???? 從潛在的可能性上說,與進(jìn)程有關(guān)的所有內(nèi)存都將被系統(tǒng)所使用,如果該進(jìn)程可能不會(huì)馬上運(yùn)行(可能它的優(yōu)先級(jí)低,也可能是它處于睡眠狀態(tài)),操作系統(tǒng)可以暫時(shí)取回所有分配給它的物理內(nèi)存資源,將該進(jìn)程的所有相關(guān)信息都備份到磁盤上。
?
進(jìn)程只能操作位于物理內(nèi)存中的頁面。當(dāng)進(jìn)程引用一個(gè)不在物理內(nèi)存中的頁面時(shí),MMU就會(huì)產(chǎn)生一個(gè)頁錯(cuò)誤。內(nèi)存對(duì)此事做出響應(yīng),并判斷該引用是否有效。如果無效,內(nèi)核向進(jìn)程發(fā)出一個(gè)“segmentation violation(段違規(guī))”的信號(hào),內(nèi)核從磁盤取回該頁,換入內(nèi)存中,一旦頁面進(jìn)入內(nèi)存,進(jìn)程便被解鎖,可以重新運(yùn)行——進(jìn)程本身并不知道它曾經(jīng)因?yàn)轫撁鎿Q入事件等待了一會(huì)。
轉(zhuǎn)載于:https://www.cnblogs.com/Tpf386/p/7991697.html
總結(jié)
- 上一篇: maps.reg
- 下一篇: TouTiao开源项目 分析笔记7 加载