進程與MMU、TLB之間的疑問

background

在Linux中,進程操作的都是虛擬地址,而MMU是進行虛擬地址與物理地址的轉化,TLB用於加快虛擬地址(線性地址)的轉換~ 每個進程都有自己對應的頁表,不同進程相同的虛擬地址映射的大概率不是相同的物理地址,同時不同進程不同的虛擬地址可能映射到相同的物理地址上。本文的疑問就是針對進程有不同的頁表,那麼MMU與TLB到底是怎麼根據虛擬地址找到物理地址的呢,是不是MMU和TLB需要知道進程的信息呢,帶着這些疑問來進行探究~

疑問1 MMU、TLB是否需要知道進程信息?

轉換後援緩衝器TLB(Translation Lookaside Buffer)的高速緩存用於加快線性地址的轉換。當一個線性地址被第一次使用時,通過慢速訪問RAM中的頁表計算出相應的物理地址。同時物理地址被存放在一個TLB表項(TLB entry)中,以便以後對同一線性地址的引用可以快速得到轉換。

在多處理系統中,每個CPU都有自己的TLB,這叫做該CPU的本地TLB。與硬件高速緩存相反,TLB中的對應項不必同步,這是因爲運行在現有CPU上的進程可以使用同一線性地址與不同的物理地址發生聯繫。

當CPU的cr3控制寄存器被修改時,硬件自動使本地TLB中的所有項都無效,這是因爲新的一組頁表被啓用而TLB指向的是舊數據。

每個進程都有自己的頁表,頁表的起始地址放在進程的進程控制塊(PCB)中,當某進程運行時,將其頁表的起始地址放在頁表寄存器(cr3)中。單CPU系統中只能有一個進程處於執行狀態,因此一個頁表寄存器可供系統中所有的進程交替使用。

CR3中含有頁目錄表物理內存基地址,因此該寄存器也被稱爲頁目錄基地址寄存器PDBR(Page-Directory Base address Register)

操作系統和MMU是這樣配合的:

1、操作系統在初始化或分配、釋放內存時會執行一些指令在物理內存中填寫頁表,設置CR3寄存器,MMU通過CR3寄存器獲得頁表在物理內存中的位置。

2、設置好之後,CPU每次執行訪問內存的指令都會自動引發MMU做查表和地址轉換操作,地址轉換操作由硬件自動完成,不需要用指令控制MMU去做。

總結

通過上述分析,其實MMU、TLB是需要知道進程的具體信息的,進程切換之後TLB的內容都會無效,它只緩存當前運行進程的地址轉換,當進程切換時,CR3寄存器內容修改,TLB中的內容自動失效~ 。MMU也是通過CR3寄存器中的頁目錄表物理內存基地址去找到當前正在運行進程的頁表,所以MMU也不太需要具體的進程信息~

參考

[1] 深入理解Linux內核

[2] MMU內存管理單元

疑問2 多處理器是否會發生相應的虛擬地址衝突?

每個處理器應該都有自己的CR3控制寄存器,多處理器多進程在同時運行時,根據自己的CR3寄存器找到對應的頁表即可。

總結

不存在衝突

疑問3 cpu cache是否需要知道進程信息?

在解答這個之前,需要先了解cache的組織方式,如何通過虛擬地址或物理地址來尋找cache。

cache主要有三種組織方式:

  1. VIVT(Virtual Index Virtual Tag):使用虛擬地址做index,虛擬地址做Tag;

  2. VIPT(Virtual Index Physical Tag):使用虛擬地址做index,物理地址做Tag;

  3. PIPT(Physical Index Physical Tag):使用物理地址做index,物理地址做Tag;

具體內容可以查閱博文《Cache組織方式》地址:https://zhuanlan.zhihu.com/p/107096130?tdsourcetag=s_pctim_aiomsg

對於cache的三種組織方式在進行虛擬地址到物理地址的轉換時,都是基於CR3來進行的,CR3有當前運行進程的相關信息,在《深入理解LINUX內核》一書中 P63 指出CR3寄存器中存放的是進程描述符(task_struct),如果是存放的這個那麼MMU、TLB既然能讀取CR3的內容,那麼也是能夠知道進程的相關信息的,但是有的由把CR3寄存器稱爲頁目錄基地址寄存器PDBR,如果CR3中只保存了頁目錄基地址,那麼MMU和TLB是不知道具體的進程信息的~

 

4、其他內容

(1)關於TLB miss可以參考《TLB緩存是個神馬鬼,如何查看TLB miss?》

地址:https://blog.csdn.net/zhangyanfei01/article/details/100053533

(2)頁表和頁目錄在內容中的存放可以參考《關於進程頁表和頁目錄是存放在內核空間,還是用戶空間,低端還是高端內存的思考和驗證》

地址:https://blog.csdn.net/u011673554/article/details/48262045

(3)cache的一些基礎知識可以參考《Cache是怎麼組織和工作的?》

地址:https://zhuanlan.zhihu.com/p/31859105

5、下一步

接下來需要進一步瞭解CR3的具體內容,以及MMU和TLB還有操作系統與CR3的交互方式~

https://blog.csdn.net/SweeNeil/article/details/106171361

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章