主要讨论的是单核 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. Codeforces_739_B

    http://codeforces.com/problemset/problem/739/B dfs,记录距离前缀和,每次找到离最近的不符合的点. #include<iostream> # ...

  2. Why all application lack a kind of most really charm ?

    Website and APP we used now are mostly web2.0 applications. While people practise in use, they can n ...

  3. HTTP&HTTPS协议详解之HTTP篇

    一.HTTP简介 01.什么是HTTP HTTP(HyperText Transfer Protocol ,超文本传输协议),是一个基于请求与响应的,无状态的,应用层的协议,常基于TCP/IP协议传输 ...

  4. 渡一教育公开课重点笔记之css

    主流浏览器及内核 浏览器         内核 IE             trident Firefox    Gecko Google chrome    Webkit/blink(2014年上 ...

  5. Nginx 十大优化 与 防盗链

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Ngin ...

  6. 使用Java, AppleScript对晓黑板进行自动打卡

    使用Java, AppleScript对晓黑板进行自动打卡 由于我们学校要求每天7点起床打卡,但是实在做不到,遂写了这个脚本. 绪论 由于晓黑板不支持网页版,只能使用App进行打卡,所以我使用网易的安 ...

  7. Day4前端学习之路——背景边框列表链接和更复杂的选择器

    课程目标 掌握 CSS 稍微复杂的一些选择器,还有背景,边框等一些 CSS 样式属性 主要内容: 背景属性 边框 列表 链接 其他选择器 选择器概览:https://www.w3school.com. ...

  8. ElasticSearch相关概念与客户端操作

    一.Elasticsearch概述 Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document).然而它不仅仅是存储,还会索引(i ...

  9. 1. c++实现最最最原始人的数字时钟

    网课c++第一次作业,学到了iomanip库文件里的setw(),setfill()等函数,自己完成作业时搜着学到了Windows.h库文件里的sleep(),system("cls&quo ...

  10. Python requests 调Jenkins登录后的接口,返回403Fobidden的原因及解决方法。

    因Jenkins启用“防止跨站点请求伪造" 解决方法: 在Manage Jenkins->Configure Global Security 设置中将“防止跨站点请求伪造”取消勾选