当微处理器的指令/操作码设置有限时,微处理器如何执行操作系统代码

问题描述 投票:0回答:1

我一直在尝试理解并做了很多在线研究,但仍然有疑问:

如果处理器只能理解操作码(这是有限的),那么为什么可以执行操作系统代码?比如多任务、调度,对于它们来说,操作系统中有一些模块/代码。如果这些“代码”不是由处理器理解的操作码“制作”的,那么谁理解该代码(非操作码/“非标准”代码),即不在处理器的“操作码列表”内.

operating-system x86-16 microprocessors opcode
1个回答
4
投票

操作系统仅使用处理器理解的操作码。所有操作系统代码均由合法的 CPU 操作码组成。

现代操作系统确实需要将一些特定操作内置到 CPU 中。例如,要运行 Linux,CPU 必须至少具有 2 种特权模式(以及用于切换它们的操作码)并支持虚拟内存(以及用于配置虚拟内存的操作码)。如果 CPU 没有这些操作码,现代操作系统就无法在这样的 CPU 上运行。这就是 Zilog Z80 上没有 Linux 的原因。

现代 CPU 有一些只有操作系统才能使用的操作码。这些通常是允许用户程序“脱离”操作系统规则的操作码。当处理器遇到这样的操作码时 - 它会检查当前代码是否属于操作系统(如何完成 - 取决于 CPU)。如果不这样做,CPU 将不会执行该操作,而是会向操作系统“告密”。注意:那些仅限操作系统的操作码仍然内置于 CPU 中!只是 CPU 在运行它们之前需要检查额外的条件。

多任务处理和调度主要是通过普通操作码完成的 - 只有少数操作系统专用的操作码。例如,单核上的多任务处理如下所示:

  1. 当前程序被中断以运行操作系统代码。这使用了CPU的中断机制和定时器设备。
  2. 程序的当前状态被保存到内存中。这完全是用普通操作码完成的 - 您只需保存程序有权访问的所有寄存器。
  3. 选择下一个要运行的程序。完成普通操作码 - 您只需阅读进程列表并根据某些规则或点系统决定下一个进程。
  4. 虚拟内存映射已切换。使用仅限操作系统的操作码。
  5. 从内存中恢复下一个程序的状态。正常操作码。
  6. 跳回程序。仅操作系统操作码,用于告诉 CPU 关闭操作系统特权模式。
© www.soinside.com 2019 - 2024. All rights reserved.