Linux下一个进程创建好之后就有了自己的进程地址空间,这个地址空间是线性的,并且最大可以到4G【32位系统】,用线性空间地址找到物理地址需要经过页目录表,页表这些东西经过一定的计算才能得到,请问各位高手,一个进程由线性地址转换到物理地址这个过程中需要的这些页表啦,页目录表啦是什么时候建立好的?是每个进程创建都要建立各自的这些表项?还是所有进程都使用同一份这些表项!跪求指点!!!
------解决方案--------------------
进程创建的时候内核会添加到表项中
------解决方案--------------------
楼主的两个问题:
1、一个进程由线性地址转换到物理地址这个过程中需要的这些页表啦,页目录表啦是什么时候建立好的?
答:在内核新建一个进程的时候会为新的进程创建页表,具体内核代码实现位置,可查看fork的内核实现及装载一个elf文件过程的代码实现。我就不贴代码了。^_^
2、是每个进程创建都要建立各自的这些表项?还是所有进程都使用同一份这些表项?
答:映射内核空间(1G)的那部分页表是所有进程都一样的。只是每个进程有一个“副本”而已。映射用户空间(代码段、数据段、堆等等)的那部分页表是每个进程都不一样的(这个很显然,^_^)。具体代码实现,楼主得看linux代码。