我想知道调度程序是如何从加载的程序集代码中获得控制权的?例如,我们可以编写一个程序体,将控制从调度程序传递到其中。
;Do whatever we need to do before calling main()
;Call main or jump to it
;Do cleanup and stuff那么如何将程序流从主程序返回到调度程序呢?我一直在想,进程加载程序可以注入jmp指令,将程序流返回到调度程序。有什么办法吗?
发布于 2014-03-14 10:34:40
短版
OS加载器不插入任何jmp或调用代码。
在现代抢占式操作系统上,内核代码是从中断输入的,可以是:
“真正的”硬件中断的外围设备,如磁盘,NIC,KB,鼠标,定时器,导致驱动程序运行。
软件中断了.系统呼叫。
任何一种类型的中断都可以请求调度程序运行,并更改运行在核心上的一组线程。
如果没有中断,内核就什么也不做,因为它没有被输入。
发布于 2014-03-14 06:01:32
调度程序不会注入跳转之类的东西。操作系统将其注册到中断服务例程中。(isr) cpu的计时器中断。
发布于 2014-03-14 08:11:21
多任务处理要么是先发制人的,要么是可执行的。
大多数OSes使用先发制人的策略,这种策略是操作系统将一定的时间分配给线程,允许线程运行。当计时器过期时,会生成一个中断,并且操作系统强制切换到一个新任务(如果有)。除非提供了机制,否则不能真正阻止用户空间的使用。
在一个可操作的环境中,只要需要,流程就会运行。它必须显式地调用允许操作系统切换到新任务的函数。只要这个过程不这样做,理论上它就可以永远运行下去。
在这两种情况下,任务都可能执行系统调用,这要求任务等待,在这种情况下,任务切换也可能发生,直到等待的资源调用达到饱和。
https://stackoverflow.com/questions/22397208
复制相似问题