Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。用户空间的内存映射采用段页式,而内核空间有自己的规则。

*进程寻址空间0~4G  

*进程在用户态只能访问0~3G,只有进入内核态才能访问3G~4G  

*进程通过系统调用进入内核态

*每个进程虚拟空间的3G~4G部分是相同的  

*进程从用户态进入内核态不会引起控制寄存器的改变但会引起堆栈的改变