Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306357
  • 博文数量: 55
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 615
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-07 13:47
文章分类
文章存档

2011年(1)

2010年(2)

2009年(14)

2008年(38)

我的朋友

分类: LINUX

2009-03-13 17:24:54

这里是针对2.6内核来说的。
Linux下面调度有以下两种形式的调度方式
    主动启动
    被动调度

主动启动
    当前进程因等待资源而需进入被阻塞状态时,调度程序将进行如下的操作:
        首先把当前进程放到适当的等待队列里
        把当前进程的状态设为TASK_INTERRUPTIBLE或者TASK_UNINTERRUPTIBLE
        调用schedule(),让新的进程运行
被动调度
    通过在当前进程的need_resched设为1来请求调度。
    设置need_resched的时机:
        当前进程用完了它的CPU时间片,update_process_times()重新进行计算
        当一个进程被唤醒,而且它的优先级比当前进程高
        当sched_setschedler()或sched_yield()系统调用被调用时
    每次在进入一个用户态进程之前,都会检查need_resched

阅读(1218) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~