一步步编写操作系统 36 一级页表与虚拟地址1
為了給大家說清楚分頁機(jī)制,我們先在宏觀上說下cpu地址變換過程,先讓大家有個直觀的印象,如果有不明白的地方也不要著急,適時地不求甚解,有助于從全局上將知識融會貫通(這句話是我即興說的,說得多好啊^^,好吧,無視我吧)。
分頁機(jī)制其實是建立在分段機(jī)制之上的。這是不是有些讓大家意外呢?其實這并不是說分頁機(jī)制依賴于分段機(jī)制,只是這內(nèi)存分段機(jī)制屬于intel IA32架構(gòu)骨子里的東西,改是改不掉的,除非重頭再造個cpu出來,所以分頁機(jī)制只能在現(xiàn)有分段機(jī)制大局已定的情況下誕生,它們兩者的關(guān)系是怎樣的呢,讓我們先從保護(hù)模式下的分段機(jī)制開始梳理。
盡管在保護(hù)模式中段寄存器中的內(nèi)容已經(jīng)是選擇子,但選擇子最終就是為了要找到段基址,其內(nèi)存訪問的核心機(jī)制依然是“段基址:段內(nèi)偏移地址”,這兩個地址在相加之后才是絕對地址,也就是我們所說的線性地址,此線性地址在分段機(jī)制下被cpu認(rèn)為是物理地址,直接拿來就能用,也就是說,此線性地址可以直接送上地址總線。將段基址和段內(nèi)偏移地址相加求和的工作是由cpu的段部件自動完成的。整個訪問內(nèi)存的過程如圖:
分頁機(jī)制要建立在分段機(jī)制的基礎(chǔ)上,也就是說,段部件的工作依然免不了,所以,分頁只能是在分段之后進(jìn)行的,其過程如圖
cpu在不打開分頁機(jī)制的情況下,是按照默認(rèn)的分段方式進(jìn)行的,段基址和段內(nèi)偏移地址經(jīng)過段部件處理后所輸出的線性地址,cpu就認(rèn)為是物理地址。如果打開了分頁機(jī)制,段部件輸出的線性地址就不再等同于物理地址了,我們稱之為虛擬地址,它是邏輯上的、是假的、不應(yīng)該被送上地址總線(因為地址只是個數(shù)字,任何數(shù)字都可以當(dāng)做地址,這里說的是“不應(yīng)該”是指應(yīng)該人為保證送上地址總線上的數(shù)字是正確的地址)。cpu必須要拿到物理地址才行,此虛擬地址對應(yīng)的物理地址需要在頁表中查找,這項查找工作是由頁部件自動完成的。為了要搞清楚頁部件的工作原理,必須要搞清楚這兩件事:
下面我們將從這兩方面入手,循序漸進(jìn)地展開分頁機(jī)制原理。
經(jīng)過段部件處理后,保護(hù)模式的尋址空間是4GB,注意啦,這個尋址空間是指線性地址空間,它在邏輯上是連續(xù)的。分頁機(jī)制的思想是:通過映射,可以使連續(xù)的線性地址與任意物理內(nèi)存地址相關(guān)聯(lián),邏輯上連續(xù)的線性地址其對應(yīng)的物理地址可以不連續(xù)。
分頁機(jī)制的作用有兩方面:
- 將線性地址轉(zhuǎn)換成物理地址
- 用大小相等的頁代替大小不等的段
這兩方面的作用如圖:
由于有了線性地址到真實物理地址的這層映射,故經(jīng)過段部件輸出的線性地址便有了另外一個名字,虛擬地址。
總結(jié)
以上是生活随笔為你收集整理的一步步编写操作系统 36 一级页表与虚拟地址1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android gradle 语法,Gr
- 下一篇: oracle win10配置命令,记一次