Lab 1: Booting a PC
这个实验室分为三个部分。第一部分的重点是熟悉x86汇编语言、QEMU x86模拟器和PC的开机引导过程。第二部分将检查我们的6.828内核的引导加载程序,它位于lab树的引导目录中。最后,第三部分深入研究了6.828内核本身的初始模板,名为JOS,位于kernel目录中。
主要是PC的启动部分的内容:其中包含BIOS、Boot Loader之间所作的事情,还有就是对于内核的了解
Lab 2: Memory Management
在这个实验中,你将为你的操作系统编写内存管理代码。内存管理有两个组件。
第一个组件是内核的物理内存分配器,使内核可以分配内存并稍后释放内存。分配器的工作单位是4096字节(2的12次方——4KB),称为页。你的任务是维护数据结构,记录哪些物理内存页是空闲的,哪些物理内存页是已分配的,以及有多少进程正在共享每个已分配的内存页。大家还将编写分配和释放内存页的例程。
内存管理的第二个部分是虚拟内存,它将内核和用户软件使用的虚拟地址映射到物理内存中的地址。x86硬件的内存管理单元(MMU)在指令使用内存时执行映射,查阅一组页表。用户可以修改JOS,根据我们提供的规范建立MMU的页表。
分页内存管理 物理页管理 按页分配内存 页目录和页表的管理
Lab 3: User Environments
在本实验中,您将实现运行受保护的用户态环境(即“进程”)所需的基本内核设施。您将增强JOS内核,以设置数据结构来跟踪用户环境、创建单个用户环境、将程序映像加载到环境中并启动它运行。您还将使JOS内核能够处理用户环境发出的任何系统调用,并处理它引起的任何其他异常。
注意:在本实验中,环境和进程这两个术语是可以互换的——它们都指的是允许你运行程序的抽象。我们引入“环境”这个术语,而不是传统的“进程”,是为了强调JOS环境和UNIX进程提供了不同的接口,并且没有提供相同的语义。
第A部分:用户环境和异常处理
环境状态
分配环境数组
创建和运行环境
处理中断和异常
保护控制转移的基础知识
异常和中断的类型
嵌套的异常和中断
设置IDT
B部分:缺页异常、断点异常和系统调用
处理页错误
断点异常
系统调用
用户模式启动
缺页异常和内存保护
Lab 4: Preemptive Multitasking
实验4:先发制人的多任务处理
在本实验中,您将在多个同时活跃的用户模式环境中实现抢占式多任务处理。
在A部分中,我们将为JOS添加多处理器支持,实现轮询调度,并添加基本的环境管理系统调用(创建和销毁环境的调用,以及分配/映射内存的调用)。
在B部分中,我们将实现一个类似unix的fork(),它允许用户态环境创建自身的副本。
最后,在C部分,你将添加对进程间通信(IPC)的支持,允许不同的用户模式环境显式地相互通信和同步。您还将添加对硬件时钟中断和抢占的支持。
Part A: Multiprocessor Support and Cooperative Multitasking
多处理器支持
应用处理器引导程序
Per-CPU状态和初始化
Locking
循环调度
系统调用用于创建环境
Part B: Copy-on-Write Fork
B部分:写时复制Fork
用户级页错误处理
设置页面异常处理程序
用户环境中的正常和异常堆栈
调用用户页面错误处理程序
用户模式页面错误入口点
测试
实现写时复制Fork
Part C: Preemptive Multitasking and Inter-Process communication (IPC)
C部分:抢占式多任务和进程间通信(IPC)
时钟中断和抢占
中断纪律
处理时钟中断
进程间通信(IPC)
JOS中的IPC
发送和接收消息
传输页
实现IPC