历史
PC的历史
1981年8月21日,IBM PC诞生,使用Intel-8088芯片,使用了软盘、磁带等介质,由IBM在不到一年时间内开发完成
1983年3月3日,IBM PC-XT研发成功,使用了Intel-8088芯片,主频为4.47MHz,硬盘大小为10-100MB
1984年,IBM PC/AT,使用了Intel-80286的CPU,主频为8MHz
1987年,PS/2出来了,其基于具有专利的MCA(Micro Channel Architecture)体系结构,不是PC类型的机器。PS/2不成功,证明了转向一个不开放的平台上是很难被业界所接收的
于是,EISA(Extended Industry Standard Architecture)委员会成立了。EISA将IBM从MCA体系结构上拉回来了,制定了一个开放的体系结构,并且将AT结构定位ISA,并且在AT的基础上增加了一些新的功能
通用的体系结构
下面主要是讲解当前的PC体系结构
尽管EISA后面的演进非常慢,但是还是接收了一些新的东西,譬如:
BUS Master Burst DMA
像PCI一样的硬件倡议(hardware initiatives)的技术
极大地改善了硅处理器的性能
以及在内存大小,磁盘大小,处理器速度等方面有着很大的提高
体系结构综述
下面的体系结构是基于当前的技术(Intel 965G with ICH8)
* 常规内存(Conventional Memory):系统内存的第一个640 KB就是著名的常规内存。每一个PC机用户随着时间的推移都更加清楚的知道它,(也更加恨它:),它是标准DOS程序、DOS驱动程序、常驻内存程序等可用的区域,它们统统都被放置在00000h~9FFFFh之间,运行在实模式下。
* 上位内存区(Upper Memory Area):系统内存的第一个1M内存顶端的384 KB(1024 KB - 640 KB)就是UMA,它紧随在常规内存之后。也就是说,第一个1M内存被分成640KB常规内存和384KB的UMA。这个区域是系统保留区域,用户程序不能使用它。它一部分被系统设备(CGA、VGA等)使用,另外一部分被用做ROM shadowing和Drivers。UMA使用内存区域A0000h~FFFFFh。
* 高端内存区(High Memory Area):系统内存第2个1M内存的第一个64 KB区域,被称做HMA。从技术上讲,它属于扩展内存的第一个64 KB,但它和其他扩展内存区域所不同的是,它可以在real mode下被直接访问,其它的则不然。所以在DOS时代,后期的DOS版本允许用户通过配置将DOS本身放置在HMA,从而让用户可以有更多的常规内存可以使用。HMA占据地址100000h~10FFEFh。
* 扩展内存(Extended Memory):从HMA结束的位置到系统物理内存的最大值之间的区域都属于扩展内存。当一个OS运行在Protected Mode时,它可以被访问,而在Real Mode下,则无法被访问(除非通过某些Hacker方法)。它的地址范围是10FFF0h~Last address of system momory(maximum of 4G-1M)。从技术上说,HMA也属于扩展内存,这依赖于你如何看待这个问题。具体更多的有关内存布局方面的知识,请参考文章
http://docs.huihoo.com/gnu_linux/own_os/booting-static_memory_layout_1.htm
中断
常规内存的起始位置的1 KB被用做BIOS中断向量表,随后的1 KB被用做BIOS数据区,在顶端的位置还有BIOS扩展数据区。这些空间在实模式下必须被保留。也就是说,在实模式下,起始1K的内存(0x000h到0x3FFh)是用来作为中断向量的,标准的终端是从0到0xFFh,中断向量中每一个中断有4个字节长,中断向量中提供了interrupt handler的offset和segment地址(little Endean)。
中断向量列表示意图
00 01 02 03
00 – 00 00 00 F0 INT 00 – F000:0000
04 – 00 01 00 F0 INT 01 – F000:0100
08 – 00 E0 00 F0 INT 02 – F000:E000
0C – 00 40 00 E0 INT 03 – E000:4000
10 – 00 01 00 F0 INT 04 – F000:0100
14 – 00 01 00 F0 INT 05 – F000:0100
18 – 00 01 00 F0 INT 06 – F000:0100
1C – 00 02 00 E0 INT 07 – E000:0200
20 – 00 40 00 E0 INT 08 – E000:4000
24 – 00 C0 00 F0 INT 09 – F000:C000
28 – 00 20 00 00 INT 0A – 0000:2000
2C – 20 00 10 02 INT 0B – 0210:0020
处理器中断
•00 Divide Error
•01 Debug
•02 NMI
•03 Breakpoint
•04 Overflow
•05 Bound range exceeded
•06 Invalid Opcode
•07 Device not available
– no math coprocessor
•08 Double fault
•09 CoProcessor Segment Overrun
•0A Invalid TSS
•0B Segment not present
•0C Stack Segment Fault
•0D General Protection
•0E Page Fault
•0F Intel Reserved
•10 Floating Point Error
•11 Alignment check
•12 Machine Check
•13 SIMD Floating Point exception
•14 - 1F Intel Reserved
软件中断
是为系统支持服务的遗留下的BIOS所产生的中断
–INT 10H – Video support
–INT 13H – Disk services
–INT 14H – Serial services
–INT 15H – Extended services (originally included cassette
services)
–INT 16H – Keyboard services
–INT 17H – Printer services
–INT 18H – Boot Fallback
(Rom Basic) Support
–INT 19H – Boot services
硬件中断
IRQ是Interrupt Request,由于在计算机运行中,CPU是持续处于忙碌状态,而当硬件接口设备开始或结束收发信息,需要CPU处理信息运算时,便会透过IRQ对CPU送出中断请求讯号,让CPU储存正在进行的工作,然后暂停手边的工作,先行处理周边硬件提出的需求,这便是中断请求的作用。在每个系统中会有两颗芯片来提供16个IRQ,其中大多的IRQ都有固定的编排,例如 IRQ 0固定为系统定时器,IRQ 1则是键盘。因为每一个IRQ只能让一种设备使用,所以IRQ数目十分有限,若计算机安装很多的配件,IRQ势必就会不敷使用,所以可能会发生两个设备共占同一个IRQ的现象,此时也就会出现IRQ冲突问题,造成该设备无法使用。
PIC为编程中断控制器(Programmable Interrupt Controller)