读书笔记(chapter4)
进程调度
4.1多任务
1.多任务系统可以划分为:非抢占式多任务和抢占式多任务;
(在此模式下,由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行机会,这个动作叫抢占;
时间片实际上是分配给可运行进程的处理器时间段 )
(在非抢占多任务模式下,除非进程自己主动停止运行,否则它会一直执行,进程主动挂起自己的操作叫做让步;)
2.进程通常做出让步,以便有很多处理时间,但是这种机制有很多缺点:
调度程序无法对每个进程该执行多久时间做出统一规定,所以进程独占的处理器时间可能超过用户的预料;
一个绝不让步的悬挂就能使系统崩溃
4.2Linux的进程调度
一种叫做O(1)调度程序
4.3策略
调度器的策略往往决定系统的整体印象。而且负责优化使用处理器时间
1.进程可以分为两个类型:I/O消耗型 和处理器消耗型;
前者是指进程的大部分时间用来提交I/O请求或者等待请求,这样的进程经常处于可运行状态,但是时间很短,因为要等待更多I/O请求时,最后会阻塞;
后者是指进程把大部分时间用在执行代码上,除非被抢占,否则他们一直在不停的运行,因为没有太多的I/O需求;
2.调度策略通常要在两个矛盾的目标中间寻找平衡:进程响应迅速和最大系统系统利用率
3.调度算法中一类是基于优先级的调度:调度程序总是选择时间片未用尽而且优先级最高的进程。用户和系统设置进程的优先级来影响系统的调度; Linux两种不同的优先级范围。第一种是nice值,范围从-20到+19,默认值为0;越大的nice值意味着更低的优先级;在Linux中,nice值代表时间片的; 第二种是实时优先级,其值是可配置的,默认情况下它的变化范围是从0到99,与nice值不同,越高的实时优先级数值意味着进程优先级越高;
4.时间片是一个数值,它表明进程被抢占前能持续运行的时间;
时间片过长会导致系统对交互的响应欠佳,让人觉得系统无法并发执行应用程序;
时间片过短会明显增大进程切换带来的处理器耗时,因为肯定会有相当一部分系统时间用在进程切换上,而这些进程能够用来运行的时间片却很短。
I/O消耗型号不需要长的时间片,而处理器消耗型的进程则希望越长越好.
4.4Linux调度算法
1.Linux调度器是以模块方式提供的,这样做的目的是允许不同类型的进程可以有针对性地选择调度算法;
这种模块化结构被称为调度器类,它允许多种不同的可动态添加的调度算法并存,调度属于自己的范畴的进程
2.完全公平CFS,是一个针对普通进程的调度类,在Linux中称为SCHED_NORMAL,CFS算法实现定义在文件kernel/sched_fair.c中
3.unix系统中的进程调度
4.公平调度:
CFS的做法是允许每个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程,而不再采用分配给每个进程时间片的做法,CFS在所有可运行进程总数进程计算出一个进程应该运行多久,而不是依靠nice值来计算时间片;
*越高的nice值进程获得越低的处理器使用权重,这是相对默认nice值进程而言的;相反,更反的nice值的进程获得更高的处理器使用权重
5.CFS为此引入每个进程获得的时间片底线,这个底线称为最小粒度、默认情况下就是1ms
6.任何进程所获得的处理器时间是由它自己和其他所有可运行进程nice值的相对差值决定的,nice值对时间片的作用不再是算数加权,而是几何加权,任何nice值对应的绝对时间不再是一个绝对值,而是处理器的使用比;CFS称为公平调度是因为确保给每个进程公平的处理器使用比,CFS不是完美的公平,
4.5Linux调度的实现
1.时间记账
CFS使用调度器实体结构(定义在<linux/sched.h>的struct_sched_entity)来追踪进程运行记账;
vruntime变量存放进程的虚拟运行时间,该运行时间的计算是经过了所有可运行进程总数的标准化,因此可用此变量来记录一个程序到底运行了多少时间以及还将运行多久
2.进程选择
CFS调度算法的核心:选择具有最小vruntime的任务
红黑树:挑选下一个任务;向树中加入进程;从树中删除进程
3.调度器入口
调度器的主要入口点是函数schedule(),它定义在文件kernel/sched.c中。它正是内核其他部分用于调用进程调度器的入口
4.睡眠和唤醒
休眠的进程处于一个特殊的不可执行的状态.
1、等待队列
休眠通过等待队列进行处理。等待队列是由等待某些事件发生的进程组成的简单链表;内核用wake_queue_head_t来代表等待队列;函数inotify_read(),负责从通知文件描述符中该读取信息,它的实现无疑是等待队列的典型用法。
2、唤醒
唤醒操作通过函数wake_up()进行,它会唤醒指定的等待队列上的所有进程
4.6抢占和上下文切换
上下文切换,也就是从一个可执行进程切换到另一个可执行进程,由定义kernel/sched.c中的context_switch()函数负责处理
1.用户抢占:从系统调用返回用户空间
从中断处理程序返回用户空间
2.内核抢占:中断处理程序正在执行,且返回内核空间之前
内核代码再一次具有可抢占性的时候
如果内核中的任务显式地调用schedule()
如果内核中的任务阻塞(这样也会导致调用schedule())
4.7实时调度策略
1.两种实时调度策略:sched_fifo和sched_RR;前者实现了一种简单、先入先出的调度算法:它不使用时间片;而后者尽量事先分配给它的时间后就不能再继续执行了。
4.8与调度相关的系统调用
读书笔记(chapter4)的更多相关文章
- 《Linux内核设计与实现》 Chapter4 读书笔记
<Linux内核设计与实现> Chapter4 读书笔记 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子 ...
- 读书笔记-Coding faster(英文版)
读书笔记-Coding faster(英文版) Getting More Productive with Microsoft visual Studio Author: Zain Naboulsi S ...
- 读书笔记-实用单元测试(英文版) Pragmatic Unit Testing in C# with NUnit
读书笔记-实用单元测试(英文版) Pragmatic Unit Testing in C# with NUnit Author: Andrew Hunt ,David Thomas with Matt ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
- LOMA280保险原理读书笔记
LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...
随机推荐
- iris数据集(.csv .txt)免费下载
我看CSDN下载的iris数据集都需要币,我愿意免费共享,希望下载后的朋友们给我留个言 分享iris数据集(供学习使用): 链接: https://pan.baidu.com/s/1Knsp7zn-C ...
- Alpha版本 - 测试报告
Alpha版本 - 测试报告 总体测试计划 前端 模块 子模块 测试项 预期结果 测试工具 执行人 登录/注册模块 无网络 提示无网异常 robolectric 陈龙江 登录 输入用户名/密码为空,点 ...
- vue-cli打包到部署到nginx服务器
最近公司把云平台产品用vue 前后端分离的框架来写,前面大部分开发都比较顺利,后面打包部署出了bug 现在记录下自己遇到的哪些坑 1,我直接npm run build 打包出来,打开dist目录下面的 ...
- C#异步编程のWPF Invoke和BeginInvoke
我们先看个简单的例子: private void Window_Loaded(object sender, RoutedEventArgs e) { Console.WriteLine("B ...
- 【微软编程一小时】题目1 : Arithmetic Expression
时间限制:2000ms 单点时限:200ms 内存限制:256MB 描写叙述 Given N arithmetic expressions, can you tell whose result is ...
- 转载 Net多线程编程—System.Threading.Tasks.Parallel
.Net多线程编程—System.Threading.Tasks.Parallel System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Paral ...
- js点滴
1. promise用法 https://www.cnblogs.com/lvdabao/p/es6-promise-1.html https://segmentfault.com/a/1190000 ...
- 《深入理解Java虚拟机》笔记(转)
文章来自http://www.cnblogs.com/tianchi/archive/2012/11/11/2761631.html 在C里面我们想执行一段自己编写的机器指令的方法大概如下: type ...
- node学习之cookie和session
c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏 ...
- docker镜像的创建commit及dockerfile
在docker 1.3版本以前使用attach进入容器会经常出现卡死的情况,之后官方退出了exec命令,从宿主机进入,但是从其他远程主机进入使用ssh服务来维护是用户熟悉的方法.所以这里来创建一个带有 ...