资源仅供个人学习,建议购买纸质版。另外该书第二版《Orange'S:一个操作系统的实现》也已分享!!! 封面; 1 序; 2 审校者的话; 5 本书导读; 8 作者自序; 6 目录; 14 第1章 马上动手写一个最小的“操作系统” ; 18 1.1 准备工作 ; 18 1.2 10分钟完成的操作系统 ; 18 1.3 Boot Sector ; 20 1.4 代码解释 ; 20 1.5 水面下的冰山 ; 22 1.6 回顾 ; 23 第2章 搭建你的工作环境 ; 24 2.1 虚拟计算机(Virtual PC) ; 24 2.1.1 Virtual PC初体验 ; 25 2.1.2 创建你的第一个Virtual PC ; 26 2.1.3 虚拟软盘研究 ; 29 2.1.4 虚拟软盘实战 ; 31 2.2 编译器(NASM & GCC) ; 35 2.3 安装虚拟Linux ; 36 2.4 在虚拟Linux上访问Windows文件夹 ; 43 2.5 安装虚拟PCDOS ; 43 2.6 其他要素 ; 46 2.7 Bochs ; 46 2.7.1 Bochs vs. Virtual PC vs. VMw are ; 47 2.7.2 Bochs的使用方法 ; 48 2.7.3 用Bochs进行调试 ; 50 2.7.4 在Linux上开发 ; 51 2.8 总结与回顾 ; 53 第3章 保护模式(Protect Mode) ; 54 3.1 认识保护模式 ; 54 3.1.1 GDT(Global Descriptor Table) ; 59 3.1.2 实模式到保护模式,不一般的jmp ; 62 3.1.3 描述符属性 ; 64 3.2 保护模式进阶 ; 67 3.2.1 海阔凭鱼跃 ; 67 3.2.2 LDT(Local Descriptor Table) ; 75 3.2.3 特权级 ; 79 3.3 页式存储 ; 99 3.3.1 分页机制概述 ; 100 3.3.2 编写代码启动分页机制 ; 101 3.3.3 PDE和PTE ; 102 3.3.4 cr3 ; 105 3.3.5 回头看代码 ; 105 3.3.6 克勤克俭用内存 ; 107 3.3.7 进一步体会分页机制 ; 117 3.4 中断和异常 ; 124 3.4.1 中断和异常机制 ; 126 3.4.2 外部中断 ; 128 3.4.3 编程操作8259A ; 130 3.4.4 建立IDT ; 133 3.4.5 实现一个中断 ; 134 3.4.6 时钟中断试验 ; 136 3.4.7 几点额外说明 ; 138 3.5 保护模式下的I/O ; 139 3.5.1 IOPL ; 139 3.5.2 I/O许可位图(I/O Permission Bitmap) ; 140 3.6 保护模式小结 ; 140 第4章 让操作系统走进保护模式 ; 142 4.1 突破512字节的限制 ; 142 4.1.1 FAT12 ; 143 4.1.2 DOS可以识别的引导盘 ; 148 4.1.3 一个最简单的Loader ; 149 4.1.4 加载Loader入内存 ; 150 4.1.5 向Loader交出控制权 ; 159 4.1.6 整理boot.asm ; 159 4.2 保护模式下的“操作系统” ; 161 第5章 内核雏形 ; 163 5.1 用NASM在Linux下写Hello World ; 163 5.2 再进一步,汇编和C同步使用 ; 165 5.3 ELF(Executable and Linkable Format) ; 167 5.4 从Loader到内核 ; 172 5.4.1 用Loader加载ELF ; 172 5.4.2 跳入保护模式 ; 178 5.4.3 重新放置内核 ; 187 5.4.4 向内核交出控制权 ; 192 5.4.5 操作系统的调试方法 ; 193 5.5 扩充内核 ; 201 5.5.1 切换堆栈和GDT ; 201 5.5.2 整理我们的文件夹 ; 208 5.5.3 Makefile ; 208 5.5.4 添加中断处理 ; 217 5.5.5 两点说明 ; 235 5.6 小结 ; 236 第6章 进程 ; 238 6.1 迟到的进程 ; 238 6.2 概述 ; 239 6.2.1 进程介绍 ; 239 6.2.2 未雨绸缪——形成进程的必要考虑 ; 239 6.2.3 参考的代码 ; 241 6.3 最简单的进程 ; 241 6.3.1 简单进程的关键技术预测 ; 242 6.3.2 第一步——ring0→ring1 ; 244 6.3.3 第二步——丰富中断处理程序 ; 260 6.3.4 进程体设计技巧 ; 271 6.4 多进程 ; 273 6.4.1 添加一个进程体 ; 273 6.4.2 相关的变量和宏 ; 274 6.4.3 进程表初始化代码扩充 ; 275 6.4.4 LDT ; 277 6.4.5 修改中断处理程序 ; 278 6.4.6 添加一个任务的步骤总结 ; 280 6.4.7 号外:Minix的中断处理 ; 282 6.4.8 代码回顾与整理 ; 286 6.5 系统调用 ; 297 6.5.1 实现一个简单的系统调用 ; 297 6.5.2 get_ticks的应用 ; 303 6.6 进程调度 ; 309 6.6.1 避免对称——进程的节奏感 ; 309 6.6.2 优先级调度总结 ; 317 第7章 输入/输出系统 ; 319 7.1 键盘 ; 319 7.1.1 从中断开始——键盘初体验 ; 319 7.1.2 AT、PS/2键盘 ; 321 7.1.3 键盘敲击的过程 ; 321 7.1.4 解析扫描码 ; 326 7.2 显示器 ; 342 7.2.1 初识TTY ; 342 7.2.2 基本概念 ; 343 7.2.3 寄存器 ; 345 7.3 TTY任务 ; 349 7.3.1 TTY任务框架的搭建 ; 351 7.3.2 多控制台 ; 357 7.3.3 完善键盘处理 ; 363 7.3.4 TTY任务总结 ; 371 7.4 区分任务和用户进程 ; 371 7.5 printf ; 374 7.5.1 为进程指定TTY ; 374 7.5.2 printf()的实现 ; 375 7.5.3 系统调用write() ; 378 7.5.4 使用pri ; 380 后记 ; 383 参考文献 ; 386 附录书中的章节和代码对照表 ; 387