出版说明
前言
第1章 操作系统概述
1.1 操作系统的基本概念
1.1.1 操作系统的功能
1.1.2 操作系统的分类
1.1.3 操作系统的发展趋势
1.1.4 操作系统的基本概念
1.2 嵌入式系统和嵌入式操作系统
1.2.1 嵌入式系统概述
1.2.2 嵌入式操作系统概述
1.2.3 嵌入式操作系统的特点
1.2.4 嵌入式操作系统与通用操作系统的区别
1.2.5 嵌入式实时操作系统
1.3 Hello China操作系统概述
1.3.1 Hello China的主要功能
1.3.2 Hello China的架构
1.3.3 Hello China的主要特点
1.3.4 Hello China的应用场景
1.3.5 面向对象思想的模拟
1.4 实例:一个简单的IP路由器的实现
1.4.1 概述
1.4.2 路由器的硬件结构
1.4.3 路由器的软件功能
1.4.4 各任务的实现
第2章 Hello China的安装和使用
2.1 Hello China安装概述
2.2 Hello China在Virtual PC上的安装
2.2.1 Hello China在Virtual PC上的启动过程
2.2.2 Hello China在Virtual PC上的安装过程
2.3 Hello China在物理计算机上的安装
2.3.1 安装注意事项
2.3.2 在Windows XP操作系统上的安装
2.3.3 在Windows 7操作系统上的安装
2.4 Hello China的卸载
2.5 Hello China的使用
2.6 内核的编译和生成
2.6.1 Hello China内核的开发环境
2.6.2 开发环境的搭建
2.6.3 内核映像文件的生成
第3章 Hello China的引导和初始化
3.1 概述
3.2 个人计算机的引导和初始化
3.2.1 BIOS的引导工作
3.2.2 硬盘逻辑结构及引导扇区的功能
3.2.3 操作系统引导扇区的功能和局限
3.2.4 预置引导法概述
3.2.5 预置引导法在FAT32文件系统上的实现
3.2.6 预置引导法在NTFS文件系统上的实现
3.2.7 通过软盘启动Hello China
3.3 嵌入式操作系统的引导和初始化
3.3.1 典型嵌入式系统内存映射布局
3.3.2 嵌入式系统的启动概述
3.3.3 常见嵌入式操作系统的加载方式
3.3.4 嵌入式系统软件的写入
3.4 Hello China的初始化
3.4.1 实地址模式下的初始化
3.4.2 保护模式下的初始化
3.4.3 操作系统核心功能的初始化
3.4.4 Hello China的内存布局图
3.5 Hello China的字符shell
3.5.1 字符shell的概述和启动
3.5.2 shell的消息处理过程
3.5.3 实例:增加一个字符shell内置命令
3.6 从保护模式切换回实模式
3.6.1 模式切换概述
3.6.2 实模式服务调用举例
3.6.3 保护模式切换到实模式
3.7 引导和初始化总结
第4章 Hello China线程的实现
4.1 进程、线程和任务
4.2 Hello China的线程实现
4.2.1 核心线程管理对象
4.2.2 线程的状态及其切换
4.2.3 核心线程对象
4.2.4 线程的上下文
4.2.5 线程的创建和初始化
4.2.6 线程的结束
4.2.7 线程的消息队列
4.2.8 线程的切换-中断上下文
4.2.9 线程的切换-系统调用上下文
4.2.10 上下文保存和切换的底层函数
4.2.11 线程的睡眠与唤醒
4.2.12 核心线程实现总结
第5章 内存管理机制
5.1 内存管理机制概述
5.2 IA32 CPU内存管理机制
5.2.1 IA32 CPU内存管理机制概述
5.2.2 几个重要的概念
5.2.3 分段机制的应用
5.2.4 分页机制的应用
5.3 Power PC CPU的内存管理机制
5.4 Hello China内存管理模型
5.4.1 Hello China的内存管理模型
5.4.2 Hello China的内存布局
5.4.3 核心内存池的管理
5.4.4 页框管理对象
5.4.5 页面索引对象
5.4.6 虚拟内存管理对象
5.5 线程本地堆
5.5.1 线程本地堆概述
5.5.2 堆的功能需求定义
5.5.3 堆的实现概要
5.5.4 堆的详细实现
5.6 Hello China的内存管理机制总结
第6章 系统调用的原理与实现
6.1 系统调用概述
6.2 Hello China系统调用的实现
6.3 系统调用时的参数传递
第7章 线程互斥和同步机制的实现
7.1 互斥和同步概述
7.2 关键区段概述
7.3 关键区段产生的原因
7.3.1 多个线程之间的竞争
7.3.2 中断服务程序与线程之间的竞争
7.3.3 多个CPU之间的竞争
7.4 单CPU下关键区段的实现
7.5 多CPU下关键区段的实现
7.5.1 多CPU环境下的实现方式
7.5.2 Hello China的未来实现
7.6 Power PC下关键区段的实现
7.6.1 Power PC提供的互斥访问机制
7.6.2 多CPU环境下的互斥机制
7.7 关键区段使用注意事项
7.8 Semaphore概述
7.9 Semaphore对象的定义
7.10 Semaphore对象的实现
7.10.1 Initialize和Uninitialize的实现
7.10.2 WaitForThisObject的实现
7.10.3 WaitForThisObjectEx的实现
7.10.4 ReleaseSemaphore的实现
7.11 互斥和同步机制总结
第8章 中断和定时处理机制的实现
8.1 中断和异常概述
8.2 硬件相关部分处理
8.2.1 IA32中断处理过程
8.2.2 IDT初始化
8.3 硬件无关部分处理
8.3.1 系统对象和中断对象
8.3.2 中断调度过程
8.3.3 缺省中断处理函数
8.4 对外服务接口
8.5 系统时钟中断
8.5.1 系统时钟中断概述
8.5.2 系统时钟中断的初始化
8.5.3 系统时钟中断处理函数的主要工作
8.5.4 时钟中断周期对系统实时性的影响分析
8.6 注意事项
8.7 定时器概述
8.7.1 SetTimer函数的调用
8.7.2 CancelTimer函数的调用
8.7.3 ResetTimer函数的调用
8.8 设置定时器操作
8.9 定时器超时处理
8.10 定时器取消处理
8.11 定时器复位
8.12 定时器注意事项
第9章 系统总线和设备管理
9.1 系统总线概述
9.1.1 系统总线
9.1.2 总线管理模型
9.1.3 设备标识符
9.2 系统资源管理
9.2.1 资源描述对象
9.2.2 IO端口资源管理
9.3 驱动程序接口
9.3.1 GetResource
9.3.2 GetDevice
9.3.3 CheckPortRegion
9.3.4 ReservePortRegion
9.3.5 ReleasePortRegion
9.3.6 AppendDevice
9.3.7 DeleteDevice
9.4 PCI总线驱动程序概述
9.4.1 PCI总线概述
9.4.2 PCI设备的配置空间
9.4.3 配置空间关键字段的说明
9.4.4 PCI配置空间的读取与设置
9.5 PCI总线驱动程序的实现
9.5.1 探测PCI总线是否存在
9.5.2 对普通PCI设备进行枚举
9.5.3 配置PCI桥接设备
第10章 设备驱动程序管理
10.1 设备管理框架
10.1.1 概述
10.1.2 通用的操作系统设备管理机制
10.1.3 设备管理框架的实现
10.1.4 IO管理器
10.2 设备驱动程序
10.2.1 设备请求控制块
10.2.2 设备驱动程序对象的定义
10.2.3 设备驱动程序的物理结构
10.2.4 设备驱动程序的功能函数
10.2.5 DriverEntry的实现
10.2.6 UnloadEntry的实现
10.3 设备对象
10.3.1 设备对象的定义
10.3.2 设备对象的命名
10.3.3 设备对象的类型
10.3.4 设备对象的设备扩展
10.3.5 设备的打开操作
10.3.6 设备命名策略
10.4 设备的中断管理
10.5 设备管理实例:串口通信程序
10.5.1 串行通信接口概述
10.5.2 串行通信编程方式
10.6 设备驱动程序管理总结
第11章 图形用户界面
11.1 图形用户界面概述
11.2 符合VESA标准的显示卡操作方法
11.2.1 判断显示卡是否支持VBE标准
11.2.2 切换到0x118工作模式
11.3 对显示设备的封装-Video对象
11.3.1 GUI模块的分层架构
11.3.2 Video对象
11.3.3 通用绘制层简介
11.4 鼠标指针的实现
11.5 窗口消息传递机制概述
11.6 Hello China的窗口机制
11.6.1 父窗口要完全包含子窗口
11.6.2 二层窗口剪切域
11.6.3 二层窗口剪切域的实现
11.7 Hello China窗口机制的实现
11.7.1 窗口管理器与窗口对象
11.7.2 窗口函数与窗口消息
11.7.3 窗口归属线程
11.7.4 窗口树
11.8 用户输入处理和消息传递
11.8.1 用户输入和消息传递过程简介
11.8.2 设备驱动程序的工作
11.8.3 设备输入管理器
11.8.4 GUI原始输入线程-GUIRAWIT
11.8.5 消息循环的本质
11.8.6 应用线程之间的窗口消息交互
11.9 Hello China的GUI Shell
11.9.1 GUI Shell概述
11.9.2 GUI Shell的启动和初始化
11.9.3 加载一个应用程序
11.9.4 GUI Shell的退出
11.10 GUI模块的开发方法
第12章 文件系统及其实现
12.1 文件系统概述
12.1.1 文件系统的基本概念
12.1.2 文件系统的操作——fs程序
12.2 FAT32文件系统原理
12.2.1 FAT32卷的布局
12.2.2 引导扇区和BPB
12.2.3 文件分配表
12.2.4 文件目录项
12.2.5 文件的查找
12.3 Hello China文件系统的实现
12.3.1 IO管理器
12.3.2 文件系统的加载和初始化
12.3.3 存储设备驱动程序
12.3.4 分区的识别和安装
12.3.5 文件的打开操作
12.3.6 文件的读取操作
12.4 文件系统API的使用举例
12.5 文件系统实现总结
第13章 应用程序开发方法
13.1 概述
13.2 HCX文件的结构和加载过程
13.2.1 HCX文件的格式
13.2.2 HCX文件的生成方式
13.2.3 HCX文件的加载和执行
13.3 Hello China应用程序开发步骤
13.3.1 建立应用程序开发环境
13.3.2 启动VS 2008,建立一个新的应用程序
13.3.3 在应用程序中添加源代码
13.3.4 对新建的应用程序进行设置
13.3.5 编写应用程序代码,并进行编译链接
13.3.6 对生成的DLL进行处理,形成HCX文件
13.3.7 运行生成的HCX文件
13.4 应用程序开发总结
第14章 开发辅助工具
14.1 开发辅助工具概述
14.2 PE文件格式简介
14.2.1 MS-DOS头和DOS stub程序
14.2.2 PE文件头
14.2.3 PE文件中的节
14.3 开发辅助工具的实现和使用
14.3.1 process工具
14.3.2 hcxbuild工具
14.3.3 append工具
14.3.4 vfmaker工具
14.3.5 dumpf32和mkntfsbs工具
附录
附录A 关于操作系统开发的两篇博文
A.1 操作系统开发过程应遵循的一些原则
A.2 对操作系统开发的一些相关问题的思考
附录B 源代码组织结构说明
附录C 内核开发环境的搭建
C.1 概述
C.2 Microsoft Visual C++的设置
C.3 操作系统开发中常用的Microsoft Visual C++特性
C.4 搭建操作系统开发环境
C.5 操作系统核心模块开发示例
参考文献
展开