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