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

作者: mayasky ( )   2013-11-15 02:04:00
※ 引述《ICECOCA (unknow)》之銘言:
: ※ 引述《mayasky ( )》之銘言:
: : 有可能,實際上要對到哪裡都可以,只要在ADDRESS LINE範圍內
: 實體記憶體分高記憶體區和低記憶體區,
這是軟體設計問題,如果只談LINUX,是如此沒錯,但這概念是在32BITS CPU
: 若要求實體記憶體連續則會分配低記憶體區出去 比方說kmalloc()
: 或是匯流排要使用DMA,這也必須使用連續記憶體,所以也是分配這段。
一些老DMA會有ADDRESS LINE限制,現代的大多沒了
: 通常會有一個offset,至於offset多少可能每個平台不一樣。
: 所以1000,應該不會直接mapping到1000
您這邊說的就是軟體的設計了,我只說了硬體可以做到啥:)
硬體沒這些限制
: 若沒有特別要求要連續,則會分配高端記憶體出去,並透過page table
: 紀錄虛擬位址和實體位址之間的mapping關係。
: 比方說vmalloc() 雖然在虛擬記憶體連續,但是對應到實體記憶體的位置可以不連續
: 不同process有自己的記憶體空間,也有自己的page table
: 不同process做context switch時會連同page table一起交換...
其實只是改個REGISTER,指向不同地方
: 換的時候,我不知道TLB會做什麼...? 把他全部設成dirty嗎?
有ASID可以啥都不做,直到一些特殊狀況(EX.ARM,MIPS,冷門的台灣芯Score..XD)
沒ASID就要清光光(INVALIDATE)
我映像中..X86是TLB都清掉,有進化了嗎?雖然他們都幹掉還是比別人有ASID快..威武
AMD為了VIRTUALIZATION多了VMID的樣子(名字可能有誤),概念就是ASID
當然有更細緻的方式..這裡不提了..因為那些未必有效率
作者: askacis (ASKA)   2012-01-15 11:41:00
連續記憶體應該是DMA硬體的限制? 我知道有些DMA硬體可以設linking list丟給硬體,但實務上我還是拿連續記憶體餵他不然每次丟DMA之前還要建那串linking list table很麻煩XD
作者: mayasky ( )   2012-01-15 12:18:00
你說SG DMA嗎?那實際上是一堆不連續片段的記憶體我說address line是回應他說的low memory
作者: ICECOCA (unknow)   2012-01-16 01:22:00
感謝糾正~小弟是從歐萊禮 驅動程式那本念到的可能有些誤解
作者: mayasky ( )   2012-01-16 01:45:00
中譯本嗎?XD~搞不好是翻譯問題
作者: GTFX (我達達的馬蹄~)   2013-02-08 23:23:00
台灣心是 andes 謝謝 XD
作者: mayasky ( )   2013-03-08 21:33:00
比ANDES有更早的歐~你可能不知道這故事XD

Links booklink

Contact Us: admin [ a t ] ucptt.com