Linux内核进程管理

发表于:2015-7-24 10:08

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:mfrbuaa    来源:51Testing软件测试网采编

分享:
  三、进程调度
  调度策略:调度策略就是这样一组规则:决定什么时候以如何的方式选择一个新进程执行的规则。Linux的调度基于分时技术:多个进程以“时间多路复用”方式执行,由于CPU的时间被分成“片”。给每一个可执行进程分配一片。
  调度策略也是依据进程的优先级对它们进行分类。在Linux中,进程的优先级是动态的。
  调度程序跟踪进程正在做什么,并周期性地调整它们的优先级。依据不同的分类标准,能够把进程分成不同的类型。
  比方能够把一个进程看作是“I/O受限”或“CPU受限”。也可把进程区分为下面三类:交互式进程、批处理进程、实时进程。Linux的进程是抢占式的,不管是处于内核态还是用户态。时间片的长短对系统性能是非常关键的:它既不能太长也不能太短。假设平均时间片太短。由进程切换引起的系统额外开销就变得非常高。假设平均时间片太长。进程看起来就不再是并发执行的。对时间片大小的选择始终是一种折中。
  Linux採用单凭经验的方法,即选择尽可能长、同一时候能保持良好响应时间的一个时间片。
  调度算法:早起的Linux中,调度算法是依据进程的优先级选择“最佳”进程来执行,它的缺点是时间开销与“可执行进程数量”有关。
  现代的Linux中,调度算法能够在固定时间内(与可执行进程数量无关)选中要执行的进程。首先,我们必须知道进程能够分为实时进程与普通进程。每一个LInux进程总是依照例如以下的调度类型被调度:先进先出的实时进程、时间片轮转的实时进程、普通的分时进程。
  调度算法依据进程是普通进程还是实时进程而有非常大不同。
  普通进程的调度:每一个普通进程都有它自己的静态优先级(值是从100到139)。调度程序使用静态优先级来估价系统中这个进程与其它普通进程之间调度的程度。
  静态优先级决定进程的基本时间片。即进程用完了曾经的时间片时。系统分配给进程的时间片长度。普通进程除了静态优先级,还有动态优先级。
  动态优先级是调度程序在选择新进程来执行的时候使用的数。平均睡眠时间是进程在睡眠状态所消耗的平均纳秒数。即使具有较高静态优先级的普通进程获得了较大的CPU时间片,也不应该使静态优先级较低的进程无法执行。为了避免这个问题,提出了活动进程和过期进程的概念。活动进程指进程的时间片还未用完。过期进程指进程的时间片以用完,即使过期进程的优先级更高,也不能继续执行。除非等到全部活动进程都过期以后。
  实时进程的调度:每一个实时进程都与一个试试优先级相关,实时优先级是一个范围从1到99的值。
  跟普通进程不同,实时进程总是被当作活动进程。
  调度程序所使用的主要数据结构:数据结构runqueue和进程描写叙述符
  数据结构runqueue:runqueue数据结构中最重要的字段是与可执行进程 的链表相关的字段。当中的arrays字段是活动进程和过期进程的两个集合,active字段是指向活动进程链表的指针,expired字段是指向过期进程链表的指针。
  进程描写叙述符:每一个进程描写叙述符都包含几个与调度相关的字段。当中的time_slice字段是在进程的时间片中还剩余的时钟节拍数。它由copy_process函数设置:父进程的剩余节拍数被划分为两等分,一份给父进程,一份给子进程。
  四、调度程序所使用的函数
  调度程序依靠几个函数来完毕调度工作。当中最重要的函数例如以下:
  try_to_wake_up()函数通过把进程状态设置为TASK_RUNNING,并把该进程插入本地CPU的执行队列来唤醒睡眠或停止的进程。
  recalc_task_prio()函数更新进程的平均睡眠时间和动态优先级。
  schedule()憾事实现调度程序。它的任务时从执行队列的链表中找到一个进程,并随后将CPU分配给这个进程。schedule()能够由几个内核控制路径调用。能够採用直接调用或延迟调用的方式
  总结:
  Linux内核中的进程管理模块很重要,它是连接其它4大模块的重要桥梁,它也很复杂,理解它的一些基本原理,对于理解Linux内核很重要。上面仅仅是对它进行了一些简单的描写叙述,它没有深入到具体的实施细节,我们希望能有机会到已经能够实现在深入分析的细节。
22/2<12
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号