深入理解linux内核p86谈到:
从0x0000 0000到0xbfff ffff的线性地址,无论进程运行在用户态还是内核态都可以寻址;
从0xc000 0000到0xffff ffff的线性地址,只有内核态的进程才能寻址。
如何理解这段话呢?
进程的虚拟地址空间是0~4G-1。通过两段页表映射。进程创建后在用户空间运行,通过系统调用进入内核态,内核态存在访问用户态空间的场景,例如读取或者写用户缓冲(copy_to_user或者copy_from_user),所以第一个规则成立。
另外有一点就是内核线程,内核线程的页表只有第二段,所以内核线程没有必要,也永远也无法访问用户空间。
对于内核线程来说 task->mm为空
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
Linux线程之线程 线程组 进程 轻量级进程(LWP)
http://www.it165.net/os/html/201305/5123.html
Linux进程管理(2):进程创建的copy_process和进程销毁
https://blog.csdn.net/zhoudaxia/article/details/7367044
linux进程的创建、退出、调度
http://blog.sina.com.cn/s/blog_68cc26c50100ua9b.html