1. Linux为什么要分为用户空间和内核空间?
答:简单理解为:内核空间是内核使用,用户空间是应用程序使用。确保了系统安的安全性。
2. 用户空间和内核空间的区别:
用户空间:(CPU处于USR模式)
包含用户编写的应用软件,C库。整个4G虚拟地址空间,用户空间包含了0~3G,每个用户都有自己的
独立3G空间。
不能直接访问硬件资源。
内核空间:(CPU处于SVC模式)
包含了进程管理(PM),虚拟文件系统(VFS),内存管理(MM),网络协议栈,平台相关(ARCH),设备驱动(DD),内核空间包含了剩余的1G虚拟地址空间,内核1G空间对于所有的进程都是
共享的。能够访问任何资源。
用户虚拟空间地址范围:0x00000000 ~ 0xBFFFFFFF
内核虚拟空间地址范围:0xC0000000 ~ 0xFFFFFFFF
两种模式的划分说明了,不同空间的软件在访问资源时,具有的权限是不一样的。
3.Linux系统调用过程
(1)Linux系统给每一个系统调用函数都指定了一个系统调用号,例如:exit函数的系统调用号为1,write的系统调用号为4等。
(2)每当应用程序调用系统调用函数时(例如write函数),首先跑到C库的write函数实现。
(3)C库的write函数首先把write函数对应的系统调用号保存在R7寄存器中。
(4)通过调用SWI或者SVC触发一个软中断异常从用户空间进入内核空间,CPU跳转到异常向量表的位置去处理。
(5)进入到内核空间以后,从R7寄存器中取出之前保存的系统调用号
(6)然后在内核已经定义好的系统表中,以系统调用号为索引(下标),在系统调用表中找到对应的函数(sys_write)
(7)执行完此函数后,最后原路返回用户空间。
注意:软中断是从用户空间陷入内核空间的唯一途径。
阅读(2000) | 评论(1) | 转发(0) |