Notes

xv6: system initialization

在boot流程结束,控制流进入main函数的时候,只有唯一的Bootstrap Processor(BSP)在工作,使用entrypgdir作为分页表,可以操作的物理地址空间是[0, 4...

xv6: synchronization

xv6其实并不支持现代操作系统中的“多线程”。但由于kernel部分的地址空间是各个进程共享的,kernel本身还是需要处理进程之间同步的问题。运行在多处理器系统上,各个进程可能同时操作一个内存地址;即使在单处理器的情况下,在中断机制开启,允许切换进程时,也可能发生多个进程...

xv6: context switch

通常应用程序都运行在某个进程中,但kernel不同。kernel并不对应任何进程,它的工作是建立关于进程的抽象,创建并管理各个进程。kernel一个至关重要的功能是在实现进程之间切换。由kernel来调配各个应用程序的运行时间,可以防止程序过多(甚至是恶意)地占用系统资源。...

xv6: process

根据OSTEP的说法,操作系统最关键的3个要素是virtualization、concurrency和persistence。关于进程的抽象是第一个关键要素virtualization的核心,是第二个关键要素concurrency的基础。进程之间通过时间分片各自独立地占有处...

xv6: system calls

一种重要的中断机制是应用程序发起system call,要求kernel提供某些服务。xv6中各种涉及资源分配的操作,比如读写硬盘、申请新的内存空间等,都必须在kernel mode下进行,运行在user...

xv6: interrupts

顾名思义,中断是处理器暂停当前顺序的控制流,转而执行另外指令的操作。触发中断通常有两种方式:CPU在执行指令过程中发生异常(同步方式),或者接收到了外部硬件发来的信号(异步方式)。按照Intel的分类,同步中断称为exception,而异步中断称为interrupt。通常处...

xv6: address space

所谓“地址空间”是对于物理内存的一种抽象,它所描述的是一个应用程序所看到的系统内存分配状况。xv6的内存管理主要依靠分页的办法,通过分页表来为应用程序配置地址空间。每个进程各自维护一张独立的分页表,从而实现进程之间的内存隔离。进程内部则通过将地址空间切分user和kerne...

xv6: how kernel boots

通常当我们运行某个程序的时候,其实是kernel替我们在运行它,包括启动程序、维护它的状态,以及在结束后清理现场等。这当中的一个问题是,kernel本身作为一个(特殊的)程序是如何启动的?...

xv6: minimal assembly

和现代操作系统比起来,xv6基本只能算是个复古风格的玩具模型。它仿照unix version 6设计,不涉及现代操作系统中各种复杂的优化。但好处是简单明了,码工精美,十分适合拿来给我等(挑战linux kernel失败的)初级选手作入门教程。...