第1章 操作系统概述 1
1.1操作系统的基本概念 1
1.1.1操作系统的功能 1
1.1.2操作系统的分类 2
1.1.3操作系统的发展趋势 2
1.1.4操作系统的基本概念 3
1.2嵌入式系统和嵌入式操作系统 6
1.2.1嵌入式系统概述 6
1.2.2嵌入式操作系统概述 7
1.2.3嵌入式操作系统的特点 7
1.2.4嵌入式操作系统与通用操作系统的区别 8
1.2.5嵌入式实时操作系统 9
1.3 Hello China操作系统概述 10
1.3.1 Hello China的主要功能 10
1.3.2 Hello China的架构 12
1.3.3 Hello China的主要特点 12
1.3.4 Hello China的应用场景 14
1.3.5面向对象思想的模拟 17
1.4实例:一个简单的IP路由器的实现 20
1.4.1概述 20
1.4.2路由器的硬件结构 21
1.4.3路由器的软件功能 22
1.4.4各任务的实现 23
第2章Hello China的安装和使用 26
2.1 Hello China安装概述 26
2.2 Hello China在Virtual PC上的安装 26
2.2.1 Hello China在Virtual PC上的启动过程 26
2.2.2 Hello China在Virtual PC上的安装过程 28
2.3 Hello China在物理计算机上的安装 31
2.3.1安装注意事项 31
2.3.2在Windows XP操作系统上的安装 31
2.3.3在Windows 7操作系统上的安装 32
2.4 Hello China的卸载 34
2.5 Hello China的使用 34
2.6内核的编译和生成 35
2.6.1 Hello China内核的开发环境 35
2.6.2开发环境的搭建 36
2.6.3内核映像文件的生成 38
第3章Hello China的引导和初始化 41
3.1概述 41
3.2个人计算机的引导和初始化 41
3.2.1 BIOS的引导工作 41
3.2.2硬盘逻辑结构及引导扇区的功能 42
3.2.3操作系统引导扇区的功能和局限 44
3.2.4预置引导法概述 45
3.2.5预置引导法在FAT32文件系统上的实现 46
3.2.6预置引导法在NTFS文件系统上的实现 47
3.2.7通过软盘启动Hello China 49
3.3嵌入式操作系统的引导和初始化 53
3.3.1典型嵌入式系统内存映射布局 53
3.3.2嵌入式系统的启动概述 54
3.3.3常见嵌入式操作系统的加载方式 55
3.3.4嵌入式系统软件的写入 59
3.4 Hello China的初始化 61
3.4.1实地址模式下的初始化 61
3.4.2保护模式下的初始化 65
3.4.3操作系统核心功能的初始化 68
3.4.4 Hello China的内存布局图 73
3.5 Hello China的字符shell 74
3.5.1字符shell的概述和启动 74
3.5.2 shell的消息处理过程 75
3.5.3实例:增加一个字符shell内置命令 78
3.6从保护模式切换回实模式 79
3.6.1模式切换概述 79
3.6.2实模式服务调用举例 81
3.6.3保护模式切换到实模式 82
3.7引导和初始化总结 87
第4章Hello China线程的实现 88
4.1进程、线程和任务 88
4.2 Hello China的线程实现 89
4.2.1核心线程管理对象 89
4.2.2线程的状态及其切换 95
4.2.3核心线程对象 96
4.2.4线程的上下文 99
4.2.5线程的创建和初始化 101
4.2.6线程的结束 107
4.2.7线程的消息队列 108
4.2.8线程的切换——中断上下文 111
4.2.9线程的切换——系统调用上下文 118
4.2.10上下文保存和切换的底层函数 123
4.2.11线程的睡眠与唤醒 128
4.2.12核心线程实现总结 128
第5章 内存管理机制 129
5.1内存管理机制概述 129
5.2 IA32 CPU内存管理机制 129
5.2.1 IA32 CPU内存管理机制概述 129
5.2.2几个重要的概念 131
5.2.3分段机制的应用 132
5.2.4分页机制的应用 135
5.3 Power PC CPU的内存管理机制 142
5.4 Hello China内存管理模型 144
5.4.1 Hello China的内存管理模型 144
5.4.2 Hello China的内存布局 146
5.4.3核心内存池的管理 147
5.4.4页框管理对象 149
5.4.5页面索引对象 154
5.4.6虚拟内存管理对象 158
5.5线程本地堆 175
5.5.1线程本地堆概述 175
5.5.2堆的功能需求定义 175
5.5.3堆的实现概要 177
5.5.4堆的详细实现 181
5.6 Hello China的内存管理机制总结 193
第6章 系统调用的原理与实现 194
6.1系统调用概述 194
6.2 Hello China系统调用的实现 197
6.3系统调用时的参数传递 199
第7章 线程互斥和同步机制的实现 204
7.1互斥和同步概述 204
7.2关键区段概述 204
7.3关键区段产生的原因 205
7.3.1多个线程之间的竞争 205
7.3.2中断服务程序与线程之间的竞争 206
7.3.3多个CPU之间的竞争 206
7.4单CPU下关键区段的实现 207
7.5多CPU下关键区段的实现 209
7.5.1多CPU环境下的实现方式 209
7.5.2 Hello China的未来实现 210
7.6 Power PC下关键区段的实现 211
7.6.1 Power PC提供的互斥访问机制 211
7.6.2多CPU环境下的互斥机制 212
7.7关键区段使用注意事项 213
7.8 Semaphore概述 214
7.9 Semaphore对象的定义 214
7.10 Semaphore对象的实现 215
7.10.1 Initialize和Uninitialize的实现 216
7.10.2 WaitForThisObject的实现 217
7.10.3 WaitForThisObjectEx的实现 218
7.10.4 ReleaseSemaphore的实现 222
7.11互斥和同步机制总结 223
第8章 中断和定时处理机制的实现 224
8.1中断和异常概述 224
8.2硬件相关部分处理 225
8.2.1 IA32中断处理过程 225
8.2.2 IDT初始化 226
8.3硬件无关部分处理 230
8.3.1系统对象和中断对象 230
8.3.2中断调度过程 232
8.3.3缺省中断处理函数 233
8.4对外服务接口 234
8.5系统时钟中断 235
8.5.1系统时钟中断概述 235
8.5.2系统时钟中断的初始化 236
8.5.3系统时钟中断处理函数的主要工作 237
8.5.4时钟中断周期对系统实时性的影响分析 239
8.6注意事项 241
8.7定时器概述 241
8.7.1 SetTimer函数的调用 242
8.7.2 CancelTimer函数的调用 243
8.7.3 ResetTimer函数的调用 243
8.8设置定时器操作 243
8.9定时器超时处理 245
8.10定时器取消处理 247
8.11定时器复位 248
8.12定时器注意事项 249
第9章 系统总线和设备管理 251
9.1系统总线概述 251
9.1.1系统总线 251
9.1.2总线管理模型 251
9.1.3设备标识符 255
9.2系统资源管理 255
9.2.1资源描述对象 256
9.2.2 IO端口资源管理 257
9.3驱动程序接口 257
9.3.1 GetResource 258
9.3.2 GetDevice 258
9.3.3 CheckPortRegion 258
9.3.4 ReservePortRegion 258
9.3.5 ReleasePortRegion 259
9.3.6 AppendDevice 259
9.3.7 DeleteDevice 259
9.4 PCI总线驱动程序概述 260
9.4.1 PCI总线概述 260
9.4.2 PCI设备的配置空间 260
9.4.3配置空间关键字段的说明 262
9.4.4 PCI配置空间的读取与设置 269
9.5 PCI总线驱动程序的实现 270
9.5.1探测PCI总线是否存在 270
9.5.2对普通PCI设备进行枚举 271
9.5.3配置PCI桥接设备 277
第10章设备驱动程序管理 279
10.1设备管理框架 279
10.1.1概述 279
10.1.2通用的操作系统设备管理机制 281
10.1.3设备管理框架的实现 285
10.1.4 IO管理器 287
10.2设备驱动程序 295
10.2.1设备请求控制块 295
10.2.2设备驱动程序对象的定义 298
10.2.3设备驱动程序的物理结构 299
10.2.4设备驱动程序的功能函数 300
10.2.5 DriverEntry的实现 302
10.2.6 UnloadEntry的实现 303
10.3设备对象 304
10.3.1设备对象的定义 304
10.3.2设备对象的命名 304
10.3.3设备对象的类型 305
10.3.4设备对象的设备扩展 306
10.3.5设备的打开操作 306
10.3.6设备命名策略 307
10.4设备的中断管理 308
10.5设备管理实例:串口通信程序 309
10.5.1串行通信接口概述 309
10.5.2串行通信编程方式 312
10.6设备驱动程序管理总结 334
第11章 图形用户界面 336
11.1图形用户界面概述 336
11.2符合VESA标准的显示卡操作方法 337
11.2.1判断显示卡是否支持VBE标准 338
11.2.2切换到0x118工作模式 339
11.3对显示设备的封装——Video对象 342
11.3.1 GUI模块的分层架构 342
11.3.2 Video对象 343
11.3.3通用绘制层简介 349
11.4鼠标指针的实现 351
11.5窗口消息传递机制概述 354
11.6 Hello China的窗口机制 355
11.6.1父窗口要完全包含子窗口 355
11.6.2二层窗口剪切域 357
11.6.3二层窗口剪切域的实现 358
11.7 Hello China窗口机制的实现 360
11.7.1窗口管理器与窗口对象 361
11.7.2窗口函数与窗口消息 363
11.7.3窗口归属线程 366
11.7.4窗口树 366
11.8用户输入处理和消息传递 369
11.8.1用户输入和消息传递过程简介 369
11.8.2设备驱动程序的工作 372
11.8.3设备输入管理器 379
11.8.4 GUI原始输入线程——GUIRAWIT 383
11.8.5消息循环的本质 388
11.8.6应用线程之间的窗口消息交互 392
11.9 Hello China的GUI Shell 393
11.9.1 GUI Shell概述 393
11.9.2 GUI Shell的启动和初始化 395
11.9.3加载一个应用程序 399
11.9.4 GUI Shell的退出 400
11.10 GUI模块的开发方法 402
第12章 文件系统及其实现 404
12.1文件系统概述 404
12.1.1文件系统的基本概念 404
12.1.2文件系统的操作——fs程序 405
12.2 FAT32文件系统原理 406
12.2.1 FAT32卷的布局 406
12.2.2引导扇区和BPB 407
12.2.3文件分配表 408
12.2.4文件目录项 410
12.2.5文件的查找 411
12.3 Hello China文件系统的实现 412
12.3.1 IO管理器 412
12.3.2文件系统的加载和初始化 418
12.3.3存储设备驱动程序 419
12.3.4分区的识别和安装 426
12.3.5文件的打开操作 431
12.3.6文件的读取操作 434
12.4文件系统API的使用举例 437
12.5文件系统实现总结 439
第13章 应用程序开发方法 441
13.1概述 441
13.2 HCX文件的结构和加载过程 441
13.2.1 HCX文件的格式 441
13.2.2 HCX文件的生成方式 442
13.2.3 HCX文件的加载和执行 443
13.3 Hello China应用程序开发步骤 444
13.3.1建立应用程序开发环境 444
13.3.2启动VS 2008,建立一个新的应用程序 444
13.3.3在应用程序中添加源代码 444
13.3.4对新建的应用程序进行设置 446
13.3.5编写应用程序代码,并进行编译链接 448
13.3.6对生成的DLL进行处理,形成HCX文件 450
13.3.7运行生成的HCX文件 451
13.4应用程序开发总结 452
第14章 开发辅助工具 453
14.1开发辅助工具概述 453
14.2 PE文件格式简介 453
14.2.1 MS-DOS头和DOS stub程序 454
14.2.2 PE文件头 455
14.2.3 PE文件中的节 458
14.3开发辅助工具的实现和使用 460
14.3.1 process工具 460
14.3.2 hcxbuild工具 461
14.3.3 append工具 463
14.3.4 vfmaker工具 464
14.3.5 dumpf32和mkntfsbs工具 464
附录 465
附录A关于操作系统开发的两篇博文 465
A.1操作系统开发过程应遵循的一些原则 465
A.2对操作系统开发的一些相关问题的思考 469
附录B源代码组织结构说明 473
附录C内核开发环境的搭建 476
C.1概述 476
C.2 Microsoft Visual C++的设置 479
C.3操作系统开发中常用的MicrosoVisual C++特性 479
C.4搭建操作系统开发环境 480
C.5操作系统核心模块开发示例 482
参考文献 485