首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统调度程序如何重新控制CPU?

操作系统调度程序如何重新控制CPU?
EN

Stack Overflow用户
提问于 2012-07-13 23:40:13
回答 3查看 11.3K关注 0票数 66

我最近开始学习CPU和操作系统是如何工作的,我对具有提供多任务的操作系统的单CPU机器的操作感到有点困惑。

假设我的机器只有一个CPU,这意味着在任何给定的时间,只能有一个进程在运行。

现在,我只能假设操作系统用来控制访问宝贵CPU时间的调度程序也是一个进程。

因此,在这台机器中,用户进程或调度系统进程在任何给定的时间点都在运行,但不能同时运行。

所以这里有一个问题:

一旦调度器将CPU的控制权交给另一个进程,它如何才能重新获得CPU时间来再次运行自己来完成其调度工作呢?我的意思是,如果当前运行的任何给定进程没有产生CPU,那么调度器本身如何再次运行并确保适当的多任务处理?

到目前为止,我一直在想,如果用户进程通过系统调用请求I/O操作,那么在系统调用中,我们可以确保再次为调度程序分配一些CPU时间。但我甚至不确定这是否以这种方式工作。

另一方面,如果所讨论的用户进程本质上是CPU受限的,那么从这个角度来看,它可以永远运行,永远不会让其他进程运行,甚至不会让调度程序再次运行。

假设时间分片调度,我不知道调度器如何在另一个进程甚至不运行的情况下对其执行时间进行分片?

我非常感谢您在这方面能提供的任何见解或参考资料。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-13 23:42:46

操作系统设置一个硬件定时器(Programmable interval timer或PIT),每N毫秒产生一个中断。该中断被传送到内核,并且用户代码被中断。

它的工作原理与任何其他硬件中断一样。例如,当内核完成IO时,您的磁盘将强制切换到内核。

票数 53
EN

Stack Overflow用户

发布于 2012-07-14 17:56:21

谷歌的“中断”。中断是多线程、抢占式内核(如Linux/Windows )的核心。如果没有中断,操作系统将永远不会做任何事情。

在调查/学习时,尽量忽略第一段中提到“计时器中断”、“轮询”和“时间片”或“量子”的任何解释-如果它们实际上不是错误的,那就是危险的误导。

在OS术语中,中断有两种类型:

  • 硬件中断-由来自外围设备的实际硬件信号发起的中断。这些可以在(几乎)任何时间发生,并将执行从可能正在运行的任何线程切换到driver.
  • Software中断中的代码-这些中断是由来自当前运行的线程的OS调用发起的。

任一中断都可以请求调度器使正在等待的线程准备就绪/运行,或者使正在等待/运行的线程被抢占。

最重要的中断是来自外围设备驱动程序的那些硬件中断-这些中断使线程准备好等待来自磁盘、NIC卡、鼠标、键盘、USB等的IO。使用抢占式内核的压倒一切的原因,以及锁定、同步、信号等的所有问题,是这样的系统具有非常好的IO性能,因为硬件外围设备可以迅速使正在等待来自该硬件的数据的线程准备好/运行,没有任何因线程不让步或等待定期计时器重新调度而导致的延迟

导致周期性调度运行的硬件定时器中断是重要的,因为许多系统调用具有超时,以防来自外围设备的响应花费比其应有的时间更长的时间。

在多核系统上,操作系统具有处理器间驱动程序,该驱动程序可以在其他内核上引起硬件中断,从而允许操作系统中断/调度/分派线程到多个内核。

在严重超载的机器上,或运行CPU密集型应用程序(少数)的机器上,操作系统可以使用定期计时器中断和由此产生的调度,在一组比可用核心数更多的就绪线程之间循环,并允许每个线程共享可用的CPU资源。在大多数系统上,这种情况很少发生,也不重要。

每次我看到“量子”,“放弃剩余的时间片”,“循环”和类似的东西,我就会退缩……

票数 12
EN

Stack Overflow用户

发布于 2012-07-13 23:47:59

为了补充@usr的答案,引用了Understanding the Linux Kernel的话

调度()函数

schedule( )实现了调度程序。它的目标是在运行队列列表中找到一个进程,然后将CPU分配给它。它由几个内核例程直接或以惰性方式调用。..。

惰性调用

通过将当前进程的need_resched字段设置为1,也可以懒惰的方式调用调度程序。由于在恢复执行用户模式进程之前,总是会检查该字段的值(参见第4章中的“从中断和异常返回”一节),

()肯定会在将来某个接近的时间调用。

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

https://stackoverflow.com/questions/11473777

复制
相关文章

相似问题

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