【发布时间】:2015-05-26 15:42:00
【问题描述】:
如果我们没有在处理器上运行操作系统 - 它将运行我们提供的二进制程序(以它的机器语言)。例如,如果它是一个指令序列(假设没有跳转):A B C D;那么这 4 条指令将简单地一条一条地运行。
现在,当我们谈论操作系统时,通常的说法是 - 操作系统/内核会注意一个进程的指令不会干扰另一个进程的指令;并且操作系统管理对设备的访问。这种语言听起来像是有一个守望者(一个独立的永远活着的(在执行的意义上)实体)从顶部向下看并指示/确保一切都公平和顺利地运行并做他需要的任何事情为所有正在运行的东西(其他致命进程)做准备。
在现实中,机器当然没有这种神一般的位置。只有一个处理器 (ALU),它根据程序计数器中的下一个值执行指令——这个处理器不知道也不关心指令是什么。
那么,操作系统如何“照顾”一切?它是否将我们想要运行的程序的指令与它自己的一堆指令交错以执行监管?因此,如果程序的指令集是A B C D(并假设其中一些是外部设备访问命令)-那么它可能会在内存中的某处变为A X B Y C D Z(处理器从中获取这些指令)?在最后一条指令之后,又是操作系统的一组指令,它们复制另一个程序或做一些家务......?基本上 yy 的问题是:操作系统如何执行它的功能 - 就在 ALU 上运行的机器指令流而言?
【问题讨论】:
-
您可能想阅读Wikipedia: Context switch,因为它是执行指令交错的机制以及Intel® 64 and IA-32 Architectures Software Developer Manuals 中的“PRIVILEGED INSTRUCTIONS”一章,因为它描述了操作系统如何获得 power i> 对于神一样的行为
标签: linux assembly operating-system kernel cpu