PYQ Blog

「想成为真正的工程师」

MIT 6.S081—虚拟机

Virtual Machines

Why Virtual Machine? 虚拟机可以认为是对于计算机的一种模拟,这种模拟足够能运行一个操作系统。虚拟机提供了额外的灵活性:将操作系统内核从之前的内核空间上移至宿主机的用户空间,并在操作系统内核之下增加新的一层来对接底层硬件。虚拟机实际上应用的非常非常广泛,并且它也有着很长的历史。虚拟机最早出现在1960年代,经过了一段时间的开发才变得非常流行且易用。我们为什么需要虚拟机呢?...

现代操作系统原理与实现-文件系统

File System in Real World

阅读《现代操作系统原理与实现》一书的笔记,也算是对xv6中文件系统一章的补充。 介绍 每个文件实质上是一个有名字的字符序列,序列的内容为文件数据,而序列长度、序列的修改时间等描述文件数据的属性、支撑文件功能的其他信息称为文件元数据。应用程序使用一组特定的接口对文件进行访问,如open、lseek、read、write和close等。 下面我们以 Linux上一个简化的网络文件下载流程为...

MIT 6.S081—文件系统

File System

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记,这一章内容是真的多 文件系统的目的是组织和存储数据。文件系统通常支持用户和应用程序之间的数据共享,以及持久性,以便在重新启动后数据仍然可用,文件系统是操作系统中除了shell以外最常见的用户接口。如下图所示,xv6文件系统实现分为七层: disk layer读取和写入virtio硬盘上的...

现代操作系统原理与实现-操作系统调度

Scheduling in Real World

阅读《现代操作系统原理与实现》一书的笔记。xv6中的调度-part_one和调度-part_two更多的讲的是进程/线程切换以及生命周期,这里的调度则偏向于现实世界中操作系统如何选择进程/线程进行切换的机制,或者说如何对进程/线程使用系统资源的分配使用机制。 介绍 调度中的一些概念: 优先级(priority) 时间片(time slice):每个请求一次可以占用多长时间的资...

现代操作系统原理与实现-进程与线程

Progress and Threads

阅读《现代操作系统原理与实现》一书的笔记。 陈海波老师的这本书写的很好,在学习xv6后想阅读一下这本书看看所谓的现代操作系统(Real World)相较于xv6这种教学操作系统的异同。 只是笔记和摘抄,不是系统全面的介绍相关知识(因为已经了解或者掌握很多了 Introduction 每个进程都对应一个运行中的程序。应用程序在运行时仿佛拥有了整个CPU,进程的管理、CPU资源的...

MIT 6.S081—调度(二)

scheduling Part Two

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 这部分会讨论coordination,xv6通过Sleep&Wakeup实现了coordination。 Coordination 当你在写一个线程的代码时,有些场景需要等待一些特定的事件,或者不同的线程之间需要交互。 假设我们有一个Pipe,并且我正在从Pipe中读数据。但...

MIT 6.S081—调度(一)

scheduling Part One

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 进程调度这部分看了好几天,懂了后很有成就感 任何操作系统都可能运行比CPU数量更多的进程,所以需要一个进程间分时共享CPU的方案。这种共享最好对用户进程透明。一种常见的方法是,通过将进程多路复用到硬件CPU上,使每个进程产生一种错觉,即它有自己的虚拟CPU。 Processes &...

MIT 6.S081—锁

Locking

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 在多处理器硬件和多线程环境下,多个指令流可能会交错执行,导致并发访问数据。为了保证数据的正确性,内核设计者需要使用并发控制技术来控制并发访问,而锁是一种广泛使用的并发控制技术。锁提供了互斥,确保一次只有一个CPU可以持有锁。如果程序员将每个共享数据项关联一个锁,并且代码在使用一个数据项时总是持有...

MIT 6.S081—中断和设备驱动

Interrupts and device drivers

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 驱动程序是操作系统中管理特定设备的代码:它配置硬件设备,告诉设备执行操作,处理由此产生的中断,并与可能正在等待设备输入/输出的进程进行交互。编写驱动可能很棘手,因为驱动程序与它管理的设备同时运行。此外,驱动程序必须理解设备的硬件接口,这可能很复杂,而且缺乏文档。 需要操作系统关注的设备通常可以...

MIT 6.S081—trap指令和系统调用

Traps and system calls

Introduction 此为MIT 6.S081课程和xv6-Books的学习笔记 有三种事件会导致中央处理器搁置普通指令的执行,并强制将控制权转移到处理该事件的特殊代码上: 系统调用:当用户程序执行ecall指令要求内核为其做些什么时 异常:(用户或内核)指令做了一些非法的事情,例如除以零或使用无效的虚拟地址 (page fault) 设备中断:一个设备,例如...