MVA疑问
来源:互联网 发布:mysql 修改列属性 编辑:程序博客网 时间:2024/05/29 18:30
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吗? 是一种固定的硬件转换机制.要想灵活性(进程空间大小,进程数),可以不用它. 快速便利往往牺牲灵活性.
- MVA疑问
- VA、MVA、PA
- 疑问
- 疑问
- 疑问
- 疑问
- 疑问
- 疑问
- 疑问
- 疑问
- 疑问
- 疑问
- 疑问
- 疑问!!
- 疑问
- 疑问
- 疑问
- 疑问
- Android解析XML
- 冲突看来只是编译器不同的问题,XCODE太重口了
- 两文件内容差
- 123063天两度瘫痪:为啥不在淘宝上卖火车票?
- 关于struts1的html标签的一些体会
- MVA疑问
- STM32的串口采用DMA方式接收数据测试
- 九度oj-1115-1062-1067
- struct 占用内存长度解析
- Servlet的生命周期
- Jquery 之 TreeGrid例子
- c程序内存分配
- linux内核中的dup系统调用
- 【Perl读书笔记】循环语句while和for