(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,一经查实,立即删除!

相关文章

局域网中计算机网络密码查看,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…

(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#/ 背景 很多人 (你们的同学们、家长们) 都有一个认识&…

(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)-------…

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#/ 背景 回顾 程序 状态机 状态机执行 状态机上的路径状…

如何学习计算机思维,刘康平:为什么我们每个人都应该学习计算思维?

不久前&#xff0c;微软亚洲研究院资深学术合作经理刘康平应邀在“造就”做了演讲&#xff0c;以下为演讲节选&#xff0c;由“造就”授权转载。刘康平 微软亚洲研究院资深学术合作经理以中国象棋为例&#xff0c;在这样一个棋局上&#xff0c;你怎么用最快的方式找到「将」和「…

链接与加载-NJU-JYY

(2021) 19 [代码讲解] 从零实现动态加载 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1N741177F5?p15 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/C9.slides#/ 背景 回顾&#xff1a; ELF可执行文件 只要能完成…

饥荒联机自建服务器有什么用,联机版饥荒使用专用服务器的好处 | 手游网游页游攻略大全...

发布时间&#xff1a;2016-02-15存档保存位置是?很多玩家对此并不是很了解,不过别着急哟,下面99单机小编就为你带来高玩分享的相关技巧心得攻略,希望大家能喜欢. 联机版的存档与单机版是不同的,由于联机版饥荒建 ...标签&#xff1a;游戏资讯 攻略秘籍发布时间&#xff1a;201…

(2021) 26 [持久化] 持久数据的可靠性:RAID和journaling

(2021) 26 [持久化] 持久数据的可靠性&#xff1a;RAID和journaling 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p26 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/16.slides#/ 背景 回顾 文件系统 …

win10无法检验服务器出示的ssl证书,win10系统网站启用ssL安全证书的操作方法

win10系统网站启用ssL安全证书的操作方法?很多win10用户在使用电脑的时候&#xff0c;会发现win10系统网站启用ssL安全证书的的现象&#xff0c;根据小编的调查并不是所有的朋友都知道win10系统网站启用ssL安全证书的的问题怎么解决&#xff0c;不会的朋友也不用担心&#xff…