(2021) 20 [虚拟化] 进程调度

(2021) 20 [虚拟化] 进程调度

南京大学操作系统课蒋炎岩老师网络课程笔记。

视频:https://www.bilibili.com/video/BV1HN41197Ko?p=20
讲义:http://jyywiki.cn/OS/2021/slides/11.slides#/

背景 — 机制与策略分离

  • 机制:一个通用的、可定制的抽象
  • 策略:在机制上实现的具体
  • 例子:
    • 分页和存储保护(机制) VS. 进程实现(策略)
    • 操作系统API(机制)VS. 应用程序(策略)

中断和虚拟存储为我们提供了进程抽象(机制),操作系统的实现者在中断时获得了 ”选择一个程序执行“ 的权利,但是到底应该选哪个呢?(策略)

本次课内容与目标

理解常见的处理器调度策略

  • 轮转调度(round - robin)
  • 优先级 / 反馈调度
  • 公平调度

了解调度是操作系统领域重要的、未解决的问题。

虚假的(课本上的)处理器调度

一组基本的假设

我们接下来的讨论,基于这样一组基本的假设,这使得我们能够更好地聚焦与调度问题。

  1. 系统中有一个处理器(1970s)
  2. 多个进程共享CPU
    • 包括系统调用(进程的一部分代码在syscall中运行)
    • 偶尔会等待I/O返回,不适用CPU(通常时间较长)
  3. 处理器以固定的频率被中断
  4. 随时有可能有新的进程被创建 / 旧的进程退出

中断机制:在中断 / 系统调用中可以切换到其他进程执行

策略:Round-Robin 轮转

假设档期 TiT_iTi 运行,中断之后会试图切换到下一个线程 T(i+1)modnT_{(i+1)\ mod\ n}T(i+1) mod n ,如果下一个线程正在等待 I / O返回,就继续尝试下一个,如果所有的线程都不需要 CPU,就调度idle进程执行。

中断之间进程的执行称为时间片 (time-slicing)

没有优先级的处理。

策略:引入优先级

UNIX niceness

  • -20 … 19
    • 越 nice,越被不 nice 的人抢占
    • -20: 极坏; most favorable to the process
    • 19: 极好; least favorable to the process
  • 基于优先级的各种策略
    • 有坏人,永远轮不到好人 (RTOS; 好人流下了悔恨的泪水),除非高优先级的进程在等待IO,否则永远是高优先级先执行
    • nice 相差 10, CPU 获得相差 10 倍 (Linux)(linux实测应为1:9)
  • 不妨试一试: nice/renice
    • taskset -c 0 nice -n 19 ./a.out &
    • taskset -c 0 nice -n 9 ./a.out &
  • top命令除了查看进程的CPU和内存的占用情况之外,也可以查看进程的NICE值,即NI

真实的处理器调度

策略:动态优先级,多级反馈队列调度(MLFQ)

不会设置优先级?能不能让系统自动设定?

  • 交互进程 (vi, vscode, …),大部分时候在等待外界输入,这时这种进程会主动让出CPU
    • 优先调度它们能提升用户体验,减少卡顿 (试想 Round-Robin)
  • 计算进程 (gcc, ld, …),拼命使用 CPU

调度策略

设置若干个 Round-Robin 队列,每个队列对应一个优先级。

如果将时间片用完了,则判定该进程执行大量运算,就下调其的优先级

  • 优先调度高优先级队列
  • 用完时间片 → 坏人,请你变得更好
  • 让出 CPU I/O → 好人,可以变得更坏

详见教科书OSTEP

问题

这种方式在早年间可以很好地工作,但是在现代操作系统中,大量的进程之间会有通信和互动。这时,如果两个进程之间彼此频繁通信,我们的多级反馈调度也会把它们识别成互动进程,提高其优先级。

策略:Complete Fair Scheduling (CFS)

基本策略

随着现代操作系统越来越复杂,操作系统的设计者已经放弃了设计一个完美的调度算法,而是转而使用一种按执行时间完全公平的调度算法。注意其中还有NICE机制来调节优先级,但其他情况下完全公平。

所有复杂系统的调度都是拙劣的 Workaround

试图去模拟一个 “ideal multi-task CPU”

“让系统里的所用进程尽可能公平地分享处理器”。具体来说,它会为每个进程记录精确的运行时间,中断 / 异常发生之后,就切换到运行时间最少的进程来执行,而当下次中断 / 异常之后,当前进程可能就不是运行时间最少的了,这时再选择当前最少运行时间的进程来执行。

CFS实现优先级

让好人的时间变得快一些,坏人的时间变得慢一些……

  • 不再是运行时间,而是 “vruntime” (virtual runtime)
  • vrt[i]/vrt[j]vrt[i]\ /\ vrt[j]vrt[i] / vrt[j] 的增加比例 =wt[j]/wt[i]= wt[j]\ /\ wt[i]=wt[j] / wt[i]
const int sched_prio_to_weight[40] = {/* -20 */ 88761, 71755, 56483, 46273, 36291,/* -15 */ 29154, 23254, 18705, 14949, 11916,/* -10 */  9548,  7620,  6100,  4904,  3906,/*  -5 */  3121,  2501,  1991,  1586,  1277,/*   0 */  1024,   820,   655,   526,   423,/*   5 */   335,   272,   215,   172,   137,/*  10 */   110,    87,    70,    56,    45,/*  15 */    36,    29,    23,    18,    15,
};

CFS 的复杂性

  1. 新进程 / 线程:子进程继承符进程的vruntime

  2. I/O (例如 1 分钟) 以后回来 vruntime 严重落后。为了赶上,CPU 会全部归它所有。

    Linux 的实现:被唤醒的进程获得 “最小” 的 vruntime (可以立即被执行)。

  3. vruntime 有优先级的 “倍数”,如果溢出了 64-bit 整数怎么办?

    假设:系统中最近、最远的时刻差不超过数轴的一半。我们可以比较它们的相对大小,a < b 不再代表 “小于” !

    bool less(u64 a, u64 b) {return (i64)(a - b) < 0;
    }
    

实现CFS的数据结构

用什么数据结构维护所有进程的 vruntime?考虑:我们需要什么操作?

为每个进程维护映射 t↦vt(t)t↦v_t(t)tvt(t)

  • 维护进程的 vruntimevt(t)←vt(t)+Δt/wvruntime v_t(t)←v_t(t)+Δt/wvruntimevt(t)vt(t)+Δt/w
  • 找到 ttt 满足 vt(t)v_t(t)vt(t) 最小
  • 进程创建/退出/睡眠/唤醒时插入/删除 ttt

Linux内核中的实现:红黑树。

调度与互斥锁

处理器调度:不仅是计算

线程不是 while (1) 的循环,还可能等待互斥锁/信号量/设备 (比一个时间片短很多)。在此情形下,会发生什么?

  • round-robin?
    • 考虑三个进程/线程: producer, consumer, while (1)
    • 主要是因为没有精确的时间统计
  • CFS?
    • (似乎没问题?) 线程有精确的 accounting 信息

优先级反转(priority inversion)

void bad_guy() { // 高优先级mutex_lock(&lk);...mutex_unlock(&lk);
}void nice_guy() { // 中优先级while (1) ;
}void very_nice_guy() { // 最低优先级mutex_lock(&lk);...mutex_unlock(&lk);
}

very nice guy 在持有锁的时候让出了处理器……

  • bad guy 顺便也无法运行了 (nice guy 抢在了它前面 )

解决优先级反转问题

Linux: CFS 凑合用吧;实时系统(RTOS):火星车在 CPU Reset 啊喂??

  • 优先级继承 (Priority Inheritance)/优先级提升 (Priority Ceiling)
    • 持有 mutex 的线程/进程会继承 block 在该 mutex 上的最高优先级
    • 不总是能 work (例如条件变量唤醒)
  • 在系统中动态维护资源依赖关系
    • 优先级继承是它的特例
    • 似乎更困难了……
  • 避免高/低优先级的任务争抢资源
    • 对潜在的优先级反转进行预警 (lockdep)
    • TX-based: 冲突的 TX 发生时,总是低优先级的 abort

由于在现代操作系统中进程 / 线程之间的资源依赖(如互斥锁等)过于复杂,Linux选择躺平。

实际情况下的一些问题

多处理器调度:多用户、多任务

还没完:我们的 CPU 里有多个共享内存的处理器啊!

  • 不能简单地每个处理器上执行 CFS
    • 出现 “一核出力,七核围观”
  • 也不能简单地一个全局 CFS 维护队列
    • 在处理器之间迁移会导致 L1 cache/TLB 全都白给
      • 迁移?可能过一会儿还得移回来
      • 不迁移?造成处理器的浪费

注意L1、L2缓存是每个CPU独立的,L3缓存共享的。

实际情况(1)

  • A 要跑一个任务,因为要调用一个库,只能单线程跑
  • B 跑并行的任务,创建 1000 个线程跑
    • CFS 会发生什么?
    • 提示: CFS 公平地在线程之间共享 CPU

更糟糕的是,优先级解决不了这个问题……

  • B 不能随便提高自己进程的优先级
    • “An unprivileged user can only increase the nice value and such changes are irreversible…”

Linux Control Groups (cgroups)

可以去读一下手册,man 7 cgroups

顺便提一下:cgroups也是docker实现所依赖的机制之一。

实际情况(2):Big.LITTLE/能耗

处理器的计算能力不同

  • 均分 workloads 会让小核上的任务饥饿
  • Linux Kernel EAS (Energy Aware Scheduler)
  • 移动平台的考虑 (能耗 vs. 速度 vs. 吞吐量)。频率越低,IPC (Instruction per Cycle) 和能效都更好

如骁龙888中:Snapdragon 888

  • 1X Prime Cortex-X1 (2.84GHz)
  • 3X Performance Cortex-A78 (2.4GHz)
  • 4X Efficiency Cortex-A55 (1.8GHz)
    在这里插入图片描述

实际情况(3):Non-Uniform Memory Access

线程看起来在 “共享内存”,但共享内存却是 memory hierarchy 造就的假象,roducer/consumer 位于同一个/不同 module 性能差距可能很大。
在这里插入图片描述

实际情况(4):CPU Hot-plug

指CPU的热插拔的情况,就像弹出U盘一样弹出CPU。

总结

本次课内容与目标

  • 理解常见的处理器的调度策略
  • 了解调度是操作系统领域重要的、未解决的问题

Takeaway messages

  • 机制和策略分离
  • “做系统” 的矛盾
    • 必须把问题简单化,才能做 “第一个” 东西出来
    • 但随着需求的增长,复杂系统会失控
  • 所有复杂系统的调度都是拙劣的 Workaround

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机组装过程英文版,计算机组装与维护试题及答案(国外英文资料).doc

计算机组装与维护试题及答案(国外英文资料)计算机组装与维护试题及答案(国外英文资料)(1) choiceIn the following equipment, the input device is (b)A. b. b. c. c. c. d. d.In Windows 98, the combination of CTRL Alt Del is (c)A. cold start b. heat start c. interr…

make命令及makefile

make命令及makefile 转自&#xff1a;https://www.ruanyifeng.com/blog/2015/02/make.html Make 命令教程 作者&#xff1a; 阮一峰 日期&#xff1a; 2015年2月20日 代码变成可执行文件&#xff0c;叫做编译&#xff08;compile&#xff09;&#xff1b;先编译这个&#…

局域网中计算机网络密码查看,Win10怎么查看电脑上已知的wifi网络密码

方法一&#xff1a;网络和共享中心查询1、在Windows 10桌面最左下角的【Windwos开始图标上右键】&#xff0c;在弹出的菜单中点击打开【网络连接】&#xff0c;如下图所示。2、在打开的网络连接设置中&#xff0c;双击已经连接的【无线网络名称】&#xff0c;在弹出的【WLAN状态…

(2021) 22 [持久化] 1-Bit的存储

(2021) 22 [持久化] 1-Bit的存储 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p22 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/12.slides#/ 背景 回顾 操作系统是什么&#xff1f;一组对象 一组API…

计算机一级试题论述,计算机一级考试理论题及答案要点

计算机一级考试IT1必做题[1]. 著名的计算机科学家尼.沃思提出了________。A&#xff0e;数据结构&#xff0b;算法程序B&#xff0e;存储控制结构C&#xff0e;信息熵D&#xff0e;控制论[2]. 下面有关扫描仪的叙述中&#xff0c;错误的是________。A&#xff0e;分辨率是扫描仪…

(2021) 23 [持久化] I/O设备与驱动

(2021) 23 [持久化] I/O设备与驱动 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p23 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/13.slides#/ 背景 很多人 (你们的同学们、家长们) 都有一个认识&…

计算机考研计划时间,2019计算机考研时间安排:复习时间规划

随着考研竞争越来越激烈&#xff0c;考研复习一定要做好规划&#xff0c;每天的时间要做好管理&#xff0c;分清轻重缓急&#xff0c;这样才能高效率复习。管理的5个原则&#xff0c;大家抓紧调整个人复习。小编还为大家精心准备了计算机考研复习资料还有计算机考研报考指导助力…

(2021) 24 [持久化] 文件系统API

(2021) 24 [持久化] 文件系统API 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p24 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/14.slides#/ 背景 回顾 硬件视角&#xff1a;持久化的“层层抽象” 物…

计算机辅助应用的缩写有什么,计算机辅助设计的英文缩写是什么

2008-10-09是什么的英文缩写?BOBO......头型里的.....其实"BOBO头"准确的名称应该是BOB头。它是娃娃头的一种。BOB头有许多变种&#xff0c;标准的类似于樱桃小丸子的发型&#xff0c;专业发型师把它称为BOB。最初是由巴黎发型师Antoine 在1909年发明&#xff0c;但…

Linux中的硬链接和软链接

Linux中的硬链接和软链接 节选自南大蒋炎岩老师操作系统网络课程笔记&#xff1a;(2021) 24 [持久化] 文件系统API 硬&#xff08;hard&#xff09;链接 UNIX文件指针 在UNIX中&#xff0c;文件和目录完全不是同一个概念&#xff0c;虽然我们平时看着它们仿佛并列地躺在某个…

计算机win10开机音乐,大师传授win10系统电脑开机总是自动播放音乐的方案

今天小编分享一下win10系统电脑开机总是自动播放音乐问题的处理方法&#xff0c;在操作win10电脑的过程中常常不知道怎么去解决win10系统电脑开机总是自动播放音乐的问题&#xff0c;有什么好的方法去处理win10系统电脑开机总是自动播放音乐呢&#xff1f;今天本站小编教您怎么…

Linux中的tty、pts、pty等概念辨析

Linux中的tty、pts、pty等概念辨析 基本概念 tty、pty、pts、ptmx tty&#xff08;终端设备的统称&#xff09;&#xff1a;tty一词源于Teletypes&#xff0c;或teletypewriters&#xff0c;原来指的是电传打字机&#xff0c;是通过串行线用打印机键盘通过阅读和发送信息的东…

(2021) 25 [持久化] 文件系统实现:FAT和UNIX文件系统

(2021) 25 [持久化] 文件系统实现&#xff1a;FAT和UNIX文件系统 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p25 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/15.slides#/ 背景 回顾 应用眼中的文件…

用计算机模拟地球诞生,计算机模拟显示早期金星或像地球一样宜居

虽然金星的绰号是“地球的邪恶孪生化身”&#xff0c;但它和地球上的一切都不同&#xff1a;灼热、干燥并且被有毒烟云笼罩。不过&#xff0c;就在10亿或20亿年前&#xff0c;这两个任性的“兄弟”可能更加相似。最新的计算机模拟显示&#xff0c;早期的金星看上去和地球很像&a…

海南大学计算机原理,海南大学微机原理课件 第一章 计算机基础知识

第一章计算机基础知识数 制1.1一.计算机使用的数制及其相互转换 十进制(D)、二进制(B)、八进制(O)和十六进制(H). 数制中用少量数码按次序排列成数位&#xff0c;并按由低到高的进位方式进行计 数。(数码的个数称为基数) D---0,1,2,3,4,5,6,7,8,9------数码十个(基为10)-------…

Linux中的二进制可执行文件和脚本可执行文件及Shebang

Linux中的二进制可执行文件和脚本可执行文件及Shebang 二进制可执行文件 我们知道&#xff0c;一个C程序经过预处理、编译、汇编、链接就会得到一个二进制可执行文件&#xff0c;这种文件在Linux中叫做ELF文件。比如我们有一个C源代码hello.c&#xff1a; #include <stdi…

pe能用的固态硬盘测试软件,通用pe工具箱教你如何让硬盘4K对齐

昨天小编教大家如何查看电脑硬盘是否4K对齐&#xff0c;马上就有读者告诉小编&#xff0c;查看电脑硬盘是否4K对齐的方法学到了&#xff0c;那么我使用的固态硬盘如何做到4K对齐呢&#xff1f;问的好啊&#xff01;现如今用户对电脑硬件的要求是越来越高。很多用户都不仅仅满足…

[2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration论文简析

[2020-ECCV] PIPAL: a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration 论文简析 论文&#xff1a;https://arxiv.org/abs/2007.12142 代码及数据集&#xff1a;https://github.com/HaomingCai/PIPAL-dataset 概述 本文认为随着图像重建&…

郫都区计算机老师周俊老师,教师节,带你走进郫都教师背后的故事

点击“郫都教育”关注我们&#xff1a;)有这样一群人“师者&#xff0c;所以传道&#xff0c;授业&#xff0c;解惑也”是他们奉献一生的事业“随风潜入夜&#xff0c;润物细无声”是他们培养英才的责任“春蚕到死丝方尽&#xff0c;蜡炬成灰泪始干”是他们追求终生的信仰值此第…

(2021) 18 [代码讲解] 可执行文件

(2021) 18 [代码讲解] 可执行文件 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p18 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/C8.slides#/ 背景 回顾 程序 状态机 状态机执行 状态机上的路径状…