Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47390
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 146
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-29 11:36
个人简介

微博 https://www.weibo.com/huang007

文章分类

全部博文(13)

文章存档

2018年(1)

2014年(12)

我的朋友

分类: LINUX

2014-01-29 13:37:30

1.进程调度的策略


分为两类,普通进程和实时进程




普通进程采用CFS(completely fair schedule),称为SCHED_OTHER
CFS的核心思路是给所有进程分配一个理论运行时间ideal_runtime,这个值是跟nice值(优先级)、进程总数有关系的。
vruntime代表进程的实际运行时间,这个值通过时钟中断来增加,每次增加后都与理论运行时间进行比较,如果达到,则该进程会被挂起到进程等待队列当中去,等待所有可执行的进程都被执行完毕后,调度程序会将等待队列中的进程生成一颗用vruntime可运行进程红黑树。
vruntime作为key,所有可以运行的进程都放到一棵红黑树当中去,进程调度函数会选择最左边的(也就是最小)的vruntime的进程来执行。(why?因为公平原则,最少执行时间的进程首先执行。)




实时进程与普通进程的区别就是,一旦有实时进程需要执行,只有当实时进程执行完毕,才有机会留给普通进程执行。实时进进程比普通进程牛b太多了。                                                                                                    
那如果有多个实时进程呢?这个时候就需要调度策略:分为SCHED_RR和SCHED_FIFO
RR表示大家机会均等,FIFO表示谁先进入执行,必须等进程执行完毕或主动调用调度函数(使用sched_yield让出cpu)或主动sleep,才有可能让下一个实时进程执行。                                                                          


2.  进程调度的时机


    刚才讲的,时钟中断发生,通过中断向量表找到对应的调度函数,检查ideal_runtime执行时间已到,当前进程不能再执行了
   系统调用返回
    
3.  遗留的问题
   1.系统调用返回时还需要进程调度?这个不是很理解,是不是有时钟中断,调度时机已经够了?
    2.调度具体的动作应该是在中断的上半部还是下半部完成的?为什么?下半部的话是否会有延迟?
    3.
阅读(1251) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:最大公共字串笔记

给主人留下些什么吧!~~

啦哆A梦2014-02-09 10:19:38