一、x86计算机的组成成分
1.1 主板(motherboard)
微型计算机的核心是它的主板,这是一块平板电路板,上面放置着计算机的CPU、支持处理器(芯片组)、主存储器、输入输出连接器、电源连接器和扩展槽。各种组件通过总线相互连接,总线是直接蚀刻在主板上的一组电线。PC市场上有几十种主板,扩展能力、集成组件和速度各不相同。传统上,PC主板上有以下组件:
- CPU插槽。插槽的形状和大小不同,这取决于它们支持的处理器类型
- 内存插槽(SIMM或DIMM),容纳小型插入式内存板
- BIOS(basic input-output system)计算机芯片、持有系统软件
- CMOS RAM,带有一个小的圆形电池以保持供电
- 大容量存储设备(如硬盘驱动器和CD-ROM)的连接器
- 为外部设备提供的USB接口
- 键盘和鼠标接口
- 用于声卡、图形卡、数据采集板和其他输入输出设备的PCI总线连接器
如下的部件是可选的:
以下是系统中一些重要的支持处理器:
PCI及PCI Express总线架构
PCI(Peripheral Component Interconnect)总线在CPU和其他系统设备(如硬盘驱动器、内存、视频控制器、声卡和网络控制器)之间提供连接桥。PCI Express总线在设备、内存和处理器之间提供了双向串行连接。它以数据包的形式传输数据,类似于网络,在单独的“通道”中。它被图形控制器广泛支持,并且可以以非常高的速度传输数据。
主板芯片集
主板芯片组是处理器芯片的集合,设计用于在特定类型的主板上协同工作。各种芯片组具有提高处理能力、多媒体功能或降低功耗的功能。英特尔P965 Express芯片组可以作为一个例子。它用于台式PC机上,既有Intel Core 2 Duo处理器,也有Pentium D处理器。以下是它的一些特点:
- 英特尔快速内存访问使用更新的内存控制器集线器(MCH)。它可以访问双通道DDR2内存,在800兆赫的时钟速度。
- I/O控制器集线器(Intel ICH8/R/DH)使用Intel矩阵存储技术(MST)支持多个串行ATA设备(磁盘驱动器)。
- 支持多个USB端口、多个PCI express插槽、网络和Intel Quiet系统技术
- 高清音频芯片提供数字声音功能。
如图2-6所示。主板制造商将围绕特定的芯片组生产产品。例如,华硕公司的P5B-E P965主板就使用了P965芯片组:
1.2 内存
基于Intel的系统中使用了几种基本类型的存储器:只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmable read-only memory,EPROM)、动态随机存取存储器(dynamic random-access memory,DRAM)、静态RAM(static RAM,SRAM)、视频RAM(video RAM,VRAM)和互补金属氧化物半导体( complimentary metal oxide semiconductor,CMOS)RAM:
- ROM是烧录在芯片上的,永远不能被擦除
- EPROM可以用紫外线缓慢擦除并重新编程
- DRAM,俗称主存储器,是程序运行时保存程序和数据的地方。它很便宜,但必须每毫秒刷新一次,以避免丢失内容。有些系统使用ECC(错误检查和纠正)内存。
- SRAM主要用于昂贵的高速缓存。它不必刷新。CPU高速缓存由SRAM组成。
- VRAM保存视频数据。它是双端口的,允许一个端口连续刷新显示器,而另一个端口将数据写入显示器。
- 系统主板上的CMOS RAM存储系统设置信息。它是由电池刷新的,所以当电脑关机时,它的内容会保留下来。
二、输入输出系统
应用程序通常从键盘和磁盘文件读取输入,并将输出写入屏幕和文件。I/O不需要通过直接访问硬件来完成,而是可以调用操作系统提供的函数。I/O可用于不同的访问级别,其主要有三个层次:
- 高级语义功能:高级编程语言,如C++或java,包含执行输入输出的功能。这些功能是可移植的,因为它们工作在各种不同的计算机系统上,并且不依赖于任何一个操作系统。
- 操作系统:程序员可以从称为API(应用程序编程接口)的库中调用操作系统函数。操作系统提供高级操作,例如将字符串写入文件、从键盘读取字符串以及分配内存块
- BIOS:基本输入输出系统是一个低级子程序的集合,这些子程序直接与硬件设备通信。BIOS由计算机制造商安装,并根据计算机硬件进行定制。操作系统通常与BIOS通信。
设备驱动器
设备驱动程序是允许操作系统直接与硬件设备和系统BIOS通信的程序。例如,设备驱动程序可能从操作系统接收到读取某些数据的请求;设备驱动程序通过在设备固件中执行以设备特有的方式读取数据的代码来满足该请求。设备驱动程序通常以以下两种方式之一安装:(1)在将特定硬件设备连接到计算机之前,或(2)在连接并识别设备之后。在后一种情况下,操作系统识别设备名称和签名;然后定位设备驱动程序软件并将其安装到计算机上。
我们可以以一个例子来透视I/O层次结构(图2-7),这个例子是应用程序在屏幕上显示一串字符。其中包括以下步骤:
- 应用程序中的语句调用将字符串写入标准输出的HLL库函数。
- 库函数(级别3)调用操作系统函数,传递字符串指针。
- 操作系统函数(级别2)使用一个循环来调用BIOS子例程,将每个字符的ASCII代码和颜色传递给它。操作系统调用另一个BIOS子例程将光标前进到屏幕上的下一个位置。
- BIOS子例程(级别1)接收字符,将其映射到特定的系统字体,并将字符发送到连接到视频控制器卡的硬件端口。
- 视频控制器卡(0级)向视频显示器生成定时硬件信号,控制像素的光栅扫描和显示。
在各个层次进行编程
汇编语言程序在输入输出编程方面具有强大的功能和灵活性。我们可以在以下访问层次中进行选择 (图2.8所示):
- 第三层:调用库函数来执行通用文本I/O和基于文件的I/O。
- 第二层:调用操作系统函数以执行通用文本I/O和基于文件的I/O。如果操作系统使用图形用户界面,则它具有以独立于设备的方式显示图形的功能。
- 第一层:调用BIOS函数来控制特定于设备的功能,如颜色、图形、声音、键盘输入和低级磁盘I/O。
- 第零层:从硬件端口发送和接收数据,对特定设备具有绝对控制权。这种方法不能用于各种各样的硬件设备,因此我们说它是不可移植的。不同的设备通常使用不同的硬件端口,因此必须为每种特定类型的设备定制程序代码。
那么在给各个层次我们需要进行怎样的折衷?其中最主要的就是控制与可移植性。级别2(OS)适用于运行相同操作系统的任何计算机。如果I/O设备缺乏某些功能,操作系统将尽最大努力接近预期结果。级别2不是特别快,因为每个I/O调用在执行之前必须经过几层。
级别1(BIOS)适用于所有具有标准BIOS的系统,但不会在所有系统上产生相同的结果。例如,两台计算机可能具有不同分辨率的视频显示器。一级程序员必须编写代码来检测用户的硬件设置,并调整输出格式以匹配。级别1比级别2运行得更快,因为它只比硬件高一个级别。
级别0(硬件)与通用设备(如串行端口)以及由已知制造商生产的特定I/O设备一起工作。使用此级别的程序必须扩展其编码逻辑以处理I/O设备中的变化。实模式游戏(Real-mode game)程序是最好的例子,因为它们通常控制计算机。这个级别的程序以硬件允许的最快速度执行。
例如,假设您想使用音频控制器设备播放WAV文件。在操作系统级别,您不必知道安装了什么类型的设备,也不必担心声卡可能具有的非标准功能。在BIOS级别,您将查询声卡(使用其安装的设备驱动程序软件),并找出它是否属于具有已知功能的某类声卡。在硬件级别,我们可以利用每个声卡的特殊功能,对某些型号的声卡的程序进行微调。