linux选择下一个进程

在linux的schedule中, 首先调用sched_find_first_bit(array->bitmap)发现优先级queue, 通常运行队列array->bitmap的相应位在enqueue_task时被设置, 在dequeue_task时被清除,然后选择该运行队列的优先级queue的next(即该queue的第一个)。当next被选择以后, 除非是FIFO类型的实时进程, 否则该next都会被重新放到运行队列的队尾。

 

对于同一优先级实时进程和普通进程, 在同一个运行队列中(同一个cpu中), 先创建的进程先运行。 如果不在同一个cpu中(运行队列中), 不能保证先创建的进程先运行。

在同一运行队列中的优先级高的进程先运行, 但不同cpu上的两个进程,不论优先级如何, 谁先执行是不能保证的。也就是说:如果进程创建多个即使是FIFO属性的子进程或者线程, 但不能保证他们在同一个运行队列上, 则不能保证先创建的子进程或者线程先运行。

 

 

注意对于线程, call pthread_cancel(), 则只有当线程已经运行了, 才能被cancel。

 

至于新创建的进程插在运行队列的什么位置, 看linux kernel 的page122.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值