朴素UNIX它-Linux CFS注视
这篇文章是比较短。只是分析Linux CFS调度器的一个细节。
在进程寻找下一个将被执行的进程时,难道仅仅仅仅是在红黑树上取下左下角的进程吗?其实最朴素的实现就是这样,可是考虑到优化的话,就没有这么简单了。要考虑CPU缓存的利用率,即假设一个进程A抢占了进程B。那么在A进程的上下文中。pick next是选择进程B呢还是选择红黑树的左下角进程呢?另外假设进程A刚被唤醒,企图抢占进程B,可是没有成功。那么下一个是选择红黑树的左下角进程呢还是选择进程A呢?是的。这些都是问题。
我们看一下pick next的实现:
static struct sched_entity *pick_next_entity(struct cfs_rq *cfs_rq)
{
struct sched_entity *se = __pick_next_entity(cfs_rq);
struct sched_entity *left = se; if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1)
se = cfs_rq->next; /*
* Prefer last buddy, try to return the CPU to a preempted task.
*/
if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1)
se = cfs_rq->last; clear_buddies(cfs_rq, se); return se;
}
非常显然,要把红黑树最左下角的进程和另外两个进程,即next和last最比較,next是抢占失败的进程,而last则是抢占成功后被抢占的进程,这三个进程究竟哪一个是最优的next进程呢?Linux CFS实现的判决条件是:
1.尽可能满足须要刚被唤醒的进程抢占其他进程的需求;
2.尽可能降低以上这样的抢占带来的缓存刷新的影响。
Linux CFS实现是怎么做到的呢?Linux保存了两个变量。即抢占失败的进程和抢占成功后被抢占的进程,在权衡的时候,优先选择的顺序是:
抢占成功后被抢占的进程>抢占失败的进程>红黑树最左下角的进程
究竟能不能选择前两个进程,则是wakeup_preempt_entity函数来决定的,代码太多无益,看以下的图解就可以:
这个CFS细节Linux 2.6.23初步实现CFS如果没有达到。因此,从最简单的时代,你来了解插件的能力的细节和出局,看Changelog有利的是。不得不说。读史使人明智。
朴素UNIX它-Linux CFS注视的更多相关文章
- 朴素UNIX之-打开历史
它可以毫不夸张地说,,UNIX模型是现代操作系统的原型.无论是真实的UNIX让我们大系列AIX,Solaris,HP-UX,FreeBSD,NetBSD,...或类别UNIX实例Linux...或基于 ...
- Vi (Unix及Linux系统下标准的编辑器)VIM (Unix及类Unix系统文本编辑器)
Vi是Unix及Linux系统下标准的编辑器.学会它后,您将在Linux的世界里畅行无阻.基本上vi可以分为三种状态,分别是命令模式.插入模式,和底行模式. vi编辑器是所有Unix及Linux系统下 ...
- chmod 权限777 是什么意思(Unix和Linux的各种操作系统下)
在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读.写.运行设定权限.例如我用ls -l命令列文件表时,得到如下输出:-rw-r--r-- 1 bu users 2254 ...
- Unix和Linux下C语言学习指南
转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...
- 一段关于 Unix、Linux 和 Windows 的暗黑史
“SCO 在言语上变得越来越好斗,而且还拒绝展示有关诉讼的任何证据,一切都似乎在表明,SCO只不过是在那里拉虎皮做大旗地狂言乱语.但是,微软 决不会轻易放弃这么可以一个利用这些狂言乱语的好机会.”20 ...
- unix及Linux发展历程
unix及Linux发展历程 版权申明:本文资料为网上收集,由本人整理而成,转载请注明 一,unix诞生: Ken Thompson肯·汤普森 -------- unix之父 在1969年到1970间 ...
- Windows系统提供什么样的接口,Unix、Linux系统的用户接口是什么?
Windows:图形化用户界面 Unix.Linux:独立的环境.
- 【Linux基础】Unix与Linux操作系统介绍
一.Unix和Linux操作系统概述 1.Unix是什么 UNIX是一个计算机操作系统,一个用来协调.管理和控制计算机硬件和软件资源的控制程序. 2.Unix特点 (1)多用户:在同一时刻可以有多个用 ...
- Linux CFS调度器之pick_next_task_fair选择下一个被调度的进程--Linux进程的管理与调度(二十八)
1. CFS如何选择最合适的进程 每个调度器类sched_class都必须提供一个pick_next_task函数用以在就绪队列中选择一个最优的进程来等待调度, 而我们的CFS调度器类中, 选择下一个 ...
随机推荐
- Swift调用Objective-C编写的代码(颜色选择器KKColorListPicker调用)
在Swift项目中,我们可以导入任意用Objective-C写的框架,代码库等.下面以Swift调用Objective-C编写的颜色选择器KKColorListPicker为例. 效果图如下: ...
- svn强制用户提交时写日志
#!/bin/sh REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook #根据你的SVN目录而定 LOGMSG=`$SVN ...
- maven Nexus 搭建本地中央仓库。
maven 网络中央仓库占用大量的网络资源,所以构建本地中央仓库. 过程如下: 下载地址: http://www.sonatype.org/nexus/archived 我用的是1.6的 [root@ ...
- 用Delphi画圆角Panel的方法(使用CreateRoundRectRgn创造区域,SetWindowRgn显示指定区域)
用Delphi画圆角Panel的方法: procedure TForm1.Button5Click(Sender: TObject);var fhr :Thandle;beginfhr:=Create ...
- 依据不同的操作系统读取配置文件/java读取属性文件代码
package cn.com.css.common.util; /** * @brief OSEnum.java 操作系统的枚举 * @attention * @author 涂作权 * @d ...
- [Android学习笔记]Bitmap,BitmapDrawable,BitmapFactory学习笔记
Bitmap:图片文件的封装,可以看做是一张位图此类中的静态方法可以通过源Bitmap创建新的Bitmap对象此类封装了位图的一些信息Bitmap文档 BitmapFactory:一个工具类,用于创建 ...
- [Android学习笔记]startActivityForResult和onActivityResult的使用
发开过程中,免不了多个页面之间相互交互通信. Android中使用startActivityForResult方法和onActivityResult配合完成任务 startActivityForRes ...
- 去掉chrome记住密码后自动填充表单的黄色背景
chrome表单自动填充后,input文本框的背景会变成黄色的,通过审查元素可以看到这是由于chrome会默认给自动填充的input表单加上input:-webkit-autofill私有属性,然后对 ...
- Git中的merge命令实现和工作方式
想象一下有例如以下情形:代码库中存在两个分支,而且每一个分支都进行了改动.最后你想要将当中的一个分支合并到其它的分支中.个人博客网址 http://swinghu.github.com/ 那么要问合并 ...
- 理解 Python 中的线程
原地址:http://blog.jobbole.com/52060/ 本文由 伯乐在线 - acmerfight 翻译自 Akshar Raaj.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 我 ...