计算机系统:程序员的视角说
处理器通常通过某些控制寄存器中的模式位来提供此功能,该模式位表征进程当前享有的特权。当模式位被设置时,进程在内核模式(有时称为管理模式)下运行。运行在内核模式下的进程可以执行指令集中的任何指令并访问系统中的任何内存位置。
当模式位未设置时,进程在用户模式下运行。用户模式下的进程不允许执行诸如停止处理器、更改模式位或启动 I/O 操作之类的特权指令。也不允许直接引用地址空间的内核区域中的代码或数据。任何此类尝试都会导致致命的保护故障。用户程序必须通过系统调用接口间接访问内核代码和数据。
运行应用程序代码的进程最初处于用户模式。进程从用户模式更改为内核模式的唯一方法是通过异常,例如中断、故障或捕获系统调用。当异常发生并且控制权传递给异常处理程序时,处理器将模式从用户模式更改为内核模式。该处理程序在内核模式下运行。当它返回到应用程序代码时,处理器将模式从内核模式更改回用户模式。
Linux提供了一个巧妙的机制,称为/proc 文件系统,允许用户模式进程访问内核数据结构的内容。 /proc 文件系统将许多内核数据结构的内容导出为可由用户程序读取的文本文件层次结构。例如,您可以使用 /proc 文件系统来查找一般系统属性,例如 CPU 类型 (/proc/cpuinfo) 或特定进程使用的内存段 (/proc/process-id/maps)。 Linux 内核 2.6 版本引入了 /sys 文件系统,该文件系统导出有关系统总线和设备的附加低级信息。
当用户模式进程通过 /proc 和 /sys 文件系统“访问内核数据结构的内容”时,它们是否必须通过中断、故障或陷阱系统等异常“从用户模式更改为内核模式”称呼”?
谢谢。
答案1
对文件的任何访问都会通过系统调用或内存访问陷阱(对于内存映射文件),因此,是的,进程会切换到内核模式来访问文件(而不仅仅是在 和 中/proc
)/sys
。