当我研究进程调度时,这个问题突然出现在我的脑海中。
操作系统如何执行和控制二进制文件和编译文件的执行?我认为操作系统可能会将二进制文件的一部分复制到某个内存位置,跳转到那里,在执行完该代码块后返回并执行下一个代码块。但这样它就不能控制它了(例如,程序可以跳到任何地方,并且不会再回来)。
在JVM的情况下,这是非常有意义的,VM正在解释每条指令。但在二进制文件的情况下,指令是真正的CPU可执行指令,所以我不认为OS的行为类似于VM。
发布于 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并不能解释每条指令(这会很慢)。相反,它会编译成本机代码并运行代码,或者(在即时编译的情况下)首先进行解释,但会编译“热点”(经常运行的代码)。
https://stackoverflow.com/questions/12931632
复制相似问题