《Linux内核完全注释》(1)
1 概述
1.1 Linux发展
1.1.1 Unix
Unix诞生于1969年,1972年用C语言进行改写,使其能够广泛推广。
1.1.2 Minix
基于Unix,一群老师研发了minix用于教学,但是由于不开源,功能也不够,只够用于教学。这激发了Linus开发了Linux操作系统。
1.1.3 GNU计划
在1984年,为了推广开源操作系统,让大家都有一个可以用的操作系统,自由软件基金会搞了GNU计划。在这个计划中最终诞生的操作系统内核被称为Linux。当然GNU项目也开发出了很多高质量的免费软件,用于配套Linux进行使用。比如emacs编辑系统、bash shell程序、GCC、gdb调试程序等。GNU促成了Linux的发展,因此,现在有很多人仍将Linux操作系统称为“GNU/Linux”系统。
1.1.4 POSIX标准
由IEEE和ISO/IEC开发的操作系统调用服务接口标准。从UNIX时代发展而来。随后当Linux在1991-1993年间刚刚起步时,也做得符合Unix的POSIX标准。
1.1.5 Linux的诞生
讲了托瓦茨在大学期间研发Linux取代Minix的故事。
1.1.6 Linux版本变迁
本书分析的0.12版本在1992年1月15日发布。1.0正式版在1994年3月14日发布。
linux名字由来
略
linux早期贡献者
略
1.2 内容综述
bootimage-0.12.Z:引导内核启动的镜像文件。
rootimage-0.12.Z:根文件系统
linux-0.12.tar.Z:内核源代码
as86.tar.Z:16位汇编器链接程序软件包。
INSTALL-0.11:是简单安装说明文档。
0.12版本的内核尚不包括有关专门的进程等待队列、TCP/IP网络方面的代码。
2 微型计算机组成结构
2.1 微型计算机组成原理
传统的IBM PC的组成原理,还主要介绍了南桥和北桥芯片的使用规则。
2.2 IO端口的寻址和访问控制方式
独立编址:I/O控制器等外设,与存储器,地址分开,通过一个额外的分辨方式访问IO或者存储器。
统一编址:把IO控制器的端口地址归入存储器寻址地址空间范围。
接口访问控制:程序查询方式PIO,中断处理方式,DMA传输方式。
2.3 存储器
- 主存储器:这里的存储器是内存,也就是RAM。RAM按照系统的要求和实际挂在地址和用途,会分为不同的块以实现不同的功能。
- BIOS:会装机的肯定都知道BIOS,其用于计算机开机时执行系统各部分的自检,并检测一些必要的外设,建立各种配置表。
- CMOS存储器:存放实时时钟信息和系统硬件配置信息。一般通过纽扣电池供电。掉电后时钟复位,原系统配置信息会丢失。
2.4 控制器/卡
2.4.1 中断控制器
80X86使用两片级联的8259A实现中断控制器,最多可支持16个终端控制。其中有2个是保留,1个是可选网络接口,剩余的支持内部和外部多种中断。与单片机相比,其可以接受很多外设的中断,这边的外设是整正的基于人的(HMI)输入输出设备,比如键盘、鼠标、硬盘、软盘、串口、并口、协处理器等。
2.4.2 DMA控制器
由8237芯片或其兼容芯片完成该功能,与MCU的DMA类似。
2.4.3 定时器
8253/8254是一种可编程定时器芯片。(泰勒基了,1990年的时钟外设还需要一颗独立的芯片)Linux 0.12使用了通道0,使其工作在方式3下,并且每隔10毫秒(100Hz)发出一个内部时钟中断信号(IRQ0)。这个就是Linux0.12的内核工作脉搏时钟(心跳时钟)。
2.4.4 键盘控制器
主要是介绍PS/2接口键盘的工作流程,如今PS/2的键鼠已经基本遇不到了。主机的键盘控制器专门用来对接收到的键盘扫描码进行解码,并把最终数据放松到操作系统的键盘数据队列中。
2.4.5 串行控制卡
就是串口通信协议,这是一种比较古老的通信协议,自从计算机诞生之时就存在了。由起始位、数据位、奇偶校验位、停止位构成,异步通信时,也要设置相同的波特率。一般当时的PC机都会使用RS232标准的串口进行通信。
2.4.6 显示控制
单色MDA、彩色CGA、EGA、VGA。
2.4.7 软盘和硬盘控制器
软盘通常使用聚酯薄膜作为基片,而机械硬盘一般以金属铝合金作为基片。一张软盘使用上下两个磁头在盘片两面读写数据,盘片大概300转每分钟,3.5英寸的1.44MB盘含有80个磁道,每个磁道有18个扇区,每个扇区512字节。这样的盘传输速率大概为500Kbps。