在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

怎么剖析Linux进程调度时机

160次阅读
没有评论

共计 2246 个字符,预计需要花费 6 分钟才能阅读完成。

怎么剖析 Linux 进程调度时机,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

Linux 在众多进程中是怎么进行调度的,这个牵涉到 Linux 进程调度时机的概念,由 Linux 内核中 Schedule()的函数来决定是否要进行进程的切换,如果要切换的话,切换到哪个进程等等。

Linux 进程调度时机主要有:

1、进程状态转换的时刻:进程终止、进程睡眠;

2、当前进程的时间片用完时(current- counter=0);

3、设备驱动程序

4、进程从中断、异常及系统调用返回到用户态时;

时机 1,进程要调用 sleep()或 exit()等函数进行状态转换,这些函数会主动调用调度程序进行进程调度;

时机 2,由于进程的时间片是由时钟中断来更新的,因此,这种情况和时机 4 是一样的。

时机 3,当设备驱动程序执行长而重复的任务时,直接调用调度程序。在每次反复循环中,驱动程序都检查 need_resched 的值,如果必要,则调用调度程序 schedule() 主动放弃 CPU。

时机 4,如前所述,不管是从中断、异常还是系统调用返回,最终都调用 ret_from_sys_call(),由这个函数进行调度标志的检测,如果必要,则调用调用调度程序。那么,为什么从系统调用返回时要调用调度程序呢?这当然是从效率考虑。从系统调用返回意味着要离开内核态而返回到用户态,而状态的转换要花费一定的时间,因此,在返回到用户态前,系统把在内核态该处理的事全部做完。

对于直接执行调度程序的时机,我们不讨论,因为后面我们将会描述调度程序的工作过程。前面我们讨论了时钟中断,知道了时钟中断的重要作用,下面我们就简单看一下每个时钟中断发生时内核要做的工作,首先对这个最频繁的调度时机有一个大体了解,然后再详细讨论调度程序的具体工作过程。

每个时钟中断(timer interrupt)发生时,由三个函数协同工作,共同完成进程的选择和切换,它们是:schedule()、do_timer()及 ret_form_sys_call()。我们先来解释一下这三个函数:

schedule():进程调度函数,由它来完成进程的选择(调度);

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

ret_from_sys_call():系统调用返回函数。当一个系统调用或中断完成时,该函数被调用,用于处理一些收尾工作,例如信号处理、核心任务等等。

这三个函数是如何协调工作的呢?

前面我们看到,时钟中断是一个中断服务程序,它的主要组成部分就是时钟函数 do_timer(),由这个函数完成系统时间的更新、进程时间片的更新等工作,更新后的进程时间片 counter 作为调度的主要依据。

在时钟中断返回时,要调用函数 ret_from_sys_call(),前面我们已经讨论过这个函数,在这个函数中有如下几行:

cmpl $0, _need_resched

jne reschedule

……

restore_all:

RESTORE_ALL

reschedule:

call SYMBOL_NAME(schedule)

jmp ret_from_sys_call

这几行的意思很明显:检测 need_resched 标志,如果此标志为非 0,那么就转到 reschedule 处调用调度程序 schedule()进行进程的选择。调度程序 schedule()会根据具体的标准在运行队列中选择下一个应该运行的进程。当从调度程序返回时,如果发现又有调度标志被设置,则又调用调度程序,直到调度标志为 0,这时,从调度程序返回时由 RESTORE_ALL 恢复被选定进程的环境,返回到被选定进程的用户空间,使之得到运行。

以上就是时钟中断这个最频繁的调度时机。讨论这个的主要目的使读者对时机 4 有个大致的了解。

*** 要说明的是,系统调用返回函数 ret_from_sys_call()是从系统调用、异常及中断返回函数通常要调用的函数,但并不是非得调用,对于那些要经常被响应的和要被尽快处理的中断请求信号,为了减少系统开销,处理完成后并不调用 ret_from_sys_call()(因为很显然的,从这些中断处理程序返回到的用户空间肯定是那个被中断的进程,无需重新选择),并且,它们作的工作要尽可能少,因为响应的频率太高了。

Linux 进程调度和其他的 UNIX 进程调度不同,尤其是在“nice level”优先级的处理上,与优先权调度(priority 高的进程 *** 运行)不同,Linux 用的是时间片轮转调度(Round Robing),但同时又保证了高优先级的进程运行的既快、时间又长(both sooner and longer)。而标准的 UNIX 调度程序都用到了多级进程队列。大多数的实现都用到了二级优先队列:一个标准队列和一个实时(“real time”)队列。一般情况下,如果实时队列中的进程未被阻塞,它们都要在标准队列中的进程之前被执行,并且,每个队列中,“nice level”高的进程先被执行。

总体上,Linux 调度序程在交互性方面表现很出色,当然了,这是以牺牲一部分“吞吐量”为代价的。

关于怎么剖析 Linux 进程调度时机问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2246字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 加勒比色老久久爱综合网 | 人妻影音先锋啪啪av资源 | 国产精品久久久久久久人人看 | 亚洲国产av精品一区二区蜜芽 | 精品亚洲成av人在线观看 | 毛片免费电影 | 激情综合丁香 | 欧美xxx午夜免费视频 | 男男羞羞动漫视频网站 | 欧美在线综合视频 | 免费看a视频 | 视频一区二区中文字幕 | 亚洲色图图 | 青青青国产高清在线观看视频 | 人成电影网在线观看免费 | 久久精品免费视频观看 | 国产精品沙发午睡系列 | 亚洲色图综合图片 | 国产台湾无码av片在线观看 | 亚洲 欧洲 日韩 综合二区 | 亚洲欧美视频在线观看 | 亚洲高清影院 | a级高清| 精品综合久久久久久99 | 老司机精品线视频免费观看 | 欧美人成在线观看 | 日韩欧美国产精品 | 欧美a在线观看 | 国产免费福利体检区久久 | 在线看亚洲十八禁网站 | 日本va欧美va欧美va精品 | 精品黑人一区二区三区久久 | 黄色一级片在线看 | 日本大片黄色 | 中文字幕禁忌乱偷在线 | 伊人成伊人成综合网2222 | 福利所第一导航福利 | 亚洲日本视频在线观看 | 欧美爱爱免费视频 | 色综合久久久无码中文字幕波多 | 亚洲视频在线免费播放 |