当前位置: 技术问答>linux和unix
linux 内存初始化
来源: 互联网 发布时间:2016-07-17
本文导语: linux初始化时把支持的物理内存都映射到page table中,之后进程需要内存时,也是映射到这个物理内存中,如此说来,linux初始化时创建的page table和进程中创建的page table指向同一块物理页面吗?这样做的目的是什么...
linux初始化时把支持的物理内存都映射到page table中,之后进程需要内存时,也是映射到这个物理内存中,如此说来,linux初始化时创建的page table和进程中创建的page table指向同一块物理页面吗?这样做的目的是什么? 谢谢~
|
内核用到的内存不只8M。
Lz是看了深入理解Linux内核吧,那只是说明内核的工作方式。第一次映射的8M只是为了在MMU enable的前后都能正确的使用物理地址和虚拟地址。
另外,内核并没有把所有的内存都映射到page table里面。page table的确是动态地被修改的来映射更多或更少的内存。(32位)内核初始化的时候只初始化了0xc0000000以上的空间(不包括动态映射的部分)。这段虚拟地址只会由内核使用(的确,如果内存不多,那么这段地址已经可以把物理内存全部映射了,但这是内核使用的地址空间,用户空间一般的程序不能使用)。
0xc0000000以下的地址是用户空间可直接使用的虚拟地址空间。这段虚拟地址到物理地址的映射的确是动态进行的,当进程申请跟多内存时,由内核动态地修改进程的page table来映射。
内核的虚拟地址跟用户空间的虚拟地址有可能映射到相同的内存。如果真的要使用,某些内存页面可能被swap出去。
lz似乎把内核地址空间和进程的地址空间混在一起理解了。
Lz是看了深入理解Linux内核吧,那只是说明内核的工作方式。第一次映射的8M只是为了在MMU enable的前后都能正确的使用物理地址和虚拟地址。
另外,内核并没有把所有的内存都映射到page table里面。page table的确是动态地被修改的来映射更多或更少的内存。(32位)内核初始化的时候只初始化了0xc0000000以上的空间(不包括动态映射的部分)。这段虚拟地址只会由内核使用(的确,如果内存不多,那么这段地址已经可以把物理内存全部映射了,但这是内核使用的地址空间,用户空间一般的程序不能使用)。
0xc0000000以下的地址是用户空间可直接使用的虚拟地址空间。这段虚拟地址到物理地址的映射的确是动态进行的,当进程申请跟多内存时,由内核动态地修改进程的page table来映射。
内核的虚拟地址跟用户空间的虚拟地址有可能映射到相同的内存。如果真的要使用,某些内存页面可能被swap出去。
lz似乎把内核地址空间和进程的地址空间混在一起理解了。
|
每个Process都有自己的page_table,0xc0000000以上的地址跟内核的Page table是一致的,是内核空间的地址。
|
楼上是对的。