分类:linux| 发布时间:2025-01-21 12:50:00
Unix内核提供了一个执行环境,应用程序可以在其中运行。 因此,内核必须实现一组服务和相应的接口。应用程序通过这些接口进行交互,通常不会直接与硬件资源交互。
CPU可以在用户模式(User Mode)或内核模式(Kernel Mode)下运行。 实际上,一些 CPU 可能有超过两种执行状态。 例如,80x86 微处理器有四种不同的执行状态。但所有标准的 Unix 内核只使用内核模式和用户模式。
当程序在用户模式下执行时,它不能直接访问内核数据结构或内核程序。 然而,当应用程序在内核模式下执行时,这些限制就不再适用。 每种CPU型号都提供特殊指令,用于在用户模式和内核模式之间切换。 程序通常在用户模式下执行,只有在请求内核提供的服务时,才会切换到内核模式。 当内核满足了程序的请求后,它会将程序切换回用户模式。
进程是动态实体,通常在系统中有一个有限的生命周期。 创建、消除和同步现有进程的任务由内核中的一组例程处理。
内核本身不是一个进程,而是一个进程管理器。 进程/内核模型假定,所有需要内核服务的进程使用一种叫做系统调用(system calls)的特定编程结构。 每个系统调用都会设置一组参数,用以标识进程请求,然后执行硬件相关的 CPU 指令,将程序从用户模式切换到内核模式。
除了用户进程,Unix系统还包括一些特权进程,称为内核线程,具有以下特点:
在单处理器系统上,任何时候只有一个进程在运行,它可以在用户模式或内核模式下运行。 如果它在内核模式下运行,处理器正在执行某个内核例程。 图 1 展示了用户模式和内核模式之间切换的示例。 进程 1 在用户模式下发出系统调用,之后进程切换到内核模式,系统调用被服务。 进程 1 随后在用户模式下继续执行,直到发生定时器中断,调度程序在内核模式下被激活。 进程切换发生,进程 2 开始在用户模式下执行,直到硬件设备触发中断。 由于中断,进程 2 切换到内核模式并处理该中断。
Unix内核的功能不仅仅是处理系统调用;实际上,内核例程可以通过多种方式被激活:
为了让内核管理进程,每个进程都由一个进程描述符表示,进程描述符包含有关进程当前状态的信息。
当内核停止执行一个进程时,它会将多个处理器寄存器的当前内容保存在进程描述符中。这些寄存器包括:
当内核决定恢复执行一个进程时,它会使用适当的进程描述符字段来加载 CPU 寄存器。 由于程序计数器的存储值指向最后执行指令之后的指令,进程会从停止的位置继续执行。
当进程没有在 CPU 上执行时,它在等待某个事件。 Unix内核区分了许多等待状态,这些状态通常通过进程描述符的队列来实现;每个(可能为空的)队列对应于一组等待特定事件的进程。