[!TIP] 省流: 用户模式和内核模式切换是操作系统保护机制的核心,而 /proc 是 Linux 系统暴露内核态信息的主要==接口==。通过 /proc,用户模式程序能够安全、高效地获取系统内核的信息,而无需直接进入内核态。

用户模式和内核模式

1. 用户模式

  • 权限限制:在用户模式下,程序的运行受限。它只能执行有限的指令,不能直接访问硬件资源(如磁盘、内存)。
  • 运行环境:一般用户应用程序(如文本编辑器、浏览器)在用户模式下运行。
  • 保护机制:如果应用程序出现问题(如非法内存访问),不会影响整个系统,因为操作受限制。

2. 内核模式

  • 完全权限:内核模式拥有对硬件和系统资源的完全访问权限,能够直接操作内存、硬件设备等。
  • 运行环境:操作系统内核和内核态驱动程序运行在内核模式下。
  • 风险:如果内核代码有问题,可能导致系统崩溃。

用户模式与内核模式之间的切换

==在 windows 中,主要通过调用系统 API 来实现==

==在 linux 中,就是主要通过接口或者直接的 c 语言程序来实现==

切换发生的典型场景:

  1. 系统调用:用户程序通过系统调用请求内核服务(如文件操作、网络通信)。
  2. 硬件中断:硬件设备向操作系统发送中断信号(如键盘输入、网络数据到达)。
  3. 异常处理:当用户程序发生异常(如除零错误、非法内存访问),切换到内核模式处理异常。

切换流程(以系统调用为例)

  1. 用户程序发起系统调用
    • 调用一个标准库函数(如 readwrite)。
    • 函数通过 syscall 指令触发软中断(如 int 0x80syscall 指令)。
  2. 切换到内核模式
    • CPU模式从用户态切换到内核态。
    • 跳转到内核中对应的系统调用处理函数。
  3. 内核处理请求
    • 执行内核代码完成请求(如从文件中读取数据)。
  4. 返回用户模式
    • 内核将结果返回给用户程序。
    • CPU切换回用户模式,继续执行用户代码。

/proc 文件系统

/proc 是 Linux 中一个伪文件系统,用于访问系统内核和进程信息。它提供了关于系统运行状态的动态信息,并不占用实际磁盘空间。

作用

  1. 访问系统信息

    • 提供硬件配置、内存使用、CPU信息等。
    • 示例:cat /proc/cpuinfo 查看CPU信息。
  2. 查看进程状态

    • 每个运行的进程都有一个目录 /proc/<PID>,其中包含该进程的详细信息。
    • 示例:cat /proc/1234/status 查看进程 1234 的状态。
  3. 调试和监控

    • 开发者和系统管理员可以通过 /proc 监控内核行为。
    • 示例:cat /proc/meminfo 查看内存使用情况。

/proc常见的文件和目录

路径 含义
/proc/cpuinfo CPU的详细信息
/proc/meminfo 内存使用情况
/proc/uptime 系统运行时间
/proc/<PID> 特定进程的信息(PID 是进程ID)
/proc/version 内核版本信息