微视linux 进程和线程地址空间的深入理解

深入理解linux内核p86谈到:
从0x0000 0000到0xbfff ffff的线性地址,无论进程运行在用户态还是内核态都可以寻址;
从0xc000 0000到0xffff ffff的线性地址,只有内核态的进程才能寻址。

如何理解这段话呢?
进程的虚拟地址空间是0~4G-1。通过两段页表映射。进程创建后在用户空间运行,通过系统调用进入内核态,内核态存在访问用户态空间的场景,例如读取或者写用户缓冲(copy_to_user或者copy_from_user),所以第一个规则成立。

另外有一点就是内核线程,内核线程的页表只有第二段,所以内核线程没有必要,也永远也无法访问用户空间。

linux的swapper_pg_dir
https://blog.csdn.net/dahailantian1/article/details/78584821

Linux内存管理(4):内存映射机制
https://blog.csdn.net/zhoudaxia/article/details/7909106

浅尝辄止70-内核那些“非显式定义”宏
https://www.jianshu.com/p/9746745a97d2

猜你喜欢

转载自blog.csdn.net/shipinsky/article/details/90228576