最新帖子 精华区 社区服务 会员列表 统计排行
主题 : 自己动手写操作系统介绍及pdf下载
admin 离线
级别: 管理员
UID: 1
精华: 1
发帖: 997
金币: 526 个
银元: 488 个
铜钱: 7853 个
技术分: 601 个
在线时间: 736(时)
注册时间: 2010-04-21
最后登录: 2018-04-20
楼主  发表于: 2010-04-25   

自己动手写操作系统介绍及pdf下载

管理提醒: 本帖被 admin 从 阶段2讨论区 移动到本区(2016-11-20)

经典指数:
难度指数:

简介

  本书在详细分析操作系统原理的基础上,用丰富的实例代码,一步一步地指导读者用C语言和汇编语言编写出一个具备操作系统基本功能的操作系统框架。本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图。书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理,而且使整个开发过程少走弯路。全书共分7章。附CD-ROM光盘一张。

目录   ·  ·  ·  ·  ·  ·

第1章 马上动手写一个最小的“操作系统”1
1.1 准备工作1
1.2 10分钟完成的操作系统1
1.3 Boot Sector3
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 PC9
2.1.3 虚拟软盘研究12
2.1.4 虚拟软盘实战14
2.2 编译器(NASM & GCC)18
2.3 安装虚拟Linux19
2.4 在虚拟Linux上访问Windows文件夹26
2.5 安装虚拟PCDOS26
2.6 其他要素29
2.7 Bochs29
2.7.1 Bochs vs. Virtual PC vs. VMware30
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 实模式到保护模式,不一般的jmp45
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和PTE85
3.3.4 cr388
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 编程操作8259A113
3.4.4 建立IDT116
3.4.5 实现一个中断117
3.4.6 时钟中断试验119
3.4.7 几点额外说明121
3.5 保护模式下的I/O122
3.5.1 IOPL122
3.5.2 I/O许可位图(I/O Permission Bitmap)123
3.6 保护模式小结123
第4章 让操作系统走进保护模式125
4.1 突破512字节的限制125
4.1.1 FAT12126
4.1.2 DOS可以识别的引导盘131
4.1.3 一个最简单的Loader132
4.1.4 加载Loader入内存133
4.1.5 向Loader交出控制权142
4.1.6 整理boot.asm142
4.2 保护模式下的“操作系统”144
第5章 内核雏形146
5.1 用NASM在Linux下写Hello World146
5.2 再进一步,汇编和C同步使用148
5.3 ELF(Executable and Linkable Format)150
5.4 从Loader到内核155
5.4.1 用Loader加载ELF155
5.4.2 跳入保护模式161
5.4.3 重新放置内核170
5.4.4 向内核交出控制权175
5.4.5 操作系统的调试方法176
5.5 扩充内核184
5.5.1 切换堆栈和GDT184
5.5.2 整理我们的文件夹191
5.5.3 Makefile191
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→ring1227
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 LDT260
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 初识TTY325
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 printf357
7.5.1 为进程指定TTY357
7.5.2 printf()的实现358
7.5.3 系统调用write()361
7.5.4 使用printf()363
后记366
参考文献369
附录书中的章节和代码对照表370

书评:
用一个月左右的时间读了《自己动手写操作系统》,这是一本让人读着很过瘾,却也特别累的一本书。 
   
  对操作系统的兴趣由来已久,只是一直未能找到入门之径。操作系统教材是个令人生畏的东西,它可以告诉人有什么,却不能告诉人为什么,从那里了解的操作系统有如盲人摸到的象,得到各个部分,却不能拥有整体,加之缺乏实践的支持,理论显得苍白空洞。如Linux般的开源操作系统,虽然可以让人坐拥全部源码,但一来规模庞大,让人不知从何入手,二来源码背后更多的是业务——操作系统和硬件知识,不了解业务的人很难凭一己之力破解源码的奥秘。客观如此,更重要的还是主观的不努力。 
   
  《自己动手写操作系统》则为如我一般挑剔的人打开了一扇门,从一点一滴的小处着手,一步步构建出一个简陋的操作系统雏形——Tinix,虽然它还不具备任何实际的价值,甚至算不上一只五脏俱全的麻雀,但对于想走近操作系统的人来说,这已经足够了,如果能够随着它一路走来,至少可以具备更进一步的基础,再去遨游广阔天地,便不会迷失于庞杂的理论与源码之中。 
   
  这本书的名字给人的提示是,它是一本以实践为基础的书,因此,阅读之初我便给自己定下了步步紧跟的策略。照着书敲代码也难免出错,再者书中有一些遗漏,只有对比光盘中提供的源码才能发现其中的细微之处,所以,常常是一段代码要花相当长的时间进行调试。实践证明,这种方法需要花费相当的精力,这也是我为什么会认为读这本书很累的原因。但是这种做法对于理解书中内容大有裨益。看明白,做一遍,调试,这是几个截然不同的境界。很多细节的东西,只有经过调试才能发现。即便是自己编写的代码,如果没有经过调试,恐怕也难说真正的理解。 
   
  作者在后记中写到,这本书最大的价值在于,它让操作系统的实现这个问题变得具备“可操作性”。正是因为这样,我才可以追随它一步步走来。在这点上,我读到第三章《保护模式》就已经体会颇深了。我曾经读过很多关于保护模式的内容,不过,由于缺乏实验,我只是了解一些概念,却不曾深刻体会。在第三章中,通过一个个简单的小例子,切换至保护模式,设置GDT和LDT,使用分页,中断处理等等书本上的概念活灵活现的展现在我的面前,那些艰涩的概念一下子便得再简单不过了。 
。。。。
几年前刚开始读这本书的时候,对操作系统的运行机制尚不清楚。当时所读过的一些关于操作系统的书,都只是针对存储管理,进程调度,文件管理等功能模块的实现原理进行分析。理论过多,缺乏实践,读完这些书,依旧茫然,不知道写一个操作系统究竟要从何入手,只是空留下了一堆支离破碎的代码。 
   
  随着阅读的深入,一边读一边调试书中所写的代码,操作系统的面貌也随之变得越来越清晰。这只是一本关于操作系统实现的入门书,作者实现了一个极其简陋的操作系统内核,虽然如此,但是却足以拨开我心中的迷雾。对于聪明的读者来说,这些简单的内容恰到好处,已经足够引领他们登堂入室,步入操作系统的圣殿。读完之后,我终于对操作系统有了一个比较全面的认识。同时也在使用 Linux,GCC 的过程中,发现了一个 Windows 之外的精彩世界。 
   
  现在,回首这几年所走过的操作系统学习之路,很庆幸当初没有选择阅读庞大复杂的 Linux 源码入门。也终于明白了,做好一件事情,其实并不需要有一个很高的起点,但是一定要有一个正确的方向。我会继续朝着心中的梦想前行。

本书下载地址:http://ishare.iask.sina.com.cn/f/10584970.html
云栖隐者 离线
级别: 菜鸟
UID: 228
精华: 0
发帖: 9
金币: 0 个
银元: 40 个
铜钱: 75 个
技术分: 0 个
在线时间: 1(时)
注册时间: 2010-11-11
最后登录: 2014-06-11
沙发  发表于: 2010-11-11   
我来抢个沙发吧~楼主心寒了~~~
1900 离线
级别: 菜鸟
UID: 165
精华: 0
发帖: 31
金币: 0 个
银元: 40 个
铜钱: 145 个
技术分: 0 个
在线时间: 1(时)
注册时间: 2010-11-10
最后登录: 2011-04-22
板凳  发表于: 2010-11-13   
從來沒想過自己寫操作系統,唉,看來是牛人,偉大的人比較有偉大的目標!要重新審視自己了!
yanjing1226 离线
级别: 菜鸟
UID: 399
精华: 0
发帖: 13
金币: 0 个
银元: 10 个
铜钱: 5 个
技术分: 0 个
在线时间: 0(时)
注册时间: 2010-11-17
最后登录: 2010-12-03
地板  发表于: 2010-11-17   
支持,我已经下载拉
dortmund 离线
级别: 菜鸟
UID: 241
精华: 0
发帖: 76
金币: 0 个
银元: 25 个
铜钱: 0 个
技术分: 0 个
在线时间: 14(时)
注册时间: 2010-11-11
最后登录: 2016-09-06
4楼  发表于: 2010-11-17   
thanks
454725315 离线
级别: 菜鸟
UID: 355
精华: 0
发帖: 12
金币: 0 个
银元: 40 个
铜钱: 4 个
技术分: 0 个
在线时间: 6(时)
注册时间: 2010-11-14
最后登录: 2011-04-20
5楼  发表于: 2010-11-19   
谢谢版主
hahaing 离线
级别: 菜鸟
UID: 529
精华: 0
发帖: 19
金币: 0 个
银元: 10 个
铜钱: 25 个
技术分: 0 个
在线时间: 0(时)
注册时间: 2010-11-29
最后登录: 2010-12-01
6楼  发表于: 2010-12-01   
谢谢楼主~~
wubaobao 离线
级别: 菜鸟
UID: 1007
精华: 0
发帖: 93
金币: 0 个
银元: 10 个
铜钱: 425 个
技术分: 0 个
在线时间: 1(时)
注册时间: 2011-01-10
最后登录: 2011-01-10
7楼  发表于: 2011-01-10   
thanks
tempname2001 离线
级别: 菜鸟
UID: 1547
精华: 0
发帖: 7
金币: 0 个
银元: 40 个
铜钱: 65 个
技术分: 0 个
在线时间: 1(时)
注册时间: 2011-03-02
最后登录: 2011-03-15
8楼  发表于: 2011-03-02   
国内难得一见的好书!!
kobe_tim 离线
级别: 菜鸟
UID: 1797
精华: 0
发帖: 8
金币: 0 个
银元: 25 个
铜钱: 70 个
技术分: 0 个
在线时间: 1(时)
注册时间: 2011-03-17
最后登录: 2011-03-17
9楼  发表于: 2011-03-17   
难度比较大,慢慢读
描述
快速回复

如果您在写长篇帖子又不马上发表,建议存为草稿
认证码:

验证问题:
printf("%d", 103)
按"Ctrl+Enter"直接提交