第二章 微型计算机组成结构
任何一个系统都是由4个基本部分组成:输入-处理中心-输出,整个系统由能源提供。
计算机系统可分为软件和硬件部分。
2.2 I/O
端口寻址和访问控制方式
2.2.1 I/O
端口和寻址
表 2-1 I/O
端口地址分配
端口地址范围 | 分配说明 | 端口地址范围 | 分配说明 |
---|---|---|---|
0x000~0x01F |
8237A DMA 控制器1 |
0x1F0~0x1F7 |
IDE 硬盘控制器0 |
0x020~0x03F |
8259A 可编程中断控制器 1 |
0x278~0x27F |
并行打印端口 2 |
0x040~0x05F |
8253/8254A 定时计数器 |
0x2F8~0x2FF |
串行控制器2 |
0x060~0x06F |
8402 键盘控制器 |
0378~037F |
并行打印机端口1 |
0x070~0x07F |
访问CMOS RAM /实时时钟RTC(Real Time Clock) 端口 |
0x3B0~0x3BF |
单色MDA 显示控制器 |
0x080~0x09F |
DMA 页面寄存器访问端口 |
0x3C0~0x3CF |
彩色CGA 显示控制器 |
0x0A0~0x0BF |
8259A 可编程控制器2 |
0x3D0~0x3DF |
彩色EGA/VGA 显示控制器 |
0x0C0~0x0DF |
8237A DMA 控制器2 |
0x3F0~0x3F7 |
软盘控制器 |
0x0F0~0x0FF |
协处理器访问端口 | 0x3F0~0x3F7 |
串行控制器1 |
0x170~0x177 |
IDE 硬盘控制器1 |
[root@my root]# cat /proc/ioports
0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0070-0077 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
03c0-03df : vga+
0400-041f : iTCO_wdt
0400-041f : iTCO_wdt
0680-069f : pnp 00:00
0930-0930 : PNP0C09:00
0930-0930 : EC data
0934-0934 : PNP0C09:00
0934-0934 : EC cmd
0cf8-0cff : PCI conf1
0d00-ffff : PCI Bus 0000:00
164e-164f : pnp 00:00
1800-18fe : pnp 00:00
1800-1803 : ACPI PM1a_EVT_BLK
1804-1805 : ACPI PM1a_CNT_BLK
1808-180b : ACPI PM_TMR
1830-1833 : iTCO_wdt
1830-1833 : iTCO_wdt
1850-1850 : ACPI PM2_CNT_BLK
1854-1857 : pnp 00:02
1880-189f : ACPI GPE0_BLK
e000-efff : PCI Bus 0000:02
e000-e0ff : 0000:02:00.0
f000-f03f : 0000:00:02.0
f040-f05f : 0000:00:1f.4
f040-f05f : i801_smbus
f060-f07f : 0000:00:17.0
f060-f07f : ahci
f080-f083 : 0000:00:17.0
f080-f083 : ahci
f090-f097 : 0000:00:17.0
f090-f097 : ahci
ff00-fffe : pnp 00:07
ffff-ffff : pnp 00:00
2.2.2 接口访问控制
PC
D的I/O
接口数据传输控制方式一般可以采用程序循环查询方式、中断处理方式和DMA
传输方式。
程序循环查询方式指CPU
通过在程序中循环查询指定设备控制器中的状态判断是否可以与设备进行数据交换。
中断处理方式需要中断控制器的支持。
**直接存储器访问(Direct Memory Access, DMA)
**方式用于I/O
设备与系统内存之间进行批量数据传送,整个操作过程需要使用专门的DMA
控制器来进行而无需CPU
插手。
2.3 主存储器、BIOS
和CMOS
存储器
2.3.1 主存储器
2.3.2 基本输入/输出程序BIOS
存放在ROM
中的系统BIOS
程序主要用于计算机开机时执行系统各部分的 自检,建立起操作系统需要使用的各种配置表,如中断向量表、硬盘参数表。Linux
运行时不使用BIOS
中的功能。
当计算机系统上电开机或者按了机箱上的复位按钮时,CPU
会自动把代码段寄存器CS
设置为0xf000
,其短地址则被设置为0xffff0000
,段长度设置为64KB
。IP
被设置为0xfff0
,此时CPU
代码指针指向0xfffffff0
处,即4GB
空间的最后64KB
的最后16B
处。
2.3.3 CMOS
存储器
在PC/AT
中,除需要使用内存和ROM BIOS
以外,还使用只有很少存储容量的(只有64B
或128B
)CMOS
(Complementary Metal Oxide Semiconductor
,互补金属氧化物半导体)存储器来存放计算机的实时时钟信息和系统硬件配置信息。
2.4 控制器和控制卡
中断控制器
如图2-6,在计算机开始初始化期间, ROM BIOS
会分别对两片8259A
芯片进行初始化,并分别吧15
级中断优先级分配给时钟定时器、键盘、串行口、打印口、软盘控制、协处理器和硬盘等设备或控制器使用。同时在内存开始出0x000~0xfff
区域捏建立一个中断向量表。
表2-2 开机时ROMBIOS
设置的硬件请求处理中断号
中断请求号 | BIOS 设置的终端号 |
用途 | 中断请求号 | BIOS 设置的终端号 |
用途 |
---|---|---|---|---|---|
IRQ0 |
0x08 (8) |
8253 发出的100Hz 时钟中断 |
IRQ8 |
0x70 (112) |
实时钟中断 |
IRQ1 |
0x09 (9) |
键盘中断 | IRQ9 |
0x71 (113) |
改向至INT 0x0A |
IRQ2 |
0x0A (10) |
接连从芯片 | IRQ10 |
0x72 (114) |
保留 |
IRQ3 |
0x0B (11) |
串行口2 |
IRQ11 |
0x73 (115) |
保留(网络接口) |
IRQ4 |
0x0C (12) |
串行口1 |
IRQ12 |
0x74 (116) |
PS/2 鼠标口中断 |
IRQ5 |
0x0D (13) |
并行口2 |
IRQ13 |
0x75 (117) |
数学协处理器中断 |
IRQ6 |
0x0E (14) |
软盘驱动器 | IRQ14 |
0x76 (118) |
硬盘中断 |
IRQ7 |
0x0F (15) |
并行口1 |
IRQ15 |
0x77 (119) |
保留 |
2.4.2 DMA
控制器
DMA
控制器的主要功能是通过外部设备直接与内存传输数据来增强系统性能。
2.4.3 定时/计数器
intel 8253/8254
是一个可编程定时/计数器(Programmable Interval Timer, PIT)
芯片,用于处理计算机中的精确时间延迟。该芯片有3
个独立的16
位计数器通道。
2.4.4 键盘控制器
我们使用的键盘是IBM
公司与1984
年研制的PC/AT
的兼容键盘,通常称为AT-PS/2
兼容键盘并只有101~104
个按键。
目前有3
套扫描码集(Scan Code Set
):
#1 第一套:原始XT
键盘扫描码集。
#2 第二套:现代键盘默认使用的扫描码集,通常称为AT
键盘扫描码集。
#3 第三套:PS/2
键盘扫描码集。
键盘控制器通常采用Intel 8042
单片微处理器芯片或其兼容电路。
表2-3 键盘控制器变成端口接收到的第一套扫描码集接通和断开扫描码示例
按键 | 接通扫描码 | 断开扫描码 | 说明 |
---|---|---|---|
A |
0x1E |
0x9E |
非扩展的普通键 |
9 |
0x0A |
0x8A |
非扩展的普通键 |
功能键F9 |
0x43 |
0xC3 |
非扩展的普通键 |
方向键向右键 | 0xe0 , 0x4D |
0xe0 , 0xCD |
扩展键 |
右Ctrl 键 |
0xe0 , 0x1D |
0xe0 , 0x9D |
扩展键 |
左shift 键+``G 键 |
0x2A, 0x22 |
0xAA , 0xA2 |
先按并且后释放shift 键 |