MVA疑问

来源:互联网 发布:mysql 修改列属性 编辑:程序博客网 时间:2024/05/29 18:30

参考:http://zhidao.baidu.com/question/177781156.html#answer-1290686116

关于ARM的CPU中, VA 到MVA转换的疑惑

2010-08-23 21:00
VA转换成MVA,cache、MMU使用MVA  VA->MVA的方法(硬件自动完成):  if(VA<32M)   MVA=VA|(PID<<25) //PID通过读CP15的C13获得  else MVA=PA我不明白为什么要这样转换。我只理解:MVA=VA|(PID<<25) 是因为VA|(PID<<25)就等相当于VA|32M*PID(假设移位不溢出,那么就是VA+32M*PID)。可是,为什么32M以下的VA就要转换而32M以上的VA却不用转换呢?另外,假如两进程各自的VA1=VA2>32M,那么将会怎么办呢?Linux操作系统里面,所有是不是只有个页表装载、映射所有进程??
这种情况下称为快速切换,每个进程只能分到32M的空间,而超过32M空间的则系统判断其为数据通信或传输,所以进程的上下文切换是不可能出现MVA=PA的情况的。
参考资料:http://www.unixresources.net/linux/clf/linuxK/archive/00/00/70/95/709533.html#article709533
在看《ARM体系结构与编程》(杜春雷)第五章讲述快速上下文切换时,看到如下内容: 
“ARM的4GB虚拟空间分成128个进程空间块,每个进程空间块有32M。当进行快速上下文切换时,会对虚拟地址高7位进行判断,如果为0就在高7位加上进程所在进程空间块的编号;如果不为0就什么也不做。” 
“系统中,每个进程都使用虚拟地址空间0x00000000——0x01ffffff,当进程访问本进程的数据和指令时,它产生的虚拟地址VA的高7位为0,不为0的VA是本进程用于访问其它进程数据的虚拟地址。” 
那么我有一个疑问,如果一个进程所占的内存超过32M会出现什么情况?是否会占据多个进程空间块?另外,如果系统中有超过128个进程怎么办?是否多个进程共享同一个进程空间块? 
如果确实象我上面猜想的那样,一个进程可以有多个进程空间块,多个进程也可以共享同一个进程空间块,那么在快速上下文切换时候,系统如何知道当前进程空间块的信息? 
我对ARM体系结构不熟悉,请知道的指教一下,多谢! 按理这个应该发到cpu版块,但发了之后没有相应,这个版块高人多,所以再发一下,请版主大人见谅。
arm的每个进程空间不能超过32M吗?  是一种固定的硬件转换机制.要想灵活性(进程空间大小,进程数),可以不用它. 快速便利往往牺牲灵活性.
原创粉丝点击