当前位置: 技术问答>linux和unix
关于虚拟内存的问题
来源: 互联网 发布时间:2015-11-29
本文导语: 请问LINUX 用户进程的页表放置在那个空间 LINUX由用户空间转换到系统空间的以后使用的还是是用户进程的页表吗,或者使用的是系统空间页表,如果是后者是怎样切换的呢。 我知道Linux在引导的时候初始化了一个页...
请问LINUX 用户进程的页表放置在那个空间
LINUX由用户空间转换到系统空间的以后使用的还是是用户进程的页表吗,或者使用的是系统空间页表,如果是后者是怎样切换的呢。
我知道Linux在引导的时候初始化了一个页表,将 0-3G空间页表项初始化为0。
那么每个用户进程的3-4G的页表是初始化为0了呢,还是都一样都是与系统的页表相同。
LINUX由用户空间转换到系统空间的以后使用的还是是用户进程的页表吗,或者使用的是系统空间页表,如果是后者是怎样切换的呢。
我知道Linux在引导的时候初始化了一个页表,将 0-3G空间页表项初始化为0。
那么每个用户进程的3-4G的页表是初始化为0了呢,还是都一样都是与系统的页表相同。
|
1、LINUX 用户进程的页表放置在那个空间?
系统空间。因为像页目录、页表都是由MMU和内存管理模块共同管理完成的,对用户是透明的,对用户进程来说,不需要去了解什么页表。用户只管用malloc去申请内存,用完了释放就行了。就是说,用户只看到虚拟地址,而映射是由内核完成的,而仅仅的虚拟地址不用涉及转换,也就不会用到页表了。
2、LINUX由用户空间转换到系统空间的以后使用的还是是用户进程的页表吗,或者使用的是系统空间页表,如果是后者是怎样切换的呢。
当然还是在系统空间了,同1中讲述的,这一切从虚拟地址到物理地址转换的实现都是在系统空间中完成的。
3、每个用户进程的3-4G的页表是初始化为0了呢,还是都一样都是与系统的页表相同。
IA-32中,用户空间是低3G,系统空间是高1G。用户空间是独立的,也就是每个进程都拥有一个低3G的用户空间,但是高1G即你所说的3-4G是系统空间,是所有进程共享的系统空间,在用户空间中直接访问这高1G的系统空间就会越界,你可以在很多代码中都有检测这个地址范围。
系统空间。因为像页目录、页表都是由MMU和内存管理模块共同管理完成的,对用户是透明的,对用户进程来说,不需要去了解什么页表。用户只管用malloc去申请内存,用完了释放就行了。就是说,用户只看到虚拟地址,而映射是由内核完成的,而仅仅的虚拟地址不用涉及转换,也就不会用到页表了。
2、LINUX由用户空间转换到系统空间的以后使用的还是是用户进程的页表吗,或者使用的是系统空间页表,如果是后者是怎样切换的呢。
当然还是在系统空间了,同1中讲述的,这一切从虚拟地址到物理地址转换的实现都是在系统空间中完成的。
3、每个用户进程的3-4G的页表是初始化为0了呢,还是都一样都是与系统的页表相同。
IA-32中,用户空间是低3G,系统空间是高1G。用户空间是独立的,也就是每个进程都拥有一个低3G的用户空间,但是高1G即你所说的3-4G是系统空间,是所有进程共享的系统空间,在用户空间中直接访问这高1G的系统空间就会越界,你可以在很多代码中都有检测这个地址范围。