Orange'S:一个操作系统的实现

出版社:电子工业出版社
出版日期:2009-6
ISBN:9787121084423
作者:于渊
页数:469页

章节摘录

  上篇  第2章 搭建你的工作环境
  我知道,现在你已经开始摩拳擦掌准备大干一场了,因为你发现,开头并不是那么难的。你可能想到了Linus,或许他在写出第一个引导扇区并调试成功时也是同样的激动不已;你可能在想,有一天,我也要写出一个Linux那样伟大的操作系统!是的,这一切都有可能,因为一切伟大必定是从平凡开始的。我知道此刻你踌躇满志,已经迫不及待要进入操作系统的殿堂。  可是先不要着急,古人云:“工欲善其事,必先利其器”,你可能已经发现,如果每次我们编译好的东西都要写到软盘上,再重启计算机,不但费时费力,对自己的爱机简直是一种蹂躏。你一定不会满足于这样的现状,还好,我们有如此多的工具,比如前面提到过的Bochs。  在介绍Bochs及其他工具之前,需要说明一点,这些工具并不是不可或缺的,介绍它们仅仅是为读者提供一些可供选择的方法,用以搭建自己的工作环境。但是,这并不代表这一章就不重要,因为得心应手的工具不但可以愉悦身心,并且可以起到让工作事半功倍的功效。  下面就从Bochs开始介绍。  2.1 虚拟计算机Bochs  即便没有听说过虚拟计算机,你至少应该听说过磁盘映像。如果经历过DOS时代,你可能就曾经用HD—COPY把一张软盘做成一个IMG文件,或者把一个IMG文件恢复成一张软盘。虚拟计算机相当于此概念的外延,它与映像文件的关系就相当于计算机与磁盘。简单来讲,它相当于运行在计算机内的小计算机。

前言

  做真正 Hacker的乐趣──自己动手去实践  2004年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不可能,恐怕是翻译稿,写这种书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理,还需要实际动手写出原型。  历史上的 Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这成为了 Linux第一个内核的雏形。  我想中国有能力写出内核原型的程序员应该也有,但把这个题目写成一本书,感觉上不会有人愿意做这件事情,作者要花很多时间,加上主题比较硬,销售量不会太高,经济上回报有限。  但拿来文稿一看,整个编辑部大为惊艳,内容文笔俱佳,而且绝对原创,马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评。  不过有很多读者还是质疑:现在软件编程主要领域是框架和应用,还需要了解操作系统底层吗?  经过四年的磨练成长,于渊又拿出第二版的书稿《Orange’S:一个操作系统的实现》,这本书是属于真正 Hacker的。我虽然已经有多年不写代码了,但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令,对系统的每个部分都了如指掌。  黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域,例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的,如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器。  回答前面读者的质疑,学软件编程并不需要看这本书,想成为优秀程序员和黑客的朋友,我强烈建议你花时间来阅读这本书,并亲自动手实践。正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。  好奇心是动力的源泉,追究问题的本质是优秀黑客的必备素质,只有充分掌握了系统原理,才能在技术上游刃有余,才能有真正的创新和发展。中国需要更多真正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣。

内容概要

  于渊自述——性懒,好静,涉猎甚广,然所精者少。遇所好之事,譬如程序,必沉迷其中,恍恍然如癫如痴。  读书非多,然每读必思,偶有心得,自得其乐。遇知其所云者,欣然以为知音,必邀之共饮,所饮不必多,喜闻觥筹铿锵之声,与谈笑交错,快意淋漓。  本性固执,喜钻研,求本质,不满于浮光掠影,故凡可能之事,必躬亲而后快。以求甚解之心,究操作系统之原委,并亲为之,耗时数月,咸雏形。回顾此历程,自有一番甘苦,乃以此记录,与同道分享。虽有贻笑方家之虑,然凡此种种,皆切身之感受,所感所想,点滴皆为领悟,故心下坦然。若恰能为后来者借鉴一二,心当甚慰。

书籍目录

上篇第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 改造printf
9.23 总结
第10章 内存管理
10.1 fork
10.1.1 认识fork
10.1.2 fork前要做的工作(为fork所做的准备)
10.1.3 fork()库函数
10.1.4 MM
10.1.5 运行
10.2 exit和wait
10.3 exec
10.3.1 认识exec
10.3.2 为自己的操作系统编写应用程序
10.3.3 “安装”应用程序
10.3.4 实现exec
10.4 简单的shell
10.5 总结
第11章 尾声
11.1 让mkfs()只执行一次
11.2 从硬盘引导
11.2.1 编写硬盘引导扇区和硬盘版loader
11.2.2 “安装”hdboot.bin和hdldr.bin
11.2.3 grub
11.2.4 小结
11.3 将OS安装到真实的计算机
11.3.1 准备工作
11.3.2 安装Linux
11.3.3 编译源代码
11.3.4 开始安装
11.4 总结
参考文献

编辑推荐

  畅销书《自己动手写操作系统》第二版。  ?从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。    翔实的文字,丰富的图表,清晰的代码,作者亲自用LAATEX排版,内容与形式并重。  人性化的代码组织,帮读者关注每节重点,完备的行号标识,便于读者对照实际代码。  专属网站和邮件列表,方便读者交流。  立足实践层面,关注动于操作过程中的细节,一步一步熟读者完成自己的操作系统:最简单的Boot Sector-由Boot Sector和Loader加载的内核-实现一个和多个进程-多控制台-进程间通信-轻巧的FS-简单的MM-自己的C运行时库-运行自己的应用程序-在真机进行自己操作系统。

作者简介

《Orange S:一个操作系统的实现》从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身,同时关注完成这些代码的思路和过程。本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理,而且使整个开发过程少走弯路。本书分上下两篇,共11章。其中每一章都以前一章的工作成果为基础,实现一项新的功能。而在章的内部,一项大的功能被分解成许多小的步骤,通过完成每个小的步骤,读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣。
本书适合各类程序员、程序开发爱好者阅读,也可作为高等院校操作系统课程的实践参考书。

图书封面


 Orange'S:一个操作系统的实现下载 精选章节试读 更多精彩书评



发布书评

 
 


精彩书评 (总计17条)

  •     可以Download一下这本电子书进行一下汇编科普http://book.friddle.me/Language/assmbely/x86.pdf链接不管用的时候请自行搜索:简明X86汇编教程。那本汇编语言那本书。怎么说了,不太适合做手册,还有很多命令没有涉及。这本书的汇编知识说的较好
  •     在OS的世界里, 有太多看起来听起来学起来复杂万分的理论。 看过一本 linux内核源码 , 貌似就叫这个书名, 那本书是一个教书带领学生们花了一个学年的成果, 教授没有把干燥乏味的OS理论灌输给他的学生们, 而是让他的学生们分成小组, 对linux内核的每个部分替换, 替换成自己的, 比如, 调度算法, 让同学们实现自己的调度算法, 替换掉linux的, 然后让系统还能正常运行, 到最后, 他们一个班级基本把linux大框架的东西全都替换了, 而且可以运行。 于渊的这本书是我半年前在学校门口买的, 买之前看过他的第一版, 第一版不叫这个名字, 但内容相差不多。 作者从一开始就让读者一步一步创建可用的系统, 每过一章你都有一个完整的可以运行的东西, 从16位到32切换等, 中断, 在这里都很通俗很简单的实现。 使知识一目了然。据作者介绍, 这个orange的名字是他女朋友起的, 这个本不是书评相关的, 可是却很相关, 每个优秀的程序员(攻城尸), 如果能有一个女人在背后默默的支持着前进, 那有多么的幸福。
  •     影视中喜欢周迅,看过她的《橘子红了》,她演完这部电视后,更红了。这本书的第一版我读过,很好,相信读过第一版的读者都有这种感觉。我想作者在第一版出版的时候就火了,所以这第二版的封面就用《橘子红了》来寓意吧,O(∩_∩)O~第二版比第一版不仅仅是“开发平台”的不同,更多的精彩与不同还需要我们自己细细品味。

精彩短评 (总计57条)

  •     准备学习,现在还不是
  •     嗯,非常非常非常赞,操作系统看一百本理论书不如自己动手写一个。只是后半部分难度骤升~
  •     读的非常累,而且偷懒没有跟着写代码实现,但是收获依然非常大。看完觉得过去操作系统都白学了。
  •     应该是国内唯一一本讲OS实践的书,内容很棒,同时也如作者所说“很硬”
  •     long long ago读过,遗憾那时候晚上断电没机会实践
  •     此前对Linux内核感兴趣的时候,知道了有这么一本书。当时我就被震惊了,原来还真的可以一个人写出一个操作系统。书讲得很深入浅出,绝对不多讲,用到什么就讲什么,也不跳步骤,对于想了解一个操作系统是怎么构成怎么运作的人来说,的确是一本非常好的书。当然如《Linux内核全注释》也不错,但是看那种书总觉得有些目无全牛和自底向上(我的水平可能不够吧),无法理解一个系统的整体构成。可惜我还没有时间去把书里的代码一点一点敲一次编译运行一次,以后有空一定补上
  •     一本真正让你明白什么是操作系统的书,以前课本上的分页,分段,中断,终于可以亲手实践了!
  •     彻底低剥去了操作系统的美丽外衣。。。虽然是很简陋的,但是Step-by-Step,各中奥妙自然出现。。。。是计算机组成原理+接口+操作系统,完美结合啊!
  •     刚上研究生时自己想写一个操作系统内核,于是买了这本书。自己写内核时没有完全按照这本书做,而是参考了很多网上其他的资料。不过总的来说这本书很不错,如果想自己写个mini内核玩玩,可以先读下这本书,这样能对整体有个大致的了解,然后各个部分的细节可以在网上查查资料深入学习。这本书里介绍了很多大学里不会介绍的内容,而又是自己写内核必须了解的内容。 通过自己写一个内核,可以把大学四年学的所有东西都串一遍,建议大家有空都能自己动手写一个。
  •     了不起
  •     操作系统底层实现入门
  •     Orange S:一个操作系统的实现
  •     我觉得写的有些敷衍,不过国人写的要求不能太高,算是能过关了。
  •     前几天读了一点,所以Mark一下吧。。。update:0411//
  •     总体来说,如果对汇编,和硬件编程感兴趣的同学,这本书是非常好的入门+实践书,部分概念的解释有些啰嗦,但是对于初学者这种啰嗦恐怕时最需要的。另外需要注意的是书本提供的代码在64位 linux是会有编译错误的,所以大家可能要自备32位的虚拟机来进行操作系统的学习。每章结束后的代码在https://github.com/wdxtub/wdxos,如果觉得不够详细,还是去下载全部的源码慢慢一步一步走比较好哈。
  •     买书没碟
  •     Deep learning,还需努力。
  •     读了三年的OS实现书,毕业前一定要看完! 好吧,毕业前看完了前半部分
  •     汇编及计算机架构最建华介绍书籍
  •     要配合代码看,不然你会很晕很晕滴。。
  •     从第一版就看过。当初是讲嵌入式的老师推荐的。以前看不懂,后来看懂了。不过每次看完都会忘掉。
  •     Orange S
  •     一本不错的参考,自己写OS未必要循着作者的足迹。
  •     感觉帮助一般,对于实际工作还得研究具体操作系统
  •     买了回家,一直没读,有时间要读一下!
  •     tutorial式cs书的一个不错典范
  •     Operating System
  •       也许题目写的有些太夸张了,但是这本书给我的感觉真的很好,虽然确实很难,要想要静下心来一步步全部读完真的不易,我也只是读了一大半而已,将他标记为已读,是因为我觉得可能以后也不会再读这本书了,也纪念一下可能离我远去的程序员的梦想
      现在的工作需要编程,但是不需要这么深入的了,还记得当时准备找工作的时候自己每天在这里啃这本书,一天天神魂颠倒,呵呵,那真是一段忙碌苦逼的日子,但是现在想起来却有一些怀念,有着梦想,有着坚持,不管多难,只要坚持下去,最后的收获一定是you deserve it!
      现在每天都还会坚持看一些书,技术方面的,人文方面的,历史金融方面的,实际觉得很多时候自己知道的真的是太少了,从7月份毕业到现在差不多看了10本书,会继续这个节奏的,一个人懂得太少容易自以为是,懂得越多就会越彬彬有礼,魅力、气场都会越来越强,而且看问题,解决问题的思路就会越宽广,越有效,而这些恰恰是一个人不管在什么方面能否卓越发展的关键
      学无止境,共勉
  •     挺喜欢他的风格,由简入难,很实用。
  •     非常简单的讲解了一个操作系统的设计与实现,是一个自己开发操作系统可以选择的工具书。
  •     终于读完了〜太太太太太不容易了!
  •     (2011-2013)
  •     边读边实现,非常好。弄了两三个月终于算弄出个摸样了。
  •     完完整整的从头读到尾了,挺不错的,起码自己对os的过程有了一个概念
  •     看到作者更新了版本就到taobao买了打印版本的,挺好的,如果有了第一版的基础,第二版看起来会熟悉很多。
  •     终于读完啦!真正翻到最后一页的时候,不禁长舒一口气,图书馆依旧安静,周围的同学都在干着自己的事情,我内心却说不出的激动。要说这最后一页,我早就看了不知多少遍,但是这次才是真真正正的读完了。从上一个星期开始,每天从早到晚都在读这本书,晚上睡觉前也念念不忘,这是第一本舍不得放下的专业书。然而毕竟不是小说,读的时候会碰到障碍,每当这个时候总是往后翻,看到后面那么些有意思的内容,想着赶紧读啊。中间因为保护模式、进程、进程间通信、硬盘驱动停了好几次,不过还好坚持下来了,也不枉我最后实现shabby shell时候的激动。致敬于渊老师,毕竟读完代码和编写代码和书层次还不一样。好啦,是时候接着出发了,tinyshell的ICS作业还没写呢,linux0.12源码还没读呢。welcome to cosmos
  •     良心之作,但略显虎头蛇尾,代码组织混乱
  •     很赞,大二的时候,跟同学一起,花了一个暑假,把里面的内容时间了一遍。
  •     虽然读了一个星期都没有读懂有木有,但是感谢本书提供的代码T T虽然最后助教都懒得问我问题。。。
  •     草泥马文件系统那里开始也太乱了。。一大段代码贴上去。看得想死
  •     买了用来储存的,
  •     不适合初学者,有点过于纠结细节
  •     各种错误。。 动手写操作系统就是要有和代码同归于尽的精神/二哈
  •     前半部分以自己的思路来收拾整理,很细致清晰,后半部分贴代码居多,照搬minix
  •     可以结合《操作系统设计与实现》一起看。
  •     非常不错,理论和实践的结合
  •     操作系统实践入门,很不错~
  •     给了一个可以实际操作的步骤,因为简单,所以可行
  •     将操作系统理论和实践联合起来的超赞书籍!!
  •     这个寒假在家看的,很不错的介绍操作系统的书
  •     从实践的角度上来说觉得还好,不过可吐槽的地方挺多的。,
  •     正在看,于渊老师的书不错
  •       觉得有些细节方面写得不够深入透彻,直接贴代码了事~想完全弄明白自己实现一遍还得自己Google大量的资料、不如《Linux0.11内核完全注释》透彻、细腻。总得来说还是可以,可以让人对内核的实现有个大概的印象,不至于找不到学习的方向~
  •     还是有些地方讲的不是很清楚,可能我要求高了点吧. 不过对于了解底层实现机制还是很有帮助的. CPU真是提供了好多东西啊....
  •     作为原创的书,还是给五星,不错。上篇和第一本完全是一样的,无需多言,下篇采用的微内核,借鉴意义不是很大。而且标记在只,只算是看完,下篇没有亲自动手实践。最后翻开第一版看时间的时候,发现已经是2年过去了,怅然良久。
  •     大致看了下,asm代码基本略过,主要看实现思路和关键代码.....#asm代码好难看=.=#
  •     好难,为了写操作系统实验看得,还有一半不看了= =
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024