主要讨论的是单核 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 进程调度笔记(一)的更多相关文章

  1. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  2. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  3. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

  4. Linux学习笔记(一)2015.4.13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

  5. 跟着鸟哥学Linux系列笔记3-第11章BASH学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...

  6. 跟着鸟哥学Linux系列笔记2-第10章VIM学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...

  7. 跟着鸟哥学Linux系列笔记0-如何解决问题

    跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1.  在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...

  8. 跟着鸟哥学Linux系列笔记1

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...

  9. linux进程调度之 FIFO 和 RR 调度策略

    转载 http://blog.chinaunix.net/uid-24774106-id-3379478.html    linux进程调度之 FIFO 和 RR 调度策略 2012-10-19 18 ...

随机推荐

  1. 懒人必备,IntelliJ IDEA中代码一键生成

    之前有不少小伙伴问松哥微人事项目(https://github.com/lenve/vhr)使用的 MyBatis 逆向工程在哪里?其实旧版微人事当时没有使用逆向工程,是我自己手动敲出来的,当然手动敲 ...

  2. num04---模板方法模式

    最近看书又遇到模板方法模式,具体是在同步器(AQS)的内容上.就顺便再来回顾下. 同步器AbstractQueuedSynchronizer(AQS)是一个抽象类.其中定义了           基本 ...

  3. 图像数组运算相关问题(nan/inf)

    新年第一更!祝愿新的一年技术长足进步哈! 最近在用sklearn的回归分析模型拟合预测遥感图像,遇到了一些问题,好在一一解决,现在总结一下. 1.首先输入sklearn的数据必须reshape(-1, ...

  4. Python 协程 - Coroutines

    协程 - Coroutines Awaitable Objects, Awaitable Objects 通常由 __await__() 生成, 而 Coroutine objects 是由 asyn ...

  5. gcc, ld

    GCC gcc除了具备基本的c文件编译功能外,还把其它工具的功能也集成了进来,比如as的汇编功能,ld的链接功能. 因此,gcc也可以通过-Wa, option,将option传给汇编器as:也可以通 ...

  6. monkey命令行测试

    一. 什么是Monkey monkey是google提供的一个用于稳定性与压力测试的命令行工具.monkey程序由android系统自带,位于/sdcard/system/framework/monk ...

  7. React之虚拟DOM中的Diff算法

    一.React中的setState ( 异步函数,异步获取数据 ) 若操作的时间间隔短,它可以将多个setState结合成一个setState,减少虚拟DOM的比对次数,提高性能 二.同层虚拟DOM对 ...

  8. Django 系列

    Django基础 Django框架简介 Django 静态文件 Django request对象与ORM简介 Django路由系统 Django之视图层 Django之模板层 Django的setti ...

  9. 正则表达式过滤html注释内容

    Regex.Replace("<!--(.|[\r\n])*?-->",string.Empty)

  10. 5.Android-电话拨号器详解

    之前学习了3.Android-ADT之helloworld项目结构介绍后,本章便来写个简单的电话拨号器程序. 实现的步骤如下所示: 1.创建项目 2.写layout/activity_main.xml ...