我一直在尝试理解并做了很多在线研究,但仍然有疑问:
如果处理器只能理解操作码(这是有限的),那么为什么可以执行操作系统代码?比如多任务、调度,对于它们来说,操作系统中有一些模块/代码。如果这些“代码”不是由处理器理解的操作码“制作”的,那么谁理解该代码(非操作码/“非标准”代码),即不在处理器的“操作码列表”内.
操作系统仅使用处理器理解的操作码。所有操作系统代码均由合法的 CPU 操作码组成。
现代操作系统确实需要将一些特定操作内置到 CPU 中。例如,要运行 Linux,CPU 必须至少具有 2 种特权模式(以及用于切换它们的操作码)并支持虚拟内存(以及用于配置虚拟内存的操作码)。如果 CPU 没有这些操作码,现代操作系统就无法在这样的 CPU 上运行。这就是 Zilog Z80 上没有 Linux 的原因。
现代 CPU 有一些只有操作系统才能使用的操作码。这些通常是允许用户程序“脱离”操作系统规则的操作码。当处理器遇到这样的操作码时 - 它会检查当前代码是否属于操作系统(如何完成 - 取决于 CPU)。如果不这样做,CPU 将不会执行该操作,而是会向操作系统“告密”。注意:那些仅限操作系统的操作码仍然内置于 CPU 中!只是 CPU 在运行它们之前需要检查额外的条件。
多任务处理和调度主要是通过普通操作码完成的 - 只有少数操作系统专用的操作码。例如,单核上的多任务处理如下所示: