首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统软件任务调度

操作系统软件任务调度
EN

Stack Overflow用户
提问于 2014-03-14 05:52:09
回答 4查看 164关注 0票数 1

我想知道调度程序是如何从加载的程序集代码中获得控制权的?例如,我们可以编写一个程序体,将控制从调度程序传递到其中。

代码语言:javascript
复制
;Do whatever we need to do before calling main()
;Call main or jump to it
;Do cleanup and stuff

那么如何将程序流从主程序返回到调度程序呢?我一直在想,进程加载程序可以注入jmp指令,将程序流返回到调度程序。有什么办法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-14 10:34:40

短版

OS加载器不插入任何jmp或调用代码。

在现代抢占式操作系统上,内核代码是从中断输入的,可以是:

“真正的”硬件中断的外围设备,如磁盘,NIC,KB,鼠标,定时器,导致驱动程序运行。

软件中断了.系统呼叫。

任何一种类型的中断都可以请求调度程序运行,并更改运行在核心上的一组线程。

如果没有中断,内核就什么也不做,因为它没有被输入。

票数 3
EN

Stack Overflow用户

发布于 2014-03-14 06:01:32

调度程序不会注入跳转之类的东西。操作系统将其注册到中断服务例程中。(isr) cpu的计时器中断。

票数 2
EN

Stack Overflow用户

发布于 2014-03-14 08:11:21

多任务处理要么是先发制人的,要么是可执行的。

大多数OSes使用先发制人的策略,这种策略是操作系统将一定的时间分配给线程,允许线程运行。当计时器过期时,会生成一个中断,并且操作系统强制切换到一个新任务(如果有)。除非提供了机制,否则不能真正阻止用户空间的使用。

在一个可操作的环境中,只要需要,流程就会运行。它必须显式地调用允许操作系统切换到新任务的函数。只要这个过程不这样做,理论上它就可以永远运行下去。

在这两种情况下,任务都可能执行系统调用,这要求任务等待,在这种情况下,任务切换也可能发生,直到等待的资源调用达到饱和。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22397208

复制
相关文章

相似问题

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