PYQ Blog

「想成为真正的工程师」

MIT 6.S081—Meltdown

Meltdown

Meltdown Meltdown这一节主要介绍了一篇利用CPU工作的隐藏细节实现操作系统内核攻击的论文,也就是Micro-Architectural Attack。但这种攻击可以被修复,似乎也已被完全修复,并且也只是“学院派”的尝试,当然它确实是能造成攻击成功的。 内核提供安全性的方法是隔离,用户程序不能读取内核的数据,用户程序也不能读取其他用户程序的数据。操作系统中用来实现隔离的具体...

MIT 6.S081—RCU

RCU

Spinlock 在xv6中我们通过spinlock(自旋锁)来解决多个进程对共享数据进行读写的一致性和正确性,当两个进程可能会相互影响时,spinlock会阻止并行运行,所以spinlock的直接效果就是降低性能。假如我们的数据主要是在被读取,相对来说很少被写入,这个时候spinlock的性能就会极其的低,因为即使只是两个读取数据的线程也只能一次执行一个线程。于是一种改进方法是使用一种新...

MIT 6.S081—Lab 3: page tables

page tables

Before you start coding, read Chapter 3 of the xv6 book, and related files: kern/memlayout.h, which captures the layout of memory. kern/vm.c, which contains most virtual memory (VM) code. k...

MIT 6.S081—高级编程语言实现操作系统的优劣势

The benefits and costs of writing a POSIX kernel in a high-level language

Benefits and costs of writing a POSIX kernel in C 现在很多操作系统都是用C实现的,除了熟悉的xv6外,一些更流行的运行在我们电脑和手机的操作系统:Windows、mac os、Linux、Android和iOS都是用C实现的。我们可能都问过应该用什么样的编程语言来实现操作系统内核?尤其时在发现操作系统中有Bug的时候,然后你会想,如果我使用...

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硬盘上的...