负载平衡程序 load_balance
调用条件:
只要当前可执行队列为空,它就会被调用。
被定时器调用:系统空闲时每隔1毫秒调用一次或其他情况下每隔200mm调用一次。
单处理器不会被调用

执行步骤
1. 首先,load_balance调用find_busiest_queue(),找到最繁忙的可执行队列。也就是说该队列的进程数目最多。如果没有哪个可执行队列中进程的数目比当前队列的数目多25%或25%以上,find_busiest_queue()返回NULL,并且load_balance()也返回。否则最繁忙可执行队列就被返回。
2.其次,load_balance()从最繁忙的运行队列中选择一个优先级数组以便抽取进程。最好是过期数组,因为那里面的进程已经有相对较长的一段时间没有运行了,很可能不在处理器的高速缓存中(换句话说,他们不是高速缓存命中(cache hot)如果过期数组为空,那么就只能选活动数组。
3.接着,load_balance()寻找到含有进程并且优先级最高(值最小)的链表,因为先把优先级高的进程平均分散开来才是最重要的。
4.分析找到的所有这些优先级相同的进程,选择一个不是正在执行,也不会因为取消处理器相关性而不可移动,并且不在高速缓存中的进程。如果有进程满足这些条件,就调用pull_task()将其从最繁忙的队列中抽取到当前队列。
5.只要可执行队列之间仍然不均衡,就重复上面两个步骤,继续从繁忙的队列中抽取进程到当前队列。这最终会消除不平衡,此时,接除对当前队列进程的锁定,从load_balance()返回。

调度程序小节。

适合总多进程运行,又具有可伸缩性,还能在调度周期和吞吐量之间求得平衡。同时还满足各种负载的需求。
可伸缩性天生就和并发联系在一起;毕竟,它就是要在同样的时间内做更多的工作。
调度策略通常要在两个矛盾的目标中间寻找平衡:进程响应速度(响应时间短)和最大系统利用率(高吞吐量)
负载:每个处理都有单独的可执行队列和锁。(拥有自己的进程链表)如果出现队列间负载不均衡。

linux内核设计学习的更多相关文章

  1. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

  2. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

  3. 《Linux内核设计与实现》 第一二章学习笔记

    <Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...

  4. 《Linux内核设计与实现》第四章学习笔记

    <Linux内核设计与实现>第四章学习笔记           ——进程调度 姓名:王玮怡  学号:20135116 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交 ...

  5. 《Linux内核设计与实现》第五章学习笔记

    <Linux内核设计与实现>第五章学习笔记 姓名:王玮怡  学号:20135116 一.与内核通信     在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核 ...

  6. 《Linux内核设计与实现》第四章学习笔记——进程调度

                                                                        <Linux内核设计与实现>第四章学习笔记——进程调 ...

  7. 《Linux内核设计与实现》第一、二章学习笔记

    <Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...

  8. 《LINUX内核设计与实现》第一、二章学习总结

    第一章 Linux内核简介 (一)Unix是一个强大.健壮和稳定的操作系统,特点是: Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 在Unix中,所有的东西都被当作文件对待, ...

  9. 《Linux内核设计与实现》学习记录一

    chapter1 Linux内核简介 前言:Unix是一个具有相似应用程序编程接口(API)并且基于相似设计理念的操作系统家族. 1.1 Unix的历史 1.Unix演化版实现了任务管理.换页机制.T ...

随机推荐

  1. LeetCode解题报告—— Word Search & Subsets II & Decode Ways

    1. Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be con ...

  2. EL表达式使用时出现NumberFormatException异常

    从后端数据库取出书本集合,然后循环输出到前端表格: <c:forEach items="${bookManagedBean.bookList}" var="book ...

  3. Binary Tree Level Order Traversal&&II

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  4. 使用python获取网易云音乐无损音频教程

    博客园主页:http://www.cnblogs.com/handoing/ github项目:https://github.com/handoing/get-163-music 环境:Python ...

  5. H264 帧边界识别简介

    http://blog.csdn.net/wzw88486969/article/details/50364017

  6. 牛刀小试之Django二

    model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  7. PMP CMM

    CMM和PMP是两个不同的概念域,是用来解决不同问题的.我们所说的CMM,准确的说应该是叫做能力成熟度模型,北京猴子说的软件能力成熟度模型实际上应该称为SW-CMM,是CMM的一个子集.PMP可以看做 ...

  8. java中ThreadLocal类的使用

    ThreadLocal是解决线程安全问题一个很好的思路,ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本,由于Key值不可重复, ...

  9. 又见Python<3>:Pandas之Series对象的使用

    Pandas是Python下最强大的数据分析和探索库,是基于Numpy库构建的,支持类似SQL的结构化数据的增.删.查.改,具有丰富的数据处理函数.Pandas有两大数据结构:Series和DataF ...

  10. JZYZOJ1530 [haoi2013]开关控制 状压 dfs 折半搜索

    http://172.20.6.3/Problem_Show.asp?id=1530 元宵节快要到了,某城市人民公园将举办一次灯展.Dr.Kong准备设计出一个奇妙的展品,他计划将编号为1到N的N(1 ...