PYQ Blog

「想成为真正的工程师」

MIT 6.S081—网络

Networking

虽然本科专业是网络工程,但由于学校文科式的教学,对网络的了解仅限于八股文。Robert这节课讲的很好,甚至可以说让我豁然开朗,海大垃圾的本科教育:( Introduction 相近的主机连接在同一个局域网中。例如有一个以太网设备,可能是交换机或者单纯的线缆,然后有一些主机(笔记本、服务器或者路由器)连接到了这个以太网设备。每个主机上会有不同的应用程序,或许其中一个主机有网络浏览器,另一个...

Git Commit规范

Git Commit Specification

一直想规范一下自己的git commit message,之前都是随便写的,太业余了(,并且代码的维护成本也很大(虽然还没咋维护过,也没有回滚过。不过,具体的公司应该会对代码和提交都有相应的规范。还是写一下来规范personal projet。 参考Angular规范和如何规范你的Git commit?—阿里云开发者 Git Commit Message格式 1 <type&...

MIT 6.S081—微内核

Micro Kernel

Monolithic kernel Monolithic kernel是一种操作系统设计范例,将操作系统的核心功能集中在一个单一的内核中。在Monolithic kernel中,操作系统的所有功能,包括进程管理、内存管理、设备驱动程序、文件系统和网络协议栈等,都实现为内核的一部分。Monolithic kernel的设计简单直接,因为所有的功能都在一个内核空间中运行,它们之间可以直接访问和...

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 &...