gpt4 book ai didi

operating-system - 操作系统如何执行编译后的二进制文件?

转载 作者:行者123 更新时间:2023-12-04 15:24:52 24 4
gpt4 key购买 nike

当我研究进程调度时,这个问题出现在我的脑海中。

操作系统如何执行和控制二进制文件和编译文件的执行?我想也许操作系统将二进制文件的一部分复制到某个内存位置,跳转到那里,在执行该块后返回并执行下一个。但是它不会对其进行任何控制(例如,程序可以在任何地方跳转并且不会返回)。

在 JVM 的情况下,这是完全合理的,VM 正在解释每条指令。但是在二进制文件的情况下,指令是真正的 CPU 可执行指令,所以我认为操作系统不像 VM。

最佳答案

它正是这样做的。操作系统,按某种顺序,

  • 在进程表中创建一个条目
  • 为进程创建虚拟内存空间
  • 加载进程内存中的程序代码
  • 将流程指令指针指向流程入口点
  • 在调度程序中创建一个条目并设置进程线程准备执行。

  • 并发不是由拆分成块的程序来处理的。任务之间的切换是通过中断完成的:在给进程分配 CPU 之前,设置一个计时器。当定时器结束时,CPU 注册一个中断,将指令指针压入堆栈并跳转到操作系统定义的中断处理程序。该处理程序将 CPU 状态存储在内存中,交换虚拟内存表并恢复一些其他准备好执行的线程。如果线程由于某些其他原因(等待用户/磁盘/网络...)或屈服而必须暂停,则会发生相同的交换。
    http://en.wikipedia.org/wiki/Multitasking#Preemptive_multitasking.2Ftime-sharing

    请注意,依赖于产生 CPU 的进程是可能的,但不可靠(该进程可能不会产生,从而阻止其他进程运行)
    http://en.wikipedia.org/wiki/Multitasking#Cooperative_multitasking.2Ftime-sharing

    安全是通过将 CPU 切换到保护模式来处理的,在这种模式下,应用程序代码无法运行某些指令(因此随机跳转通常是无害的)。见 the link provided by @SkPhilipp

    请注意,现代 JVM 不会解释每条指令(那会很慢)。相反,它编译成 native 代码并运行代码或(在即时编译的情况下)首先解释,但编译“热点”(经常运行的代码)。

    关于operating-system - 操作系统如何执行编译后的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12931632/

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