linux进程调度时序调度功能分析 浏览:766

Linux的调度程序是一个名为日程表()的函数,它决定进程是否要切换。所谓调度的时间是在什么情况下执行调度器。



有几种主要情况:



1。进程状态转换的时间:进程终止、进程休眠;



2。当当前进程的时间片完成时(当前> >计数器= 0);



三.设备驱动程序



4。进程从中断、异常和系统调用返回到用户状态。



时间1,进程调用状态转换的睡眠()或出口()函数,这些函数将主动调用调度器进行进程调度;



时间2,因为进程的时间片是由时钟中断更新的,所以这种情况和时间4是相同的。



3、当设备驱动程序执行一个长期和重复的任务,调度程序直接调用。在每一次迭代过程中,驱动程序检查的need_resched的价值,如果有必要,呼叫调度员调度()主动放弃CPU。



定时4。如前所述,无论从中断,异常或系统调用返回,ret_from_sys_call()最终被称为。此函数检测调度的符号,并在必要时调用调度程序。那么,当系统调用返回时,为什么要调用调度程序呢这当然是从效率上来的。从系统调用返回意味着离开内核状态并返回到用户状态。国家的转变需要一定的时间。因此,在返回到用户状态之前,系统将完成内核状态的处理。



现在让我们看看每个时钟中断发生时核心的工作。首先,我们对最频繁的调度时间有一个大致的了解,然后详细讨论调度程序的具体工作过程。



当定时器中断发生时,三个函数一起工作以完成流程选择和切换。他们计划(),()和()ret_form_sys_call do_timer。



调度():进程调度功能,它完成了流程的选择(调度)。



do_timer():暂时称为时钟函数,被调用的函数在时钟中断服务程序,并且是时钟中断服务程序的主要组成部分。该函数的频率为时钟中断,即频率,每秒100次(简称100赫兹或100Hz)。



ret_from_sys_call():系统调用返回的功能。当一个系统调用或中断完成后,调用函数来处理一些工作,如信号处理、核心任务,等等。



这三个功能是如何一起工作的呢



时钟中断是一个中断服务程序。它的主要成分是时钟功能do_timer(),从而完成系统的更新时间和过程这一功能的时间片。更新的进程时间片计数器是调度的主要基础。



当时钟中断返回,函数ret_from_sys_call称为(),



在这个函数中有以下几行:



成套设备0美元,_need_resched



JNE安排



hellip;hellip;



restore_all:



restore_all



重新安排:



电话symbol_name(附表)



JMP ret_from_sys_call



这些线条的意义是很明显的:检测need_resched标志,如果这个标志是不是0,然后去安排给计划()选择过程。调度器调度()选择下一个过程,需要运行在运行队列基于特定标准。回国时调度程序,如果发现调度标志设置,然后调用调度程序,调度到国旗是0然后返回从调度器的restore_all当恢复过程被选择,返回选定的进程的用户空间,使它运行。



以上是时钟中断最频繁调度的时间。本次讨论的主要目的是对时间4有一个大致的了解。



最后,系统调用ret_from_sys_call()从系统调用的函数返回功能,异常和中断返回函数通常被称为,但没有打电话,对那些经常要尽快和响应中断请求信号的处理,以减少处理开销,对ret_from_sys_call完成后(不叫()因为这是很明显,从中断处理程序返回到用户空间肯定是被中断的进程,而不需要重新选择),他们的工作应该尽可能的小,因为响应频率太高。



不同的Linux调度程序和其他UNIX调度程序,特别是在好level优先处理,调度和优先级(优先级的进程运行)不同,Linux使用轮询调度(圆掠夺),但同时保证高优先级运行长的快和时间过程(包括早长)。标准的UNIX调度采用多进程队列。大多数实现使用两级优先级队列:一个标准的队列和实时(房time)队列。一般来说,如果在实时排队过程不受阻,他们将在标准排队过程之前执行,在每个队列,好Level,高过程将前执行第一。



一般来说,Linux调度过程在交互中表现良好,当然,这是以吞吐量的一部分为代价的。
推荐文章1
广告