Orange's一个操作系统的实现---心得与体会

前言

本科的时候,室友有一本《自己动手写操作系统》,曾拿来翻了一翻,觉得十分有趣,可惜当时要应付考研,没有时间好好看这本书。后来读研之后,马上入了一本,不过此时该书已经是第二版,叫《Orange’s 一个操作系统的实现》,却因自己畏难和拖延不决,一直到今天,马上要毕业了从把此书匆匆过了一遍。 不得不说,佩服作者的功力和心态,作者像是一个小孩,认真的为大家讲述他心爱的玩具是如何搭建的。在如今,实现一个这样的操作系统,并没有什么使用价值,只能作为学习的demo。为了搭建这个玩具,作者需要去了解x86架构的运行原理,内存的分页分段实现机制,8259A中断控制的部分原理和使用方法,还有文件系统、硬盘等等,我想当当是阅读这些设备组件的文档,就要耗去许多功夫,更别说调试的功夫。故在这种没有外界事物驱动的项目,若非有极大的热忱,是无论如何也坚持不下去。而我却连读完这本书这件事情都拖了3年,想来真是惭愧。

内容概述

整本书分为上下两篇,上篇的内容更为底层一些,因为本书是真正实现一个系统,所以上篇中有很多内容是有关硬件细节的,需要一定的汇编基础。下篇的内容则和我们平时接触的操作系统书籍有些类似,像IPC、文件系统、内存管理等更高级的话题,以C语言实现为主,也有部分汇编代码。内容大致分为: * 环境搭建—bochs、linux * cpu相关—引导扇区、保护模式 * 内核相关—内核雏形、进程、输入输出 * 进程通信IPC * 文件系统—硬盘驱动和简单的文件系统 * 内存管理—fork、MM的简单实现 * 让OS能够部署到真正的机器中 本文变不打算重复书中的实现细节,因为文字没有代码讲的清楚,作者的代码带有大量的注释,所有的细节都在其中。


环境搭建

网上对bochs的环境配置有很多资料,作者使用的bochsrc在ubuntu下需要做些简单的修改。具体的配置过程也可以参照我的另一篇blog:Ubuntu 12.04安装bochs 2.3.5.

cpu相关

第三章保护模式的内容是整本书的基础。后续章节讨论的内容都需要以此章的知识为基础。若你想深入了解操作系统实现的细节,本章是必须掌握的内容,当然如果你在本章遇到了困难,也可以先看后续章节,通过后续章节的知识来反馈本章的内容,也是一条可行之路,譬如博主就是这样做的。知识需要时间的沉淀,可能当时你很难理解的内容,过了一阵子,在其他知识的帮助下,你可以很顺利的理解它。然而,本章的内容你是无法糊弄过去,否则将会成为你理解是后续章节内容的傍脚石。 其中,保护模式的概念理解是一个坎,去网上了解下cpu发展的历史和相应的保护模式介绍内容将有助于你了解它。在理解概念后,书中所讲的只是如何通过汇编来使cpu进入保护模式而已,没有其他障碍。接着是整个操作系统运行原理的基石,分别为特权集的变化(特别是在变换时栈的变化)、中断的原理(8259A芯片的操作)和GDT、LDT、页式存储等一些重要的概念。

内核相关

在前面的章节中,我们写的程序是直接在引导程序中,而一个操作系统必然是要运行其他程序的,那么,自然要实现我们自己的内核。而一个操作系统从开机到运行。

大致经历“引导—>加载内核入内存—>跳入保护模式—>开始执行内核”。

这样看来引导区扇的512字节很可能不够,所以有必要实现一个loader来加载内核。第四章重点介绍了FAT12和loader的实现。第五章开始讲述内核的实现,其中一个重要的概念是ELF,类似于一种标准,告诉loader怎么加载程序。该章最后在内核中加入中断,这样一个内核雏形就完成了。第六章的讲述的是进程,操作系统中最重要的概念。在实现进程,除了我们已经了解的进程表的设置和进程调度算法外,本章提到的进程切换的特权集变换和栈空间的变换值得学习。当然,本章还实现了多线程,利用cpu时钟中断的机制实现。最后是系统调用,这里面涉及到讨论宏内核和微内核的内容,作者的选择是微内核。第七章是输入输出的内容,我兴趣不大,一带而过了。

进程通信IPC

本章节的内容没什么好说的,由于作者采用微内核,故在实现IPC时,需要有类似与MM的系统调用。

文件系统

一开始是对硬盘的介绍,目的是要实现一个硬盘的驱动程序。接着对文件系统的核心数据结构进行设计,见代码。

内存管理

内存管理本来是我十分感兴趣的一章,但是本书对该部分的内容算是浅尝而至,没有达到我对他的期望。不过,关于内存分配的细节还是能通过本章的例子了解不少。不过,本章的最后实现了一个简单的shell,算是一个补偿。

尾声

在书本的最后,作者将自己的操作系统安装到真正的机器中,作为本书的结尾。

总结

整本书读下来,虽然有不少知识点我不感兴趣,囫囵吞枣般的过去了,还是有不少收获。特别是对中断、栈空间、进程的理解有了进一步,下一步阅读有关操作系统方面经典的书籍应该会有不一样的体会,而且为我后面了解linux内核和android系统源码应该有不少帮助,这样我的目的也就达到了。

http://whbzju.github.com/blog/2013/02/23/tryos-xindetihui/

posted @ 2013-03-01 15:28  阿波zju  阅读(3006)  评论(1编辑  收藏  举报