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