第四章   进程调度

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. Jenkins 自动发布 Spring Boot 项目(Gitee)

    1.下载 wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war,并部署到tomcat下 2.机器安装好 java ,maven ,g ...

  2. 【转】MySQL理解索引、添加索引的原则

    索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销.而如果采取索引,则可以根据索引指向的页以及记录在 ...

  3. go标准库的学习-crypto/sha1

    参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/sha1" sha1包实现了SHA1哈希算法,参见RFC 3174. ...

  4. kumavis/obj-multiplex

    https://github.com/kumavis/obj-multiplex obj-multiplex多路复用 simple stream multiplexing for objectMode ...

  5. PAT A1073 Scientific Notation (20 分)——字符串转数字

    Scientific notation is the way that scientists easily handle very large numbers or very small number ...

  6. PAT A1103 Integer Factorization (30 分)——dfs,递归

    The K−P factorization of a positive integer N is to write N as the sum of the P-th power of K positi ...

  7. 广告牌LED灯阵

    大家都知道广告牌里面原来都是灯管,现在开始更换成LED灯了,下面是我在现场拍的图片: 下面这个图片是LED灯条,铝基板打印电路,TM1812驱动,该IC可以接受4组24位数据,然后转发数据(https ...

  8. kubernetes集群中对多个pod操作命令

    $ for i in 0 1; do kubectl exec web-$i -- sh -c 'echo hello $(hostname) > /usr/share/nginx/html/i ...

  9. C#连接数据库插入数据

    首先是安装JDBC操作数据库的包,,当然自己看着办哈,可以自己下载以后导入,或者直接让软件本身下载 第一种方式 第二种 咱自己下载个低版本的 点击这个链接 点击以后呢可以直接下载下来,然后导入(大家百 ...

  10. Multiple “order by” in LINQ(转载)

    问: I have two tables, movies and categories, and I get an ordered list by categoryID first and then ...