第四章   进程调度

4.1多任务

无论在单处理器或者多处理机器上,多任务操作系统都能使多个进程处于堵塞或者睡眠状态。

非抢占式多任务:除非进程自己主动停止运行,否则它会一直执行。

抢占式多任务:进程在被抢占之前能够运行的时间是预先设置好的。

4.2 Linux的进程调度

O(1)调度程序

O(1)拥有数以十计的多处理器的环境,但缺少交互进程。

4.3 策略

4.3.1 I/O消耗型和处理器消耗型的进程

I/O消耗型:大多时间在提交或等待I/O请求;

处理器消耗型:大多时间在执行代码。不属于I/O驱动类型。

4.3.2 进程优先级

相同优先级按照轮转方式进行调度。

调度程序总是选择时间片未用尽且优先级高的进程运行。

Linux两种不同的优先级范围:

nice值:-20~+19,默认0,值越大优先级越低。

实时优先级:可配置,范围0~99,值越大与优先级越大。

4.3.3 时间片

nice值作为权重将调整进程所使用的处理器时间使用比。

I/O消耗型:不需要长的时间片。

处理器消耗型:需要越长越好的时间片。

4.3.4 调度策略的活动

文字编辑程序显然是 1/0 消耗型的,因为它大部分时间都在等待用户的键盘输入〈无论用户的输入速度有多快,

都不可能赶上处理的速度λ 用户总是希望按下键系统就能马上响应。视

频编码程序是处理器消耗型的。

4.4Linux调度算法

4.4.1 调度器类

以模块方式提供的,这样做的目的是允许不同类型的进程可以有针对性地选择调度算法。

4.4.3 公平调度

使用权重;

可运行进程数量趋于无穷,每个最少也能获得 lms 的运行时间;

任何进程所获得的处理器时间是由它自己和其他所有可运行进程nice 值的相对差值决定的。

4.5Linux调度的实现

4.5.1 时间记账

所有的调度器都必须对进程运行时间做记账。

定义在kemeVsched_fair.c 文件中的 update_curr()函数实现了该记账功能。

4.5.2 进程选择

(1)挑选下一个任务

你从树的根节点沿着左边的子节点向下找,一直找到叶子节点,你便找到了其vruntime 值最小的那个进程。

(2)向树中加入进程

发生在进程变为可运行状态(被唤醒〉或者是通过fork()调用第一次创建进程时。

调用_enqueue_entity()进行繁重的插入操作,把数据项真正插入到红黑树中。

(3)从树中删除进程

发生在进程堵塞(变为不可运行态〉或者终止时(结束运行〉。

由辅助函数_dequeue_entityO 完成的。

4.5.3 调度器入口

主要入口点是函数schedule(),它定义在文件kemel/sched.c中。

4.5.4 睡眠和唤醒

内核的操作都相同 2 进程把自己标记成休眠状态,从可执行红黑树中移出,放入等待队列,然后调用 schedule()选择和执行一个其他进程。

唤醒的过程刚好相反进程被设置为可执行状态,然后再从等待队列中移到可执行红黑树中。

4.6抢占和上下文切换

4.6.1 用户抢占

在以下情况产生:

从系统调返回用户空间时;从中断处理程序返回用户空间时;

4.6.2 内核抢占

在以下情况发生:

中断处理程序正在执行,且返回内核空间之前;内核代码再一次具有可抢占性;如果内核中的任务显式地调用 schedule();

如果内核中的任务阻塞(这同样也会导敖调用 schedule()。

4.7实时调度策略

两种:SCHED_FIFO和 SCHED_RR。

4.8与调度相关的系统调用

4.8.1 与调度策略和优先级相关的系统调用

sched_setparam()和sched__getparam()分别用于设置和获取进程的实时优先级

nice()函数会调用内核的 set_ user_ nice()函数,这个函数会设置进程的 task_struct 的 static_prio 和prio 值。

4.8.2 与处理器绑定有关的系统调用

强制指定“这个进程无论如何都必须在这些处理器上运行”。

《Linux内核设计与实现》第4章读书整理的更多相关文章

  1. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

  2. linux及安全《Linux内核设计与实现》第一章——20135227黄晓妍

    <linux内核设计与实现>第一章 第一章Linux内核简介: 1.3操作系统和内核简介 操作系统:系统包含了操作系统和所有运行在它之上的应用程序.操作系统是指整个在系统中负责完成最基本功 ...

  3. LINUX内核设计与实现第三周读书笔记

    LINUX内核设计与实现第三周读书笔记 第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年, ...

  4. 《Linux内核设计与实现》Chapter 3 读书笔记

    <Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...

  5. 《Linux内核设计与实现》Chapter 1 读书笔记

    <Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...

  6. 《Linux内核设计与实现》Chapter 2 读书笔记

    <Linux内核设计与实现>Chapter 2 读书笔记 一.获取内核源码 1.使用Git 我们曾经在以前的学习中使用过Git方法 $ git clone git://git.kernel ...

  7. 《Linux内核设计与实现》Chapter 5 读书笔记

    <Linux内核设计与实现>Chapter 5 读书笔记 在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口,这些接口的作用是: 使应用程序受限地访问硬件设备 提供创建新进程与已 ...

  8. 《Linux内核设计与实现》Chapter 18 读书笔记

    <Linux内核设计与实现>Chapter 18 读书笔记 一.准备开始 一个bug 一个藏匿bug的内核版本 知道这个bug最早出现在哪个内核版本中. 相关内核代码的知识和运气 想要成功 ...

  9. 《linux内核设计与实现》第一章

    第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. ——1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. — ...

  10. Linux内核设计与实现 第十七章

    1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...

随机推荐

  1. 17秋 软件工程 团队第五次作业 Alpha Scrum9

    17秋 软件工程 团队第五次作业 Alpha Scrum9 今日完成的任务 世强:APP后端部门申请状态: 港晨:主页面代码实现: 树民:完善超级管理员web后端: 伟航:设置页面和侧边栏的原型: 陈 ...

  2. 回文数的golang实现

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数 输入: 输出: true 输入: - 输出: false 解释: 从左向右读, 为 - . 从右向左读, 为 - ...

  3. [Tomcat]The JRE_HOME environment variable is not defined correctly

    在tomcat的bin目录下,双击startup.bat,闪一下,就没了,后来仔细看了一下黑屏闪的内容如下: the JRE_HOME environment variable is not defi ...

  4. CRM项目之stark组件(2)

    那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...

  5. 微信小程序のCss(一)

    一.margin:外边距:设置对象四边的外延边距. margin: 20rpx 10rpx 25rpx 10rpx :如果提供全部四个参数值,将按上.右.下.左的顺序作用于四边. margin:20r ...

  6. cmd应用基础教程

    cmd是什么? 对于程序员而言,cmd命令提示符是windows操作系统下一个比较重要的工具.对于程序员而言,为了追求更高的效率而抛弃花俏的界面已然是一件很常见的行为,截止到目前的,全世界仍有大量的服 ...

  7. 转载 AutoFac常见用法总结

    第二节:框架前期准备篇之AutoFac常见用法总结   一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势 ...

  8. mybatis多数据源切换

    文章转自https://yq.aliyun.com/articles/188540?t=t1 https://www.liaoxuefeng.com/article/00151054582348974 ...

  9. ASP 基础一 网站开发 初步认识

    一 .ASP 与 ASP.NET的区别 i.ASP是解释型的动态语言,asp文件包含了前端和动态语言VBScript,来实现对服务器的交互,运行在IIS.PWS等WEB服务器上 II.ASP.NET是 ...

  10. <转>cookie和session的区别

    看到一篇讲cookie和session的文章,觉得蛮不错的,转载分享下... 原地址:http://www.lai18.com/content/407204.html?from=cancel cook ...