简介
本书在详细分析操作系统原理的基础上,用丰富的实例代码,一步一步地指导读者用C语言和汇编语言编写出一个具备操作系统基本功能的操作系统框架。本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图。书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理,而且使整个开发过程少走弯路。全书共分7章。
本书适合各类程序员、程序开发爱好者阅读,也可作为高等院校操作系统课程的实践参考书。
目录
第1章 马上动手写一个最小的“操作系统” 1
1.1 准备工作 1
1.2 10分钟完成的操作系统 1
1.3 boot sector 3
1.4 代码解释 3
1.5 水面下的冰山 5
1.6 回顾 6
第2章 搭建你的工作环境 7
2.1 虚拟计算机(virtual pc) 7
2.1.1 virtual pc初体验 8
2.1.2 创建你的第一个virtual pc 9
2.1.3 虚拟软盘研究 12
2.1.4 虚拟软盘实战 14
2.2 编译器(nasm & gcc) 18
2.3 安装虚拟linux 19
2.4 在虚拟linux上访问windows文件夹 26
2.5 安装虚拟pcdos 26
2.6 其他要素 29
2.7 bochs 29
2.7.1 bochs vs. virtual pc vs. vmware 30
.2.7.2 bochs的使用方法 31
2.7.3 用bochs进行调试 33
2.7.4 在linux上开发 34
2.8 总结与回顾 36
第3章 保护模式(protect mode) 37
3.1 认识保护模式 37
3.1.1 gdt(global descriptor table) 42
3.1.2 实模式到保护模式,不一般的jmp 45
3.1.3 描述符属性 47
3.2 保护模式进阶 50
3.2.1 海阔凭鱼跃 50
3.2.2 ldt(local descriptor table) 58
3.2.3 特权级 62
3.3 页式存储 82
3.3.1 分页机制概述 83
3.3.2 编写代码启动分页机制 84
3.3.3 pde和pte 85
3.3.4 cr3 88
3.3.5 回头看代码 88
3.3.6 克勤克俭用内存 90
3.3.7 进一步体会分页机制 100
3.4 中断和异常 107
3.4.1 中断和异常机制 109
3.4.2 外部中断 111
3.4.3 编程操作8259a 113
3.4.4 建立idt 116
3.4.5 实现一个中断 117
3.4.6 时钟中断试验 119
3.4.7 几点额外说明 121
3.5 保护模式下的i/o 122
3.5.1 iopl 122
3.5.2 i/o许可位图(i/o permission bitmap) 123
3.6 保护模式小结 123
第4章 让操作系统走进保护模式 125
4.1 突破512字节的限制 125
4.1.1 fat12 126
4.1.2 dos可以识别的引导盘 131
4.1.3 一个最简单的loader 132
4.1.4 加载loader入内存 133
4.1.5 向loader交出控制权 142
4.1.6 整理boot.asm 142
4.2 保护模式下的“操作系统” 144
第5章 内核雏形 146
5.1 用nasm在linux下写hello world 146
5.2 再进一步,汇编和c同步使用 148
5.3 elf(executable and linkable format) 150
5.4 从loader到内核 155
5.4.1 用loader加载elf 155
5.4.2 跳入保护模式 161
5.4.3 重新放置内核 170
5.4.4 向内核交出控制权 175
5.4.5 操作系统的调试方法 176
5.5 扩充内核 184
5.5.1 切换堆栈和gdt 184
5.5.2 整理我们的文件夹 191
5.5.3 makefile 191
5.5.4 添加中断处理 200
5.5.5 两点说明 218
5.6 小结 219
第6章 进程 221
6.1 迟到的进程 221
6.2 概述 222
6.2.1 进程介绍 222
6.2.2 未雨绸缪——形成进程的必要考虑 222
6.2.3 参考的代码 224
6.3 最简单的进程 224
6.3.1 简单进程的关键技术预测 225
6.3.2 第一步——ring0→ring1 227
6.3.3 第二步——丰富中断处理程序 243
6.3.4 进程体设计技巧 254
6.4 多进程 256
6.4.1 添加一个进程体 256
6.4.2 相关的变量和宏 257
6.4.3 进程表初始化代码扩充 258
6.4.4 ldt 260
6.4.5 修改中断处理程序 261
6.4.6 添加一个任务的步骤总结 263
6.4.7 号外:minix的中断处理 265
6.4.8 代码回顾与整理 269
6.5 系统调用 280
6.5.1 实现一个简单的系统调用 280
6.5.2 get_ticks的应用 286
6.6 进程调度 292
6.6.1 避免对称——进程的节奏感 292
6.6.2 优先级调度总结 300
第7章 输入/输出系统 302
7.1 键盘 302
7.1.1 从中断开始——键盘初体验 302
7.1.2 at、ps/2键盘 304
7.1.3 键盘敲击的过程 304
7.1.4 解析扫描码 309
7.2 显示器 325
7.2.1 初识tty 325
7.2.2 基本概念 326
7.2.3 寄存器 328
7.3 tty任务 332
7.3.1 tty任务框架的搭建 334
7.3.2 多控制台 340
7.3.3 完善键盘处理 346
7.3.4 tty任务总结 354
7.4 区分任务和用户进程 354
7.5 printf 357
7.5.1 为进程指定tty 357
7.5.2 printf()的实现 358
7.5.3 系统调用write() 361
7.5.4 使用printf() 363
后记 366
参考文献 369
附录 书中的章节和代码对照表 370
1.1 准备工作 1
1.2 10分钟完成的操作系统 1
1.3 boot sector 3
1.4 代码解释 3
1.5 水面下的冰山 5
1.6 回顾 6
第2章 搭建你的工作环境 7
2.1 虚拟计算机(virtual pc) 7
2.1.1 virtual pc初体验 8
2.1.2 创建你的第一个virtual pc 9
2.1.3 虚拟软盘研究 12
2.1.4 虚拟软盘实战 14
2.2 编译器(nasm & gcc) 18
2.3 安装虚拟linux 19
2.4 在虚拟linux上访问windows文件夹 26
2.5 安装虚拟pcdos 26
2.6 其他要素 29
2.7 bochs 29
2.7.1 bochs vs. virtual pc vs. vmware 30
.2.7.2 bochs的使用方法 31
2.7.3 用bochs进行调试 33
2.7.4 在linux上开发 34
2.8 总结与回顾 36
第3章 保护模式(protect mode) 37
3.1 认识保护模式 37
3.1.1 gdt(global descriptor table) 42
3.1.2 实模式到保护模式,不一般的jmp 45
3.1.3 描述符属性 47
3.2 保护模式进阶 50
3.2.1 海阔凭鱼跃 50
3.2.2 ldt(local descriptor table) 58
3.2.3 特权级 62
3.3 页式存储 82
3.3.1 分页机制概述 83
3.3.2 编写代码启动分页机制 84
3.3.3 pde和pte 85
3.3.4 cr3 88
3.3.5 回头看代码 88
3.3.6 克勤克俭用内存 90
3.3.7 进一步体会分页机制 100
3.4 中断和异常 107
3.4.1 中断和异常机制 109
3.4.2 外部中断 111
3.4.3 编程操作8259a 113
3.4.4 建立idt 116
3.4.5 实现一个中断 117
3.4.6 时钟中断试验 119
3.4.7 几点额外说明 121
3.5 保护模式下的i/o 122
3.5.1 iopl 122
3.5.2 i/o许可位图(i/o permission bitmap) 123
3.6 保护模式小结 123
第4章 让操作系统走进保护模式 125
4.1 突破512字节的限制 125
4.1.1 fat12 126
4.1.2 dos可以识别的引导盘 131
4.1.3 一个最简单的loader 132
4.1.4 加载loader入内存 133
4.1.5 向loader交出控制权 142
4.1.6 整理boot.asm 142
4.2 保护模式下的“操作系统” 144
第5章 内核雏形 146
5.1 用nasm在linux下写hello world 146
5.2 再进一步,汇编和c同步使用 148
5.3 elf(executable and linkable format) 150
5.4 从loader到内核 155
5.4.1 用loader加载elf 155
5.4.2 跳入保护模式 161
5.4.3 重新放置内核 170
5.4.4 向内核交出控制权 175
5.4.5 操作系统的调试方法 176
5.5 扩充内核 184
5.5.1 切换堆栈和gdt 184
5.5.2 整理我们的文件夹 191
5.5.3 makefile 191
5.5.4 添加中断处理 200
5.5.5 两点说明 218
5.6 小结 219
第6章 进程 221
6.1 迟到的进程 221
6.2 概述 222
6.2.1 进程介绍 222
6.2.2 未雨绸缪——形成进程的必要考虑 222
6.2.3 参考的代码 224
6.3 最简单的进程 224
6.3.1 简单进程的关键技术预测 225
6.3.2 第一步——ring0→ring1 227
6.3.3 第二步——丰富中断处理程序 243
6.3.4 进程体设计技巧 254
6.4 多进程 256
6.4.1 添加一个进程体 256
6.4.2 相关的变量和宏 257
6.4.3 进程表初始化代码扩充 258
6.4.4 ldt 260
6.4.5 修改中断处理程序 261
6.4.6 添加一个任务的步骤总结 263
6.4.7 号外:minix的中断处理 265
6.4.8 代码回顾与整理 269
6.5 系统调用 280
6.5.1 实现一个简单的系统调用 280
6.5.2 get_ticks的应用 286
6.6 进程调度 292
6.6.1 避免对称——进程的节奏感 292
6.6.2 优先级调度总结 300
第7章 输入/输出系统 302
7.1 键盘 302
7.1.1 从中断开始——键盘初体验 302
7.1.2 at、ps/2键盘 304
7.1.3 键盘敲击的过程 304
7.1.4 解析扫描码 309
7.2 显示器 325
7.2.1 初识tty 325
7.2.2 基本概念 326
7.2.3 寄存器 328
7.3 tty任务 332
7.3.1 tty任务框架的搭建 334
7.3.2 多控制台 340
7.3.3 完善键盘处理 346
7.3.4 tty任务总结 354
7.4 区分任务和用户进程 354
7.5 printf 357
7.5.1 为进程指定tty 357
7.5.2 printf()的实现 358
7.5.3 系统调用write() 361
7.5.4 使用printf() 363
后记 366
参考文献 369
附录 书中的章节和代码对照表 370
自己动手写操作系统
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!