如何在单核系统中处理抢占?

时间:2016-02-01 17:34:18

标签: multithreading assembly parallel-processing operating-system multitasking

鉴于单核系统采用抢占式多任务处理,当用户模式应用程序在系统上执行时,OS如何执行线程中断?由于处理器正在处理用户代码,因为它有机会向线程调度程序请求上下文切换。是否与页面错误类似?如果是这样,它发生的频率是多少,并不会导致性能下降?

3 个答案:

答案 0 :(得分:8)

读取硬件中断。

硬件定时器发出定期中断。当一个发生时,CPU切换到内核模式并执行例程,即中断处理程序。这是发生上下文切换的地方。当CPU从内核返回到用户模式时,它将控制返回到与中断发生的线程不同的线程。自然保存抢占线程的状态。

答案 1 :(得分:4)

抢占立即发生,而不是在下一个切片边界。如果不是由于中断,那么这是由于优先级较低的线程设置了某种类型的事件,即较高优先级的线程正在等待(等待)。通常,OS API从用户模式切换到内核模式是通过X86 sysenter指令完成的。

时间切片用于在相同优先级的线程之间切换,这不被认为是抢占。

答案 2 :(得分:2)

一个接一个:

  

鉴于单核心系统采用先发制人进行多任务处理,   OS如何在用户模式下执行线程中断   应用程序正在系统上执行?

两种方式。 1)用户代码进行系统调用,导致输入内核或硬件外设请求“真实”。导致驱动程序运行的处理器中断,并且该驱动程序进行适当的内核条目,例如。要求调度程序在中断返回时运行,因为它已准备好一个线程。

  

由于处理器在处理用户代码时会得到一个   有机会向线程调度程序请求上下文切换。

正在运行的用户代码可以使syscalls可以随时改变线程状态。最重要的是,可以在来自驱动程序的硬件中断时输入内核,例如。 KB,鼠标,磁盘,内存管理器,网络,计时器。

  

它的处理方式与页面错误类似吗?

页面错误中断是来自外设的硬件中断:内存管理硬件。它需要加载适当的页面并重新启动生成中断的失败指令。它是可以改变线程状态的硬件中断集中的一个。 '它的处理方式与页面错误类似吗?'正在向后看这个问题。

  

如果是,发生的频率

那么,这取决于线程进行相关系统调用的频率以及它们请求不立即可用资源的频率,因此在资源可用之前不需要CPU执行。

  

并且它不会导致性能

     
    

击?

  

嗯,没有:)抢先式多任务处理通常会带来很大的性能提升,因为它不会将执行资源应用于不需要它的线程,并且可以快速将执行应用于急需的线程。没有先发制人,系统将无法及时响应IO完成,IO性能将非常糟糕。您可能会忘记音频/视频流/播放,高速网络下载等应用。系统性能太差,根本无法工作。这种性能提升是在大多数环境中广泛使用此类系统的首要原因。有一些示例表明,抢占式操作系统可能会导致感知和/或真实的性能“击中”,但您必须非常努力地在典型的桌面或服务器盒上找到它。