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

看板LinuxDev作者 (unknow)時間10年前 (2013/11/15 01:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
※ 引述《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 : 隨便回答一下有省略點細節,但大致如此 : : 謝謝 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.169.235
文章代碼(AID): #1IXG9q2Z (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #1IXG9q2Z (LinuxDev)