概述 课程介绍 文档翻译 book-riscv-rev1 第一章 操作系统接口 1.1 进程和内存 1.2 I/O和文件描述符 1.3 管道 1.4 文件系统 1.5 真实世界 1.6 练习 第二章 操作系统架构 2.1 抽象系统资源 2.2 用户态,核心态,以及系统调用 2.3 内核组织 2.4 代码:XV6架构篇 2.5 进程概述 2.6 代码:启动XV6和第一个进程 2.7 真实世界 2.8 练习 第三章 页表 3.1 页式硬件 3.2 内核地址空间 3.3 代码:创建一个地址空间 3.4 物理内存分配 3.5 代码:物理内存分配 3.6 进程地址空间 3.7 代码:sbrk 3.8 代码:exec 3.9 真实世界 3.10 练习 第四章 陷阱指令和系统调用 4.1 RISC-V陷入机制 4.2 从用户空间陷入 4.3 代码:调用系统调用 4.4 系统调用参数 4.5 从内核空间陷入 4.6 页面错误异常 4.7 真实世界 4.8 练习 第五章 中断和设备驱动 5.1 代码:控制台输入 5.2 代码:控制台输出 5.3 驱动中的并发 5.4 定时器中断 5.5 真实世界 5.6 练习 第六章 锁 6.1 竞态条件 6.2 代码:Locks 6.3 代码:使用锁 6.4 死锁和锁排序 6.5 锁和中断处理函数 6.6 指令和内存访问排序 6.7 睡眠锁 6.8 真实世界 6.9 练习 第七章 调度 7.1 多路复用 7.2 代码:上下文切换 7.3 代码:调度 7.4 代码:mycpu和myproc 7.5 sleep与wakeup 7.6 代码:sleep和wakeup 7.7 代码:Pipes 7.8 代码:wait, exit和kill 7.9 真实世界 7.10 练习 第八章 文件系统 8.1 概述 8.2 Buffer cache层 8.3 代码:Buffer cache 8.4 日志层 8.5 日志设计 8.6 代码:日志 8.7 代码:块分配器 8.8 索引结点层 8.9 代码:Inodes 8.10 代码: Inode包含内容 8.11 代码:目录层 8.12 代码:路径名 8.13 文件描述符层 8.14 代码:系统调用 8.15 真实世界 8.16 练习 Introduction [使用GNU Debugger](tranlate_books\Use GUN Debugger.md) [C Pointers, gdb](tranlate_books\C Pointers, gdb.md) [Calling Convention](tranlate_books\Calling Convention.md) 实验记录 版本控制 实验内容 Lab1: Xv6 and Unix utilities Lab2: system calls Lab3: page tables Lab4: traps Lab5: xv6 lazy page allocation Lab6: Copy-on-Write Fork for xv6 Lab7: Multithreading Lab8: locks Lab9: file system 实验解析 Lab4: traps Lab5: xv6 lazy page allocation Lab6: Copy-on-Write Fork for xv6 Lab7: Multithreading Lab8: locks Lab9: file system