cs_notes

MIT 6.S081: Operating System Engineering

https://www.youtube.com/playlist?list=PLTsf9UeqkReZHXWY9yJvTwLJWYYPcKEqK

1. 6 S081 Fall 2020 Lecture 1 Introduction and Examples

1.1 课程简介

介绍6.S081课程,主要内容包括深度学习、神经网络和机器学习应用。课程目标是理解深度学习技术并能够应用。

1.2 深度学习是什么

深度学习是机器学习的一个子领域,基于人工神经网络。深度学习架构可以具有多个隐藏层,这些隐藏层位于输入和输出层之间。在大数据和计算能力的支持下,深度学习在计算机视觉、语音识别、自然语言处理等多个领域取得了最先进的结果。

1.3 深度学习的四个关键方面

1.4 例子:使用卷积神经网络进行图像识别

卷积神经网络是一种前馈神经网络。它广泛应用于计算机视觉和图像识别中。主要特点包括局部感受野、权值共享和空间下采样。卷积神经网络利用图像中的强空间相关性,强制相邻层之间的神经元具有局部连接模式。

1.5 本课程概述

本课程将介绍深度学习的基础知识,如线性代数、概率与信息论。同时将介绍卷积神经网络、递归神经网络、Transformer和图神经网络等深度学习模型。课程还将讨论深度学习方法,如优化、正则化、初始化和归一化。深度学习应用方面包括计算机视觉、自然语言处理、强化学习和图表示学习等。

2. 6 S081 Fall 2020 Lecture 3 OS Organization and System Calls

2.1 操作系统组织

操作系统协调和管理系统资源,允许多个程序同时运行。它作为用户和硬件之间的中介。主要组成有进程管理、内存管理、文件系统管理和I/O设备管理。

2.2 进程

进程是系统中的基本工作单位。它包括可执行代码、数据、资源和状态。每个进程都有自己的虚拟内存空间。操作系统通过进程调度sharing CPU内核供不同进程使用。上下文切换可以快速地在进程之间切换。

2.3 系统调用

系统调用是进程请求操作系统内核服务的方式。常见的系统调用有打开/关闭文件、内存分配/释放、进程创建/终止、退出程序等。用户进程与内核空间的接口是通过系统调用接口。系统调用允许对操作系统服务进行控制访问。

2.4 示例:使用open系统调用打开文件

要打开一个文件,进程需要发出open()系统调用,提供文件名。内核检查权限,如果允许则返回文件描述符。描述符索引进程的文件表来访问文件。后续读写操作使用此描述符识别正确的文件。

2.5 x86体系结构下的系统调用机制

在x86架构下,系统调用使用软中断。系统调用号和参数放在CPU寄存器中。INT指令触发内核态中断处理程序,使用内核权限运行相应的系统调用功能。

3. 6 S081 Lecture 4 Page Tables

3.1 内存管理和虚拟地址空间

内存管理允许一个进程具有连续的私有虚拟地址空间,尽管其数据实际上可能以不连续的方式存储在物理内存中。它将虚拟地址映射到物理内存中的物理地址。

3.2 通过页表进行地址转换

虚拟地址通过页表转换为物理地址。页表条目将固定大小的虚拟地址块(称为页面)映射到物理框架。现代系统使用双层页表,页目录基寄存器指向页目录,页目录再指向个别页表。

3.3 页表条目字段

页表条目包含:现示位表示有效转换、读/写/用户权限、引用和脏位用于页替换,以及物理页面号。一些位允许组合或分离页面。

3.4 TLB缓存最近转换

为了加速地址转换,翻译后备缓冲器(TLB)缓存最近的页表条目。它使用虚拟页面号作为索引快速找到物理框架。TLB缺失导致慢速的页表遍历内存。

3.5 示例:转换虚拟地址

在TLB缺失时,虚拟页面号作为索引进入页目录。页表基址用于定位物理内存中的页表。框架字段提供物理框架,与页偏置相结合得到最终物理地址。

4. 6 S081 Fall 2020 Lecture 5 RISC V Calling Convention and Stack Frames

4.1 RISC-V体系结构概览

RISC-V是一种开放标准指令集体系结构,基于简化指令集计算机(RISC)原则。它支持32位和64位变体,允许定制扩展。

4.2 RISC-V调用约定

调用约定指定函数如何接收参数和返回值。在RISC-V中:

4.3 栈帧组织

栈帧在函数调用期间保存局部变量、参数、返回地址。它包含:

4.4 函数调用示例

调用者推入参数,保存寄存器,设置栈帧。被调函数从寄存器/栈中复制参数至局部变量。返回前,被调函数从栈中恢复寄存器,返回到调用者。

4.5 栈帧的优点

栈帧为函数提供独立内存空间。它允许嵌套调用,按需分配变量,在返回时恢复寄存器/状态。调用者清除被调函数帧实现重入。

5. 6 S081 Fall 2020 Lecture 6 Isolation & System Call Entry Exit

5.1 操作系统中的隔离

隔离对操作系统的安全性、稳定性和可靠性很重要。它允许保护系统资源,防止进程互相影响。

5.2 CPU保护环

CPU保护环提供等级化的特权级别。环0最高特权用于内核操作。环3最低特权用于用户进程。系统调用入口和出口时环的转换确保用户代码在环3下运行。

5.3 系统调用入口的环转换

在系统调用入口时,用户代码通过软中断触发进入内核模式下的环0。返回通过中断返回指令从环0进入环3。这种环变换强制执行特权级转换,隔离内核空间。

5.4 open系统调用示例步骤

1) 用户进程加载参数并发出中断指令
2) CPU分配环0,切换至内核堆栈 3) 内核搜索索引节点表,检查权限 4) 返回文件描述符并切换回用户堆栈/模式 5) 进程通过描述符恢复访问文件

5.5 隔离和环特权带来的好处

严格隔离保护内核免受用户空间错误影响。环特权防止用户进程直接访问硬件或规避系统调用接口,从而提高安全性和可靠性。

6. 6 S081 Fall 2020 Lecture 7 Q&A for Labs

6.1 实验环境配置

回答学生关于实验环境配置的问题,主要涉及RISC-V虚拟机或QEMU仿真环境的设置。

6.2 系统调用原理

解释了系统调用的基本原理,包括触发软中断进入内核模式,参数通过寄存器或栈传递,返回值通过寄存器返回给用户态等过程。

6.3 虚拟内存与地址转换

详细阐述了虚拟地址变换为物理地址的实现机制,如页表组织结构、页面大小、TLB缓存等概念。说明在模拟器下页表的设置。

6.4 操作系统组件

总结了操作系统主要组成,如进程管理需要进程队列和调度算法;内存管理需要分页机制;文件系统需要索引结构管理文件等。

6.5 进程同步

解释了如信号量、Mutex等进程同步原语的应用场景。特别强调在并发操作共享资源时需要同步机制来避免竞争条件问题。

6.6 实验技巧

提供一些实验开发的技巧,如使用print输出调试信息、单步调试追踪代码执行等方法。提醒理解代码运行原理比照搬代码更重要。

7. 6 S081 Fall 2020 Lecture 8 Page Faults

7.1 页错误概述

当虚拟地址无法在页表中找到对应的物理页面时,称为页错误。这通常导致系统调用内核重新分配物理内存。

7.2 页错误原因

页错误可能由以下原因导致:访问不存在的页面;页面权限不匹配;非法地址访问。

7.3 页错误处理流程

  1. CPU检测到页错误并切换到内核模式;
  2. 内核检查页错误类型;
  3. 通过分配新页面或改变映射解决冲突;
  4. 内核更新页表状态并恢复用户程序。

7.4 页面置换算法

在内存空间不足时,通过页面置换算法选择一页进行替换。常用算法有LRU和FIFO。页面可标记为脏页需要写回磁盘。

7.5 コピー外写抑制

为避免频繁写回,可采用写合并策略。写入同一地址的多个页面只写回一次。缩短用户程序响应时间。

7.6 好处

页错误机制实现命令地址空间与物理内存分离,支持虚拟内存。通过页面技术有效利用内存,支持大于实际内存大小的巨大地址空间。

8. 6 S081 Fall 2020 Lecture 9 Interrupts

8.1 剖客事件概述

中断是处理 CPU 异常或外设中断的机制。它使CPU暂时放弃当前任务,转而执行中断服务程序。

8.2 中断触发方式

软中断由软件通过指令触发,用于系统调用。硬中断由外围设备发出信号触发,如时钟断或I/O完成。

8.3 中断处理流程

  1. CPU接收中断请求并挂起当前任务;
  2. 根据中断向量表获取中断服务子程序地址;
  3. 执行中断服务子程序以处理事件;
  4. 中断服务子程序完成后返回原任务执行。

8.4 中断门限

通过中断门限优先级确保高优先级中断可以打断低优先级中断的服务。操作系统核心部分设置最高优先级。

8.5 中断例子

时钟中断用于驱动操作系统时钟,间隔一定周期产生中断。I/O设备中断通知完成传输,驱动程序处理数据传输。

8.6 好处

中断机制实现高响应能力,及时服务事件。支持可抢占式多任务处理,提高系统通过活能力。

9. 6 S081 Fall 2020 Lecture 10 Multiprocessors and Locks

9.1 多处理器系统

多处理器系统包含多个CPU,共享内存。通过任务分解到多个处理器上提高运行效率。

9.2 多处理器中的同步

多处理器下任务可并行执行,但共享资源需要同步。例如多个CPU同时访问缓存必须同步,否则会出现不一致状态。

9.3 锁机制

锁用于保护临界区内的共享资源不被并发访问。进程获得锁才能进入临界区,其它 processes 等待。释放锁后其它进程才能进入。

9.4 锁类型

普通锁、互斥锁、读写锁。读写锁允许多个读进程同时进入临界区,但只有一个写进程进入。

9.5 死锁

多个进程因为约制条件而形成环形依赖等待资源的情况,称为死锁。如进程A等待B,B等待C,C等待A形成循环依赖无法 alloc 资源。

9.6 避免死锁策略

如资源请求顺序、资源分配唯一、不泄漏资源等可以减少死锁风险。检测算法确定现有状态下是否存在潜在环形依赖。

10. 6 S081 Fall 2020 Lecture 11 Thread Switching

10.1 线程概念

线程是操作系统能够进行任务和资源调度的最小单位,它被包含在进程内。

10.2 线程上下文切换

线程切换需要保存当前线程状态,恢复另一线程状态。主要状态包括程序计数器、栈指针、寄存器值等。

10.3 线程控制块

每个线程对应一个线程控制块,记录其ID、状态、优先级、资源使用情况等属性。操作系统根据TCB实现线程调度。

10.4 线程调度算法

如时间片轮转调度、优先级调度。目的是利用多线程并发实现更高系统吞吐能力。

10.5 用户态与内核态切换开销

用户态与内核态切换需要保护环转换,降低了切换效率。内核设计目的是降低这一开销。

10.6 优化细节

  1. 在中断门限以上的线程不进行上下文切换;
  2. 使用快速调用堆栈减少切换内容;
  3. 加锁优化减少切换频率。

11. 6 S081 Fall 2020 Lecture 13 Sleep & Wakeup

11.1 休眠与唤醒

当进程等待特定事件(如I/O完成)时,可以主动进入休眠状态暂停执行。对号召进程进行唤醒恢复运行。

11.2 进程状态

运行状态、就绪状态、休眠状态之间的转换。运行进程可能进入就绪或者休眠状态。

11.3 睡眠队列

存储进入休眠状态的进程,按需求类型进行分类管理。如睡眠I/O事件、消息队列等类型队列。

11.4 唤醒机制

当触发事件完成,对应队列头进程上移到就绪队列准备运行。操作系统通过事件处理唤醒。

11.5 唤醒选择

若有多个进程等待同一事件,需要选择唤醒调度算法,如先入先出。

11.6 睡眠锁定

睡眠进程释放所占资源如内存、文件,防止资源死锁。唤醒时重申申请资源恢复运行环境。

11.7 使用优点

休眠机制实现非阻塞I/O模型,提高系统吞吐。避免忙等待浪费CPU。

12. 6 S081 Fall 2020 Lecture 14 File Systems

12.1 文件系统概述

文件系统管理存储设备,提供文件组织和访问接口。它实现文件与磁盘块之间的映射关系。

12.2 文件系统结构

包括磁盘结构布局、超级块信息、文件索引结构(i-node)、数据区等组成部分。

12.3 磁盘分区与卷

将磁盘物理分区为一个或多个逻辑卷,每个卷运行独立文件系统管理和访问。

12.4 i-node

存储基本文件属性和数据块引用。直接通过i-节点号访问文件,实现文件与数据的解耦。

12.5 目录结构

以树形方式组织文件名与i-node映射关系。通过路径名导航访问文件。

12.6 文件操作系统调用

opendir/closedir、readdir获取目录项;open/close、read/write访问文件内容;stat获取文件属性等。

12.7 磁盘缓存

通过缓存机制减轻磁盘访问开销,提高性能。支持缓存一致性策略。

13. 6 S081 Fall 2020 Lecture 15 Crash Recovery

13.1 服务器故障情景

主机、磁盘故障会导致文件系统状态损坏,消息丢失等问题。

13.2 日志记录

文件系统更新操作采用日志记录技术顺序记录到日志中。

13.3 日志回放

系统恢复后,依次回放日志中操作重建一致状态。

13.4 双日志技术

将重要日志拷贝到备日志,提高恢复成功率。

13.5 日志检查点

定期将文件系统状态快照写入日志,减少回放时间。

13.6 事务日志

相对独立的修改作为一个事务,原子提交保持数据完整性。

13.7 基于日志的恢复

依次回放日志中事务,在崩溃点前将文件系统重建为一致状态。

13.8 缓解策略效果

通过日志技术提高系统可用性和数据安全性。

14. 6 S081 Fall 2020 Lecture 16 File System Performance and Fast Crash Recovery

14.1 文件系统性能目标

高吞吐量、低延迟、高可用性。

14.2 修改日志同步策略

完全同步效率低但数据安全,非同步高效率但风险大。异步策略兼顾性能和数据安全。

14.3 回写缓冲

将修改缓存在内存中定期回写磁盘,减少小文件随机写开销。

14.4 页缓存

利用系统缓存实现读操作直接从内存获取,避免磁盘访问提高读性能。

14.5 预读技术

预测下个读取位置提前读入缓存中提高连续读取效率。

14.6 快速文件系统检查

跳过正常部分仅检查异常区域加快检查速度。

14.7 分层存储

将频繁数据存储在高速设备中,降低磁盘访问频率优化性能。

14.8 日志地址模式

直接在日志中记录修改页号实现快速日志回放。

15. 6 S081 Lecture 17 Virtual Memory for Applications

15.1虚拟内存概念

将内存视为一致地址空间,通过分页机制实现对物理内存的虚拟映射。

15.2地址翻译

应用程序使用虚拟地址,操作系统通过页表将虚地址翻译为相应物理地址。

15.3页面置换

如果引用的页面超出物理内存容量,需使用页面置换算法选择一页进行替换。

15.4页面保护

通过页面访问权限来区分只读和读写等属性,保护关键页面不被非法修改。

15.5高速缓存

利用缓存加速并减少页面置换数量,如TLB和高速缓存都起到加速作用。

15.6匿名页面

未指向固定存储位置的虚拟页面,在首次访问时由操作系统动态分配物理页。

15.7好处

虚拟内存使程序无感知地使用比物理内存更大的虚拟存储空间,并续高效利用内存资源。

16. 6 S081 Lecture 18 OS Organization

16.1 操作系统层次结构

内核空间和用户空间,内核中管理模块与内核服务模块构成结构。

16.2 内核组成

进程管理、内存管理、设备管理、文件系统管理模块构成操作系统核心功能结构。

16.3 内核模式与用户模式

内核在最高优先级内核模式下运行,用户进程在非特权用户模式下运行。

16.4 系统调用

通过软中断从用户模式进入内核模式,实现进程与内核之间的接口。

16.5 硬件抽象层

对硬件进行模块化抽象,实现设备独立操作系统设计。

16.6 抢占式多任务

支持同时多个进程或线程运行,基于抢占方式实现任务调度和频繁切换。

16.7 通信与同步

进程间通信机制包括共享内存、消息传递、信号等实现进程间数据交互。

16.8 良好模块化

基于面向对象思想对操作系统功能进行封装,提升可维护性和可扩展性。

17. 6 S081 Fall 2020 Lecture 19 Virtual Machines

17.1 虚拟机概念

虚拟机(VM)是一种模拟真实计算机系统的软件环境,包含操作系统和应用程序。

17.2 虚拟机监视器

也称作 hypervisor,负责管理和调度多个虚拟机,抽象real 硬件资源。

17.3 虚拟机管理软件

如VMware ESXi、Hyper-V、KVM管理多个虚拟机启动、运行状态等。

17.4 虚拟机特性

运行在虚拟机上作为完整系统,同时利用容器技术实现轻量级化部署。

17.5 虚拟化技术

包括硬件虚拟化和操作系统虚拟化两种主流技术用于实现VM运行。

17.6 好处

实现应用程序移植性,虚拟资源隔离提高安全性,通过物理服务器资源虚拟化实现弹性伸缩。

17.7 使用场景

测试环境、体验环境、DevOps持续交付、云计算服务等领域广泛应用虚拟机技术。

17.8 发展趋势

容器虚拟化以及服务器无状态化方向发展,实现更轻便的部署与管理效率。

18. 6 S081 Fall 2020 Lecture 20 Kernels and High Level Languages (HLL)

18.1 内核目标

管理硬件资源,提供标准接口服务其他系统组件运行。

18.2 操作系统内核

负责内存管理,进程/线程管理,设备驱动,文件系统,网络栈等核心功能。

18.3 高级语言优势

开发效率高,类型安全,内存管理等语言级支持。

18.4 系统调用

暴露内核功能给用户程序,统一接口实现隔离。

18.5 中间件

操作系统内核之上提供标准服务,接口上层应用与操作系统的交互。

18.6 微内核设计

仅实现必要的功能,其他服务移至用户空间运行的服务器模式实现。

18.7 性能考量因素的取舍

内核服从原则与功能实用性之间的平衡。

18.8 未来趋势

内核驱动服务器化与容器虚拟化技术的融合。

19. 6 S081 Fall 2020 Lecture 21 Networking

19.1 计算机网络基础

网络设备、拓扑结构、通信协议、网络层次结构等。

19.2 TCP/IP协议族

主流标准通信模型,包括IP、TCP、UDP等不同层次协议。

19.3 物理层与链路层

以以太网公共载体、用户数据报协议为主的物理传输。

19.4 网络层

以IP为代表,支持设备地址和定位,实现报文的交换转发。

19.5 传输层

TCP面向连接提供流式可靠传输,UDP无连接简便传输服务。

19.6 套接字

以IP地址和端口号作为网络编程的统一接口。

19.7 网络编程模型

BIO、NIO、AIO模型用于不同场景下的网络通信框架。

19.8 OSI七层参考模型

规范分层标准,对TCP/IP进行了很好的扩展。

20. 6 S081 Fall 2020 Lecture 22 Meltdown

20.1 Meltdown攻击原理

脏数据在缓存中保留时间过长,攻击者可以利用检测时间差获知内存内容。

20.2 建立在CPU优化技术基础上

如指令管道化、非同步执行等使得不同逻辑核心的命令交织执行。

20.3 攻击难点

准确探测时间差并对内存内容进行压缩编码还原。

20.4 影响

大多数系统资源对攻击开放,包含操作系统内核在内的私密数据泄露隐患。

20.5 缓解策略

软件补丁切断CPU优化功能,硬件改进清除缓存或访问控制隔离不同进程。

20.6 Spectre攻击

基于预测执行漏洞,通过训练分支预测器获取信息。缓解较为困难。

20.7 解决方向

系统与硬件联合防护,减少依赖特权功能提高安全性。

21. 6 S081 Fall 2020 Lecture 23 RCU

21.1 共享内存需要同步问题

多个线程同时访问共享数据结构需要加锁带来性能损失。

21.2 读-写锁优化同步

读未给予独占,但写操作需要排它锁定。

21.3 RCU原理

通过引入额外的同步变量实现 readers 的异步更新,读不需加锁也不阻塞。

21.4 基本流程

  1. 更新 prepare 阶段标记需要更新的节点
  2. 更新完成后等待 RCU 计数器减为 0
  3. 回收被标记节点

21.5 适用场景

对共享数据进行主要为追加的工作场景,比如日志、队列等。

21.6 RCU优势

支持并发高并且避免锁带来的性能开销。

21.7 限制

更新更加复杂,必须保证读端循环等待回收完成。

21.8 内核应用

以树式代替链表优化内核同步。