深入理解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