标题：Orange S:一个操作系统的实现
图书信息
作者：于渊  出版社: 电子工业出版社; 第1版 (2009年6月1日) 
平装: 469页 
正文语种: 汉语 
开本: 16 
ISBN: 9787121084423 
条形码: 9787121084423 
产品尺寸及重量: 26.6 x 20.6 x 3 cm ; 898 g
内容简介
《Orange S:一个操作系统的实现》从只有二十行的引导扇区代码出发，一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身，同时关注完成这些代码的思路和过程。本书不同于其他的理论型书籍，而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能，从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题，这些细节不仅能使读者更深刻地认识操作系统的核心原理，而且使整个开发过程少走弯路。本书分上下两篇，共11章。其中每一章都以前一章的工作成果为基础，实现一项新的功能。而在章的内部，一项大的功能被分解成许多小的步骤，通过完成每个小的步骤，读者可以不断获得阶段性的成果，从而让整个开发过程变得轻松并且有趣。
本书适合各类程序员、程序开发爱好者阅读，也可作为高等院校操作系统课程的实践参考书。
编辑推荐
·畅销书《自己动手写操作系统》第二版。
·从只有二十行的引导扇区代码出发，一步一步地向读者呈现一个操作系统框架的完成过程。
翔实的文字，丰富的图表，清晰的代码，作者亲自用LAATEX排版，内容与形式并重。
人性化的代码组织，帮读者关注每节重点，完备的行号标识，便于读者对照实际代码。
专属网站和邮件列表，方便读者交流。
立足实践层面，关注动于操作过程中的细节，一步一步熟读者完成自己的操作系统：最简单的Boot Sector－由Boot Sector和Loader加载的内核－实现一个和多个进程－多控制台－进程间通信－轻巧的FS－简单的MM－自己的C运行时库－运行自己的应用程序－在真机进行自己操作系统。
作者简介
于渊自述——性懒，好静，涉猎甚广，然所精者少。遇所好之事，譬如程序，必沉迷其中，恍恍然如癫如痴。 读书非多，然每读必思，偶有心得，自得其乐。遇知其所云者，欣然以为知音，必邀之共饮，所饮不必多，喜闻觥筹铿锵之声，与谈笑交错，快意淋漓。 本性固执，喜钻研，求本质，不满于浮光掠影，故凡可能之事，必躬亲而后快。以求甚解之心，究操作系统之原委，并亲为之，耗时数月，咸雏形。回顾此历程，自有一番甘苦，乃以此记录，与同道分享。虽有贻笑方家之虑，然凡此种种，皆切身之感受，所感所想，点滴皆为领悟，故心下坦然。若恰能为后来者借鉴一二，心当甚慰。
目录
上篇
第1章 马上动手写一个最小的“操作系统” 
1.1 准备工作 
1.2 十分钟完成的操作系统 
1.3 引导扇区 
1.4 代码解释 
1.5 水面下的冰山 
1.6 回顾 
第2章 搭建你的工作环境 
2.1 虚拟计算机Bochs 
2.1.1 Bochs初体验 
2.1.2 Bochs的安装 
2.1.3 Bochs的使用 
2.1.4 用Bochs调试操作系统 
2.2 QEMU 
2.3 平台之争：Windows还是*nix 
2.4 GNU/Linux下的开发环境 
2.5 Windows下的开发环境 
2.6 总结 
第3章 保护模式（Protect Mode） 
3.1 认识保护模式 
3.1.1 保护模式的运行环境 
3.1.2 GDT（Global Descriptor Table） 
3.1.3 实模式到保护模式，不一般的jmp 
3.1.4 描述符属性 
3.2 保护模式进阶 
3.2.1 海阔凭鱼跃 
3.2.2 LDT（Local Descriptor Table） 
3.2.3 特权级概述 
3.2.4 特权级转移 
3.2.5 关于“保护”二字的一点思考 
3.3 页式存储 
3.3.1 分页机制概述 
3.3.2 编写代码启动分页机制 
3.3.3 PDE和PTE 
3.3.4 cr3 
3.3.5 回头看代码 
3.3.6 克勤克俭用内存 
3.3.7 进一步体会分页机制 
3.4 中断和异常 
3.4.1 中断和异常机制 
3.4.2 外部中断 
3.4.3 编程操作8259A 
3.4.4 建立IDT 
3.4.5 实现一个中断 
3.4.6 时钟中断试验 
3.4.7 几点额外说明 
3.5 保护模式下的I/O 
3.5.1 IOPL 
3.5.2 I/O许可位图（I/O Permission Bitmap） 
3.6 保护模式小结 
第4章 让操作系统走进保护模式 
4.1 突破512字节的限制 
4.1.1 FAT12 
4.1.2 DOS可以识别的引导盘 
4.1.3 一个最简单的Loader 
4.1.4 加载Loader入内存 
4.1.5 向Loader交出控制权 
4.1.6 整理boot.asm 
4.2 保护模式下的“操作系统” 
第5章 内核雏形 
5.1 在Linux下用汇编写Hello World 
5.2 再进一步，汇编和C同步使用 
5.3 ELF（Executable and Linkable Format） 
5.4 从Loader到内核 
5.4.1 用Loader加载ELF 
5.4.2 跳入保护模式 
5.4.3 重新放置内核 
5.4.4 向内核交出控制权 
5.5 扩充内核 
5.5.1 切换堆栈和GDT 
5.5.2 整理我们的文件夹 
5.5.3 Makefile 
5.5.4 添加中断处理 
5.5.5 两点说明 
5.6 小结 
第6章 进程 
6.1 迟到的进程 
6.2 概述 
6.2.1 进程介绍 
6.2.2 未雨绸缪——形成进程的必要考虑 
6.2.3 参考的代码 
6.3 最简单的进程 
6.3.1 简单进程的关键技术预测 
6.3.2 第一步——ring0→ring1 
6.3.3 第二步——丰富中断处理程序 
6.4 多进程 
6.4.1 添加一个进程体 
6.4.2 相关的变量和宏 
6.4.3 进程表初始化代码扩充 
6.4.4 LDT 
6.4.5 修改中断处理程序 
6.4.6 添加一个任务的步骤总结 
6.4.7 号外：Minix的中断处理 
6.4.8 代码回顾与整理 
6.5 系统调用 
6.5.1 实现一个简单的系统调用 
6.5.2 get_ticks的应用 
6.6 进程调度 
6.6.1 避免对称——进程的节奏感 
6.6.2 优先级调度总结 
第7章 输入/输出系统 
7.1 键盘 
7.1.1 从中断开始——键盘初体验 
7.1.2 AT、PS/2键盘 
7.1.3 键盘敲击的过程 
7.1.4 用数组表示扫描码 
7.1.5 键盘输入缓冲区 
7.1.6 用新加的任务处理键盘操作 
7.1.7 解析扫描码 
7.2 显示器 
7.2.1 初识TTY 
7.2.2 基本概念 
7.2.3 寄存器 
7.3 TTY任务 
7.3.1 TTY任务框架的搭建 
7.3.2 多控制台 
7.3.3 完善键盘处理 
7.3.4 TTY任务总结 
7.4 区分任务和用户进程 
7.5 printf 
7.5.1 为进程指定TTY 
7.5.2 printf()的实现 
7.5.3 系统调用write() 
7.5.4 使用printf() 
下篇
第8章 进程间通信 
8.1 微内核还是宏内核 
8.1.1 Linux的系统调用 
8.1.2 Minix的系统调用 
8.1.3 我们的选择 
8.2 IPC 
8.3 实现IPC 
8.3.1 assert()和panic() 
8.3.2 msg_send()和msg_receive() 
8.3.3 增加消息机制之后的进程调度 
8.4 使用IPC来替换系统调用get_ticks 
8.5 总结 
第9章 文件系统 
9.1 硬盘简介 
9.2 硬盘操作的I/O 端口 
9.3 硬盘驱动程序 
9.4 文件系统 
9.5 硬盘分区表 
9.6 设备号 
9.7 用代码遍历所有分区 
9.8 完善硬盘驱动程序 
9.9 在硬盘上制作一个文件系统 
9.9.1 文件系统涉及的数据结构 
9.9.2 编码建立文件系统 
9.10 创建文件 
9.10.1 Linux下的文件操作 
9.10.2 文件描述符（file descriptor） 
9.10.3 open() 
9.11 创建文件所涉及的其他函数 
9.11.1 strip_path() 
9.11.2 search_file() 
9.11.3 get_inode()和sync_inode() 
9.11.4 init_fs() 
9.11.5 read_super_block()和get_super_block() 
9.12 关闭文件 
9.13 查看已创建的文件 
9.14 打开文件 
9.15 读写文件 
9.16 测试文件读写 
9.17 文件系统调试 
9.18 删除文件 
9.19 插曲：奇怪的异常 
9.20 为文件系统添加系统调用的步骤 
9.21 将TTY纳入文件系统 
9.22
序言
做真正 Hacker的乐趣──自己动手去实践
2004年我听编辑说有个年轻人写了本《自己动手写操作系统》，第一反应是不可能，恐怕是翻译稿，写这种书籍是要考作者硬功夫的，不但需要深入掌握操作系统的原理，还需要实际动手写出原型。
历史上的 Linux就是这么产生的，Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生，经常要用自己的电脑去访问大学主机上的新闻组和邮件，为了方便读写和下载文件，他自己编写了磁盘驱动程序和文件系统，这成为了 Linux第一个内核的雏形。
我想中国有能力写出内核原型的程序员应该也有，但把这个题目写成一本书，感觉上不会有人愿意做这件事情，作者要花很多时间，加上主题比较硬，销售量不会太高，经济上回报有限。
但拿来文稿一看，整个编辑部大为惊艳，内容文笔俱佳，而且绝对原创，马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评。
不过有很多读者还是质疑：现在软件编程主要领域是框架和应用，还需要了解操作系统底层吗？
经过四年的磨练成长，于渊又拿出第二版的书稿《Orange’S：一个操作系统的实现》，这本书是属于真正 Hacker的。我虽然已经有多年不写代码了，但看这本书的时候，让我又重新感受到做程序员的乐趣：用代码建设属于自己的系统，让电脑听从自己的指令，对系统的每个部分都了如指掌。
黑客（hacker）实际是褒义词，维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人，特别是他们所感兴趣的领域，例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的，如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器。
回答前面读者的质疑，学软件编程并不需要看这本书，想成为优秀程序员和黑客的朋友，我强烈建议你花时间来阅读这本书，并亲自动手实践。正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇，或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。
好奇心是动力的源泉，追究问题的本质是优秀黑客的必备素质，只有充分掌握了系统原理，才能在技术上游刃有余，才能有真正的创新和发展。中国需要更多真正的黑客，也希望更多的程序员能享受属于黑客的创造乐趣。