操作系统(内核)对程序指令的影响(二进制级别)

Operating System (kernel) 's effect on program instructions (at binary level)

如果我们在处理器上没有操作系统 运行ning - 它会 运行 我们提供二进制程序(以机器语言表示)。例如,如果它是一个指令序列(假设没有跳转):A B C D;那么这四个指令将只是运行一条一条。

现在当我们谈论 OSes 时,通常的谈论方式是 - OS/kernel 确保一个进程的指令不会干扰另一个;并且 OS 管理对设备的访问。这种语言听起来好像有一个守望者(一个独立的一直活着(在执行的意义上)的实体)从高处往下看,instructing/making 确保一切都运行宁公平并且顺利地做任何他需要做的事情(其他凡人过程)运行ning.

在现实中当然没有机器如此神似的位置。只有一个处理器 (ALU),它根据程序计数器中的下一个值执行指令 - 这个处理器不知道也不关心指令是什么。

那么,如何OS'takes care'的一切呢?它是否将我们想要 运行 的程序指令与它自己的一堆指令交织在一起以执行监管?因此,如果程序的指令集是 A B C D(并假设其中一些是外部设备访问命令)——那么它可能会在内存中的某个地方变成 A X B Y C D Z(处理器从那里获取这些指令)?在最后一条指令之后,它又是 OS 的一组指令,它们复制另一个程序或做一些内务处理..?基本上你的问题是:OS 如何执行它的功能 - 根据 ALU 上的机器指令流 运行ning?

裸机就是没有os时我们所说的裸机。操作系统本身就是一个裸机程序。操作系统并不总是 运行ning 在单处理器系统(甚至多处理器)上。例如,设置了基于定时器的中断,这样操作系统每 N 个时间单位都会收到一个中断,并且可以选择 ose 来更改前台任务,给人一种很多程序都是 运行 的错觉一次 ning 但实际上只有一个(多核处理器除外)。硬件中断也由操作系统处理,磁盘需要一些东西,内存管理单元,键盘,鼠标等。

多核只会成倍增加复杂性,操作系统会处理更多 can/do 运行 并行的线程。一旦你拥有的东西 运行ning 多于内核,那么操作系统必须在一段时间内换出 运行,就像单核一样。

您可以使用的架构 运行 "proper" 操作系统通常为应用程序和内核提供不同的操作模式。有些指令只能在内核模式下执行,如果您的用户程序试图 运行 它们,则会引发某种通知(异常、陷阱、中断等),停止执行用户代码并切换到然后处理该问题的操作系统。类似的机制与内存管理单元一起工作以提供虚拟内存:当一条指令引用由于某种原因无法访问的虚拟地址时,将发生页面错误并将控制权转移到 OS 以便它可以采取行动.当外部事件(硬件中断)需要服务时,例如当设备需要一些注意时,OS 也可以控制。

除上述之外,在多任务系统中,OS 还定期进行控制,以便管理资源分配。这通常涉及定时器中断。