楼主:
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
当然有更细致的方式..这里不提了..因为那些未必有效率