Re: [問題] 虛擬記憶體mapping 實體記憶體

作者: ICECOCA (unknow)   2013-11-15 01:03:45
※ 引述《mayasky ( )》之銘言:
: ※ 引述《shihyu (shihyu)》之銘言:
: : 有些虛擬記憶體轉實體記憶體疑惑
: : 1. 虛擬記憶體位址例如是1000 MMU 也是使用實體記憶體中1000位址嗎?
: 有可能,實際上要對到哪裡都可以,只要在ADDRESS LINE範圍內
實體記憶體分高記憶體區和低記憶體區,
若要求實體記憶體連續則會分配低記憶體區出去 比方說kmalloc()
或是匯流排要使用DMA,這也必須使用連續記憶體,所以也是分配這段。
通常會有一個offset,至於offset多少可能每個平台不一樣。
所以1000,應該不會直接mapping到1000
若沒有特別要求要連續,則會分配高端記憶體出去,並透過page table
紀錄虛擬位址和實體位址之間的mapping關係。
比方說vmalloc() 雖然在虛擬記憶體連續,但是對應到實體記憶體的位置可以不連續
: : 2. 假設用到一樣位址, 那在 multi task 系統這樣同時很多個process
: : 以32bit Linux 系統來說每process 都有3G , 1G kernel 共用
: : 這樣系統多個 process 運作虛擬記憶體位址會出現相同對映到實體記憶體是怎麼處理
: : ,不會有什麼衝突?
不同process有自己的記憶體空間,也有自己的page table
不同process做context switch時會連同page table一起交換...
換的時候,我不知道TLB會做什麼...? 把他全部設成dirty嗎?
: 這依照ARCH不同有不同方式
: 有TLB
: HIT
: 有ASID
: 每個PROCESS的ASID不一樣,即使VA同也會區別出不同的SPACE
: 沒ASID
: 每次CONTEXT SWITCH要清掉TLB,也不會衝突
: MISS
: 各自爬表沒衝突
: 無TLB
: 因為每次都要爬PAGE TABLE,所以VA一樣沒關係,表裡面會對到不同PA
: 隨便回答一下有省略點細節,但大致如此
: : 謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com