第1章 操作系统开发介绍 1
1.1 操作系统原理 1
1.1.1 进程管理 1
1.1.2 内存管理 2
1.1.3 文件管理 3
1.1.4 I/O设备管理 3
1.1.5 用户接口 4
1.2 实验平台简介 5
1.2.1 物理实验平台 5
1.2.2 计算机硬件体系结构 7
1.2.3 QS模拟器 9
1.2.4 平台指令集 9
1.3 开发环境搭建 10
1.3.1 交叉编译工具链 10
1.3.2 QS模拟器使用 15
1.3.3 其他工具 25
小结 26
第2章 系统设计与初始化 27
2.1 Lcore整体设计 27
2.1.1 进程管理 27
2.1.2 内存管理 29
2.1.3 文件系统 31
2.1.4 I/O设备 32
2.1.5 用户接口 32
2.2 建立初始化框架 33
2.2.1 init_kernel函数 33
2.2.2 中断异常入口 35
2.2.3 内核页表初始化 38
2.2.4 其他初始化 44
小结 45
第3章 VGA显示功能 46
3.1 VGA初始化 46
3.1.1 实验平台VGA介绍 46
3.1.2 实现VGA初始化 48
3.2 实现put_char函数 53
3.2.1 scroll_screen函数 54
3.2.2 put_char_ex函数 57
3.2.3 put_char函数 57
3.3 实现printk函数 60
3.3.1 可变参数函数 61
3.3.2 相关子函数的实现 64
3.3.3 printk函数的实现 67
小结 70
第4章 处理时钟中断 71
4.1 硬件的外部中断 71
4.1.1 机制剖析 71
4.1.2 相关硬件接口 72
4.2 中断处理注册机制 74
4.2.1 相关数据结构 74
4.2.2 中断处理入口 80
4.2.3 中断处理注册 86
4.3 时钟中断实现 88
4.3.1 时钟中断注册 88
4.3.2 显示信息规划 89
4.3.3 系统时间显示 92
小结 97
第5章 键盘输入功能 98
5.1 键盘中断处理 98
5.1.1 相关硬件接口 98
5.1.2 实现键盘中断处理 99
5.2 键盘扫描码解析 102
5.2.1 键盘扫描码 102
5.2.2 解析扫描码 103
小结 108
第6章 物理内存管理 109
6.1 内存管理策略 109
6.2 Bootmem管理实现 111
6.2.1 Bootmem数据结构 111
6.2.2 Bootmem初始化 112
6.3 Buddy系统实现 126
6.3.1 Buddy系统数据结构 126
6.3.2 Buddy系统初始化 127
6.3.3 Buddy系统内存释放 129
6.3.4 Buddy系统内存分配 131
6.4 Slub系统实现 134
6.4.1 Slub系统数据结构 134
6.4.2 Slub系统初始化 135
6.4.3 Slub系统分配内存 139
6.4.4 Slub系统释放内存 144
小结 146
第7章 实现进程管理 147
7.1 进程管理初始化 147
7.1.1 进程数据结构 147
7.1.2 进程初始化 151
7.2 进程创建 168
7.3 页异常处理 174
7.3.1 缺页异常处理 174
7.3.2 写保护异常 176
7.4 进程调度 180
7.4.1 调度初始化 180
7.4.2 执行调度 181
小结 185
第8章 实现文件系统 186
8.1 SD卡驱动程序实现 186
8.1.1 SD卡通信方式简介 186
8.1.2 实现SPI通信 187
8.1.3 指令处理 187
8.1.4 实现SD卡初始化 189
8.1.5 实现SD卡读操作 192
8.1.6 实现SD卡写操作 196
8.2 文件系统实现 202
8.2.1 文件控制块的实现 202
8.2.2 缓存机制的实现 203
8.2.3 FAT表 210
8.2.4 文件系统初始化 212
8.2.5 打开文件 216
8.2.6 关闭文件 222
8.2.7 文件读取 224
8.2.8 文件写入 227
8.2.9 创建文件 234
小结 238
第9章 添加系统调用 239
9.1 系统调用框架 239
9.1.1 系统调用入口 239
9.1.2 系统调用初始化 242
9.1.3 系统调用定义 243
9.2 添加系统调用 244
9.2.1 进程管理相关 244
9.2.2 输入显示相关 246
9.2.3 文件系统相关 248
小结 250
第10章 实现简单shell 251
10.1 实现用户态库 251
10.2 实现shell程序 254
10.2.1 解析程序 255
10.2.2 内建命令 258
10.3 其他基本程序 261
10.3.1 ls命令 261
10.3.2 ps命令 262
10.3.3 kill命令 263
小结 264
结束语 265
附录A 实验平台手册 267
A.1 实验平台详细介绍 267
A.1.1 Sword实验平台 267
A.1.2 物理地址分配 270
A.1.3 CPO寄存器组 270
A.1.4 中断处理 273
A.1.5 MMU功能 274
A.1.6 外设接口 275
A.2 实验平台指令集 284
A.2.1 算术运算指令 284
A.2.2 逻辑运算指令 285
A.2.3 移位指令 285
A.2.4 读写指令 285
A.2.5 跳转指令 286
A.2.6 自陷指令 287
A.2.7 CP指令 287
A.3 实验平台寄存器 287
A.3.1 通用寄存器 287
A.3.2 CPO寄存器 288