第四章进程调度

进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统。调度程序是多任务操作系统的基础。通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的效果。

最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么总会有进程在执行。

4.1多任务

多任务操作系统就是能同时并发地交互执行多个进程的操作系统。多任务能使多个进程处于堵塞或者睡眠状态。就是任务位于内存内但是不被执行,直到某一事件发生。

分类:

l  非抢占式:除非进程自己主动停止运行,否则就一直执行。进程主动挂起自己的操作叫让步。缺点:进程独占的时间可能超乎想想。绝不让步的进程会崩溃。

l  抢占式:(Linux提供)由调度程序来决定什么时候停止一个进程,以便其他进程能够得到执行。进程在被抢占之前能够运行的时间是固定的,叫时间片。有效管理时间片能使调度程序从系统全局的角度做出调度决定,可以避免个别进程独占系统资源。

4.2 Linux的进程调度

版本2.4之前,Linux调度程序相当简陋。2.5开发系列的内核中,开始采用O(1)调度程序。O(1)对时间敏感的程序却有先天不足。O(1)调度程序虽然对于大服务器的工作负载很理想,但是在有很多交互程序要运行的桌面交互程序的调度性能引入了新的进程调度算法。为了提高交互程序调度,该算法吸取队列理论,将公平调度的概念引入了Linux调度程序。“完全公平调度算法”,简称CFS。

4.3策略

I/O消耗和处理器消耗型的进程:前者指进程大部分时间用来提交I/O请求,或等待I/O请求。后者进程把时间大多用在执行代码上,除非被抢占,否则一直运行。对于这类进程,调度策略是尽量降低它们的调度频率。调度策略通常要在两个矛盾的目标中寻找平衡。

进程优先级:调度算法中最基本的一类是基于优先级的调度。Linux采用了两种不同的优先级范围。第一种用nice(-20~+19),越大的nice值意味更低的优先级(反比)。第二种范围是实时优先级(默认0~99)其值可配置,值与优先级成正比。

时间片:表明进程在被抢占前所能持续运行的时间。调度策略必须规定一个默认时间片。时间片过长会导致系统对交互的响应表现欠佳,太短会明显增大进程切换带来的处理器消耗。I/O消耗性不需要长时间片,处理去则需要越长越好。

调度策略活动:理想情况下,调度程序应该给予文编编辑程序相比视频编码程序更多的处理器时间。需要依靠系统分配给文本编辑器比视频解码程序更高的优先级和更多的时间片。

4.4 Linux调度算法

调度器类:Linux是以模块方式提供的,目的是允许不同类型的进程可以针对性地选择调度算法。完全公平调度(CFS)是一个针对普通进程的调度类。

Unix系统中的进程调度:具有高优先级的进程将运行得更频繁,也会被赋予更多时间片,UNxi上优先级以nice值形式输出给用户空间,这样会导致进程切换无法最优化进行。相对nice值,nice值得变化带来的效果很大取决于nice的初始值。如果执行nice值到时间片的映射,我们需要能分配一个绝对的时间片,这要求时间片必须是定时器节拍的整数倍,这样。

公平调度:CFS出发的理念:进程调度的效果应如同系统具有一个理想中的完美多任务处理器。每个进程能获得1/n的处理器时间。但这只是理想状态。但还是需要周期尽量小。CFS的做法是允许每个进程运行一段时间、循环论转、选择运行最少的进程作为下一个运行进程。当进程数量趋于无限,周期则趋于零那么切换消耗则无法接说,所以有最小粒度,就是最小时间片,默认是1ms。

4.5Linux调度的实现

相关代码在kernel/sched_fair.c,有四个组成部分:时间记账,进程选择,调度器入口,睡眠和唤醒。

时间记账:所有调度器都必须对进程运行时间做记账。CFS以此保证公平。

进程选择:CFS会挑具有最小vruntime的进程。CFS用红黑树(自平衡二叉树)来组织可运行进程队列,并在其中迅速找到vruntime最小的进程。

调度器入口:进程调度的主要入口是函数schedule()。

睡眠和唤醒:进程休眠机制,进程标记为休眠,就会从红黑树中移出。唤醒则相反。

4.6抢占和上下文切换

上下文切换:从一个可执行进程切换到另一个可执行进程。

用户抢占:内核即将返回用户空间的时候,如果need_resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占。在以下情况下产生,从系统调返回用户空间时,从中断处理程序返回用户空间时。

内核抢占:Linux完整地支持内核抢占。只要重新调度室安全的,内核就可以在任何时间抢占正在执行的任务。如何是安全:只要没有持有锁就行。

《Linux内核设计与实现》读书笔记 4 进程调度的更多相关文章

  1. Linux内核设计与实现 读书笔记 转

    Linux内核设计与实现  读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://bl ...

  2. Linux内核设计与实现 读书笔记

    第三章 进程管理 1. fork系统调用从内核返回两次: 一次返回到子进程,一次返回到父进程 2. task_struct结构是用slab分配器分配的,2.6以前的是放在内核栈的栈底的:所有进程的ta ...

  3. Linux内核设计与实现读书笔记(8)-内核同步方法【转】

    转自:http://blog.chinaunix.net/uid-10469829-id-2953001.html 1.原子操作可以保证指令以原子的方式执行——执行过程不被打断.内核提供了两组原子操作 ...

  4. Linux内核设计与实现——读书笔记2:进程管理

    1.进程: (1)处于执行期的程序,但不止是代码,还包括各种程序运行时所需的资源,实际上进程是正在执行的 程序的实时结果. (2)程序的本身并不是进程,进程是处于执行期的程序及其相关资源的总称. (3 ...

  5. Linux内核设计与实现——读书笔记1:内核简介

    内核:有的时候被称管理者或者操作系统核心,通常内核负责响应中断的中断服务程序, 负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间德内存管理程序 和网络,进程间通信等系统服务程序共同组 ...

  6. 初探内核之《Linux内核设计与实现》笔记上

    内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效 ...

  7. Linux内核架构与底层--读书笔记

    linux中管道符"|"的作用 命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象(下图应用别人的图片) 1. 例如: ps aux | grep "tes ...

  8. Linux内核设计第十七章笔记

    第十七章 设备与模块 关于设备驱动和设备管理,四种内核成分 设备类型:在所有unix系统中为了统一普通设备的操作所采用的分类 模块:Linux内核中用于按需加载和卸载目标代码的机制 内核对象:内核数据 ...

  9. Linux内核分析 一二章读书笔记

    第一章 Linux内核简介 1.Unix (1)Unix系统很简洁 (2)在Unix中,所以东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lsee ...

  10. 《Linux内核设计与实现》笔记-1-linux内核简单介绍

    一.Linux内核相对于传统的UNIX内核的比較: (1):Linux支持动态内核模块. 虽然Linux内核也是总体式结构,但是同意在须要的时候动态哦卸除(rmmod xxx)和载入内核模块(insm ...

随机推荐

  1. 第 15 章 位操作(fields)

    /*----------------------------------- fields.c -- 定义并使用字段 -----------------------------------*/ #inc ...

  2. mybatis隐藏不用的sql

    在mybatis的xml中,选中了不用的sql语句,使用ctrl + shift + / 隐去,,结果是 <where> <if test="dto.startTime ! ...

  3. <table>标签总结(colspan跨列 ,rowspan跨行)

    table标签有些内置属性要设置: <table cellpadding="0" cellspacing="0" border="0" ...

  4. Luogu P4707 重返现世

    题目描述 为了打开返回现世的大门,Yopilla 需要制作开启大门的钥匙.Yopilla 所在的迷失大陆有 \(n\) 种原料,只需要集齐任意 \(k\) 种,就可以开始制作. Yopilla 来到了 ...

  5. Android开发学习笔记(二)——编译和运行原理(1)

    http://www.cnblogs.com/Pickuper/archive/2011/06/14/2078969.html 接着上一篇的内容,继续从全局了解Android.在清楚了Android的 ...

  6. 《OKR工作法》读书笔记(转)

    文章转自https://www.jianshu.com/p/c694363d5213

  7. mysql 存儲emjoy表情是報錯Incorrect string value:

    解决方法: [mysqld] character-set-client-handshake=FALSE character-set-server=utf8mb4 collation-server=ut ...

  8. fatal error LNK1169: 找到一个或多个多重定义的符号或多个.c/.cpp文件想同时调用定义在.h文件里面的全局变量,防止重定义变量问题。

    为什么.h文件中不能定义全局变量? 原因: 存在多次创建变量.如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到includ ...

  9. 【Codeforces 1109C 】Sasha and a Patient Friend

    Codeforces 1109 C 题意:现在有个碗,每时每刻其中的水量都会加一个整数(可以为负). 给\(n\)个询问,询问有\(3\)种类型: \(1\ t\ s\):将从第\(t\)秒开始水量增 ...

  10. Omi框架学习之旅 - 之开篇扯蛋

    说实话, 我也不知道Omi是干啥的, 只因此框架是alloyTeam出的, dntzhang写的, 也有其他腾讯大神参与了, 还有一些其他贡献者, 以上我也不太清楚, 当我胡说八嘎. 因其写法有人说好 ...