在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.Linux多cpu负载平衡-线程迁移用CentOS的数据包来升级RedHat Linux相关资讯 Linux教程
- Linux教程:如何在命令行中查看目 (07/28/2014 12:22:23)
- Linux 修改root密码 (11/03/2012 07:53:38)
- su - root 与su root的区别 (06/06/2012 00:39:40)
| - Linux进程间通信:消息队列 (01/28/2013 09:43:00)
- U盘安装Linux开机无法启动解决方法 (10/07/2012 08:55:52)
- Windows 7/Linux 同步时间 (05/15/2012 06:17:55)
|
本文评论 查看全部评论 (0)