第四章进程调度

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

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

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内核设计与实现》读书笔记 第四章 进程调度的更多相关文章

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

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

  2. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  3. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  4. 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...

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

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

  6. Linux内核设计与实现 总结笔记(第二章)

    一.Linux内核中的一些基本概念 内核空间:内核可独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限.这种系统态和被保护起来的内存空间,称为内核空间. 进程上下文:当 ...

  7. 《Linux内核设计与实现》课本第四章学习总结

    进程调度 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务系统分为两种: 抢占式多任务:Linux提供了抢占式的多任务模式,由调度程序来决定什么时候停止一个进程的运行 ...

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

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

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

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

随机推荐

  1. Unity Animation System(动画系统)

    动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重)   带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画.   ...

  2. make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl] 错误 1,make: *** [out/host/linux-x86/obj/lib/libESR_Portable.so] 错误 1

    错误3: g++: g++: selected multilib '32' not installed selected multilib '32' not installed make: *** [ ...

  3. 10gRAC vip启动报错CRS-1006 CRS-0215

    为测试一个迁移方案,装了一套10g rac环境,可能是很久没有装过10g的RAC了,整个过程情况不断. 1.在把集群软件和数据库软件都装好之后,用crs_stat检测状态的时候,发现vip的状态不对, ...

  4. 【Cocos2d-x for WP8 学习整理】(5)文字显示全整理

    学习 Cocos2d-x 有一阵了,现在要做个小东西,第一步就遇到了文字展示的问题,于是想把可能遇到的问题统统整理一下.这一部分也不局限于wp8,全平台应该都是一个解决方案. 先在脑袋里大致想了一下, ...

  5. linux简单命令

    查看服务器开启的进程信息[root@CentOSHT ~]# top 其中第一行的  Load average 参数是服务器负载的意思,

  6. Xcode 突然有部分文件不显示

    今天突然Xcode抽风了,突然我的项目中的文件好多不显示出来,本地文件夹都有,见鬼了..... 真心坑死了,于是乎就找度娘了,果然被我发现了 看见这个蓝色小时钟没呀,就是他在捣鬼,我点击一下变成灰色就 ...

  7. ZoomEye 钟馗之眼 搜索工具 基于API

    #!/usr/bin/env python # -*- coding: utf-8 -*- # Author: f0rsaken import getopt import requests impor ...

  8. EditText键盘弹出时,会将布局底部的导航条顶上去(解决方法之一)

    这只是其中一种方法android:windowSoftInputMode有很多属性可以添加,必须是一个state...|ajust... 我只是觉得这种比较好用 在项目的AndroidManifest ...

  9. 手持移动扫描终端 PDA移动开单系统-批发零售管理

    条码数据采集器通过扫描商品条码移动开单,实现便携式办公,伴随式销售,是我公司的一款最新便携式开单配套产品,采集器能通过WIFI无线局域网.GPRS互联网直接与主机连接,让公司业务人员能随时随地了解公司 ...

  10. Unity 依赖注入之一

    在项目中引入Unity,建立一个接口IWork跟一个继承IWork接口的Work类 public interface IMyWork { void Work(); } public class MyW ...