《内核设计与实现》第四章读书笔记


第四章:进程调度

  1. 进程(操作系统)程序的运行态表现形式。
  2. 进程调度程序,它是确保进程能有效工作的一个内核子系统。 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间

进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.

最大限度地利用处理器时间的原则是,

只要有可以执行的进程,那么就总会有进程正在执行。

但是只要系统中可运行的进程的数目比处理器的个数多,就注定某一给定时刻会有一些进程不能执行。这些进程在等待运行。在一组处于可运行状态的进程中选择一个来执行,是调度程序所需完成的基本工作。

一、多任务

多任务操作系统:同时并发地交互执行多个进程的操作系统。

二、Linux进程调度

O(1)调度程序的新调度程序。
缺点:交互程序
RSDL--CFS公平调度的概念。

三、策略

四、Linux调度算法

五、进程调度入口

进程调度的主要入口点是schedule(),它定义在文件kernel/sched.c中。

六、用户抢占

用户抢占在以下情况时产生:
  • 从系统调返回用户空间时。
  • 从中断处理程序返回用户空间时。

七、内核抢占

Linux完整地支持内核抢占,

在不支持内核抢占的内核中,内核代码可以一直执行
 
软实时的含义是,内核调度进程,尽力使进程在它的限定时间到来前运行,但内核不保证总能满足这些进程的要求。
相反,硬实时系统保证在一定条件下,可以满足任何调度的要求。
Linux对于实时任务的调度不做任何保证。
 

八、与调度策略和优先级相关的系统调用

  • sched_setscheduler()和 sched_getscheduler()分别用于设置和获取进程的调度策略和实时优先级。与其他的系统调用相似,它们的实现也是由许多参数检查、初始化和清理构成的。其实最重要的工作在于读取或改写进程task_struct的policy和rt_priority的值。
  • sched_setscheduler()和 sched_getscheduler()分别用于设置和获取进程的实时优先级。这两个系统调用获取封装在sched_param特殊结构体的rt_priority中。实时调度策略的的最大优先级:是MAX_ USERRT_PRIO减1。最小优先级等于1。
  • 对于―个普通的进程,nice函数可以将给定进程的静态优先级增加一个给定的量。只有超级用户才能在调用它时使用负值,从而提高进程的优先级。nice函数会调用内核的set_user_nice函数,这个函数会设置进程的的task_struct的static_prio值。

九、与处理器绑定有关的系统调用

Linux调度程序提供强制的处理器绑定机制。
这种强制的亲和性保存在进程的一个位掩码标志中。该掩码标志的每一位对应一个系统可用的处理器,
默认情况下,所有的位都被设置。 

十、放弃处理器时间

1.Linux通过sched_yield()系统调用,提供了一种让进程显式地将处理器时间让给其他等待执行进程的机制
2.是通过将进程从活动队列中移到过期队列中实现的
3.现在,应用程序甚至内核代码在调用sched_yield()前,应该仔细考虑是否真的希望放弃处理器时间。
4.可以直接调用sched_yield(),先要确定给定进程确实处于可执行状态,然后再调用sched_yield(),用户空间的应用程序直接使用sched_yield()系统调用就可以 。

《Linux内核设计与分析》第四章读书笔记的更多相关文章

  1. 《Linux内核分析》之第四章读书笔记

    4.1多任务 多任务操作系统:同时并发地交互执行多个进程的操作系统 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于内存,但是并不处于可运行状态.这些进程利用内核堵塞自己,直到某一事件 ...

  2. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

  3. 《Linux内核设计与实现》Chapter 3 读书笔记

    <Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...

  4. 《Linux内核设计与实现》Chapter 1 读书笔记

    <Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...

  5. 《Linux内核设计与实现》Chapter 2 读书笔记

    <Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...

  6. 《Linux内核设计与实现》Chapter 5 读书笔记

    <Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已 ...

  7. 《Linux内核设计与实现》Chapter 18 读书笔记

    <Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...

  8. LINUX内核设计与实现第三周读书笔记

    LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...

  9. Linux内核设计与实现第十周读书笔记

    第十七章 设备与模块 关于设备驱动与设备管理,我们讨论四种内核成分. 设备类型 模块 内核对象 sysfs 17.1设备类型 在Linux以及所有Unix系统中,设备被分为以下三种类型: 块设备,块设 ...

  10. Linux内核设计与实现第八周读书笔记

    第四章 进程调度 进程在操作系统看来是程序的运行态表现形式. 4.1多任务 多任务操作系统就是能同时并发地交互执行多个进程的操作系统. 多任务操作系统会使多个进程处于堵塞或者睡眠状态.这些任务尽管位于 ...

随机推荐

  1. MATLAB矩阵的LU分解及在解线性方程组中的应用

    作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 三.实验程序 五.解答(按如下顺序提交电子版) 1.(程序) (1)LU分解源程序: function [ ...

  2. Static简介

    1.static称为静态修饰符,它可以修饰类中得成员.被static修饰的成员被称为静态成员,也成为类成员,而不用static修饰的成员称为实例成员. 2.当 Voluem volu1 = new V ...

  3. Word中类似正则匹配的查找替换通配符的使用详解

    一.Word查找栏代码&通配符一览表 序号 清除使用通配符复选框 勾选使用通配符复选框 特殊字符 代码 特殊字符 代码or通配符 1 任意单个字符 ^? 任意单个字符 ? 2 任意数字 ^# ...

  4. VMware NAT 设置原理

    1.网络地址转换(NAT):默认使用VMnet8 (强烈推荐) 这种访问模式指的是虚拟机不占用主机所在局域网的ip,通过使用主机的NAT功能访问局域网和互联网,意味着虚拟机可以访问局域网中的其他电脑, ...

  5. java返回值是list的时候获取list的参数类型

    Type[] resultArgType = null; Type resultType = method.getGenericReturnType(); if (resultType instanc ...

  6. Django templates 模板的语法

    MVC 以及 MTV MVC: M : model -->> 存取数据(模型) V: view -->> 信息的展示(视图) C: controller -->> ...

  7. DStream算子讲解(一)

    先把目录列好,方便有条理的进行整理

  8. MySQL 基础一 安装

    1.下载安装包 2.安装MySQL 3.安装操作工具SQLyog 一 下载安装包 地址:百度软件中心MySQL安装包 下载安装操作工具安装包:SQLyog 安装教程地址:http://blog.csd ...

  9. Omi框架学习之旅 - 组件通讯(group-data通讯) 及原理说明

    childrenData的方式可以批量传递数据给组件,但是有很多场景下data的来源不一定非要都从childrenData来, childrenData是个数组,会和组件的顺序一一对应,这就给不同传递 ...

  10. [07] 使用注解完成IOC配置

    1.扫描配置 之前使用的Spring的Bean管理都是通过xml的配置文件来操作的,在Spring3.0之后已经引入了注解形式,Spring可以在指定路径下进行扫描,寻找标注了@Component.@ ...