如果我们没有在处理器上运行操作系统 - 它将运行我们提供的二进制程序(用它的机器语言)。例如,如果它是一个指令序列(假设没有跳转):A B C D
;然后这四条指令将一个接一个地运行。
现在,当我们谈论操作系统时,通常的谈话方式是 - 操作系统/内核会注意一个进程的指令不会干扰另一个进程;并且OS管理对设备的访问。这种语言听起来像是一个守望者(一个独立的所有时间活着(在执行意义上)实体)从顶部俯视并指示/确保一切运行得相当顺利并做任何他需要的事情为所有事情(其他致命过程)做的事情。
实际上,当然没有地方可以让机器具有这种神似的位置。只有一个处理器(ALU),它根据程序计数器中的下一个值执行指令 - 该处理器不知道或不关心指令是什么。
那么,OS'如何照顾'一切?它是否将我们想要运行的程序的指令与它自己的指令串交错来强制执行警务?所以,如果程序的指令集为A B C D
(并假设其中一些是外部设备访问命令) - 那么它可能会在内存中的某处(从处理器获取这些指令的位置)变为A X B Y C D Z
?在最后一条指令之后,再次发出操作系统的指令,复制另一个程序或做一些内务处理......?基本上,你的问题是:操作系统如何执行它的功能 - 就ALU上运行的机器指令的流量而言?
答案 0 :(得分:2)
运行“正确”操作系统的架构通常为应用程序和内核提供不同的操作模式。某些指令只能在内核模式下执行,如果用户程序试图运行它们,会引发某种通知(异常,陷阱,中断等),这会停止执行用户代码并切换到操作系统。然后处理问题。类似的机制与存储器管理单元一起工作以提供虚拟存储器:当指令引用由于某种原因不可访问的虚拟地址时,发生页面错误并且控制被转移到OS以便它可以采取行动。当外部事件(硬件中断)需要服务时,操作系统也会获得控制权,例如当设备需要一些注意时。
除此之外,在多任务系统中,OS还定期进行控制,以便管理资源分配。这通常涉及定时器中断。
答案 1 :(得分:1)
当没有操作系统时,裸金属就是我们所说的。操作系统本身就是一个裸机程序。操作系统并不总是在单个处理器系统上运行(甚至是多个)。例如,基于定时器的中断被设置为使得每N个操作系统获得中断的任何单位时间并且可以选择例如改变前台任务,给出错觉,即许多程序一次运行但实际上只有一个是(除了多核处理器)。硬件中断也由操作系统处理,磁盘需要一些东西,内存管理单元,键盘,鼠标等。
多核只会增加复杂性,操作系统需要更多并行运行的线程。一旦你有更多的东西在运行而不是核心,那么操作系统必须在一段时间内换掉谁现在和下一个就像单核一样运行。