Tag Archives: 操作系统

推荐一些实现操作系统内核有用的书籍或资料

Table of Contents

1 前言

自己本科的毕业设计是实现一个简单的操作系统内核,但是由于时间原因,只完成了一点点,包括引导加载程序,异常处理;当时考虑到大二大三自己的底层知识基础打得不好,再加上目前用C实现的内核是在太多了,要从头实现肯定会有抄袭的痕迹,所以打算完全用x86汇编语言实现,编译器用NASM,实现完之后确实汇编的东西基本的东西都捡回来了;在这里我整理一下自己实现这个内核过程中参考过的书籍、资料或者文献,希望对大家有所帮助。

2 一、x86汇编语言

虽然现在很少有使用汇编语言的场合,即使有,也尽量会被C取代,但是掌握汇编语言对于理解CPU和一些接口的工作原理至关重要。

intel cpu的官方手册,这手册是特别重要的,实现操作系统一定要看,特别是这几章节:卷1的第三章,主要讲intel cpu的程序运行环境,包括所有的寄存器,内存组织,堆栈结构等等;卷1的第六章,函数的调用过程,还有几个相关的重要指令、堆栈环境以及相关寄存器等等;卷3的第三章,主要讲解地址空间,重要;卷3的第四章,分页模式;卷3的第五章,保护模式,包括类型检查,越界检查以及特权级检查等;卷3的第六章,讲解异常处理;卷3的第七章,主要讲解任务,包括任务的数据结构、切换以及连接等;

  • 2.(美)Barry B.Brey.intel微处理器[M].北京:机械工业出版社,2008.

这本书我只看了一点,主要参考了一些指令,还有对选择子和描述符的讲解;

  • 3.Jeff Duntemann.Assembly Language Step-by-Step[M].美国:Wiley,2009.

这本书是为数不多的以NASM来讲解x86汇编语言的,而且讲得很详细,没有汇编语言的知识也能读懂,强烈推荐当做nasm的入门教材;

  • 4.吕晓庆.80386/486系统编程实践[M].浙江:浙江大学出版社,1993.

这本书很古老很古老了,找不到电子书,我是去我们学校的另一个校区的图书馆里面才找到的这本书,里面提供了很多关于保护模式编程的具体例子,用来理解intel cpu官方手册的绝佳教材,强烈推荐;

  • 5.罗克露 等编.计算机组成原理[M].北京:电子工业出版社,2004.

这本书是我们大二计算机组成原理课程的教材,主要用来复习一下微机接口的知识;

  • 6.谭毓安,张雪兰,李元章.Windows汇编语言程序设计实验指导[M].北京:清华大学出版社,2008.

当时我看intel cpu手册的时候,对卷3中的大部分内容理解得不是很透彻,通过这本书里面几个关于保护模式编程的例子,一下子就豁然开朗了好多,非常推荐配合intel cpu手册看的一本书;

  • 7.熊桂喜,赵海.PC机各类显示系统的编程及应用[M].北京:清华大学出版社,1992.

这也是一本很古老很古老的书籍,主要用来理解vga显示器编程的书籍,很好很强大;

  • 8.赵国相,张健,赵大鹏等.微型计算机原理与汇编语言程序设计[M].北京:科学出版社,2004.
  • 9.赵国相,于秀峰.微型计算机原理与接口技术[M].北京:科学出版社,2003.

这两本书是我们大三微机接口原理的课本,不推荐看,写得比较烂,而且还是实模式的讲解,太落后了,也是主要用来温习微机接口的知识;

3 二、操作系统理论及实现

  • 1.赵炯.Linux内核完全剖析[M].北京:机械工业出版社,2006

这本书的作者赵炯博士对linux的内核是非常熟悉的,是一位博士,国内市面上唯一对linux 0.12内核作出透彻剖析的一本书,非常强烈推荐,我就是通过这本书才知道怎么写cpu第0号到第20号的异常处理,当然,由于时间原因,我只看了前面几章,非常遗憾;书的开头有句非常经典的话:Read The F***ing Source Code;

  • 2.(荷)Andrew S.Tanenbaum.现代操作系统(英文影印版.第3版)[M].北京:机械工业出版社,2009.

这是荷兰科学家Tanenbaum写的操作系统理论教材;

  • 3.(美)ANDREW S.TANENBAUM,(美)ALBERT S.WOODHULL.操作系统设计与实现(第3版)[M].北京:清华大学出版社,2008.

这也是AST写的书,其实是Minix 3的最全面的手册,minix 是一个非常优秀的、适合学习操作系统实现的、但是内核代码量不是很大的操作系统,如果要想实现一个比较实际的、能跑起来的操作系统内核,建议好好研读minix的源代码和这本书;

  • 4.(美)Marshall Kirk McKusick,(美)George V. Neville-Neil.FreeBSD操作系统设计与实现[M].北京:中国电力出版社,2008.

这本书从一个比较高的角度分析FreeBSD操作系统的架构,里面的代码很少,主要讲OS的数据结构以及这些数据结构之间的联系;

  • 5.Behrouz A. Forouzan With Sophia Chung Fegan.计算机科学基础–从数据操纵到计算理论(英文影印版)[M].北京:高等教育出版社,2007.

这本书比较基础,讲一些很底层的运算和对计算机各个方面进行简单的入门介绍;

  • 6.John R. Levine.Linkers and Loaders[M].美国:Morgan Kaufmann,1999.

这本书是唯一一本讲解连接器和加载器的著作,非常难以理解,推荐;

  • 7.Maurice J.Bach.UNIX操作系统设计[M].北京:机械工业出版社,2006.

这本书是类似于上面介绍的那本freebsd的书,也是从一个很高的角度介绍unix的架构;

+8.Randal E. Bryant,David R. O’Hallaron.Computer Systems:A Programmer’s Perspective (2nd Edition)[M].美国:Addison Wesley,2010.
这本书强烈推荐,里面讲解程序的链接和装载过程非常精彩,让我深刻理解了动态链接过程;

  • 9.于渊.Orange’s:一个操作系统的实现[M].北京:电子工业出版社,2009.

对于这本书的推荐,我是有所保留的,网上书评也给得挺高,大一大二的时候翻过这本书,曾经很冲动的想自己写个内核;作者自己实现了一个内核orange,讲得非常详细,贴了挺多代码,希望只有一点C语言基础的读者通过阅读他的书籍就能实现自己的OS,个人认为有些时候好心办坏事,好多地方讲得有点罗嗦,结果很多读者因为没有具备相应的知识只有囫囵吞枣,照着他的代码敲一遍,当然这也是一种学习方法,不过我觉得读者应该具备相应的知识再去阅读此书,不要连汇编语言都不会使就去阅读,否则碰到不会知识的时候,像书中序言所说的那样,学到再用,又得去翻其他的书籍,理解之后又回来看,来来回回折腾会需要更多的时间去理解这个内核的整体性,我希望读者具有足够的知识的时候再去阅读就能够理解书中的大部分内容,如果要阅读源代码,还是推荐linux 0.12和minix的代码,对理解实现很有帮助,本书的作者也是参考minix的代码,书中的很多地方有很深的模仿minix痕迹;当然,我没有看完这本书,只看了前几章,个人愚见,如有不妥,欢迎拍砖;

  • 10.俞甲子,石凡,潘爱民.程序员的自我修养–副标题: 链接、装载与库[M].北京:电子工业出版社,2009.

这本书也比较深奥,讲解连接器和装载器的入门书籍,作者的内功很深厚,推荐;

这个链接是博主实现操作系统内核的一个博客,要很好地理解intel卷3的内容,推荐阅读这里的代码;

评论同上。

这个链接讲解ELF的文件格式,浅显易懂;

ELF文件格式

这个网站是操作系统内核开发爱好者聚集的社区,它的维基页面有很多入门的资料和文献,强烈推荐;

4 三、工具

  • 1.Richard M. Stallman,Roland McGrath,Paul D. Smith.GNU Make[M].美国:Free Software Foundation,2004.

GNU make 的官方手册

  • 2.《GNU Make项目管理》(Managing projects with GNU Make)

Oreilly介绍gnu make的动物书,有很多gnu make的语法例子,强烈推荐;

  • 3.uClinux源代码中Make文件完全解析

详细讲解uClinux makefile的书籍,和上面一本书作为学习写makefile的绝佳书籍组合,如有疑问,可配合gnu make的官方手册查看;

  • 4.鸟哥.鸟哥的Linux私房菜 基础学习篇(第二版)[M].北京:人民邮电出版社,2007.

linux基础,命令,工具链啊,什么的;

NASM的官方手册,NASM的宏很强大,请仔细学习手册里面的宏的用法;

bochs模拟器的用户手册;

晦涩难懂的AT&T语法的gnu汇编器的官方手册

这本书是gnu ld连接器的手册。

以上书籍的电子书在网上基本都能找到,一些国内的书找不到,只能到图书馆里面翻,有的链接可能已经失效,如果这样,请自行Google之。

Date: 2012-11-27T04:06-0500

Author: User

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0