第97篇
極客時間《許式偉的架構(gòu)課》課程筆記芜抒。
內(nèi)存的地位非常特殊,它是唯一的 CPU 內(nèi)置支持蹭劈,且和程序員直接會打交道的基礎(chǔ)資源。
計算機運行全過程
- BIOS 程序在主板的 ROM 上割卖,是因為不同歷史時期的計算機輸入輸出設(shè)備很不一樣罢维,通過調(diào)整 BIOS 程序就可以應(yīng)對,而不需要修改 CPU
- 引導(dǎo)區(qū)引導(dǎo)程序,則是程序從內(nèi)置存儲(ROM)轉(zhuǎn)到外置存儲的邊界瑰艘。引導(dǎo)區(qū)引導(dǎo)程序很短芒率,BIOS 只需要把它加載到內(nèi)存執(zhí)行就可以把系統(tǒng)的控制權(quán)轉(zhuǎn)到外置存儲
- 引導(dǎo)區(qū)引導(dǎo)程序不固化在 BIOS 中偶芍,而是寫在外置存儲的引導(dǎo)區(qū),是為了避免 BIOS 程序需要經(jīng)常性修改
- OS 引導(dǎo)程序是外置存儲接手計算機控制權(quán)的真正開始。操作系統(tǒng)從這里開始干活键兜,最終所有的初始化工作完成后,操作系統(tǒng)會把執(zhí)行權(quán)交給 OS Shell 程序
- OS Shell 程序負(fù)責(zé)操作系統(tǒng)與用戶的交互。計算機的交互界面是字符界面,OS Shell 程序是一個命令行程序。DOS 中叫 command.com成福,而在 Linux 下則叫 sh 或者 bash 之類。這里的 sh 就是 shell
啟動一個軟件的方式就是在 Shell 程序中輸入一個命令行嘿期,Shell 負(fù)責(zé)解釋命令行理解用戶的意圖
內(nèi)存管理的兩個問題
- 如何分配內(nèi)存(給運行中的軟件备徐,避免它們發(fā)生資源爭搶)
- 如何運行外置存儲(比如硬盤)上的軟件振诬?
實模式下的內(nèi)存管理
- CPU 的實模式和保護(hù)模式。這兩個模式 CPU 對內(nèi)存的操作方式完全不同
- 在實模式下清钥,CPU 直接通過物理地址訪問內(nèi)存篡悟。在保護(hù)模式下叉谜,CPU 通過一個地址映射表把虛擬的內(nèi)存地址轉(zhuǎn)為物理的內(nèi)存地址,然后再去讀取數(shù)據(jù)
- 工作在實模式下的操作系統(tǒng)就是實模式操作系統(tǒng);工作在保護(hù)模式下的操作系統(tǒng)就是保護(hù)模式操作系統(tǒng)
- 在實模式操作系統(tǒng)下,所有軟件包括操作系統(tǒng)本身补疑,都在同一個物理地址空間下。在 CPU 看來,它們是同一個程序
實模式操作系統(tǒng)
- 在實模式操作系統(tǒng)下,所有軟件包括操作系統(tǒng)本身奴潘,都在同一個物理地址空間下雀扶。在 CPU 看來昂勉,它們是同一個程序
- 操作系統(tǒng)如何分配內(nèi)存方法一:把操作系統(tǒng)內(nèi)存管理相關(guān)的函數(shù)地址攒至,放到一個大家公認(rèn)的地方(比如 0x10000 處)志膀,每個軟件要想申請內(nèi)存就到這個地方取得內(nèi)存管理函數(shù)并調(diào)用它。
- 把內(nèi)存管理功能設(shè)計為一個中斷請求放航。所謂中斷,是 CPU 響應(yīng)硬件設(shè)備事件的一個機制。當(dāng)某個輸入輸出設(shè)備發(fā)生了一件需要 CPU 來處理的事情赊时,它就會觸發(fā)一個中斷行拢。
實模式的問題
- 安全性。操作系統(tǒng)以及所有軟件都運行在一起竭缝,相互之間可以隨意修改對方的數(shù)據(jù)甚至程序指令,這樣搞破壞就非常容易抬纸。
- 支持的軟件復(fù)雜性低湿故,同時可運行的軟件數(shù)量少。
保護(hù)模式下的內(nèi)存管理
保護(hù)模式下坛猪,內(nèi)存訪問不再是直接通過物理內(nèi)存,而是基于虛擬內(nèi)存
虛擬內(nèi)存模式下命黔,整個內(nèi)存空間被分成很多個連續(xù)的內(nèi)存頁就斤。每個內(nèi)存頁大小是固定的,比如 64K
通過虛擬內(nèi)存的機制搜立,操作系統(tǒng)并不需要一上來就把整個軟件裝進(jìn)內(nèi)存中槐秧,而是通過缺頁中斷按需加載對應(yīng)的程序代碼片段
多個軟件同時運行的問題也解決了,內(nèi)存不夠用的時候刁标,就把最久沒有用過的內(nèi)存頁淘汰掉,騰出物理內(nèi)存出來
運行軟件的問題和內(nèi)存分配的問題都已經(jīng)解決顿锰,不需要任何額外的機制
通過引入虛擬內(nèi)存及其缺頁機制启搂,CPU 很好地解決了操作系統(tǒng)和軟件的配合關(guān)系
在保護(hù)模式下,計算機的基礎(chǔ)架構(gòu)體系和操作系統(tǒng)共同在努力做的一件事情牢撼,就是讓每個軟件“感覺”自己在獨占整個計算機的資源
獨立的虛擬地址空間很好地偽裝了這一點:看起來我獨自在享用所有內(nèi)存資源
在實模式下疑苫,所有進(jìn)程都在同在物理內(nèi)存的地址空間里熏版,它們相互可以訪問對方的數(shù)據(jù)纷责,修改甚至破壞對方的數(shù)據(jù),進(jìn)而導(dǎo)致其他進(jìn)程(包括操作系統(tǒng)本身的進(jìn)程)崩潰撼短。
內(nèi)存是進(jìn)程運行的基礎(chǔ)資源再膳,保持進(jìn)程基礎(chǔ)資源的獨立性,是軟件治理的最基礎(chǔ)的要求曲横。這也是保護(hù)模式之所以叫“保護(hù)”模式的原因喂柒。