非常感谢大家提供的宝贵意见和建议,文章的目录(V0.3版)已经通过审核啦,但是,在这个操作系统没开发完之前,这个目录应该还会有内容遗漏或者当时考虑不周到的地方,所以,这也不是最终的目录,我会根据开发进度及时更新调整的,同时也欢迎大家多提宝贵意见。
在此,感谢一直关注这本书的读者们,谢谢~!

第一部分 操作系统相关知识介绍及环境搭建

  1. 操作系统整体概述
    1.1 什么是操作系统
    1.2 操作系统结构组成
    1.3 写操作系统需要的知识
    1.4 本书操作系统简介
  2. 环境搭建及基础知识介绍
    2.1 虚拟机及开发系统平台介绍
    2.1.1 VMware安装
    2.1.2 搭建CentOS系统平台
    2.1.3 Bochs虚拟机安装与使用简介
    2.2 汇编语言
    2.2.1 AT&T汇编与Intel汇编
    2.2.2 NASM汇编
    2.2.3 汇编调用C函数
    2.3 C语言
    2.3.1 GNU C内嵌汇编语言
    2.3.2 GNU C对标准C语言的扩展

    第二部分 初级篇

  3. BootLoader引导启动程序
    3.1 Boot启动程序
    3.1.1 Boot原理
    3.1.2 写一个Boot程序
    3.1.3 创建虚拟软盘镜像文件
    3.1.4 在Bochs上运行我们的Boot程序
    3.1.5 加载Loader到内存
    3.1.6 从Boot跳转到Loader程序
    3.2 Loader引导加载程序
    3.2.1 Loader原理
    3.2.2 写一个Loader程序
    3.2.3 从实模式进入保护模式再到IA-32E模式
    3.2.3.1 从实模式进入保护模式
    3.2.3.2 从保护模式进入IA-32E模式
    3.2.4 从Loader跳转到内核程序

  4. 内核层
    4.1 内核执行头
    4.1.1 什么是内核执行头
    4.1.2 写一个执行头程序
    4.1.3 从执行头进入到内核主程序
    4.1.4 在屏幕上显示色彩
    4.1.5 在屏幕上输出log
    4.1.5.1 ASCII字符库
    4.1.5.2 printk函数的实现
    4.2 系统异常
    4.2.1 错误(fault)、异常(trap)、终止(abort)的区别
    4.2.2 捕获系统异常
    4.3 内存页表分配
    4.3.1 获得物理内存信息
    4.3.2 计算可用内存页数
    4.3.3 分配可用物理页
    4.4 外部中断处理
    4.4.1 设置中断控制器
    4.4.2 触发一个中断
    4.5 键盘驱动
    4.5.1 简述键盘功能
    4.5.2 实现键盘中断捕获函数
    4.6 进程管理
    4.6.1 简述进程管理模块
    4.6.2 创建进程管理结构体
    4.6.3 创建Init进程
    4.6.4 跳转到用户层
  5. 用户层
    5.1 写一个系统API接口
    5.2 写Hello World!程序

    第三部分 高级篇

  6. 处理器体系结构
    6.1 实模式
    6.1.1 实模式概述
    6.1.2 实模式寻址方式
    6.1.3 实模式下的中断向量表
    6.2 保护模式
    6.2.1 保护模式概述
    6.2.2 保护模式下的段机制
    6.2.3 保护模式下的页机制
    6.2.4 保护模式下的门描述符
    6.3 IA32-E模式
    6.3.1 IA32-E模式概述
    6.3.2 IA-32E模式下的段机制
    6.3.3 IA-32E模式下的页机制
    6.3.4 IA-32E模式下的门描述符

  7. 完善BootLoader功能
    7.1 实模式下的寻址瓶颈
    7.1.1 错综复杂的1MB物理内存空间
    7.1.2 突破1MB物理内存瓶颈
    7.1.3 实模式下的4G寻址
    7.2 细说各个模式间的切换
    7.3 BIOS中断
    7.3.1 Int 10h 显示文字
    7.3.2 Int 13h 读软盘扇区
    7.3.3 Int 15h E820获得物理内存信息
    7.4 划分各个硬件数据的存储空间
    7.5 U盘启动
    7.5.1 USB-ZIP、USB-HDD、USB-FDD区别简介
    7.5.2 把BootLoader改为U盘启动
    7.6 细说VBE(VESA BIOS EXTENSION)功能的实现
    7.6.1 VBE规范概述
    7.6.2 获得硬件平台的VBE相关信息
    7.6.3 设置显示模式

  8. 内核主程序
    8.1 内核主程序功能概述
    8.2 编译脚本介绍
    8.3 链接脚本介绍
    8.4 操作系统空间划分
    8.5 获得处理器基本信息及扩展信息

  9. 内存管理
    9.1 统计物理内存信息
    9.2 内存管理单元结构及相关宏定义
    9.3 分配可用物理页功能重构
    9.4 slab缓冲池技术
    9.5 基于slab的系统内存管理功能
    9.6 页表重新初始化

  10. 高级中断处理
    10.1 8259A简介
    10.2 Local APIC高级可编程中断控制器
    10.2.1 Local APIC概述
    10.2.2 操作寄存器的相关方法
    10.2.3 Local APIC寄存器列表
    10.3 I/O APIC 外设高级中断控制器
    10.3.1 I/O APIC 概述
    10.3.2 I/O APIC 寄存器列表
    10.3.3 如何使能I/O APIC
    10.3.3.1 查看芯片组
    10.3.3.2 RCBA寄存器——Root Complex Base Address Register
    10.3.3.3 OIC寄存器——Other Interrupt Control Register
    10.3.3.4 使能中断投递
    10.4 中断初始化
    10.5 Linux中断处理思想概述
    10.6 实现我们的中断处理功能
    10.6.1 实现中断上部处理功能
    10.6.2 实现中断下部处理功能

  11. 驱动程序
    11.1 键盘和鼠标驱动程序
    11.1.1 键盘原理
    11.1.2 鼠标原理
    11.1.3 I8042控制器
    11.1.4 完善键盘驱动
    11.1.4.1 键盘初始化函数
    11.1.4.2 键盘中断处理函数
    11.1.4.3 键盘扫描码解析函数
    11.1.5 实现鼠标驱动
    11.1.5.1 鼠标初始化函数
    11.1.5.2 鼠标中断处理函数
    11.1.5.3 鼠标协议解析函数
    11.2 硬盘驱动程序
    11.2.1 硬盘结构及原理
    11.2.1.1 硬盘原理概述
    11.2.1.2 IDE硬盘与SATA硬盘的区别
    11.2.1.3 硬盘接口功能列表简介
    11.2.2 硬盘操作初探
    11.2.2.1 调整BIOS的硬盘操作模式
    11.2.2.2 实现一个读硬盘ROM信息的程序
    11.2.2.3 实现一个清除硬盘扇区数据的程序
    11.2.3 完善硬盘驱动程序
    11.2.3.1 硬盘初始化函数
    11.2.3.2 硬盘中断处理函数
    11.2.3.3 读硬盘操作
    11.2.3.4 写硬盘操作

  12. 进程管理
    12.1 进程管理单元功能概述
    12.2 完善进程控制模块(PCB)结构体
    12.3 完善init进程
    12.4 进程调度
    12.4.1 Linux进程调度功能介绍
    12.4.2 时钟中断处理
    12.4.2.1 墙上时钟
    12.4.2.2 定时器时钟
    12.4.3 内核延时函数
    12.4.4 基于时间片轮询的进程调度函数
    12.5 多核
    12.5.1 Hyper-threading & Multi-core概述
    12.5.2 ICR中断命令寄存器
    12.5.3 IPI多核间通信
    12.5.4 多核引导代码
    12.5.5 让我们的系统支持多核
    12.5.6 多核间加锁机制
    12.6 进程间通信
    12.6.1 进程间通信原理
    12.6.2 实现进程间信号通信功能

  13. 文件系统
    13.1 文件系统概述
    13.2 解析FAT类文件系统
    13.3 Linux虚拟文件系统简介
    13.4 写一个支持FAT32的文件系统
    13.4.1 superblock超级块结构体
    13.4.2 inode节点结构体
    13.4.3 dentry目录结构体
    13.4.4 file文件结构体
    13.4.5 fileoperation文件操作结构体
    13.5 文件系统初始化函数
    13.6 搜索路径函数
    13.7 文件的读写操作
    13.8 文件的其他操作

  14. 系统异常
    14.1 Linux的相关实现
    14.2 实现缺页异常

  15. 系统API库
    15.1 系统调用原理
    15.2 基于POSIX规范实现常用的系统库函数
    15.2.1 POSIX规范简介
    15.2.2 fork、clone函数实现
    15.2.3 open、close、read、write函数实现
    15.2.4 execve、exit函数实现
    15.2.5 signal函数实现
    15.2.6 mmap函数实现

  16. 图形库
    16.1 完善显示部分驱动程序
    16.1.1 显示驱动结构体
    16.1.2 显示驱动初始化函数
    16.1.3 添加mmap功能
    16.2 将显存映射到用户空间
    16.3 实现基本图形库函数
    16.3.1 点描画函数
    16.3.2 线描画函数
    16.3.3 矩形描画函数
    16.4 实现贴图功能
    16.4.1 贴图功能概述
    16.4.2 BitMap图片结构概述
    16.4.3 实现BitMap函数
    16.4.4 实现贴图函数

  17. 窗口管理器
    17.1 窗口管理器原理概述
    17.2 实现一个简单的窗口管理器
    17.2.1 创建窗口
    17.2.2 移动窗口
    17.2.3 销毁窗口
    17.3 窗口焦点管理
    17.3.1 鼠标跟随获得焦点
    17.3.2 鼠标点击获得焦点
    17.3.3 画一个鼠标箭头
    17.3.4 实现焦点管理
    17.4 窗口消息传递
    17.4.1 消息传递原理概述
    17.4.2 实现消息传递功能
    17.5 实现窗口点击事件
    17.5.1 添加窗口最大化功能
    17.5.2 添加窗口最小化功能
    17.5.3 添加窗口关闭功能

  18. 基本命令
    18.1 终端命令行窗口
    18.1.1 终端原理概述
    18.1.2 实现一个终端窗口
    18.2 ELF执行文件头
    18.2.1 ELF概述
    18.2.2 实现ELF解析功能函数
    18.3 编写基本命令
    18.3.1 ls显示目录命令
    18.3.2 pwd显示当前路径命令
    18.3.3 cd切换目录命令
    18.3.4 touch创建文件命令
    18.3.5 exec执行程序命令
    18.3.6 poweroff关机命令

  19. 桌面
    19.1 设计桌面布局
    19.2 添加任务栏功能
    19.3 添加时钟功能
    19.4 添加关机按钮功能

  20. 完善功能及优化
    20.1 完善操作系统功能
    20.2 对系统性能进行优化

拟定目录——向大家求助

起因:

年初我将图书选题情况表和大纲提交给图灵出版社后,现在的反馈是:

  1. 大纲与题目不太符合,说更像是讲Intel处理器的书;
  2. 与30天自制操作系统对比,感觉读者读了半本书也写不出个操作系统来;
  3. 本来拟定是一系列丛书的,最后调整到一本800页,页数太多有风险。(个人感觉,写一个64位操作系统的实现,从底层到上层都讲的话,800页能够吗?我觉得一个内核讲800页应该是够的。)

因为我也是第一次写作,没有什么经验,所以,希望大家能帮我调整一下文章目录,觉得那里该删减,那里该添加,我知道目前这个目录有很多缺陷和考虑不周的地方。请都指出来,说说你们的想法!!。。。。。。在此向大家致谢啦~!

第一章 环境搭建

1.1VMware的安装
1.2系统平台——CentOS6
1.3Bochs——一个可调试的虚拟机
1.3.1Bochs环境安装
1.3.2Bochs运行环境配置
1.3.3Bochs相关的调试命令

第二章 基础知识——走的越远基础越重要

2.1汇编语言
2.1.1AT&T 汇编与intel汇编
2.1.2NASM汇编
2.1.3汇编调用C函数
2.2C语言
2.2.1GNU C内嵌汇编语言
2.2.2GUN C对标准C语言的扩展
2.2.3一些常用的库函数实现
2.3MakeFile编译脚本
2.3.1Linux的MakeFile
2.3.2写一个MakeFile
2.4LD链接脚本
2.4.1 语法简介
2.4.2 Linux的vmlinux.lds

第三章 Boot——万事开头难

3.1Boot在哪里?——MBR扇区
3.2Boot的功能
3.3编写我们的Boot代码
3.4创建一个软盘镜像
3.5让我们的Boot跑起来
3.6强大的BIOS中断
3.6.1int 10h 显示文字
3.6.2int 13h 读软盘扇区
3.6.3int 15h E820h获得物理内存信息
3.7实模式的瓶颈——1MB内存的地址划分
3.8FAT12——一个软盘文件系统
3.9FAT12文件系统结构及原理
3.10让我们的代码寻找Loader

第四章 保护模式&IA32e模式——枯燥中不失深奥

4.1保护模式概述
4.232位段结构 & 页结构
4.3IA32e模式概述
4.464位段结构 & 页结构
4.5CR控制寄存器

第五章 Loader——跟实模式说再见

5.1GRUB & Uboot——现代的bootloader
5.2Loader的功能
5.3错综复杂的1MB内存空间
5.4突破1MB瓶颈——打开地址A20
5.5划分我们的地址空间
5.6突破渴望——谁说实模式下就不能寻址4GB!
5.7一个关键的跳跃——goto Kernel

第六章 真实的色彩——VESA BIOS EXTENSION

6.1什么是VBE
6.2VBE功能介绍
6.2.1 VBE状态
6.2.2 VBE功能号
6.2.3 设置VBE模式
6.2.4 设置我们的显示模式

第七章 一个转折性的跳跃——main.c

7.1at&t 64位汇编的注意事项
7.2head.s——我来组成头部
7.3内存地址空间划分——链接脚本的作用
7.4扬帆起航——Start_Kernel

第八章 printk——你值得拥有

8.1帧存初体验
8.2ASCII码——我们的字符库font.h
8.3printk()

第九章 看看我们的处理器型号——CPUID

9.1处理器基本信息与扩展信息
9.2最大寻址范围
9.3物理地址
9.4线性地址
9.5原来我的处理器是I7

第十章 U盘启动——摆脱虚拟虚拟环境

10.1USB ZIP、USB HDD、USB FDD
10.2使用硬盘软件格式化U盘
10.3重新分析fat12文件系统在U盘扇区上的结构
10.4修改我们的BootLoader
10.5让梦想飞起来——U盘启动
10.6一次蜕变——从虚拟机到物理机

第十一章 Trap、Fault、Abort——处理器异常

11.1Trap、Fault、Abort异常
11.2EFLAGES
11.3门描述符
11.4保护模式下的门描述符
11.5IA32e模式下的门描述符
11.6处理异常前的准备——gate.h
11.7Linux的相关实现
11.8给内核加上异常处理

第十二章 内存管理单元——从此不再裸奔

12.1pagetable_init ()——真正的页表初始化函数
12.2init_memory ()——总该整理下内存空间了
12.3alloc_pages()——有这个就可以申请连续物理页了
12.4slab_init()——做个简单的缓冲池管理
12.5kmalloc_create()——有了这个自由调用kmalloc不是梦
12.6kmalloc()——2MB以内的空间尽情申请
12.7kfree()——内存释放就这么简单
12.8framebuffer的重定向
12.9framebuffer_init()
12.10彩色printk——屏幕从此不再单调

第十三章 处理器上的Local APIC——高级可中断编程控制器

13.1中断控制器的发展史
13.2APIC的功能
13.3local APIC版本
13.4操作寄存器的相关方法
13.5寄存器列表
13.6中断实现

第十四章 IOAPIC——芯片组里的设备中断投递

14.1过时的中断控制器——8259A
14.2IOAPIC——I/O 高级中断控制器
14.3IOAPIC寄存器列表
14.4如何使能IOAPIC
14.5查看芯片组
14.6RCBA寄存器——Root Complex Base Address Register
14.7OIC寄存器——Other Interrupt Control Register
14.8第一次亲密接触——触发一个中断

第十五章 策略与机制——设计我们的中断处理

15.1设计思想概述 15.1.1Linux中断处理思想
15.1.2取其精华——我们的中断处理
15.2中断的注册与注销
15.3中断处理函数

第十六章 键盘——我们的第一个设备驱动

16.1强大的I8042
16.2键盘原理
16.3如何与键盘通信——端口60h和64h
16.4键盘扫描码
16.5键盘驱动
16.5.1键盘的初始化函数 16.5.2键盘的中断处理函数
16.6键盘扫描码解析函数

第十七章 鼠标——键盘从此不再孤单

17.1鼠标原理
17.2鼠标通信——还是端口60h、64h
17.3鼠标数据包
17.4鼠标驱动
17.5鼠标初始化函数
17.6鼠标中断处理函数
17.7鼠标协议解析函数

第十八章 硬盘——我们的百宝箱

18.1硬盘结构及原理
18.1.1硬件结构
18.1.2硬盘端口
18.2硬盘初探——读取MBR扇区
18.3完善硬盘驱动
18.4硬盘初始化函数
18.5硬盘中断处理函数
18.6读硬盘操作
18.7写硬盘操作

第十九章 FAT32文件系统——FAT12的升级版

19.1FAT家族——FAT 12的扩展版
19.2FAT 16文件系统结构
19.3FAT 32文件系统结构
19.4VFAT文件系统结构
19.5Linux虚拟文件系统简介
19.6写一个FAT兼容型文件系统
19.7设计文件系统相关结构体
19.8SuperBlock结构体
19.9Inode结构体
19.10Dentry结构体
19.11File结构体
19.12path_walk()——沿着路径找到我们的文件
19.13操作一个文件

第二十章 你不是一个人在战斗——迟到的多核

20.1Hyper-threading & Multi-core
20.2ICR——Interrupt Command Register
20.3多核引导代码
20.4多核间通信IPI ——Inter-Processor Interrupt

第二十一章 又一个跳转——进入应用层

21.1创建我们的PCB结构体
21.2初始化init进程
21.3进入应用层空间

第二十二章 进程调度——schedule

22.1时钟中断
22.2墙上时钟
22.3时间片时钟
22.4基于时间片轮询
22.5设计我们的时间片轮询
22.6进程间的调度
22.7进程间通信
22.8多核间的进程调度
22.9系统API调用——System Call
22.10应用层函数库——我们也实现部分POSIX吧

第二十三章 一些基本命令

23.1实现一个终端
23.2我们的ELF——Executable and Link Format
23.3ls——显示目录内容
23.4pwd——显示当前路径
23.5cd——切换目录
23.6touch——创建文件
23.7exec——执行程序
23.8poweroff——关机

第二十四章 UI界面

24.1重做显示驱动
24.2BitMap图片解析器
24.3点、线、面、贴图——实现一个描画库
24.4设置系统桌面
24.5鼠标箭头
24.6窗口管理器
24.7窗口焦点管理
24.8鼠标跟随获得焦点
24.9鼠标点击获得焦点
24.10输入消息传递

第二十五章 最后的奉献

25.1设计桌面布局以及按钮事件
25.2设计窗口点击事件
25.3让程序运行在指定处理器上

以上这是本书的暂定内容,希望大家多提建议,帮助我修改,说出您的想法,万分感激~!~!

拟定目录V0.2版——麻烦大家再给提提意见

根据之前大家提出的修改意见,我对目录进行了整体结构修改,修改后,目录的结构性更强了。应该看着有点像本《操作系统》的书籍了。但是,不知道还有哪里不合理的地方,还请大家再给提提意见,谢谢大家了~!

第一部 环境搭建及基础知识介绍

1. 环境搭建
1.1VMware的安装
1.2系统平台——CentOS6
1.3Bochs——一个可调式的虚拟机
2.基础知识
2.1 汇编语言
2.1.1 AT&T汇编与Intel汇编
2.1.2 NASM编译器
2.1.3 汇编调用C函数
2.2 C语言
2.2.1 GNU C内嵌汇编语言
2.2.2 GNU C会标准C语言的扩展

第二部分 bootloader引导篇

3.boot引导
3.1 boot原理
3.1.1 boot功能
3.1.2 写一个简单的boot
3.1.3 创建软盘镜像
3.1.4 在Bochs下运行我们的boot程序
3.2 FAT12文件系统
3.2.1 FAT12文件系统结构及原理
3.2.2 让boot识别FAT12文件系统
3.2.3 跳转到loader
4. loader检测
4.1 loader原理
4.1.1 loader功能
4.1.2 GRUB&Uboot介绍
4.1.3 写一个简单的loader程序
4.2 BIOS中断
4.2.1 int 10h 显示文字
4.2.2 int 13h 读软盘扇区
4.2.3 int 15h E820获得物力内存信息
4.3 实模式简介
4.3.1 实模式概述
4.3.2 实模式下的寻址瓶颈
4.3.2.1 错综复杂的1MB物理内存空间
4.3.2.2 突破1MB物理内存瓶颈
4.4 加载内核
4.4.1 为获得的数据划分地址空间
4.4.2 实模式下的4GB寻址
4.4.3 从实模式切换到保护模式
4.4.4 保护模式概述
4.4.4.1 保护模式下的段寻址
4.4.4.2 保护模式下的页寻址
4.4.5 从保护模式切换到IA-32E模式
4.4.6 IA-32E模式概述
4.4.6.1 IA-32E模式下的段寻址
4.4.6.2 IA-32E模式下的页寻址
4.4.7 向内核跳转

第三部分 内核空间篇

5.内核启动
5.1 内核执行头
5.1.1 内核执行头功能介绍
5.1.2 写一个head.s执行头程序
5.2 编译脚本
5.2.1 编译脚本简介
5.2.2 为我们的内核写一个MakeFile编译脚本
5.3 链接脚本
5.3.1 结合Linux的vmlinux.lds简介链接脚本
5.3.2 为我们的内核写一个链接脚本
5.4 从内核执行头跳转至内核Start_Kernel主函数
5.5 显示部分
5.5.1 显存概述
5.5.2 VBE(VESA BIOS EXTENSION)规范
5.5.2.1 VBE规范概述
5.5.2.2 获得硬件平台的VBE相关信息
5.5.2.3 根据硬件信息设置显示模式
5.5.3 printk函数
5.5.3.1 ASCII字符库
5.5.3.2 彩色printk函数的实现
5.6 处理器基本信息与扩展信息
5.6.1 CPUID指令概述
5.6.2 最大寻址范围
5.6.2.1 最大物理寻址范围
5.6.2.2 最大线性寻址范围
5.6.3 获得处理器型号信息
5.7 U盘启动
5.7.1 USB-ZIP、USB-HDD、USB-FDD区别简介
5.7.2 让我们的系统改为U盘启动
5.7.2.1 使用软件格式化U盘
5.7.2.2 重新分析U盘上的FAT12文件系统
5.7.2.3 修改我们的BootLoader程序
6. 系统异常
6.1 系统异常概述
6.1.1 错误(Fault)
6.1.2 异常(Trap)
6.1.3 中断(Abort)
6.2 各个模式下的中断概述
6.2.1 实模式下的中断向量表
6.2.2 门描述符
6.2.2.1 保护模式下的门描述符
6.2.2.2 IA-32E模式下的门描述符
6.3 为我们的系统添加异常处理功能
6.3.1 定义门结构体
6.3.2 Linux的相关实现
6.3.3 实现我们的异常处理功能
7. 内存管理
7.1 内存管理单元初始化
7.1.1 统计可用物理内存信息
7.1.2 创建内存管理结构
7.1.2.1 内存管理结构概述
7.1.2.2 为我们的系统编写内存管理单元结构
7.1.3 完成内存管理单元初始化
7.2 从页表申请物理页
7.2.1 页分配原理
7.2.2 实现分配页表函数alloc_page
7.3 基于缓存池技术的系统内存管理功能
7.3.1 系统内存管理功能概述
7.3.2 缓存池实现原理
7.3.3 实现缓存池初始化函数slab_init
7.3.4 基于缓存池技术的内存申请函数kmalloc_create
7.3.5 内存申请函数kmalloc
7.3.6 内存释放函数kfree
7.4 页表初始化
7.4.1 重新初始化系统页表
7.4.2 FrameBuffer重定向
8. 中断处理
8.1 中断控制器
8.1.1 早期8259A简介
8.1.2 Local APIC 高级可编程中断控制器
8.1.2.1 Local APIC 概述
8.1.2.2 操作寄存器的相关方法
8.1.2.3 Local APIC 寄存器列表
8.1.3 I/O APIC 高级中断控制器
8.1.3.1 I/O APIC 概述
8.1.3.2 I/O APIC 寄存器列表
8.1.3.3 如何使能I/O APIC
8.1.3.3.1 查看芯片组
8.1.3.3.2 RCBA寄存器——Root Complex Base Address Register
8.1.3.3.3 OIC寄存器——Other Interrupt Control Register
8.2 中断初始化
8.2.1 实现Local APIC初始化
8.2.2 实现I/O APIC初始化
8.2.3 触发一个中断
8.3 借鉴Linux设计中断处理函数
8.3.1 Linux中断处理思想概述
8.3.2 中断的注册与注销
8.3.3 中断上部处理函数
8.3.4 中断下部处理函数
9. 设备驱动
9.1 键盘驱动
9.1.1 键盘原理
9.1.1.1 键盘结构概述
9.1.1.2 键盘通信
9.1.1.3 I8042控制器的键盘部分
9.1.1.3.1 端口60h
9.1.1.3.2 端口64h
9.1.1.4 键盘扫描码
9.1.2 实现键盘驱动程序
9.1.2.1 键盘初始化函数
9.1.2.2 键盘中断处理函数
9.1.2.3 键盘扫描码解析函数
9.2 鼠标驱动
9.2.1 鼠标原理
9.2.1.1 鼠标结构概述
9.2.1.2 鼠标通信
9.2.1.3 I8042控制器的鼠标部分
9.2.1.3.1 端口60h
9.2.1.3.2 端口64h
9.2.1.4 鼠标数据包
9.2.2 实现鼠标驱动程序
9.2.2.1 鼠标初始化函数
9.2.2.2 鼠标中断处理函数
9.2.2.3 鼠标协议解析函数
9.3 硬盘驱动
9.3.1 硬盘结构及原理
9.3.1.1 硬盘原理概述
9.3.1.2 IDE硬盘与SATA硬盘的区别
9.3.1.3 硬盘端口功能列表
9.3.2 硬盘操作初探
9.3.2.1 调整BIOS的硬盘操作模式
9.3.2.2 实现一个读硬盘ROM信息的程序
9.3.2.3 实现一个清楚硬盘扇区数据的程序
9.3.3 完善硬盘驱动
9.3.3.1 硬盘初始化函数
9.3.3.2 硬盘中断处理函数
9.3.3.3 读硬盘操作
9.3.3.4 写硬盘操作
10.进程管理
10.1 进程管理单元概述
10.2 进程控制模块(PCB)结构定义
10.3 创建init进程
10.4 跳转至用户空间的init进程
10.5 进程调度
10.5.1 Linux进程调度功能简介
10.5.2 时钟中断
10.5.2.1 墙上时钟
10.5.2.2 时间片时钟
10.5.3 内核延时函数
10.5.4 基于时间片轮询
10.5.5 实现一个简单的进程调度函数
10.6 多核
10.6.1 Hyper-threading & Multi-core概述
10.6.2 ICR中断命令寄存器
10.6.3 IPI多核间通信
10.6.4 多核引导代码
10.6.5 让我们的系统支持多核
11. 文件系统
11.1 文件系统概述
11.2 解析FAT类文件系统
11.3 Linux虚拟文件系统简介
11.4 写一个支持FAT的文件系统
11.4.1 设计相关结构体
11.4.1.1 superblock超级块结构体
11.4.1.2 inode节点结构体
11.4.1.3 dentry目录结构体
11.4.1.4 file文件结构体
11.4.2 文件系统初始化函数
11.4.3 搜索路径函数
11.4.4 文件的读写操作
11.5 进程间通信
11.5.1 进程间通信原理概述
11.5.2 实现进程间信号通信功能

第四部分 用户空间篇

12.库函数
12.1 系统API库
12.1.1 系统调用原理
12.1.2 写一个简单的系统调用
12.1.3 基于POSIX规范实现常用的系统库函数
12.1.3.1 POSIX规范简介
12.1.3.2 open、close函数实现
12.1.3.3 read、write函数实现
12.1.3.4 ioctl函数实现
12.1.3.5 delay函数实现
12.1.3.6 printf函数实现
12.1.3.7 mmap函数实现
12.2 图形库
12.2.1 写一个显卡驱动
12.2.1.1 设计显卡驱动结构
12.2.1.2 显卡初始化函数
12.2.1.3 为显卡驱动添加mmap功能
12.2.2 将显卡的framebuffer映射到用户空间
12.2.3 实现基本图形库函数
12.2.3.1 点描画函数
12.2.3.2 线描画函数
12.2.3.3 矩形描画函数
12.2.4 实现贴图功能
12.2.4.1 BitMap图片结构概述
12.2.4.2 解析BitMap图片函数
12.2.4.3 实现贴图函数
13. 窗口管理器
13.1 窗口管理器原理概述
13.2 实现一个简单的窗口管理器
13.3 窗口焦点管理
13.3.1 鼠标跟随获得焦点
13.3.2 鼠标点击获得焦点
13.3.3 画一个鼠标箭头
13.3.4 实现焦点管理
13.4 窗口消息传递
13.4.1 消息传递原理概述
13.4.2 实现消息传递功能
14. 基本命令
14.1 终端命令行窗口
14.1.1 终端原理概述
14.1.2 实现一个终端
14.2 ELF执行文件头
14.2.1 ELF原理概述
14.2.2 实现一个精简的ELF功能
14.3 实现基本命令
14.3.1 ls显示目录命令
14.3.2 pwd显示当前路径命令
14.3.3 cd切换目录命令
14.3.4 touch创建文件命令
14.3.5 exec执行程序命令
14.3.6 poweroff关机命令
15. 桌面
15.1 设计桌面布局
15.1.1 添加任务栏功能
15.1.2 添加时钟功能
15.1.3 添加关机按钮功能
15.2 设计窗口点击事件
15.2.1 添加窗口最大化功能
15.2.2 添加窗口最小化功能
15.2.3 添加窗口关闭功能

拟定目录V0.3版——大家觉得这版怎么样?

**我觉得这回的目录应该照前两次写的目录有很大进步,不知道大家对这个目录还有什么意见,还请多多指教啊~!~**

第一部 相关知识介绍及环境搭建

  1. 操作系统整体概述
    1.1 什么是操作系统
    1.2 操作系统结构
    1.2.1 引导启动
    1.2.2 内存管理
    1.2.3 中断处理
    1.2.4 进程管理
    1.2.5 设备驱动
    1.2.6 文件系统
    1.3 写操作系统需要的知识
    1.4 本书操作系统概述
  2. 环境搭建及基础知识介绍
    2.1 虚拟机及开发系统平台介绍
    2.1.1 VMware安装
    2.1.2 搭建CentOS系统平台
    2.1.3 Bochs虚拟机安装与使用简介
    2.2 汇编语言
    2.2.1 AT&T汇编与Intel汇编
    2.2.2 NASM汇编
    2.2.3 汇编调用C函数
    2.3 C语言
    2.3.1 GNU C内嵌汇编语言
    2.3.2 GNU C对标准C语言的扩展

    第二部 初级篇

  3. Bootloader引导程序
    3.1 Boot启动程序
    3.1.1 Boot原理
    3.1.2 写一个boot程序
    3.1.3 创建虚拟软盘镜像文件
    3.1.4 在bochs上运行我们的boot程序
    3.1.5 加载loader到内存
    3.1.6 从boot跳转到loader程序
    3.2 Loader检查程序
    3.2.1 Loader原理
    3.2.2 写一个loader程序
    3.2.3 从实模式进入保护模式再到IA-32E模式
    3.2.3.1 从实模式进入保护模式
    3.2.3.2 从保护模式进入IA-32E模式
    3.2.4 从loader跳转到内核程序

  4. 内核层
    4.1 内核执行头
    4.1.1 什么是内核执行头
    4.1.2 写一个执行头程序
    4.1.3 从执行头进入到内核主程序
    4.1.4 在屏幕上显示色彩
    4.1.5 在屏幕上输出LOG
    4.1.5.1 ASCII字符库
    4.1.5.2 Printk函数的实现
    4.2 系统异常
    4.2.1 错误(fault)、异常(trap)、终止(abort)的区别
    4.2.2 捕获系统异常
    4.3 内存页表分配
    4.3.1 获得物理内存信息
    4.3.2 计算可用内存页数
    4.3.3 分配可用物理页
    4.4 外部中断处理
    4.4.1 设置中断控制器
    4.4.2 触发一个中断
    4.5 键盘驱动
    4.5.1 简述键盘功能
    4.5.2 实现键盘中断捕获函数
    4.6 进程管理
    4.6.1 简述进程管理模块
    4.6.2 创建进程管理结构体
    4.6.3 创建Init进程
    4.6.4 跳转到用户层
  5. 用户层
    5.1 写一个系统API接口
    5.2 写Hello World!程序

    第三部 高级篇

  6. 处理器体系结构
    6.1 实模式
    6.1.1 实模式概述
    6.1.2 实模式寻址方式
    6.1.3 实模式下的中断向量表
    6.2 保护模式
    6.2.1 保护模式概述
    6.2.2 保护模式下的段机制
    6.2.3 保护模式下的页机制
    6.2.4 保护模式下的门描述符
    6.3 IA32-E模式
    6.3.1 IA32-E模式概述
    6.3.2 IA-32E模式下的段机制
    6.3.3 IA-32E模式下的页机制
    6.3.4 IA-32E模式下的门描述符

  7. 完善BootLoader功能
    7.1 实模式下的寻址瓶颈
    7.1.1 错综复杂的1MB物理内存空间
    7.1.2 突破1MB物理内存瓶颈
    7.1.3 实模式下的4G寻址
    7.2 细说各个模式间的切换
    7.3 BIOS中断
    7.3.1 Int 10h 显示文字
    7.3.2 Int 13h 读软盘扇区
    7.3.3 Int 15h E820获得物理内存信息
    7.4 划分各个硬件数据的存储空间
    7.5 U盘启动
    7.5.1 USB-ZIP、USB-HDD、USB-FDD区别简介
    7.5.2 把BootLoader改为U盘启动
    7.6 细说VBE(VESA BIOS EXTENSION)功能的实现
    7.6.1 VBE规范概述
    7.6.2 获得硬件平台的VBE相关信息
    7.6.3 设置显示模式
  8. 内核主程序
    8.1 内核主程序功能概述
    8.2 编译脚本介绍
    8.3 链接脚本介绍
    8.4 操作系统空间划分
    8.5 获得处理器基本信息及扩展信息
  9. 内存管理
    9.1 统计物理内存信息
    9.2 内存管理单元结构及相关宏定义
    9.3 分配可用物理页功能重构
    9.4 slab缓冲池技术
    9.5 基于slab的系统内存管理功能
    9.6 页表重新初始化
  10. 高级中断处理
    10.1 8259A简介
    10.2 Local APIC高级可编程中断控制器
    10.2.1 Local APIC概述
    10.2.2 操作寄存器的相关方法
    10.2.3 Local APIC寄存器列表
    10.3 I/O APIC 外设高级中断控制器
    10.3.1 I/O APIC 概述
    10.3.2 I/O APIC 寄存器列表
    10.3.3 如何使能I/O APIC
    10.3.3.1 查看芯片组
    10.3.3.2 RCBA寄存器——Root Complex Base Address Register
    10.3.3.3 OIC寄存器——Other Interrupt Control Register
    10.3.3.4 使能中断投递
    10.4 中断初始化
    10.5 Linux中断处理思想概述
    10.6 实现我们的中断处理功能
    10.6.1 实现中断上部处理功能
    10.6.2 实现中断下部处理功能
  11. 驱动程序
    11.1 键盘和鼠标驱动程序
    11.1.1 键盘原理
    11.1.2 鼠标原理
    11.1.3 I8042控制器
    11.1.4 完善键盘驱动
    11.1.4.1 键盘初始化函数
    11.1.4.2 键盘中断处理函数
    11.1.4.3 键盘扫描码解析函数
    11.1.5 实现鼠标驱动
    11.1.5.1 鼠标初始化函数
    11.1.5.2 鼠标中断处理函数
    11.1.5.3 鼠标协议解析函数
    11.2 硬盘驱动程序
    11.2.1 硬盘结构及原理
    11.2.1.1 硬盘原理概述
    11.2.1.2 IDE硬盘与SATA硬盘的区别
    11.2.1.3 硬盘接口功能列表简介
    11.2.2 硬盘操作初探
    11.2.2.1 调整BIOS的硬盘操作模式
    11.2.2.2 实现一个读硬盘ROM信息的程序
    11.2.2.3 实现一个清除硬盘扇区数据的程序
    11.2.3 完善硬盘驱动程序
    11.2.3.1 硬盘初始化函数
    11.2.3.2 硬盘中断处理函数
    11.2.3.3 读硬盘操作
    11.2.3.4 写硬盘操作
  12. 进程管理
    12.1 进程管理单元功能概述
    12.2 完善进程控制模块(PCB)结构体
    12.3 完善init进程
    12.4 进程调度
    12.4.1 Linux进程调度功能介绍
    12.4.2 时钟中断处理
    12.4.2.1 墙上时钟
    12.4.2.2 定时器时钟
    12.4.3 内核延时函数
    12.4.4 基于时间片轮询的进程调度函数
    12.5 多核
    12.5.1 Hyper-threading & Multi-core概述
    12.5.2 ICR中断命令寄存器
    12.5.3 IPI多核间通信
    12.5.4 多核引导代码
    12.5.5 让我们的系统支持多核
    12.5.6 多核间加锁机制
    12.6 进程间通信
    12.6.1 进程间通信原理
    12.6.2 实现进程间信号通信功能
  13. 文件系统
    13.1 文件系统概述
    13.2 解析FAT类文件系统
    13.3 Linux虚拟文件系统简介
    13.4 写一个支持FAT32的文件系统
    13.4.1 superblock超级块结构体
    13.4.2 inode节点结构体
    13.4.3 dentry目录结构体
    13.4.4 file文件结构体
    13.4.5 fileoperation文件操作结构体
    13.5 文件系统初始化函数
    13.6 搜索路径函数
    13.7 文件的读写操作
    13.8 文件的其他操作
  14. 系统异常
    14.1 Linux异常的相关实现
    14.2 实现缺页异常
  15. 系统API库
    15.1 系统调用原理
    15.2 基于POSIX规范实现常用的系统库函数
    15.2.1 POSIX规范简介
    15.2.2 fork函数实现
    15.2.3 open、close、read、write函数实现
    15.2.4 execve、exit函数实现
    15.2.5 signal函数实现
    15.2.6 mmap函数实现
  16. 图形库
    16.1 完善显示部分驱动程序
    16.1.1 显示驱动结构体
    16.1.2 显示驱动初始化函数
    16.1.3 添加mmap功能
    16.2 将显存映射到用户空间
    16.3 实现基本图形库函数
    16.3.1 点描画函数
    16.3.2 线描画函数
    16.3.3 矩形描画函数
    16.4 实现贴图功能
    16.4.1 贴图功能概述
    16.4.2 BitMap图片结构概述
    16.4.3 实现BitMap函数
    16.4.4 实现贴图函数
  17. 窗口管理器
    17.1 窗口管理器原理概述
    17.2 实现一个简单的窗口管理器
    17.2.1 创建窗口
    17.2.2 移动窗口
    17.2.3 销毁窗口
    17.3 窗口焦点管理
    17.3.1 鼠标跟随获得焦点
    17.3.2 鼠标点击获得焦点
    17.3.3 画一个鼠标箭头
    17.3.4 实现焦点管理
    17.4 窗口消息传递
    17.4.1 消息传递原理概述
    17.4.2 实现消息传递功能
    17.5 实现窗口点击事件
    17.5.1 添加窗口最大化功能
    17.5.2 添加窗口最小化功能
    17.5.3 添加窗口关闭功能
  18. 基本命令
    18.1 终端命令行窗口
    18.1.1 终端原理概述
    18.1.2 实现一个终端窗口
    18.2 ELF执行文件头
    18.2.1 ELF概述
    18.2.2 实现ELF解析功能函数
    18.3 编写基本命令
    18.3.1 ls显示目录命令
    18.3.2 pwd显示当前路径命令
    18.3.3 cd切换目录命令
    18.3.4 touch创建文件命令
    18.3.5 exec执行程序命令
    18.3.6 poweroff关机命令
  19. 桌面
    19.1 设计桌面布局
    19.2 添加任务栏功能
    19.3 添加时钟功能
    19.4 添加关机按钮功能
  20. 其他
    20.1 完善操作系统功能
    20.2 对系统性能进行优化

**我觉得这回的目录应该照前两次写的目录有很大进步,不知道大家对这个目录还有什么意见,还请多多指教啊~!~**