Linux 进程调度笔记(一)
主要讨论的是单核 CPU 的情况下,进行调度的一些算法和思路。讨论都是基于单核 CPU 的条件下进行。
在内存中,无论对于用户而言有多少个进程,但在 CPU 运行的时候,总是只有只执行一个进程。进程调度的方式有很多,传统的算法有 FIFO,SJF(shortest job first),多级队列反馈调度。但是由于多进程的出现,必然不会采用单个进程依次执行的情况,所以现在的 CPU 都是对多个进程同时运行,把时间分摊到每个进程上,这样,对于用户而言,可以感受到多个进程并行的错觉。
CPU 在对于每个进程进行分摊的时候,在每次运行一段程序的时候,采用了时间片的概念,即这个时候 CPU 会运行这个程序一个时间段的长度。kernel 进行调度的时候,就是通过动态计算时间片来进行控制和调度选择的。
一般而言,进程可以分为两类,将进程分类是有必要的,不同的进程由于其需要的资源不同,可以分为 IO 消耗和处理器消耗两类。对于这两类进程的区分,可以有效避免 CPU 的资源的浪费,IO 消耗可能在 IO 时间或者等待用户输入的时间多一些,那么他们需要的 CPU 进行计算的时间相比之下就少,这种分类可以有效的避免资源的浪费。
调度策略的核心就是在 CPU 进行效应运行和尽可能的让系统利用率,吞吐量之间做 tradeoff。
进程由于其作用的不同,相应的就有不同的重要性。对于不同的进程,我们可以划分一个不同的优先级,对于优先级比较高的进程先运行,而优先级比较低的程序后运行。对于相同优先级的进程,我们可以按照轮转的方式,依次进行。这样就形成了一个多级优先级,轮转调度的算法。
现在的 Kernel 主要采用的最基本的调度是完全公平调度 (CFS)的算法进行调度程序。这里并没有时间片的概念,只有程序的等待时间。即这个程序在就绪队列中等待了多久。
对于相同优先级的进程而言,我们应该尽可能的保证花在每个进程的时间均匀。即每个进程使用的资源一样多。在理想状态下,我们可以把时间划分成无穷小量,每个进程都运行相同的无穷小量,然后在进程之间做没有 cost 的进程切换,这样,我们就可以将资源平均的花在每个进程上。但是现实的困难是,在进行进程切换的时候,往往会有cost的存在,同时,cpu 的 cache 缓存也会受到影响。
CFS 的做法是对每个进程运行一个时间段,然后选择运行最少的进程作为下一个的进程。对于每个进程应该运行多久,依靠的是其进程的重要性的差值在所对应的运行总时间的比重。即越重要的进程,所获得的时间就越多。同时,每个进程在运行的时候,总是要有一个最小的运行粒度,不仅可以避免饥饿现象的出现,还要避免频繁的调度导致的大量的 cost 。
Linux 进程调度笔记(一)的更多相关文章
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- linux学习笔记2-linux的常用命令
第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...
- Linux学习笔记(一)2015.4.13
研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...
- 跟着鸟哥学Linux系列笔记3-第11章BASH学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...
- 跟着鸟哥学Linux系列笔记2-第10章VIM学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...
- 跟着鸟哥学Linux系列笔记0-如何解决问题
跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1. 在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...
- 跟着鸟哥学Linux系列笔记1
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...
- linux进程调度之 FIFO 和 RR 调度策略
转载 http://blog.chinaunix.net/uid-24774106-id-3379478.html linux进程调度之 FIFO 和 RR 调度策略 2012-10-19 18 ...
随机推荐
- selenium pyunit单元测试框架
selenium pyunit单元测试框架 #PyUnit框架 #coding = utf - 8 #将要被测试的类 class Widget: def __int__(self,size = (40 ...
- 使用html及CSS实现在table中文字信息超过5个隐藏,鼠标移到时弹窗显示全部:
使用html及CSS实现在table中文字信息超过5个隐藏,鼠标移到时弹窗显示全部: <!DOCTYPE html><html lang="en">< ...
- js dom一些操作,记录一下自己写的没有意义,可以简略翻过 第八章
第八章,一些dom操作,和几个常用的函数 var s= document.getElementById("new"); console.log(s.length); var a= ...
- 《N诺机试指南》(五)进制转化
进制转化类题目类型: 代码详解及注释解答: //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...
- 2 深入分析 Java IO的工作机制(二)
2.5 I/O调优 下面总结一些磁盘I/O和网络I/O的常用优化技巧. 2.5.1 磁盘I/O优化 1. 性能检测 应用程序通常都需要访问磁盘来读取数据,而磁盘I/O通常都很耗时,要判断I/O是否是一 ...
- c++中的智能指针怎样释放连续的资源?
以前学智能指针时有点想当然了,一直以为智能指针很智能,不管你让它管理的是单个资源还是连续的资源它都能正确的将资源释放,现在发现自己大错特错. 先看代码: #include <iostream&g ...
- Golang调用Dll案例
Golang调用Dll案例 前言 在家办公已经两个多星期了,目前最大的困难就是网络很差.独自一个人用golang开发调用dll的驱动程序.本来就是半桶水的我,还在为等待打开一个页面而磨平了耐心.本想依 ...
- Go Module下使用本地包
介绍两种方式: 方式一(推荐): 严格的说,方式一是使用项目目录下的go文件. 项目目录如下: |── studyModule //项目主目录 | |──log //主目录下文件夹 | | |──lo ...
- Android 6.0(棉花糖)新特性
1.支持4K显示 Android 6.0本身已经支持4K显示,会通过一定优化形式使4K内容更加清晰. 2. 启动验证 (更完整的应用权限管理) Android 6.0在开机时会自动运行验证代码,检测设 ...
- Redis的“假事务”与分布式锁
关注公众号:CoderBuff,回复"redis"获取<Redis5.x入门教程>完整版PDF. <Redis5.x入门教程>目录 第一章 · 准备工作 第 ...