在intel平台下开发操作系统内核的必读书籍
![](https://img9.doubanio.com/icon/u66900413-5.jpg)
这本书我读了大概两遍,说来惭愧,现在虽然知道这本书写的什么,可是很多细节在我现在不使用汇编以后有点淡忘了,但是这不妨碍我写它的评论。
那一年冬天,我忽然对UNIX产生了浓厚的兴趣,开始阅读了UNIX的设计原理,就是Bach的那本《UNIX操作系统设计》,这本书的写作背景似乎还在AT&T的不准泄露UNIX源代码的条款下进行的,所以读者可以看到书中没有一处UNIX源代码的举例,但那本书真的比UNIX的内部工作原理写得很清楚。设计操作系统内核毕竟不是说干就干的事情,前期的很多准备都是必要的,知识上的就有IBM-PC,尤其是AT的架构,还有外围各种借口芯片的了解,现代CPU的工作原理的理解(计算机组成原理和微型计算机是应该好好学的,可是我当时没有重视这些,但是也不是多大的损失,从编程的兴趣上出发一样可以弥补那些知识)。此外,当然还有操作系统的原理的丰富知识,包括如何引导操作系统内核。
这个知识是如何获得的,我现在都有些忘了,但是感觉是很漫长的一个过程,需要太多的积累,我当时的想法就是从原理出发,白手起家设计一个内核,其实这需要太多太多的知识。无论是Linus设计Linux内核,Bill Joy设计BSD内核,他们都是从在钻研了操作系统内核源代码以后入手的。即使AST设计Minix也是在讲授了Lions的书多年以后开始的,也可以说是深谙操作系统源代码的。因此设计操作系统最好的开始就是从读源代码开始。
话题有些远了。在写引导程序之前显然是要学习汇编语言,选择开发平台和工具的。我在微机原理课上自学了8086实模式下的编程,这个还是非常有用的,由于实模式下的汇编比较简单,可是很好入手汇编语言的编程,推荐书自然是王爽老师的那本。开发平台自然是类UNIX系统了,linux,FreeBSD都可以。汇编器和链接器分别是as和ld,而as采用的汇编格式是AT&T的,因此就需要学习这个了。后来就发现了这本书。
这本书很好,讲解清楚,而且例子丰富,可是仅仅是32位平台上的编程,没有讲到实模式和保护模式这些。因此对于写引导仍然是不够的。后来又读了《80x86汇编语言程序设计》,那本书当时看着很好,但是再我读了《Programming the 80386》以后就觉得这两本还是不能相提并论的,因此如果有谁想了解这方面的,可以直接读后者。
那一年冬天,我忽然对UNIX产生了浓厚的兴趣,开始阅读了UNIX的设计原理,就是Bach的那本《UNIX操作系统设计》,这本书的写作背景似乎还在AT&T的不准泄露UNIX源代码的条款下进行的,所以读者可以看到书中没有一处UNIX源代码的举例,但那本书真的比UNIX的内部工作原理写得很清楚。设计操作系统内核毕竟不是说干就干的事情,前期的很多准备都是必要的,知识上的就有IBM-PC,尤其是AT的架构,还有外围各种借口芯片的了解,现代CPU的工作原理的理解(计算机组成原理和微型计算机是应该好好学的,可是我当时没有重视这些,但是也不是多大的损失,从编程的兴趣上出发一样可以弥补那些知识)。此外,当然还有操作系统的原理的丰富知识,包括如何引导操作系统内核。
这个知识是如何获得的,我现在都有些忘了,但是感觉是很漫长的一个过程,需要太多的积累,我当时的想法就是从原理出发,白手起家设计一个内核,其实这需要太多太多的知识。无论是Linus设计Linux内核,Bill Joy设计BSD内核,他们都是从在钻研了操作系统内核源代码以后入手的。即使AST设计Minix也是在讲授了Lions的书多年以后开始的,也可以说是深谙操作系统源代码的。因此设计操作系统最好的开始就是从读源代码开始。
话题有些远了。在写引导程序之前显然是要学习汇编语言,选择开发平台和工具的。我在微机原理课上自学了8086实模式下的编程,这个还是非常有用的,由于实模式下的汇编比较简单,可是很好入手汇编语言的编程,推荐书自然是王爽老师的那本。开发平台自然是类UNIX系统了,linux,FreeBSD都可以。汇编器和链接器分别是as和ld,而as采用的汇编格式是AT&T的,因此就需要学习这个了。后来就发现了这本书。
这本书很好,讲解清楚,而且例子丰富,可是仅仅是32位平台上的编程,没有讲到实模式和保护模式这些。因此对于写引导仍然是不够的。后来又读了《80x86汇编语言程序设计》,那本书当时看着很好,但是再我读了《Programming the 80386》以后就觉得这两本还是不能相提并论的,因此如果有谁想了解这方面的,可以直接读后者。
有关键情节透露