日期:2014-05-16  浏览次数:20644 次

Linux内核0.12——微机组成结构

冯诺依曼体系结构计算机:CPU、ALU、存储器、输入输出设备

总线:

传统PC总线:CPU通过数据总线、地址总线和控制总线与外部设备进行通信,所有的外部设备都将连都这三条总线上,也就是说只有CPU和外部设备两个层次,效率肯定不行

现代PC总线:在intel的设计中,CPU、AGP和存储器接口连在了I/O北桥上,其他的传输速度较慢的设备则连接到I/O南桥上,包括CPU在内的所有硬件都加入了缓冲,缓冲区通常是容量小的、存取速度接近于上一层的,这样整个计算机性能就相对平衡了

I/O端口与访问控制:

端口:即I/O端口地址,CPU通过I/O端口地址来与端口通信

I/O控制器:包含了访问数据的数据端口、输出命令的命令端口和访问控制器执行状态的状态端口

端口编址:

1)统一编址:即存储器印象编址,将I/O控制器中的端口地址归入存储器寻址地址空间范围内,使用访问内存的命令即可访问

2)独立编址:将I/O控制器的寻址空间单独作为一个独立的地址空间(I/O地址空间),每个端口对应一个I/O地址,并使用独立的I/O指令来访问

在Linux下可以在 /proc/ioports 文件里看见各类端口的I/O地址范围

接口的访问控制方式:

1)程序循环查询方式:CPU通过在程序中循环查询指定设备控制器中的状态来判断是否可以与设备进行数据交换(一看就感觉好耗费时间的。。。)

2)中断处理控制方式:只有当I/O设备通过中断向CPU提出处理请求时,CPU才会暂时执行中断请求(大多数设备I/O的控制方式)

3)DMA传输方式:用于I/O设备与系统内存之间进行批量数据传送,整个过程需要专门的DMA控制器来进行而无需CPU插手(效率高啊!)

主存储器(以16MB物理内存的Linux0.1x系统为例):0~640KB用作内核代码和数据的存放区;640KB~1MB用作显示缓冲区、VGA ROM BIOS、其他卡ROM BIOS、其他BIOS映射区和ROM BIOS 映射区;Linux内核中不使用BIOS功能,也不使用BIOS设置的中断向量表

BIOS:

1、存放于ROM中

2、主要用于计算机开机时执行系统各部分自检,建立起操作系统需要使用的各种配置表,并且把处理器和系统其余部分初始化到一个已知的状态

3、为DOS的等操作系统提供硬件设备接口服务

BIOS工作(以4GB主存为例):开机时,CPU自动将CS置为0xF000,段基地址置为0xFFFF0000,段长度设置为64KB,IP置为0xFFF0,也即是4GB最后16B处;存放BIOS的ROM芯片就在此处,此处有一个jmp指令,跳转到BIOS代码中64KB中的某一条指令开始执行;

中断控制器:

中断控制器的中断入口被写入主存中的中断向量表中,开机时,硬件的中断请求会通过中断向量表开始进行开机的一系列准备工作,Linux系统并不直接使用默认的中断向量号

DMA控制器:

通过外部设备直接与内存传输数据来增强系统的性能,与内存的数据传输可以不受CPU控制

定时/计数器:

芯片类型多为intel 8253/8254可编程定时/计数器芯片;共有3个独立的16位计数器通道;3个定时/计数器通道分别用于时钟计时中断信号、动态内存DRAM刷新定时电路和主机扬声器音调合成;在Linux0.12中只对通道0进行了重新设置,这样每隔10ms发出一个信号产生中断请求,这个间隔定时是Linux0.12的脉搏

键盘控制器:

当一个键被按下时,键盘发送的扫描码成为接通扫描码;当按键松开时发送到扫描码成为断开扫描码;键盘控制器对接收到的键盘扫描码进行解码,并把解码后的数据发送到操作系统的键盘数据队列中;键盘扫描码共为11位的串行格式数据,2~9位是8位键盘扫描码,键盘控制器在收到11位数据后,通过中断控制器IRQ1引脚向CPU发送中断请求;

串行控制卡:

帧:通信过程中传输的一个有效数据长度单位的格式;有起始同步信息、传输实际数据和校验等信息组成

异步和同步通信:异步在传输中(以字符为单位)可以停顿任意长时间;同步在传输中则是以不间断的N多帧为传输单位;如果将异步中的字符与同步中的帧对等的话,这两者是一样的

一个字符帧(异步):由一位起始位、八位数据位、一位奇偶校验位(可有可无)和几位停止位组成

显示控制:

1)单色显示适配器(MDA):仅支持黑白;显示规格80列*25行;一屏(一帧)需要4KB;有8KB显示内存;内存寻址范围:0xb0000开始的8BK空间

2)彩色图形适配器(CGA):支持7种彩色;有16KB显示内存(0xb8000~0xbc000);字符属性字节由1位闪烁标志位、3为背景色、1为高亮度标志位和3位前景色组成

软盘和硬盘控制器:

软盘驱动控制器:主要用于接收CPU发出的命令,根据命令向驱动器输出各种硬件控制信号,它需要完成串行到并行的数据转换、编码和校验,并且时刻监视驱动器的运行状态;

硬盘控制器:软盘控制器采用DMA信号,需要DMA控制器实施数据传输,而硬盘控制器采用高速数据块传输,所以更快,而且容量更大