Re: [问题] 虚拟内存mapping 实体内存

楼主: ICECOCA (unknow)   2013-11-15 01:03:45
※ 引述《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
: 随便回答一下有省略点细节,但大致如此
: : 谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com