linux 0.11 内核完全注释V3.0学习笔记(一)
第1章 概述
1.1 Linux的诞生和发展
Linux操作系统是UNIX操作系统的一种克隆系统,诞生于1991年10月5日(第一次对外公布时间),Linux操作系统的诞生、发展和成长过程依赖以下5大支柱:UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。目前Linux内核版本已经开发到4.13.11稳定版本,获取kernel源码可从Linux官方网站下载https://www.kernel.org,通过https://www.kernel.org/pub/linux/kernel/选择相应版本下载,也可通过git获取源码git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git获取源码后可切换到相应版本分支上。
1.1.1 UNIX操作系统
UNIX操作系统是美国贝尔实验室Ken.Thompson和Denis Ritchie在DEC PDP-7小型计算机开发的一个分时操作系统。1969年夏Ken.Thompso在PDP-7使用BCPL(基本组合编程语言)一个月开发出了UNIX操作系统的原型,后经Denis Ritchie于1972年用移植性很强的C语言改写,使得UNIX系统在院校得到了推广。
1.1.2 MINIX操作系统
MINIX是一种基于微内核架构的类UNIX计算机操作系统,由Andrew S. Tanenbaum发明。MINIX最初发布于1987年,开放全部源代码给大学教学和研究工作。同时提供了用C语言和汇编语言编写的系统源代码。
1.1.3 GNU计划
GNU计划和*软件基金会FSF(the Free Software Foundation)是由Richard M.Stallman于1984年一手创办的,旨在开发一个类UNIX并且是*软件的完整操作系统。GNU是“GNU’s Not UNIX”的递归缩写。到90年代初,GNU项目已经开发初许多高质量的免费代码。其中包括有名的emacs编辑系统、bash shell程序、gcc系列编辑程序、gdb调试程序等,这些软件为Linux操作系统的开发创造了一个合适的环境。
1.1.4 POSIX标准
POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。
POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。
1991~1993年间,POSIX标准的制定正处在最后投票敲定的时候,也是Linux刚刚起步的时候,这个UNIX标准为Linux提供了极为重要的信息,使得Linux能够在标准的指导下进行开发,并能与绝大UNIX操作系统兼容。在最初的Linux内核源代码中(0.01版、0.11版)就已经为Linux系统与POSIX标准的兼容做好了准备工作。
1.1.5 Linux操作系统的诞生
1.1.6 Linux操作系统版本的变迁
1.1.7 Linux名称的由来
Linux操作系统刚开始并没有称作Linux,Linus给他的操作系统取名FREAX,怪诞的、怪物、异想天开的意思。在他将新的操作系统放到ftp.funet.fi服务器上时,管理员Ari Lemke很不喜欢这个名称,他认为是Linus的操作系统就取谐音Linux作为操作系统的目录吧,于是这个名称就这个流传下来。
1.1.8 早期Linux系统开发的主要贡献者
Thedore Ts’o(Ted Ts’o):Linux操作系统刚刚问世,怀着极大的热情为linux的发展提供了maillist,linux 0.10版添加了虚拟盘驱动程序ramdisk.c和内核内存分配程序kmalloc.c,最大贡献之一是提出并实现了ext2文件系统,该文件系统现已成为Linux文件系统标准,后面又推出了ext3文件系统,该系统大大提高了文件系统的稳定性和访问效率。
Alan Cox:Linux系统上TCP/IP网络代码的最早使用人之一,2001年负责维护linux内核2.4.x的代码。
Michael K.johnson:著名的linux文档计划的发起者之一。
Linux如今飞速发展,有着众多高手做出极大的贡献,具体名单可在Linux内核中的CREDITS文件查看,按字母列出了做出贡献的名单列表。
1.2 内容综述
Linux-0.11版本在1991年12月8日发布,发布时包含以下文件:
bootimgage.Z –具有美国键盘代码的压缩启动映像文件;
bootimgage是引导启动image文件,其中主要包含磁盘引导扇区代码,操作系统加载程序和内核执行代码。
rootimage.Z –用于向内核提供最基本支持的根文件系统,其中包括配置文件和命令执行程序。
as86.tar.Z –16位汇编链接程序软件包。
linux-0.11.tar.Z –linux 0.11内核源代码。
INSTALL-0.11 –linux 0.11系统简单安装说明文档。
Linux 0.11内核源代码结构列表如下:
本书各个章节介绍:
- 第2章:基于传统微机系统组成框图,主要介绍Linux内核运行之上的IBM PC/AT386微机的组成部分和介绍各大组成部分的功能和相互联系。
- 第3章:介绍Linux内核使用的编程语言、主要是阅读linux0.11源码所需的汇编语言和GNU C语言中的内嵌扩展知识。
- 第4章:80X86 CPU的体系结构以及保护模式下编程基础知识,主要包括:80X86基础知识、保护模式内存管理、中断和异常处理、任务管理及一个简单的内核示例。
- 第5章:内核体系结构及中断机制、系统调用和进程控制、堆栈等。
- 第6章:引导启动程序BOOTSECT.s、SETUP.s、HEAD.s。
- 第7章:初始化程序 main.c 。
- 第8章:kernel目录中所有程序,最重要部分进程调度函数schedule()、sleep()和有关系统调用程序。
- 第9章:kernel/blk_drv/目录下块设备驱动程序(磁盘、软盘)。
- 第10章:kernel/char_drv/目录下字符设备驱动程序(串行、键盘、显示器)
- 第11章:kernel/math/目录下数学协处理器仿真程序。
- 第12章:fs/文件系统程序,可参考书籍Andrew S.Tanenbaum。 《操作系统设计与实现》有关MINIX文件系统章节。
- 第13章:内存管理程序。
- 第14章:所有头文件的详细说明。
- 第15章:lib下所有文件。
- 第16章:tools/build.c,仅用于将内核的 磁盘引导程序块和其他主要内核模块连接成一个完整的内核映像。
- 第17章:实验环境和使用方法。
Linus开发linux主要参考3本书籍
- M.J.Bach 《UNIX操作系统设计》该书描述了UNIX System V内核的工作原理和数据结构
- John H Crawford 《Programming the 80386》是讲解80X86下保护模式编程方法的好书
- Andrew S.Tanenbaum 《操作系统设计与实现》使用了该书中描述的MINIX文件系统1.0版本