原创 自己动手写操作系统

2010-3-19 08:58 1806 5 6 分类: 软件与OS

 


自己动手写操作系统


  一年多以前,电子工业出版社的张毅编辑告诉我说,有一位年轻的程序员,正在写一本《自己动手写操作系统》的书。知道这个消息,我既有点好奇,又有些担忧。如果是在十年前,这样题材的书将会是读者争相传阅的对象,毕竟20世纪90年代是软件的理想主义年代。但是在理想褪尽、实务未兴的尴尬的这两年,这样一本书在市场上究竟会遇到怎样的待遇,确实让人不敢乐观。不过,在阅读了样章之后,我深为作者清新的文笔、流畅的思路和扎实的技术功底所折服,于是请张毅为我引见了这位作者,即本书的作者于渊。 于渊非常年轻,却有着高人一筹的表达能力和技术视野,我觉得他是难得的技术写作人才,就鼓励他在《程序员》杂志开辟了一个技术专栏,专门剖析操作系统相关的技术。一年来这个专栏陆续发表了一系列文章,获得了不少读者的正面反馈。 然而,事实证明,我最初的担忧并不是没有道理的。一年多来,不断有人表达过他们对这样一个题材的不同看法。他们认为,相对于90年代中后期,现在的软件产业已经务实了很多,今天的程序员更关心的是如何尽可能快、尽可能简单地用软件解决实际问题,创造实际价值,在一个既定的秩序中寻找自己的生存空间,而不是异想天开地憧憬能成为Linus Torvalds式的旧秩序的“破坏者”。因此诸如软件过程、开发方法、系统集成、应用架构等“高级”的话题受到关注和欢迎,而诸如操作系统、编译原理之类的基础技术,已经是关心者寥寥了。他们非常怀疑,这样的一本书,对于一线的开发者是否有实际的意义?对于尚在寻找自己职业发展方向的初学者是否构成一种误导?这个问题相当尖锐,必须面对。我想这样一本书,至少在以下几个方面是具有重要的正面意义的。 首先,对于正在大学里学习计算机科学的学生来说,“操作系统原理”是重要的专业基础课。为了达到大学阶段教育的标准,这方面的知识应当认真学习。一些比较严肃的学校鼓励学生在学习这门课程的同时自己动手开发一个具体而微的操作系统。


1 马上动手写一个最小的“操作系统”1<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


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 PC7


<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.1.1 Virtual PC初体验8


2.1.2 创建你的第一个Virtual PC9


2.1.3 虚拟软盘研究12


2.1.4 虚拟软盘实战14


2.2 编译器(NASM & GCC18


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 Mode37


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 LDTLocal Descriptor Table58


3.2.3 特权级62


3.3 页式存储82


3.3.1 分页机制概述83


3.3.2 编写代码启动分页机制84


3.3.3 PDEPTE85


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 Bitmap123


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 NASMLinux下写Hello World146


5.2 再进一步,汇编和C同步使用148


5.3 ELFExecutable and Linkable Format150


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 第一步——ring0ring1227


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 ATPS/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


链接


http://www.xun6.com/file/825901ca3/%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.rar.html

文章评论1条评论)

登录后参与讨论

用户1035191 2010-3-22 11:26

谢谢推荐,这本书对理解LINUX和arm的几种工作模式应该会有帮助
相关推荐阅读
用户1409704 2013-08-06 08:35
二极管及其应用详解
二极管及其应用详解 两文档联发 二极管终极教程 PN结及其单向导电特性 半导体二极管的伏安特性曲线 二极管在实际中的应用 几种常用的特殊二极管 放大电路的三种基本分析方...
用户1409704 2013-08-06 08:34
CMOS 模拟电路设计
CMOS 模拟电路设计 《CMOS 模拟电路设计》是模拟集成电路设计课程的一本经典教材,作者从CMOS技术的前沿出发,结合丰富的工程和教学经验,对CMOS模拟电路设计的原理和技术以及容易被忽略...
用户1409704 2013-08-06 08:33
接口电路的浪涌冲击防护
接口电路的浪涌冲击防护和TVS的应用 目录 香港中明科技有限公司----技术应用部 一. 引 言 ---------------- 2 (一)雷电的危害 ---------------...
用户1409704 2010-09-26 09:07
altium summer 08破解文件下载
altium summer 08破解文件下载把dxp.exe 和 license.alf 文件放到你的altium summer 08 的目录下覆盖原文件就可以了,破解 可以实用,我在 快乐的用着。大...
用户1409704 2010-07-19 09:43
绝对经典的电子技术教材_电子学_吴利民译
绝对经典的电子技术教材_电子学_吴利民译本书是哈佛大学的经典教材,自出版以来已被译成多种语言版本。本书通过强调电子电路系统设计者所需的实用方法,即对电路的基本原理、经验准则以及大量实用电路设计技巧的全...
用户1409704 2010-07-16 10:12
新型PID控制及其应用290页3.7M陶永华主编
新型PID控制及其应用290页3.7M陶永华主编第1章 数字PID控制………………………………………………………………………1 1.1 PID控制原理…………………………………………………………………...
我要评论
1
5
关闭 站长推荐上一条 /2 下一条