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

看板LinuxDev作者 ( )時間10年前 (2013/11/15 02:04), 編輯推噓3(306)
留言9則, 4人參與, 最新討論串4/4 (看更多)
※ 引述《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 當然有更細緻的方式..這裡不提了..因為那些未必有效率 -- KERNEL先生。。。別整蠱我了orz http://www.wretch.cc/blog/mayasky -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.97.16 ※ 編輯: mayasky 來自: 61.231.97.16 (11/15 02:52)

11/15 11:41, , 1F
連續記憶體應該是DMA硬體的限制? 我知道有些DMA硬體可以
11/15 11:41, 1F

11/15 11:42, , 2F
設linking list丟給硬體,但實務上我還是拿連續記憶體餵他
11/15 11:42, 2F

11/15 11:43, , 3F
不然每次丟DMA之前還要建那串linking list table很麻煩XD
11/15 11:43, 3F

11/15 12:18, , 4F
你說SG DMA嗎?那實際上是一堆不連續片段的記憶體
11/15 12:18, 4F

11/15 12:19, , 5F
我說address line是回應他說的low memory
11/15 12:19, 5F

11/16 01:22, , 6F
感謝糾正~小弟是從歐萊禮 驅動程式那本念到的可能有些誤解
11/16 01:22, 6F

11/16 01:45, , 7F
中譯本嗎?XD~搞不好是翻譯問題
11/16 01:45, 7F

02/08 23:23, , 8F
台灣心是 andes 謝謝 XD
02/08 23:23, 8F

03/08 21:33, , 9F
比ANDES有更早的歐~你可能不知道這故事XD
03/08 21:33, 9F
文章代碼(AID): #1IXH2Ig3 (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #1IXH2Ig3 (LinuxDev)