上QQ阅读APP看书,第一时间看更新
3.3.3 Linux内核空间与用户空间
现代CPU内部往往实现了不同操作模式(级别),不同模式有不同功能,高层程序往往不能访问低级功能,而必须以某种方式切换到低级模式。
例如,ARM处理器分为7种工作模式。
·用户模式(usr):大多数应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能访问的。
·快速中断模式(fiq):用于高速数据传输或通道处理。
·外部中断模式(irq):用于通用的中断处理。
·管理模式(svc):操作系统使用的保护模式。
·数据访问中止模式(abt):当数据或指令预取中止时进入该模式,可用于虚拟存储及存储保护。
·系统模式(sys):运行具有特权的操作系统任务。
·未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
ARM Linux的系统调用实现原理是采用swi软中断从用户(usr)模式陷入管理模式(svc)。
又如,x86处理器包含4个不同的特权级,称为Ring 0~Ring 3。在Ring0下,可以执行特权级指令,对任何I/O设备都有访问权等,而Ring3则被限制很多操作。
Linux系统可充分利用CPU的这一硬件特性,但它只使用了两级。在Linux系统中,内核可进行任何操作,而应用程序则被禁止对硬件的直接访问和对内存的未授权访问。例如,若使用x86处理器,则用户代码运行在特权级3,而系统内核代码则运行在特权级0。
内核空间和用户空间这两个名词用来区分程序执行的两种不同状态,它们使用不同的地址空间。Linux只能通过系统调用和硬件中断完成从用户空间到内核空间的控制转移。