第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物理內存初始化(PI)119
5.1.1早期布局119
5.1.2物理頁幀的初始化120
5.1.3kalloc.c和mmu.h122
5.2頁幀的分配與回收(PR)126
5.3內核空間126
5.3.1內核頁表(KI)127
5.3.2內核頁表切換(KR)129
5.3.3vm.c131
5.4進程用戶空間149
5.4.1用戶空間映像(UI)150
5.4.2分配與回收(UR)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