gpt4 book ai didi

linux - 可执行文件是为硬件制作的机器代码吗?

转载 作者:太空狗 更新时间:2023-10-29 12:21:30 24 4
gpt4 key购买 nike

这里来自维基。

“在计算中,可执行文件使计算机”根据编码指令执行指示的任务,“(机器码??)

“现代操作系统保留对计算机资源的控制,要求各个程序进行系统调用以访问特权资源。由于每个操作系统系列都有自己的系统调用架构,因此可执行文件通常与特定操作系统相关联。”

好吧,这是我的观点。可执行文件不能是机器代码,因为它们需要与操作系统进行硬件服务(系统调用)因此可执行文件还不是“机器代码”......也许就像代码的某些部分是实际的机器代码而某些部分是只是想调用操作系统中嵌入的机器代码?总的来说,它包含一些机器代码垃圾和一些调用操作系统的代码垃圾。

在达蒙的回答后编辑:OS到底是一组机器码。基本上操作系统将完成复制粘贴用户机器代码(由 C 编译器创建)的工作,然后如果指令是系统调用,则传输转到操作系统内存区域以进行处理。现在的问题是用 C 生成的机器代码可以完成这一部分?就像要求将控制转移到操作系统等 - 我想它的系统调用在更高的抽象但在引擎盖下 - 它是如何工作的。

我感觉它类似于鸡蛋问题,C 创建 OS,C 使用 OS 无法找到过程的确切过程。谁能帮我解开这个谜题?

最佳答案

一件事并不排斥另一件事。可执行文件是(除非它们是在虚拟机中运行的某种形式的字节码)机器代码。然而,有不同种类的指令,其中一些在某些特权级别下不可用。

这就是操作系统的用武之地,它是运行在最高特权级别的“机器代码”,充当“重要”部分和任务的仲裁者,例如决定谁获得 CPU 时间以及进入什么值(value)一些硬件寄存器。

(原评论,应要求作出答复)

编辑:关于您的扩展问题,其工作原理大致如下。当计算机打开时,处理器以其最高特权级别运行。在这种“模式”下,BIOS、引导加载程序和操作系统可以为所欲为。这听起来不错,但您不希望任何类型的代码能够为所欲为。

例如,代码可以告诉 MMU 允许读取或写入哪些内存页,哪些不允许。或者,它可以定义在发生“特殊情况”(例如陷阱或中断)时调用的地址。或者,它可以直接写入一些映射某些设备(磁盘、网络等)端口的特殊内存地址。

最终,操作系统切换到“非特权”模式并调用一些非操作系统代码。当陷阱或中断发生时,执行被中断并在其他地方继续(如操作系统先前指定的那样),并且特权级别再次提高。一旦中断被处理,特权被取消,用户代码被再次调用。
如果用户程序需要操作系统做一些“类似于操作系统”的事情,它会根据约定的方案(例如在某些特定的寄存器中)设置参数并执行陷阱指令。

例如,这是如何实现多线程或虚拟内存的。每隔一定时间,定时器就会触发一个中断,停止执行“正常”代码,并调用内核中的一些代码(在特权模式下)。然后,在某种优先级方案之后,该代码决定应该返回哪个用户进程控制。这些是分发的“CPU 时间片”。如果某个进程读取或写入不允许的页面,则 MMU 会生成一个陷阱。操作系统然后查看发生了什么和在哪里,并决定是否将一些数据从磁盘加载到某个内存区域(并可能清除其他内容)并更改进程的映射,或者是否以“段错误”错误终止进程.

当然在现实中,它要复杂一百万倍,但原则上就是这样。

操作系统或程序最初是用 C 语言还是汇编语言编写的并不重要。对于处理器来说,它只是一系列机器指令。即使是 python 或 perl 脚本最终也只是“机器指令”,只是绕过解释器。

关于linux - 可执行文件是为硬件制作的机器代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5598328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com