【问题标题】:Operating System (kernel) 's effect on program instructions (at binary level)操作系统(内核)对程序指令的影响(二进制级别)
【发布时间】: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 上运行的机器指令流而言?

【问题讨论】:

标签: linux assembly operating-system kernel cpu


【解决方案1】:

裸机是我们在没有操作系统时所说的。操作系统本身就是一个裸机程序。操作系统并不总是在单处理器系统(甚至多处理器系统)上运行。例如,设置了基于定时器的中断,以便操作系统每隔 N 个时间单位获得一个中断,并且可以选择例如更改前台任务,从而产生许多程序同时运行但实际上只有一个运行的错觉(除了多核处理器)。硬件中断也由操作系统处理,磁盘需要一些东西,内存管理单元,键盘,鼠标等。

多核只会增加复杂性,操作系统会处理更多可以/确实可以并行运行的线程。一旦你运行的东西多于核心,那么操作系统必须在一段时间内换掉谁可以像单核一样现在和下一个运行。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的解释。两个答案都很棒,但因为我只能选择一个作为“接受” - 我选择了按时间顺序排列的第一个。
    猜你喜欢
    • 2022-01-24
    • 2014-04-23
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多