首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >操作系统如何执行编译的二进制文件?

操作系统如何执行编译的二进制文件?
EN

Stack Overflow用户
提问于 2012-10-17 17:53:02
回答 1查看 2.8K关注 0票数 6

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

操作系统如何执行和控制二进制文件和编译文件的执行?我认为操作系统可能会将二进制文件的一部分复制到某个内存位置,跳转到那里,在执行完该代码块后返回并执行下一个代码块。但这样它就不能控制它了(例如,程序可以跳到任何地方,并且不会再回来)。

在JVM的情况下,这是非常有意义的,VM正在解释每条指令。但在二进制文件的情况下,指令是真正的CPU可执行指令,所以我不认为OS的行为类似于VM。

EN

Stack Overflow用户

回答已采纳

发布于 2012-10-17 18:52:14

它确实做到了这一点。操作系统,在某种程度上,

  • 在进程表中创建条目
  • 为进程创建虚拟内存空间
  • 在进程内存中加载程序代码
  • 将进程指令指针指向进程入口点

< code >H19在计划程序中创建一个条目,并将进程线程设置为可供执行。

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

http://en.wikipedia.org/wiki/Multitasking#Preemptive_multitasking.2Ftime-sharing

请注意,依赖产生CPU的进程是可能的,但不可靠(该进程可能不会产生CPU,从而阻止其他进程运行)

http://en.wikipedia.org/wiki/Multitasking#Cooperative_multitasking.2Ftime-sharing

安全性是通过将CPU切换到保护模式来处理的,在保护模式下,应用程序代码不能运行某些指令(因此随机跳来跳去基本上是无害的)。请参阅the link provided by @SkPhilipp

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

票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12931632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档