内核2628调度相关的数据结构分析.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:4 大小:72KB 金币:14 举报 版权申诉
预览加载中,请您耐心等待几秒...

内核2628调度相关的数据结构分析.doc

内核2628调度相关的数据结构分析.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

14 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

structtask_struct{//进程的当前运行状态volatilelongstate;/*-1unrunnable,0runnable,>0stopped*/unsignedintflags;/*perprocessflags,definedbelow*///动态优先级,静态优先级和常规优先级intprio,static_prio,normal_prio;//实时优先级unsignedintrt_priority;conststructsched_class*sched_class;/*调度类指针,一堆指向函数的指针*///CFS调度实体structsched_entityse;//实时调度实体structsched_rt_entityrt;unsignedintpolicy;/*进程的调度类型*/structlist_headtasks;/*进程组织链表*//*上下文切换次数*/unsignedlongnvcsw,nivcsw;/*contextswitchcounts*/}2sched_class,进程调度类:包括fair_sched_class,rt_sched_class和idle_sched_class,它们调用的顺序是:(1)rq->nr_running==rq->cfs.nr_running说明没有实时进程,就去执行fair_sched_class的pick_next_task()if(likely(rq->nr_running==rq->cfs.nr_running)){p=fair_sched_class.pick_next_task(rq);if(likely(p))returnp;}(2)/*有实时进程,切换到实时调度类*/class=sched_class_highest;/*这里就默认实时进程类了*/for(;;){p=class->pick_next_task(rq);/*是什么导致了rq->nr_running!=rq->cfs.nr_running,但是rt_rq->rt_nr_running=0呢*/if(p)returnp;/**WillneverbeNULLastheidleclassalways*returnsanon-NULLp:*//**/(3)没有实时进程就切换调度类class=class->next;/*这是指向了fair_sched_class*/(4)在实时调度类里面也没有进程,即cfs_rq->nr_running=0;就切换到idle_sched_class,它又调用pick_next_task_idle();选择idle进程来运行。}```````````````````````````````````````````````````````````````````````````````1概观经典的调度器对系统的进程分别计算时间片,使进程运行直至耗尽时间片,然后等待所有进程的时间片都耗尽时,重新计算每个时间的时间片,当前调度器只考虑进程的等待时间,即进程在等待队列中等待了多长时间就绪队列不是形成两个数组链表形式,而是以红黑树形式形成:HYPERLINK"http://blog.home.blogbus.com/files/uploadimg/20060921/153223104.gif"\t"_blank"图2-12调度器通过将进程在红黑树中排序,跟踪进程的等待时间所有的可运行进程都按时间在一个红黑树中排序,所谓时间即其等待时间。等待CPU时间最长的进程是最左侧的项,调度器下一次会考虑该进程。等待时间稍短的进程在该树上从左至右排序。虚拟时钟由fair_clock描述=实际时钟/等待进程数目,wait_runtime:进程等待时间;差值:fair_clock-wait_runtime为红黑树排序关键字2调度器调度原理有2种策略激活调度器:主动调度器:进程由于资源无法满足而主动睡眠,让出cpu供其他进程使用周期性调度器:以固定频率激活,每次时钟中断,每个cpu在统计完进程内核态和用户态运行时间,并且调度完时钟处理函数之后,对当前进程进行检测,必要时切换进程,供其他进程执行HYPERLINK"http://blog.home.blogbus.com/files/uploadimg/20060921/153223104.gif"\t"_blank"图2-13调度子系统各组件概观系统中的所有进程按照优先级分为3类:实时进程、交互式以及批处理进程、空闲进程,对应3种调度类:实时调度类、完全公平调度类和空闲调度类,每类对应不同的sched_class实例,调度器按照优先级一次在这3类中优先选择一个进程执行,执行工作有特