目录

操作系统的地址空间划分

目录

操作系统的地址空间划分

现代操作系统采用 虚拟地址空间 ,一般的32位操作系统,虚拟地址空间为4G(2的32次方)。操作系统的核心是内核,独立于应用程序,可以访问受保护的内存空间和底层硬件设备。

为了保证用户不能操作内核,保证内核的安全,操作系统将虚拟地址空间划分为两部分。 一部分为内核空间,一部分为用户空间。

针对Linux系统而言, 将最高的1G字节划分供内核使用,称为内核空间。将较低的3G字节,供各个进程使用,称为用户空间。

每个进程可以通过系统调用进入内核。因此,Linux内核供系统所有进程共享。 每个进程理论上可以拥有4G字节的虚拟内存。

需要注意的细节问题:

(1) 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。

(2) Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。

内核态与用户态:

(1)当一个任务(进程)执行 系统调用而陷入内核代码中 执行时,称进程处于内核运行态(内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的 内核栈 。 每个进程都有自己的内核栈 。

(2)当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。此时处理器在特权级最低的(3级)用户代码中运行。 当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈 。