《计算机操作系统原理-Linux实例分析》课件第2章.pptVIP

《计算机操作系统原理-Linux实例分析》课件第2章.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

(2)时间片轮转法。对某个运行中的进程,当它的时间片用完时,系统将停止它的运行并把处理机分配给其他进程。

Linux操作系统支持多任务、多用户、多处理器。进程调度是所有支持多任务操作系统的关键部分,Linux操作系统具有一个高效的基于优先级的进程调度程序。2003年正式发布的2.6系列内核,相对2.4系列内核有很大的改进,特别在进程管理方面,2.6内核增加了对可抢占内核的支持,改进了进程调度算法。2.就绪进程队列

在Linux2.4内核中,就绪进程队列是一个全局数据结构,所有的处理器共享同一个队列。调度程序对它的所有操作都会因全局自旋锁而导致系统各个处理机之间的等待,使得就绪队列成为一个明显的瓶颈。2.6内核重新为每个CPU设计了数据结构,每个处理器都维护一个自己的就绪队列,这样就避免了2.4内核的性能瓶颈。每个CPU的就绪进程队列由一个structrunqueue结构描述,其中最关键的子结构是优先级就绪数组。每个runqueue包含两个优先级就绪数组:active数组和expired数组。active数组指向时间片没有用完、当前可被调度的就绪进程;expired数组指向时间片已用完的就绪进程。Active、expired数组示例如图2.22所示。描述优先级就绪数组的数据结构是prio_array_t,定义为:

structprio_array{

intnr_active; /*本进程组中的进程数*/

unsignedlongbitmap[BITMAP_SIZE]; /*加速以上HASH表访问的位图*/

structlist_headqueue[MAX_PRIO]; /*以优先级为索引的HASH表*/

};图2.22active、expired数组示例prio_array中包含一个就绪队列数组,数组的索引是进程的优先级(共140级,详见下面进程静态优先级“static_prio”的说明),相同优先级的进程放置在相应数组元素的链表queue中。调度时直接给出就绪队列active中具有最高优先级的链表中的第一项作为候选进程,而优先级的计算过程则分布到各个进程的执行过程中进行。此外,为了加速寻找存在就绪进程的链表,prio_array还包含一个优先级位图(bitmap),来对应每一个优先级链表,如果该优先级链表非空,则对应位为1,否则为0,用于快速定位优先级最高的进程。bitmap所有位的初始状态都是0,当一个优先级为N的进程变为task_running时,bitmap中对应的位N置1。此后,内核可以通过调用sched_find_first_bit()函数快速定位第一个非空的就绪进程链表。

prio_array还包含一个nr_active变量用于记录该优先级就绪数组中进程的数目。Runqueue结构中另两个重要的成员变量是best_expired_prio和expired_timestamp。前者记录expired就绪进程组中的最高优先级,后者用来表征expired中就绪进程的最长等待时间。

active中的进程一旦用完了自己的时间片,就被转移到expired中,并设置好新的初始时间片;而当active为空时,则表示当前所有进程的时间片都消耗完了,此时,active和expired进行一次对调,重新开始下一轮的时间片递减过程。3.task_struct结构的相关项

(1)?timestamp:进程发生调度事件的时间(单位是nanosecond)。包括以下几类:

●被唤醒的时间(在activate_task()中设置);

●被切换下来的时间(schedule());

●被切换上去的时间(schedule())。

从这个值与当前时间的差值中可以分别获得“在就绪队列中等待运行的时长”、“运行时长”等与优先级计算相关的信息(见“优先级计算方法”)。系统的时间是以nanosecond

(十亿分之一秒)为单位的,但这一数值粒度过细,大部分核心应用仅能取得它的绝对值,感知不到它的精度。(2)?intstatic_prio:静态优先级,与Linux2.4的nice值意义相同,但转换到与prio相同的取值区间。nice值沿用Linux的传统,在-20到19之间变动,数值越大,进程的优先级越小。nice是用户可维护的,但仅影响非实时进程的优先级。Linux2.6内核中不再存储nice值,而存储static_prio值。进程初始时间片的大小仅决定于进程的静态优先级,这一点不论是实时进程还是非实时进程都一样,不过实时进程的static_pri

文档评论(0)

kd8w + 关注
实名认证
文档贡献者

kd8w

1亿VIP精品文档

相关文档