图书目录

目录

第1章xv6安装使用1

1.1运行于QEMU的xv61

1.1.1CentOS 7+QEMU+xv61

1.1.2Ubuntu 18+QEMU+xv62

1.2调试观察4

1.2.1xv6 shell命令4

1.2.2QEMU+gdb调试6

1.2.3多核调试10

1.3本章小结12

练习13

第2章入门实验14

2.1新增可执行程序15

2.1.1磁盘映像的生成15

2.1.2添加简单程序16

2.2新增系统调用18

2.2.1系统调用示例19

2.2.2添加系统调用20

2.2.3验证新系统调用22

2.3观察调度过程23

2.4本章小结25

练习25

第3章xv6概述26

3.1xv6代码总览26

3.2xv6二进制代码与镜像27

3.2.1启动扇区27

3.2.2内核代码31

3.2.3磁盘镜像40

3.2.4xv6的Makefile43

3.3xv6内核简介51

3.3.1进程管理52

3.3.2内存管理56

3.3.3文件系统57

3.3.4设备59

3.4本章小结59

练习59

操作系统原型——xv6分析与实验目录

第4章系统启动60

4.1全局性信息60

4.1.1xv6系统常数(param.h)60

4.1.2x86.h硬件相关代码61

4.2bootblock70

4.2.116位/32位模式71

4.2.2bootasm.S72

4.2.3bootmain.c83

4.2.4ELF文件格式87

4.3kernel启动89

4.3.1启动分页90

4.3.2main()95

4.4多核启动100

4.4.1检测多核信息100

4.4.2激活其他处理器107

4.5通用代码111

4.6QEMU仿真命令114

4.7本章小结115

练习116

第5章内存管理118

5.1物理内存初始化(PI)119

5.1.1早期布局119

5.1.2物理页帧的初始化120

5.1.3kalloc.c和mmu.h122

5.2页帧的分配与回收(PR)126

5.3内核空间126

5.3.1内核页表(KI)127

5.3.2内核页表切换(KR)129

5.3.3vm.c131

5.4进程用户空间149

5.4.1用户空间映像(UI)150

5.4.2分配与回收(UR)152

5.4.3用户进程空间切换153

5.4.4内核空间与用户空间交换数据153

5.5本章小结154

练习155

第6章进程管理与同步156

6.1进程管理156

6.1.1调度状态与执行现场156

6.1.2进程控制175

6.1.3执行流的切换184

6.2内核同步——自旋锁190

6.2.1spinlock.h190

6.2.2spinlock.c191

6.3用户应用程序195

6.3.1运行程序195

6.3.2第一个用户进程init200

6.3.3sh.c203

6.3.4xv6测试(usertests.c)218

6.3.5用户进程的ELF220

6.3.6ULIB库221

6.4本章小结230

练习231

第7章中断/异常/系统调用232

7.1中断及其处理233

7.1.1中断整体描述233

7.2系统调用245

7.2.1系统调用框架246

7.2.2数据传递254

7.2.3用户态接口255

7.3本章小结259

练习260

第8章中级实验261

8.1调度实验261

8.1.1调整时间片长度261

8.1.2优先级调度264

8.2实现信号量273

8.2.1共享变量及其访问273

8.2.2信号量数据结构275

8.2.3信号量操作的系统调用276

8.2.4用户测试代码280

8.3实现进程间通信的实验282

8.3.1共享内存的实现282

8.3.2消息队列的实现299

8.4内存管理实验317

8.4.1实现myfree()和myalloc()系统调用317

8.4.2代码与数据隔离324

8.5本章小结331

练习331

第9章xv6fs文件管理333

9.1xv6fs文件系统333

9.1.1xv6fs概述334

9.2文件系统操作344

9.2.1盘块操作345

9.2.2索引节点操作356

9.2.3目录操作372

9.2.4文件378

9.2.5系统调用386

9.3非核心功能401

9.3.1日志层401

9.3.2特殊文件411

9.4本章小结415

练习416

第10章设备管理417

10.1终端设备417

10.1.1console/tty/terminal/shell417

10.1.2终端及CGA显示器418

10.1.3键盘430

10.1.4串口439

10.2其他硬件442

10.2.1定时器442

10.2.2IDE磁盘/块设备443

10.3中断控制器449

10.3.1APIC450

10.3.2IOAPIC451

10.3.3LAPIC457

10.4本章小结468

练习468

第11章高级实验469

11.1实现xv6内核线程469

11.1.1修改PCB469

11.1.2sys_clone和sys_join系统调用470

11.1.3线程库的实现474

11.1.4测试样例476

11.2文件系统实验478

11.2.1文件权限478

11.2.2恢复被删除的文件484

11.2.3磁盘裸设备的读写488

11.3虚拟内存494

11.3.1虚存交换机制495

11.3.2缺页异常498

11.3.3功能验证501

11.4用户终端实验504

11.4.1设计思路505

11.4.2代码实现506

11.4.3功能验证518

11.5本章小结523

练习523

第12章x86架构概述524

12.1x86的ISA架构524

12.1.1寄存器524

12.1.2内存组织530

12.2x86 MMU地址部件531

12.2.1模式及地址空间531

12.2.2实地址模式533

12.2.3保护模式535

12.2.4分页机制543

12.3中断/异常/系统调用547

12.3.1中断机制548

12.3.2中断描述符表IDT548

12.3.3TSS和内核栈554

12.4本章小结560