《Linux内核设计与实现》读书笔记 4 进程调度
第四章进程调度
进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统。调度程序是多任务操作系统的基础。通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的效果。
最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么总会有进程在执行。
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 进程调度的更多相关文章
- Linux内核设计与实现 读书笔记 转
Linux内核设计与实现 读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://bl ...
- Linux内核设计与实现 读书笔记
第三章 进程管理 1. fork系统调用从内核返回两次: 一次返回到子进程,一次返回到父进程 2. task_struct结构是用slab分配器分配的,2.6以前的是放在内核栈的栈底的:所有进程的ta ...
- Linux内核设计与实现读书笔记(8)-内核同步方法【转】
转自:http://blog.chinaunix.net/uid-10469829-id-2953001.html 1.原子操作可以保证指令以原子的方式执行——执行过程不被打断.内核提供了两组原子操作 ...
- Linux内核设计与实现——读书笔记2:进程管理
1.进程: (1)处于执行期的程序,但不止是代码,还包括各种程序运行时所需的资源,实际上进程是正在执行的 程序的实时结果. (2)程序的本身并不是进程,进程是处于执行期的程序及其相关资源的总称. (3 ...
- Linux内核设计与实现——读书笔记1:内核简介
内核:有的时候被称管理者或者操作系统核心,通常内核负责响应中断的中断服务程序, 负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间德内存管理程序 和网络,进程间通信等系统服务程序共同组 ...
- 初探内核之《Linux内核设计与实现》笔记上
内核简介 本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核 原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效 ...
- Linux内核架构与底层--读书笔记
linux中管道符"|"的作用 命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象(下图应用别人的图片) 1. 例如: ps aux | grep "tes ...
- Linux内核设计第十七章笔记
第十七章 设备与模块 关于设备驱动和设备管理,四种内核成分 设备类型:在所有unix系统中为了统一普通设备的操作所采用的分类 模块:Linux内核中用于按需加载和卸载目标代码的机制 内核对象:内核数据 ...
- Linux内核分析 一二章读书笔记
第一章 Linux内核简介 1.Unix (1)Unix系统很简洁 (2)在Unix中,所以东西都被当作文件对待,通过一套相同的系统调用接口来进行:open(),read(),write(),lsee ...
- 《Linux内核设计与实现》笔记-1-linux内核简单介绍
一.Linux内核相对于传统的UNIX内核的比較: (1):Linux支持动态内核模块. 虽然Linux内核也是总体式结构,但是同意在须要的时候动态哦卸除(rmmod xxx)和载入内核模块(insm ...
随机推荐
- tkinter学习系列之(八) Canvas控件
目录 目录 前言 (一)carves创建方法 (二)carves的画图方法 目录 前言 由于最近想在tkinter里内嵌matplotlib,由于用到tkinter里的carves控件,先学习一下. ...
- 设置UITextView光标从起始位置开始
一.刚开始用的时候,我加载的UITextView一直是这种情况: 当我在ViewController中设置这个属性: self.automaticallyAdjustsScrollViewInsets ...
- pb数据窗口之间的传参
问题描述: 通过一个窗口打开一个子窗口并传递指定参数查询详细信息 解决方法: 在前者窗体的user object下的itemchanged事件中,相应位置加入openwithparm函数 : op ...
- python五十六课——正则表达式(常用函数之findall)
4).函数:findall(regex,string,[flags=0]): 参数: 和match.search一样理解 功能: 将所有匹配成功的子数据(子串),以列表的形式返回: 如果一个都没有匹配 ...
- Excel中mod函数的使用方法
1.mod函数的含义 1 1.mod函数是一个用来求余数函数,返回两数相除的余数.mod函数在Excel中一般不单独使用,经常和其他函数组合起来使用. END 2.mod函数的语法格式 1 2.mod ...
- centos断网调试
保存命令 按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件 ...
- MySql常用命令集Mysql常用命令4
说明: 用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须 从中选择其中的一个. 1 FROM子句 FROM 子句指定了Select语句中字段的来源.FROM子句后面是包 ...
- k8s mysql 单点部署
参考官网:https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/ 20-nproc. ...
- 如何在自己设计的页面中调用metamask-1
启发: https://github.com/MetaMask/metamask-extension/issues/714 https://github.com/MetaMask/metamask-e ...
- 上传文件异常 MultipartException
参考自 https://blog.csdn.net/u010429286/article/details/54381705 现象 上传文件报错 org.springframework.web.mul ...