分类: 系统运维
2012-04-10 19:50:38
计算机系统的基本组成:
1、输入/输出部分
2、处理中心
3、能源
传统IBM-PC结构:
现代PC机还包括2个超大规模芯片构成的芯片组或芯片集:
1、北桥:用于和CPU、内存和AGP视频接口。速率高,还有存储器控制作用,因此Intel将芯片标号称为MCH(Memory Controller Hub)芯片。
2、南桥:用来管理低、中速的组件,如PCI总线、IDE硬盘接口、USB接口等。因此称为ICH(I/O Controller Hub)。
命名原因:Intel将这两个芯片放在主板的上端和下端,并起着与CPU进行通道桥接的作用。
通常一个I/O控制器包含三个端口:
1、数据端口:访问数据。
2、命令端口:输出命令。
3、状态端口:访问控制器执行状态。
端口地址设置方法通常有两种:
1、统一编址:将I/O控制器的端口地址归入存储器寻址空间范围内。此时CPU访问端口的操作和访问内存的操作是一样的。
2、独立编址:把I/O控制器和控制卡的寻址空间单独作为一个独立的地址空间对待,称为I/O地址空 间。此时每个端口有一个I/O地址与之对应,并且使用专门的I/O指令来访问端口。
IBM-PC主要采用独立编址。使用ISA总线的传统PC其I/O地址空间为0x000-0x3FF,有1024个I/O端口地址。
部分使用统一编址方式。
对于使用EISA或PCI总线的现代PC机,有64KB的I/O地址空间。在Linux中通过cat /proc/ioports查看相关控制器或设置使用的I/O地址范围。
PC机I/O接口数据传输控制方式:
1、程序循环查询方式:CPU通过在程序中循环查询设备控制器的状态来判断是否可以数据交换。优点:不需要过多硬件支持,使用和编程简单。缺点:特别耗费CPU时间,多任务操作系统很少使用。
2、中断处理方式:需要有中断控制器的支持。只有当I/O设备通过中断向CPU提出请求时,CPU才会暂时中断当前执行的程序转而去执行相应的I/O中断处理服务过程,执行之后返回继续执行程序。当发出中断请求时,CPU通过中断向量表(中断描述符表)寻址相应的中断处理服务过程。Linux中大多数设备I/O控制使用这种方式。
3、DMA传输方式:Direct Memory Access,直接存储器访问。用于I/O设备与系统内存之间进行批量数据传输,整个过程需要使用专门的DMA控制器而无需CPU。由于传输中没有软件介入,故效率很高。Linux中,软盘驱动程序使用中断和DMA方式配合实现数据的传输工作。
主存储器:
计算机上电初始化后,物理内存被设置成从0开始的连续区域。
除了地址从0xA0000(640K处)到0xFFFFF(1M处)共384K和0xFFFE0000到0xFFFFFFFF(4G的最后一个64K)范围以外所有内存都可用作系统内存。而这两块内存被用于I/O设备和BIOS程序。
假设:我们机器有16MB内存,则:
0---640K:存放内核代码和数据。Linux内核不使用BIOS功能,也不使用BIOS设置的中断向量表。
640K-1M:图中说明的用途。
1M-16M:被内核用于可分配的主内存区。
另外,高速缓冲区和内存虚拟盘也会占用内核代码和数据后面的一部分区域,该区域通常会跨越640K-1M的区域。
BIOS:基本输入/输出程序
存放在ROM中的BIOS用于计算机开机时执行系统各部分自检,建立起操作系统需要的各种配置表,如中断向量表、硬盘参数表。并把处理器和系统其他部分初始化到一个已知状态,还为DOS等操作系统提供硬盘设备接口服务。Linux在初始化时会使用BIOS提供的一些系统参数以外,在Linux运行时并不使用BIOS的功能。
上电过程(Linux):
上电或复位后,CPU会自动把CS寄存器设置为0xF000,段基地址设置为0xFFFF0000,段长度为64KB。
而IP被设为0xFFF0,因此此时CPU代码指针指向0xFFFFFFF0处。这里是系统ROM BIOS存放位置。
而那里有一条Jmp指令跳到BIOS的64KB代码中某一位置开始执行。
执行硬件检测和初始化后,把与原来PC机兼容的64KB BIOS代码和数据复制到内存低端1M末端的64K处。
然后跳转到这个地方让CPU进入真正的实地址模式工作。
最后,BIOS从硬盘或其他设备把操作系统引导程序加载到0x7c00处,并跳转继续执行。
32位大模式:由于目前BIOS大多有1M-2M,并存储在ROM中,因此为了能执行或访问BIOS中超过64KB范围且又不在0-1M地址空间的代码或数据,BIOS采用32位大模式技术,把数据段寄存器访问范围设置成4G(而非原来的64K),这样可以在0到4G范围内执行和操作数据。
CMOS:
存储容量一般为64或128字节,存放计算机的实时时钟信息和系统硬件配置信息。
这部分内存通常与实时时钟芯片(Real Time Chip)做在一块集成块中。
CMOS内存的地址空间在基本内存地址空间之外,需要使用I/O指令访问。
中断控制器:
IBM-PC使用两片级联的8259A可编程中断控制芯片组成一个中断控制器。能为15个设备提供独立的中断控制功能。初始化时,计算机会初始化两块芯片,并分配15级中断优先级。同时在内存开始处0x000-0xFFF区域建立一个中断向量表。但是这些设置违背了Intel公司的要求,因为Linux在内核初始化的时候又重新设置了这两个芯片。
Linux系统执行初始化操作时,会重新设置中断请求号与中断向量号的对应关系。
DMA控制器:
在PC/AT机中,使用了两片8237芯片,因此其有8个独立的通道可用,后4个为16位通道。软盘控制器被指定使用DMA通道2。
在使用通道前需要设置,牵扯到三个端口:
1、页面寄存器端口。
2、(偏移)地址寄存器端口。
3、数据计数寄存器端口。
由于DMA寄存器是8位,而地址和计数值是16位,因此各自需要发送两次。
定时/计数器:
采用Intel 8253/8254,是可编程定时/计数器芯片,用于处理计算机中精确时间延迟。
提供了3个独立的16位计数器通道。每个通道可工作在不同方式下,可通过软件设置。延时到时后,会向CPU发送一个中断信号。
3个通道分别用于:
日时钟计时中断信号。
动态内存DRAM刷新定时电路。
主机扬声器音调合成。
Linux 0.11只对通道0进行了重新设置,使得计数器工作在方式3下,每间隔10毫秒发出一个信号以产生中断请求信号(IRQ0)。这个间隔就是Linux 0.11内核工作的脉搏,用于切换当前执行的任务和每个任务使用的系统资源量(时间)。