Linux的内核taskstruct和进程调度.pptVIP

  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文档。上传文档
查看更多
Linux的内核taskstruct和进程调度

进程的数据结构(3.4.2 P61) Linux内核利用一个数据结构(task_struct)代表一个进程。代表进程的数据结构指针形成一个task数组。 task_struct结构 1、标识号: key、惟一识别一个进程 2、状态信息:表明进程的当前状态,运行、停止、等待、僵死 3、调度信息:用于调度程序完成进程间的切换,返回点之类,完成进程切换 4、有关进程间通信的信息:实现进程间通信 5、进程链信息:父进程、子进程,所有进程的根就是init进程。 6、时间和定时器:记录进程占用CPU的时间信息及到时告警,进程调度的时间依据。 7、文件系统信息:进程打开系统中的文件的描述信息 8、和进程相关的上下文信息:进程可被看作是系统状态的集合,进程恢复运行时使用。 task_struct 在Linux中,线程、进程使用的是相同的核心数据结构,在2.4版本的内核里只有进程,其中包含轻量级进程。一个进程在核心中使用一个task_struct结构来表示,包含了大量描述该进程的信息,其中与调度器相关的信息主要包括以下几个: state need_resched policy rt_priority counter nice cpus_allowed cpus_runnable processor thread task_struct state Linux的进程状态主要分为三类:可运行的(TASK_RUNNING,相当于运行态和就绪态);被挂起的(TASK_INTERRUPTIBLE、TASK_UNINTERRUPTIBLE和TASK_STOPPED);不可运行的(TASK_ZOMBIE),调度器主要处理的是可运行和被挂起两种状态下的进程,其中TASK_STOPPED又专门用于SIGSTP等IPC信号的响应,而TASK_ZOMBIE指的是已退出而暂时没有被父进程收回资源的“僵尸”进程。 need_resched 布尔值,在调度器中用于表示该进程需要申请调度。 task_struct policy 在Linux 2.4版本内核中,进程的调度策略可以有三种选择: SCHED_FIFO(先进先出式调度,除非有更高优先级进程申请运行,否则该进程将保持运行至退出才让出CPU)、 SCHED_RR(轮转式调度,该进程被调度下来后将被置于运行队列的末尾,以保证其他实时进程有机会运行)、 SCHED_OTHER(常规的分时调度策略)。 另外,policy中还包含了一个SCHED_YIELD位,置位时表示主动放弃CPU。 rt_priority 用于表征实时进程的优先级,从1-99取值,非实时进程该项应该为0。这一属性将用于调度时的权值计算。 task_struct counter 该属性记录的是当前时间片内该进程还允许运行的时间(以CPU时钟tick值为单位,每个进程的counter初值与nice值有关,nice越小则counter越大,即优先级越高的进程所允许获得的CPU时间也相对越多),并参与“就绪进程选择算法”。在Linux 2.4中,每个(非SCHED_FIFO实时)进程都不允许运行大于某一时间片的时间,一旦超时,调度器将强制选择另一进程运行 nice 用户可支配的进程优先级,将参与就绪进程选择算法,同时该值也决定了该进程的时间片长度。 task_struct cpus_allowed 以位向量的形式表示可用于该进程运行的CPU。 cpus_runnable 以位向量的形式表示当前运行该进程的CPU(相应位为1)。如果不在任何CPU上运行,则为全1。这一属性和cpus_allowed属性结合,可以迅速判断该进程是否能调度到某一CPU上运行(位“与”)。 processor 本进程当前(或最近)所在CPU编号。 thread 用于保存进程执行环境(各个寄存器的值以及IO操作许可权映射表),内容与TSS相近。因为TSS以CPU id为索引,而Linux无法预测被替换下来的进程下一次将在哪个CPU上运行,所以这些信息不能保存在TSS中。 task_struct的 policy 数据变量 SCHED_FIFO(先进先出)处于列表首位的进程通常为在列表上存在时间最长的进程,而处于末尾的进程在列表上存在的时间最短。此策略允许一个进程一直运行,直到具有较高优先级的另一个进程已准备好运行,或者直到当前进程自动阻止。如果此进程被占据,它就继续处于其进程优先级列表的首位;如果此进程阻止,当它再次成为一个可运行的进程时,将被添加到此进程所在的优先级列表的末尾。 SCHED_RR (循环法)运行的进程在被占据之前只能运行有限的时间长度。当超过此固定时限时,运行的进程就被放到进程优先级列表的末尾,而现在处于列表首位的进程将成为运行的进程。 此策略的作用

文档评论(0)

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

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档