第8章 现代微型计算机 8.1 80x86系列微处理器 8.2 微型计算机体系结构 8.3 存储管理技术 8.4 多任务管理与I/O管理 第8章 现代微型计算机 8.1 80x86系列微处理器 8.2 微型计算机体系结构 8.3 存储管理技术 8.4 多任务管理与I/O管理 8.5 现代微型计算机中断系统 欢迎辞
8.1 80x86系列微处理器 8.1.1 16位80X86微处理器 1. 8088微处理器 Intel公司在推出8086之后, 推出了介于16位与8位之间的准16位微处理器8088。 8088与8086之间的区别主要在于8088对外只有8根数据线引脚,访问16位的操作数需要二个总线周期。 8088的这一特点使它能够十分方便地与8位接口芯片相连接。 1980年,IBM公司使用8088成功地开发了16位微型计算机—— IBM-PC。
2.80186和80286微处理器 Intel公司把大型计算机的技术融合到微处理器中,首先研制的80186在技术上并不十分成熟,没有获得广泛的应用。 1982年Intel推出了增强型16微处理器 80286,集成度达13万管/片,时钟频率提高到5MHz~25MHz,它的16条数据线和24条地址线相互独立,不再分时使用,可以寻址16M的地址空间。 80286CPU增加了运行多任务所需要的任务切换、存储管理和多种保护功能。
80286CPU基本工作方式: 实地址方式: 和8086一样,使用20根地址线寻址1M的内存空间,DOS应用程序占用全部系统资源。 总线接口部件BIU: 地址单元AU、指令单元IU、总线单元BU。 执行部件EU: IBM公司以80286为CPU生产了著名的IBM-PC/AT微型计算机,它的许多技术被沿用至今。
Intel80286CPU结构 图8-1
1.80386微处理器 8.1.2 32位80X86微处理器 1985年,Intel公司推出了第四代微处理器,32位的微处理器80386。 片内集成27.5万个晶体管,时钟频率为16MHz~33 MHz。具有32位数据线和32位地址线,32位通用寄存器。 80386内部由中央处理器CPU、存储器管理部件MMU、总线接口部件BIU组成。 80386有3种工作模式: 实地址模式、虚地址保护模式和虚拟8086模式。
Intel80386CPU结构 图8-2
2.80486微处理器 1989年, Intel公司推出了集成120万个晶体管的32位微处理器80486。 80486中集成了: 一个80386体系结构的主处理器; 一个与80387兼容的数字协处理器; 一个8KB的高速缓冲存储器(Cache)。 80486首次采用了时钟倍频技术(在80486DX中使用),使内部部件可以以输入时钟的倍频运行。 80486还支持外部的二级Cache,支持多处理器系统。
1.Pentium微处理器 8.1.3 Pentium系列微处理器 1993年,Intel公司推出了新一代的32位微处理器Pentium(奔腾,以P5代称),内部集成了320万个晶体管,具有64条数据线和32条地址线。 Pentium共有3个执行部件:两个整数执行部件U、V和一个浮点执行部件。 每个整数部件由五级流水线组成: 浮点流水线由8级组成: 通过上述流水线,微处理器可以在一个时钟周期内同时执行两条整数指令,或者一条浮点指令,这种结构被称为“超标量结构”。
Pentium处理器内部16KB的一级Cache分为独立的8KB指令Cache和8KB数据Cache,使取指令和取数据可以同时进行。 除了实地址模式、虚地址保护模式和虚拟8086模式以外,又增加了一个系统管理模式。 1996年,Intel公司推出了改进型32位微处理器Pentium MMX(多能奔腾),它增加了57条MMX(多媒体扩展指令集)指令,采用了SIMD(单指令流多数据流)技术,提高了对多媒体数据的处理能力。 同一时期推出的第五代微处理器还有IBM,Apple和Motorola三家联盟的PowerPC(这是一款RISC微处理器)以及AMD公司的K5和Cyrix公司的M1。
2.第六代微处理器 1996年Intel公司推出第六代微处理器Pentium Pro(高能奔腾)。 片内集成了550万个晶体管 具有64位数据线和36位地址线,物理地址空间64GB(236),虚拟存储空间64TB。 1997年5月Intel公司发布了PentiumII(奔腾2代),采用P6核心结构,属于32位微处理器。 PentiumII集成750万个晶体管; 加强了MMX技术,能同时处理两条MMX指令; L1 Cache增加到32KB,并配备了512KB的L2 Cache,在CPU一半的频率下工作; PentiumII采用了双独立总线结构,前端总线FSB负责主存储器的访问,后端总线与L2 Cache连接; 采用动态执行和寄存器重命名等RISC技术来执行x86指令。
动态执行技术主要包括: 多路分支预测:对程序的流向进行分析,以便程序的几个分支可以同时在处理器内部执行。 数据流分析:对译码后的指令进行数据相关性和资源可用性分析,判断该指令能否与其他指令同时执行。 推测执行:将多个程序流向的指令序列优化后送往处理器的执行部件执行,充分发挥各部件的效能。多个分支的运行结果作为“预测结果”保留,将最终确定为“预测正确”的分支预测结果作为最终结果加以保存。 为了减少不同分支指令争用同一个寄存器的情况,PentiumII增设了40个可以“重新命名”的“内部寄存器”,在指令流运行结束后写回“通用寄存器”,从而解决了多分支运行时争用寄存器的问题。
1999年2月,Intel公司推出Pentium III微处理器。 集成了950万到2800万个晶体管; 它的前端总线频率(FSB)提高到133MHz; 256KB的L2Cache集成到芯片内,和CPU以相同的频率工作; 与运算部件的数据通路从64位扩展到256位; 增加了新的70条SSE指令,使得多媒体信息的处理能力得到进一步提高; PentiumIII微处理器内置了一个引起争议的产品序列号(PSN),能惟一标识一个微处理器; 为了适应不同需求,Intel公司还推出了面向低档微机的Celeron(赛扬型)、面向服务器和工作站的Xeron(至强型)和面向可移动领域的移动型PentiumII、PentiumIII。 类似的微处理器有AMD公司的Athon(K7)。
Pentium III微处理器内部结构 图8-3
3.现代微处理器 1999年,AMD公司首先提出了X86系列微处理器的64位扩展架构AMD64,并在随后应用到它的Opteron及Athlon 64微处理器之中。 此后Intel公司也提出了IA-32e(Intel Achicture-32 Extend,Intel 32位体系结构扩展),后来又改名为EM64T(Intel Extended Memory 64 Technology,Intel 64位内存扩展技术),出现在Prescott核心的Pentium 4处理器上。
原32位x86处理器的32位寄存器被扩展为64位,命名为RAX,RBX,……,增加了8个64bit的通用寄存器R8~R15,一个64bit的指令指针RIP。整数部件扩展为64位,可以进行64位的整数运算。 EM64T的运行模式分为“传统的IA-32模式”和“IA-32e扩展模式”两大类。在传统的IA-32模式下,64位架构的处理器仍然像以前那样,工作在“保护模式”,“实地址模式”,“虚拟8086模式”下。在IA-32e扩展模式下,它可以工作在“32位兼容模式”下,以“64位处理器”的“身份”兼容运行32位处理器的程序,或者工作在真正的“64位模式”下,运行64位程序。
为了进一步提升处理器的性能,AMD公司、Intel公司先后推出了在一个微处理器芯片中集成两个64位处理器的新结构,两个处理器有各自的L1 Cache,共享L2。 Intel公司在2006年推出了称为“Core”的新内核。新一代“Core”内核将流水线从Prescott核心的31级降低为14级,通过优化整体结构提高性能。
Core内核使用了一种“指令融合”的新技术,通过“指令解码器”将功能相关的两条连续指令“融合”为一条“内部指令”。例如将比较指令和条件转移指令融合为一条“比较并转移”指令,用一条指令的执行时间完成这两条指令的功能。Core内核因此在一个时钟周期内可以完成4+1条指令,其中的+1即为被融合的指令。 内核的许多单元在空闲时可以进入“深度睡眠”状态,以降低功耗。 Core核心还包含了新的指令集SSE4。 目前使用Core内核的处理器产品称为“Core 2 Duo (酷睿2)”。
64位微处理器 2001年5月29日,Intel公司推出了64位微处理器Itanium(安腾),数据通道宽度128位。 Itanium处理器采用了全新的设计,采用称为IA-64的体系结构,不再兼容之前的80X86系列微处理器,是真正的64位处理器。 该处理器目前主要用于服务器。
8.1.4 32位微处理器的寄存器 80X86微处理器由16位升级为32位后,它的寄存器也对应升级为32位。 8.1.4 32位微处理器的寄存器 80X86微处理器由16位升级为32位后,它的寄存器也对应升级为32位。 为了新的工作方式和存储管理的需要,增加了一些用于控制的寄存器。 1. 数据寄存器 16位80X86处理器原有的4个通用数据寄存器扩展为32位,命名为EAX、EBX、ECX和EDX。仍然可以使用原有的16位和8位寄存器,如AX、BX、CX、DX、AH、AL、BH、BL......。
2. 地址寄存器 原有的4个主要用于内存寻址的通用寄存器同样扩展为32位,命名为ESI、EDI、EBP、ESP。在实地址模式下仍然可以使用原有的16位寄存器SI、DI、BP和SP。 指令指针寄存器扩展为32位,更名为EIP,实地址下仍然可以使用它的低16位IP。
在原有的4个段寄存器基础上,增加了2个新的段寄存器FS和GS。 段寄存器长度仍为16位,但是,它存放的不再是16位二进制表示的“段基址”,而是13位代表这个段的一个编号,称为“段选择子”。 段的其他信息(起始地址、段的长度、段的属性...)组成64Bits的“段描述符”,存放在二张称为“段描述符表”的表格中。 一张表格存放的是当前任务所使用的段的信息,称为“局部段描述符表(Local Descriptor Table, LDT)”。 另一张表格存放了系统所使用的段的信息,称为“全局段描述符表(Global Descriptor Table, GDT)”。 13位二进制的“段选择子”就是这个段的“段描述符”在表中的顺序号。
16位段寄存器的另一位称为“表指示器(Table Indicator, TI)”,用来在二张表中间进行选择。 16位段寄存器的最低二位表示申请使用段的“特权级(RPL)”,取值0~3。 每个段寄存器还有一个配套的64bits“段描述符寄存器”。向段寄存器装入一个新的“段选择子”的同时,处理器会同时把它的描述符装入对应的“段描述符寄存器”。这些寄存器不能由指令来存取,对程序员是不可见的。
32位微处理器增加了4个系统地址寄存器: 存放“全局段描述符表”首地址的GDTR; 存放“中断描述符表”首地址的IDTR; 存放“局部段描述符表” 选择子的LDTR; 存放“任务段”选择子的“任务寄存器”TR。
寄存器DR0~DR7,2个用于测试的寄存器TR6~TR7。 3 . 控制寄存器 标志寄存器也扩展为32位,更名为EFLAGS。除了原有的状态、控制标志,增加了2位表示IO操作特权级别的IOPL,表示进入虚拟8086方式的VM标志等。 32位微处理器增加了5个32位的控制寄存器,命名为CR0~CR4。CR0寄存器的PE=1表示目前系统运行在“保护模式”,PG=1表示允许进行分页操作。CR3寄存器存放“页目录表”的基地址。 此外,还有8个用于调试的 寄存器DR0~DR7,2个用于测试的寄存器TR6~TR7。
实地址方式 8.1.5 32位微处理器的工作方式 32位微处理器刚加电或者复位时,就进入实地址方式。 8.1.5 32位微处理器的工作方式 实地址方式 32位微处理器刚加电或者复位时,就进入实地址方式。 实地址方式使用16位80X86的寻址方式、存储器管理和中断管理。实地址方式下使用20位地址寻址1MB空间,中断向量表安置在00000H开始的1KB内。 可以使用32位寄存器(需要在指令前加上寄存器扩展前缀),使用特权级0,可以执行大多数指令。 实地址方式用于在开机后为进入保护模式做准备,也可以把32位处理器用作一片高速16位处理器使用。
保护方式 3. 虚拟8086方式 保护方式是32位微处理器的基本工作方式。 保护方式下微处理器支持多任务运行环境,对任务进行隔离和保护,进行虚拟存储管理。 保护方式能够充分发挥32位处理器的优良性能。 3. 虚拟8086方式 虚拟8086方式是保护模式下某个任务的工作方式,允许在保护模式下运行多个8086程序。 虚拟8086方式使用8086的寻址方式,每个任务使用1MB的内存空间。虚拟8086方式的任务以最低特权级运行,所以不能使用特权指令。
系统管理方式 系统管理模式(System Management Mode , SMM)主要用于电源管理
8.2 微型计算机体系结构 IBM-PC,PC/XT微型计算机结构 8.2.1 80X86微型计算机结构 8.2 微型计算机体系结构 8.2.1 80X86微型计算机结构 IBM-PC,PC/XT微型计算机结构 IBM公司以8088为CPU构建了的第一代的PC机——IBM-PC,该计算机以盒式录音机作为外存储设备,使用不够方便。 随后,IBM公司推出了它的增强型—IBM-PC/XT,它采用10~20MB的硬盘驱动器作为辅助存储设备,在一段时间内获得了广泛的认同。 PC/XT机采用以CPU为中心的简单结构,通过若干缓冲和锁存电路把8088CPU的信号连接到它的“系统板”上,构成了62线的“XT总线”。
XT总线包括8位数据线,20根地址线,使用与CPU相同的4 XT总线包括8位数据线,20根地址线,使用与CPU相同的4.77MHz的时钟信号。由于8088CPU传输一次数据需要4个以上的时钟周期,所以XT总线的数据传输率约为1.2MB/S。 它的“系统板”上除了8088CPU及其外围电路,还集成了ROM、RAM、定时/计数器、中断控制器、DMA控制器、键盘、扬声器接口以及8个62引脚的“XT总线”扩展插槽。 它的显示器接口,打印机接口,串行通信接口都是以“接口卡”的形式通过62脚插槽与系统相连接的。主板上最多提供256K的DRAM存储器,更多的存储器需要做成“接口卡”与系统相连。
IBM-PC/XT微型计算机结构 图8-5
PC/AT微型计算机结构 为了适应新的CPU的推出,IBM公司推出了新一代的微型计算机——IBM PC/AT; PC/AT对8位的“XT总线”进行了扩充,构成16位的“AT总线”; 随后,Intel和其他公司联合,推出了与AT总线兼容的,公开的总线标准——ISA(Industry Standard Architecture,工业标准体系结构)。 ISA总线使用24位地址、16位数据、15级硬件中断和7个DMA通道,使用6~8MHz时钟信号,最高数据传输率为8MB/S。
ISA总线与XT总线兼容,ISA插槽做成二段:第一段提供XT信号,可以继续使用XT总线的接口卡;第二段提供ISA所增加的信号,同时插入二个插槽就得到完整的ISA信号。 随着CPU主频的不断提高,要求内存储器的速度也要相应提高。在这样的情况下,出现了“分级”总线的微型计算机结构:把CPU与内存储器直接相连,称为“CPU局部总线”;经过外围芯片(组)产生“系统总线”,与相对低速的其他I/O设备相连接。 L2 Cache 和DRAM 及其控制器通过“CPU局部总线”与80486直接相连。在AT机型中还使用了独立的实时时钟/日历芯片,关机时用后备电池供电,可以连续计时。
IBM-PC/AT微型计算机结构 图8-6
8.2.2 Pentium系列微型计算机结构 自从1987年Intel公司生产出8086 CPU之后,每隔3-4年,微处理器就要“升级换代”一次。 微处理器的快速更新带来了系统结构的“不稳定性”,给系统其他电路的研制、生产带来了巨大的压力。 为了获得一个稳定、高性能的系统结构,Intel于1991年底提出,1993年联合其他公司推出了PCI总线规范。它独立于CPU,完全兼容当时已有的ISA/EISA/微通道总线,具有高达133MB/S的数据传输速率,能够满足高性能图形接口和其他高速外设的需要。 随着同年高性能微处理器Pentium的推出,Pentium + PCI成为新一代微型机计算机的的代名词。
1. “南北桥”结构 “南北桥”结构支持多级总线的系统组成。系统由处理器总线(Host Bus),局部总线(PCI)和系统总线(ISA)三级组成(图8-7)。 处理器总线连接高速缓存(Cache)和主存储器; PCI总线连接显示适配器、网络适配器、硬盘驱动器等高速设备; ISA总线连接传统的并行口、串行口、软盘驱动器、键盘、鼠标等相对低速的外部设备。 各“级”之间信号的速度缓冲、电平转换、控制协议转换由称为“桥”的电路实现。 根据“桥”二端电路的不同,有“CPU / PCI桥”(Host Bridge),“PCI / ISA桥”,“PCI / PCI桥”等。
“CPU / PCI桥”处于上部,按照地图的习惯,被称为“北桥”。该芯片除了“CPU / PCI桥”电路之外,同时集成了AGP总线接口、主存储器控制器、PCI仲裁器。 “PCI / ISA桥”位于图的下方,被称为“南桥”,它同时还集成了IDE辅助存储器接口,二个8259中断控制器,二个DMA控制器,8253/8254定时/计数器和实时时钟,还增添了通用串行总线(USB)接口,“I/O APIC”等。 传统的较低速的接口集成在称为“Super I/O”的电路中 许多公司研制和生产了组成“南-北桥”的芯片组,它们各自具有不同的性能和技术特征。 Intel公司生产的典型的“南-北桥”的芯片组有440BX和440TX等。 从Pentium II开始的CPU还提供专用的引脚,通过南桥芯片的“I/O APIC”接口连接多于一个的CPU,构成多CPU的系统。
“南北桥”结构的PentiumII微型计算机 图8-7
2. “两个中心”结构 “南-北桥”结构存在一个明显的“数据传输瓶颈”:南桥芯片连接的高速外设都要通过PCI总线与处理器相连接。这增加了PCI总线数据交换的拥挤程度。Intel公司为此又推出了称为“中心结构”的新的结构体系。 “存储控制中心”(Memory Control Hub, MCH)芯片的主要任务是建立处理器与系统其他设备的高速连接。 它与处理器连接,通过存储器总线连接主存储器, 通过“中心高速接口”与称为“I/O控制中心(I/O Control Hub , ICH)” 的芯片连接, 它还集成了高速AGP总线接口,电源管理部件和存储管理部件。 有的MCH芯片还同时集成了AGP图形接口,可以直接连接显示设备,称为“图形存储控制中心(GMCH)”。
“I/O控制中心”芯片(ICH)负责建立I/O设备与系统的连接。在它的内部集成了: 2个IDE辅助存储器接口(Primary IDE , Secondary IDE); 2个或4个USB接口; 内置了PCI总线仲裁器和PCI总线接口; 内置了AC'97控制器,提供音频编码和调制解调器编码接口; 通过LPC I/F和Super I/O芯片相连。该芯片内置相关接口,连接软盘驱动器、键盘、鼠标等相对低速的外部设备,同时提供传统的并行、串行接口; 称为“固件中心”(FWH)的芯片主要用来存储系统和显示的BIOS,它也连接到ICH芯片上。
Intel公司生产的典型的“中心结构”的芯片组有810,815,820,850,860和845等系列。 PC'99规范中取消了ISA总线,需要使用时可通过“PCI/ISA桥”芯片引出。 “中心结构”进一步完善了多级总线结构,是目前普遍使用的微计算机系统结构.
“两个中心”结构的Pentium微型计算机 图8-8
8.2.3 Intel 系列芯片组 系统芯片组的作用: 系统芯片组在系统的构成上起着重要的作用,它使系统结构简洁而同时又保持了强大的功能。 连接构成系统的各个部件(处理器,主存储器,接口,外设) 提供各种基本信号,连接局部/系统总线, 集成了时钟、定时/计数器、中断控制器、DMA控制器以及并行接口、串行接口等电路。 系统芯片组在系统的构成上起着重要的作用,它使系统结构简洁而同时又保持了强大的功能。 广泛使用的Intel芯片组有865,915,925,965等系列
由存储控制中心芯片(如:82845P)和第四代IO控制中 心芯片(ICH4,如:82801DB)组成。 1. Intel 845芯片组 由存储控制中心芯片(如:82845P)和第四代IO控制中 心芯片(ICH4,如:82801DB)组成。 支持mPGA478封装的P4或Celron D处理器,处理器总线频 率最高533MHz; 支持SDR/DDR SDRAM等不同种类的存储器; 提供1X/2X/4X AGP图形总线; 支持USB2.0。
由865系列的MCH芯片(如82865PE)与第五代IO控制芯 片(ICH5/ICH5R,如82801EB)组成。 2. Intel 865芯片组 由865系列的MCH芯片(如82865PE)与第五代IO控制芯 片(ICH5/ICH5R,如82801EB)组成。 支持mPGA478封装的P4 或 Celeron D处理器,支持超线程 (Hyper Threading,HT)技术,支持 800MHz/533MHz/400MHz的处理器总线; 支持双通道DDR400存储器,带宽达到到6.4GB/s (64/8*400MHz*2),与处理器总线带宽相均衡; 提供8X/4X AGP图形总线; 提供串行ATA硬盘驱动器接口和Gb级的以太网接口。
用Intel 865芯片组构建PC系统
3. Intel 965芯片组 Intel 965芯片组配用第八代IO控制芯片(ICH8,如 82801HB)。以Intel G965 Express芯片组(MCH芯片为 Intel 82Q965)为例: 支持多内核CPU(如Pentium D, Core 2 Duo),支持超线程技术,处理器总线频率为1066MHz或800MHz,使用LGA775封装; 提供PCI Express x16高速图形总线,带宽达到8GB/s,是AGP 8X接口带宽的3.5倍; 提供6组PCI Express X1总线接口,供系统扩展; 支持双通道DDR2-667存储器,最多8GB; 提供6组独立的串行ATA辅助存储器接口和增强型SATA。
用Intel G965芯片组构建系统
8.3 存储管理技术 8.3.1 高速缓存技术 对于半导体存储器器件而言,低价格、大容量、高速度是一组永恒的矛盾; 8.3 存储管理技术 8.3.1 高速缓存技术 对于半导体存储器器件而言,低价格、大容量、高速度是一组永恒的矛盾; 用单一工艺制造的半导体存储器难以同时满足上述三方面的要求。 解决这个问题的有效方法就是发挥不同存储器件各自的长处,采用多层次的存储系统。
1. 多级存储体系 多级存储体系就是把几种不同容量、速度的存储器合理地组织在一起,使它们能较好地同时满足大容量、高速度、低价格的要求。 以增加技术复杂程度为代价。 存储系统层次结构如下图,该系统由高速缓存(Chache)、主存、辅存三类存储器组成。 三类存储器构成了二个层次的存储系统。
(1)“高速缓存—主存”层次 高速缓存(Chache)存储器: 主存储器: 这一层次主要解决存储系统的“速度”问题。 由小容量的高速静态存储器构成 速度很快,可以与处理器相匹配 容量小(约32KB),不会显著提高系统成本 一般将Cache集成在CPU的内部 Cache存储处理器当前使用的指令和数据 和处理器之间以“字”为单位进行读写 主存储器: 由大容量的动态存储器组成 单位成本低于Cache 速度相对较慢 Cache与主存之间以“页”为单位进行读写 这一层次主要解决存储系统的“速度”问题。
(2)“主存—辅存”层次 辅助存储器: 这一层次主要解决存储系统的“容量”和“成本”问题 由大容量的磁表面存储器或光存储器构成 具有很低的“位存储价格” 辅助存储器上储存着大量的程序和数据,处理器仅把目前使用的程序和数据装入主存 辅存和主存之间以“块”为单位进行读写交换 这一层次主要解决存储系统的“容量”和“成本”问题 以上二个层次的组合,本质上来说,是充分利用Cache的高速度,辅助存储器的大容量和低成本,使存储系统较好地解决“容量—速度—价格”之间的矛盾。
2. 映射方式 设置高速缓冲存储器之后,处理器需要的指令和数据首先在Cache中寻找: 同时将该指令或数据送入处理器 为了确定所要的指令/数据是否在Cache中,Cache中不但要存储指令/数据的信息,同时还要储存该指令/数据在主存的地址信息。这项信息纪录在“相联存储映像表”中。 缩短“主存地址信息”的长度,可以减少“相联存储映像表”的容量,同时可以简化查找和匹配过程。 为此,对主存“页”进入Cache的位置作了种种限制,主存的“页”需要由某个“映像函数”确定它在Cache中的位置。
(1) 直接映像法 假设: Cache: 主存: 直接映像法: 主存中的一页只能进入与它页号相同的Cache页中。 容量16KB,混合存储指令和数据信息 16个“字”(每个字为32bit=4Byte)为一“页” , 共256“页” 每个字节用8位“页地址”加上6位“页内位置”表示 主存: 使用32位主存地址,寻址4GB的主存空间 每个字节用18位“组号”,8位“页地址”,6位“页内地址”表示 直接映像法: 主存中的一页只能进入与它页号相同的Cache页中。
图8-11
该内存页被读出,存入Cache中 59H页。“相联存储映像表”中该页的“标记(Tag)”被置为“048D1H”。 组号=048D1H, 页地址=59H, 页内地址=38H 该内存页被读出,存入Cache中 59H页。“相联存储映像表”中该页的“标记(Tag)”被置为“048D1H”。 随后,处理器访问地址为12345644H的主存单元,它的地址划分为: 组号=048D1H, 页地址=59H, 页内地址=04H 查找“相联表”中页面为59H的标记项, “命中” 。Cache第59H页面中页内地址为04H的“字”被读出,送往处理器。
直接映像法特点: 处理器访问地址12341678H的主存单元,地址划分为:组号=048D0H,页地址=59H,页内地址=38H。 主存中编号为048D0 H 的1页被读出,存入Cache第59H页面中,对应的“标记” 修改为“048D0 H”。 一个新的主存页面进入Cache,原来的页面被覆盖。 直接映像法特点: 直接映像法采用简单的映射关系,查找方便。 每个主存页面只与Cache中惟一的一个页相映射,增加了页面冲突的可能性,会增加不合理的页面更换,Cache的页面不能充分利用。
例:32位主存地址,16KB Cache,划分同上。 (2) 全相联映像法 全相联映像法:主存一页可以进入Cache任何一页。 例:32位主存地址,16KB Cache,划分同上。 由于没有页号的限制,主存地址仅划分为二部分: 26位页地址,6位页内地址。 处理器发出主存物理地址之后,Cache管理逻辑需要把主存的“页号”与所有的 “标记”逐一进行比较,以确定是否“命中”。 全相联映像法特点: “页面冲突”的可能降到最小; 查表,比较次数多,电路复杂; 只适用于小容量的Cache
图8-12
(3) 组相联映像法 例:32位主存地址,16KB Cache,Cache每“组”由二个页面组成,共128个组。 组相联映像法: 允许主存的一个页与同一组内的多个页面进行映射 例:32位主存地址,16KB Cache,Cache每“组”由二个页面组成,共128个组。 Cache内字节地址由7位“组号”,1位“页号”,6位“页内地址”组成。 主存地址由19位“区号”,7位“页号”和6位“页内地址”组成。 每个“区”包含128个“页”,等于Cache “组”的数量。
访问主存时,需要将主存 “区地址”部分与一个组内二个页面的“标记”同时进行比较,以确定是否“命中”。 主存每个区的0#页面可以和Cache内0组二个页面中的任一个相映射, 1#页面可以和Cache内1组二个页面中的任一个相映射 ...... 访问主存时,需要将主存 “区地址”部分与一个组内二个页面的“标记”同时进行比较,以确定是否“命中”。 组相联映像法特点: 减少了页面冲突的可能性 比较次数等于Cache内每组的页面数 目前的微处理器多采用这种方法
图8-13
这种算法比较合理,实现起来稍微复杂一些。 3.替换算法 一个新的主存页面写入Cache,Cache中原有的页面就被覆盖或者说被替换。 使用“全相联映像法”和“组相联映像法”时,主存页的进入位置有一个以上的选择,管理逻辑需要决定覆盖或者替换哪一个Cache页。 确定被替换页面的算法主要取决于实现的难易和命中率的高低。 常用的方法有以下二种。 (1) 先进先出法(FIFO) 选择最早进入的页为被替换的页 这种方法实现简单,但不够合理,最早进入的页仍然可能是现在频繁使用的页。 (2) “近期最少使用”算法(LRU) 这种算法比较合理,实现起来稍微复杂一些。
4. Cache和主存一致性问题 使用高速缓存后,一项数据可能同时储存在二个位置上 处理器把数据写入Cache,尚未写入主存时,就产生了Cache—主存内容的不一致性 解决这个问题可以采用二种方法。 (1) 写回法(Write Back) 处理器执行写操作时,信息只写入Cache,该页被替换时,才将它写回主存。 (2) 写直达法(Write Through) 信息在写入Cache的同时也写回主存。 比较: 使用写回法时,一个主存页面调入Cache后最多回写一次(内容未修改则不需要写回),节省了回写时间,但是一致性保持不如写直达法。
5. 突发总线周期(Brust Bus Cycle) 主存和Cache之间以“页”为单位进行信息交换,每次传送都是对连续的若干字节进行 新型主存器件都支持突发总线传输方式 突发总线传输: 向主存储器发送起始地址之后,连续传送多个字的数据。 例: Pentium的Cache每页64字节,与主存之间可以同时传输64Bits也就是8字节信息。 主存页调入Cache时,向主存发出该页的起始地址,同时发出“突发总线请求”信号。 主存收到上述信号,适当延时,在连续的多个周期内每次发送8字节(64Bits)信息,最终把一页内容写入Cache。
8.3.2 虚拟存储技术 现代微型计算机对内存数量要求的增加: 内存管理的“碎片”问题: 采用多任务的操作系统,提高CPU利用率和性能 8.3.2 虚拟存储技术 现代微型计算机对内存数量要求的增加: 采用多任务的操作系统,提高CPU利用率和性能 多媒体技术的广泛使用,系统程序和应用程序使用的内存数量越来越大。 由于成本的原因,主存容量配置难以满足上述要求。 内存管理的“碎片”问题: 任务运行时申请使用内存;任务撤销时释放内存。运行一段时间之后,主存空间将出现许多“碎片”。 清理这些“碎片”需要移动正在使用的“内存片”,这会带来许多复杂的问题。
虚拟存储技术: 使用虚拟存储技术的好处: 虚拟存储管理使用的地址空间: 逻辑地址:程序中使用的存储空间 将主存储器和辅助存储器的一部分统一编址,看作一个完整的“虚拟存储空间”。 从80386开始的微处理器都内置了“存储管理部件(MMU)”,完成“虚存”和“实存”之间的调度。 使用虚拟存储技术的好处: 扩大了程序可用的存储空间; 有效地解决了任务之间,用户任务与操作系统之间存储空间的隔离和保护; 有效解决“碎片”问题。 虚拟存储管理使用的地址空间: 逻辑地址:程序中使用的存储空间 线性地址:逻辑空间向物理空间转换中,线性排列的空间 物理地址:实际的内存储器空间
1. 段存储管理 段存储管理完成逻辑地址向线性地址的转换。 程序员使用的地址空间里,每个存储单元可以表示为“段名:段内偏移地址” 。这样的地址称为“逻辑地址”。 8086CPU不支持虚拟存储管理,段寄存器直接记录了该段的起始地址信息。将段起始地址与偏移地址相加,就得到了该存储单元的物理地址。 32位微处理器中,“段”的信息被纪录在“段描述符”中,包含32Bit段起始地址,20Bit段界限值(段长度),4Bit段类型,2Bit段描述符优先级,以及其他信息共64Bit。 操作系统所使用段的“段描述符”顺序存放,组成“全局段描述符表(Global Descriptor Table, GDT)”。 GDT表的首地址纪录在的“全局段描述符表寄存器(GDTR)”中。 每个用户所使用段的“段描述符”组成“局部段描述符表(Local Descriptor Table, LDT)”。 LDT本身构成一个段, 这个段的“段选择子”放在寄存器(LDTR)中。
使用“段选择子”和二张“段描述符表”可以把“逻辑地址”转换成“线性地址”(图8-15)。 GDT和LDT二张表格存储在主存储器中。在保护状态下,每条指令的执行都伴随着逻辑地址向线性地址的转换过程。为了提高指令执行速度,在32位处理器内部除了在段寄存器中存有“段选择子”之外,还增设了与段寄存器对应的“段描述符寄存器”。在装载段选择子的同时,主存中对应的64Bit段描述符信息同时进入该寄存器。 从理论上来说,16位段选择子可以选择二张表中共213×2=214个不同的段。每个段最大可达232字节。因此,通过段存储管理最多可管理232×214=246=64TB的虚拟地址空间。
图8-14
2. 页存储管理 线性地址空间是一个虚拟的地址空间,物理地址空间是实际的存储空间,它们都划分成若干大小相等的“页”。页存储管理部件负责完成线性地址向物理地址的转换。 线性地址空间一般远大于实际的物理地址空间,页存储管理部件需要决定“虚存”的哪些页调入“实存”,其余的则保存在辅助存储器中。 以80386为例,页面固定为4KB,每个线性地址页面的信息纪录在一个32Bits的“页表项”中,包括32位物理地址的高20位(低12位与线性地址的低12位相同),目前是否在“实存”中,以及该页的使用情况等相关信息。每1024个页面组成一个“页组”,它们对应的页表项构成一张“页表”,4KB大小的“页表”本身构成了一个特殊的“页”。
系统用一张“页组表”纪录所有页组的信息。“页组表”由1024个“页组目录项”组成, 32Bits的“页组目录项”具有与“页表项”类似的格式,只不过它记录的是1024个特殊的“页”—“页组表”的相关信息。 于是,32位线性地址可以划分为: 10位页组目录项索引——记录该线性地址单元所在的页组; 10位页表项索引——记录该线性地址单元在该页组的哪一个页中; 12位页内偏移地址——记录该线性地址单元在该页内的相对位置。
图8-15
线性地址向物理地址的转换通过查二次表实现(图8-16): 用高10位查“页组目录项表”,得到该页组的“页组表”的首地址; 用次10位在刚得到的“页组表”中查到该页的起始物理地址; 页的起始物理地址加上低12位的“页内偏移地址”,得到完整的32位物理地址。 “页组目录项表”的首地址存放在处理器的“CR3”寄存器中。由于页表和页组目录项表每一项占用4个字节,所以二个10位的索引值都要乘以4与表的基地址相加,找到该目录项。 系统中应有一张页组目录项表,最多1024张页表,这些表存放在主存储器中。实际使用时,把目前经常使用的表项转储在处理器内部称为“转换检测缓冲器(TLB)”的小型的高速缓存中,以提高查表速度。
在Pentium II开始的第六代微处理器中,可以使用“页目录指针表(PDPT)”。如果仍然以4KB为一页,32位线性地址被划分为4部分: 2位PDPT项号,用来查PDPT表,得到页目录表的首地址; 9位页目录项号,用来查页目录表; 9位页面号,用来查页表,获得24位的“页基地址”; 12位页内偏移地址,与24位“页基地址”组合,得到36位物理地址。 可以看出,它的基本方法与上面所述是一样的。
3. 80X86微机的虚拟存储管理 32位X86微处理器用CR0寄存器的PE位控制它的 工作方式。 PE=0,处理器工作在实地址方式下,处理器仍然使用16位80X86处理器的地址生成方式,用20位地址访问1M字节的地址空间。 PE=1,处理器工作在保护方式下,自动启用段存储管理机制。如果CR0寄存器的PG位为1,同时启动页存储管理机制,实现段/页二级虚拟存储管理。如果PG=0,则禁止使用页存储管理机制,由段存储管理产生的“线性地址”就是访问存储器要求的“物理地址”。
8.4 多任务管理与I/O管理 虚拟存储管理提供了运行多任务所必需的存储空间隔离和保护机制。 现代32位微处理器的内部还集成了其他面向多任务运行所需要的管理逻辑。
8.4.1 多任务管理 1. 保护机制 保护模式下,处理器实施对任务和资源的保护机制。 有4个(0-3)不同的“特权级”,用二位二进制表示。 8.4.1 多任务管理 1. 保护机制 保护模式下,处理器实施对任务和资源的保护机制。 有4个(0-3)不同的“特权级”,用二位二进制表示。 0级最高,可以访问系统的一切资源,供操作系统内核使用。有些特殊的指令只能在0级执行,称为“特权指令”。 1级次之,大多数的操作系统任务运行在这一层。 3级最低,供一般用户程序使用,它不能使用具有0~2级特权的资源。
特权级出现在以下三个地方: (1) 段描述符 每个段描述符内包括2bit的描述符特权级DPL,表示这个段(资源)的级别。 (2) 选择子 每个段选择子最低2位是它的请求特权级RPL。 (3) 当前执行程序 每个当前执行程序有一个当前特权级CPL,存放在段寄存器CS和SS的最低2位。CPL表示该任务所拥有的特权级。
访问一个段时,要求CPL和RPL同时具有高于或等于DPL的特权级,否则将出现保护异常。 为了使得一般用户程序能够得到具有较高特权级的操作系统的服务,处理器特别提供了一种称为“调用门”的机制。“调用门”设在较低的的特权级上,通过它可以得到较高特权级的操作系统的服务。类似的还有任务门、中断门和自陷门。
2. 任务结构 一个任务由两部分组成: 任务执行空间由该任务的代码段、堆栈段和若干个数据段组成。 一个任务的执行空间; 一个任务状态段TSS(Task Status Segment) 任务执行空间由该任务的代码段、堆栈段和若干个数据段组成。 任务状态段TSS是存储器内一个特殊的“段”,它储存了该任务的运行状态(包括各寄存器内容),使用的存储空间,允许使用的I/O端口等信息,如图8-17所示。当前任务的TSS段的选择子装载在处理器的任务寄存器TR中。
图8-16
3. 任务的转换和连接 作为一个“段”,任务状态段也有它的段描述符,存放在“全局描述符表(GDT)”中。该描述符的“类型”字段包含一个“忙”标志位B,B=1表示该任务正在执行。 处理器内16位的任务寄存器TR存放了当前正在执行任务的TSS的选择子。TR还包括一个不可见的64位描述符寄存器,那里存放了TSS段描述符,它是GDT中对应描述符的拷贝,它使寻找该段的操作更加快速和简便。 指令LTR和STR用于装载和保存任务寄存器TR的16位可见部分,其中LTR是一条特权指令,只能由0级特权的程序执行。
用JMP或CALL指令启动一个新的任务: 指令目标地址“段选择子:偏移地址” 中,“段选择子” 指向GDT中新任务的TSS段 处理器执行这条JMP或CALL指令时,会进行一系列的正确性检查 检查无误后,将当前任务的所有通用寄存器、所有段寄存器中的选择子、EFLAGS、EIP存入该任务自身的TSS 将新任务的选择子、描述符装入TR寄存器(可见的和不可见的) 将对应TSS段中所保存的通用寄存器、段寄存器(段选择子)、EFLAGS、EIP副本装入处理器对应的寄存器中 在CS:EIP的控制下,一个新的任务开始执行。
除了上述JMP和CALL指令,IRET指令、INT-n 指令、中断和异常也会导致任务的转换。 32位处理器的任务转移比起16位处理器的程序转移要复杂得多,它对任务的保护功能也强得多。由于这一系列的过程由处理器硬件完成,所以仍然能够实现快速的任务转换。 用CALL指令调用一个新任务时,处理器还将当前任务的TSS的选择子复制到新任务TSS中的“先前连接域”中,并将EFLAGS寄存器的NT(Nesting Task,嵌套任务)位置1。新任务执行返回指令时,从TSS中找到保存的原TSS选择子并返回。
用JMP、CALL指令调用同一个任务中其他程序段 指令目标地址中,“段选择子”是目标段的选择子 进行权限检查之后,该“段选择子”及其描述符被存入CS寄存器,“偏移地址”进入EIP,于是,目标程序被执行。 对于CALL指令,原来程序的返回信息“CS:EIP”被压入堆栈,在返回时恢复到CS和EIP中,以便顺序执行后续的指令。 在同一个任务中CALL和JMP指令的执行和16位微处理器中十分相似。
8.4.2 I/O管理 在多任务的运行环境中,如果多个任务都要对同一个I/O端口进行访问,势必造成混乱,为此,必须对I/O操作进行必要的管理。 有二项措施来避免混乱的发生: 处理器标志寄存器EFLAGS中IOPL(2bits)规定了执行I/O操作所需要的特权级; 任务状态段TSS中有一个最多64Kbits组成的“I/O允许位图(IOM)”,它的每一位对应一个对应位置的I/O端口,为0表示该端口允许这个用户进行I/O操作。
对于运行在虚拟8086方式的任务,用IOM来控制对I/O端口进行访问,对位图对应位为1的端口进行访问将产生保护异常。 在保护方式下,处理器首先检查当前任务的CPL,如果CPL的特权级高于或等于EFLAGS中由IOPL规定的特权级,I/O操作不会受限制,否则将进一步检查IOM,对IOM为1的端口进行操作将产生保护异常。 常用的一种办法是:在IOM中封锁对端口的访问,当前任务一旦执行I/O指令,立即产生保护异常,进入由操作系统设置的“异常处理程序”,在操作系统的控制下进行间接的“I/O操作”。
1. 中断描述符表(IDT) 8.5 现代微型计算机中断系统 8.5.1 保护方式下的中断管理 8.5 现代微型计算机中断系统 8.5.1 保护方式下的中断管理 1. 中断描述符表(IDT) 保护方式下用“中断描述符表(IDT)”来指出各中断 处理程序的入口地址。 每一个中断类型对应一个64Bits的“中断门”描述符,包括16位的“段选择子”,32位的偏移地址,它的类型代码以及特权级等信息。
如果是由某种“异常”引起的中断,例如处理器内部的除法溢出,处理器外部的页面故障(访问存储器需要的页面不在物理存储器中),则对应一个“陷阱门”。它和“中断门”描述符形式上的区别仅仅是类型代码不同。 一个中断类型还可以对应于一个“任务门”。64Bits的任务门包含了一个任务状态段的选择子(16位),但不含有偏移地址的信息。三种“门”的格式如图8-18。 图中,P是存在位,=1表示该段已经在物理内存中,DPL是“描述符特权级”。 与DOS方式下的中断向量表(IVT)不同,IDT可以放在内存的任何位置,它的首地址(线性地址)存放在IDTR寄存器中。
图8-17
2. 中断响应过程 一次中断发生后: 将EFLAGS、CS、EIP先后压入堆栈 清除EFLAGS中的IF和TF标志 依照CS内容,从GDT或LDT表中找到中断服务程序的段描述符,装入CS寄存器对应的描述符寄存器,中断门中的偏移地址装入EIP寄存器 进入由CS:EIP所指出的中断服务程序。
如果中断类型对应一个陷阱门,除了不清除IF标志位外,其他过程与上述相同。由于不清除IF,在中断处理过程能够被新的外部中断打断,这意味着它的中断优先级较低。 出于保护的需要,不同特权级的任务不能使用同一个堆栈。如果中断服务程序与被中断程序有不同的特权级,还需要在将EFLAGS、CS、EIP压入堆栈后进行堆栈的切换,新的堆栈指针(SS:ESP)存放在当前任务的TSS段中。为了保证正确的返回,需要把原来的堆栈指针也压入堆栈保护。
如果中断类型对应一个任务门 段选择符被装入TR寄存器 依照段选择符的内容,从GDT中取出TSS描述符装入TR对应的描述符寄存器 将当前任务的所有通用寄存器、所有段寄存器中的选择子、EFLAGS、EIP存入该任务的TSS 将对应TSS段中所保存的通用寄存器、段寄存器(段选择子)、EFLAGS、EIP副本装入处理器对应的寄存器中 在CS:EIP的控制下,一个新的任务开始执行 类似于用JMP和CALL指令连接一个新任务
8.5.2 I/O控制中心(ICH)的中断管理功能 在新的“两个中心”微计算机结构中,处理器以外的中断管理功能是由“I/O控制中心”芯片完成的。 图8-10列出了它的中断接口信号。
1. 串行中断 在以前的PC机中,外部中断请求信号连接在中断控制器8259A的中断输入引脚上,所连接的引脚的编号与它的中断类型、中断优先级相对应。这种方式的优点是直观和简单,缺点是连线多,缺乏灵活性,不便于系统的扩充。 在新一代的PC微机中,采用了一种新的中断请求信号格式——串行中断,它用一根信号线(SERIRQ)来传递中断请求信号。所有支持串行中断的设备都可以用一个三态门连接到这根线上发送各自的中断请求信号(图8-18)。
图8-18
SERIRQ信号线上的信息组织成“包”,用PCI的时钟信号(PCICLK)对“包”内信号进行同步。 “包”信息划分为开始帧、数据帧和停止帧: 开始帧: 由4,6或8个PCI时钟周期的低电平组成,表示一个“包”的开始。 开始帧可以由ICH控制器发起,也可以由一个外部设备发起。
数据帧: 开始帧结束后,每个外部设备以它的中断类型为序, 占用一个数据帧发送自己的中断请求信号。 每个数据帧由三个PCI时钟周期组成。第一个周期为取样阶段,对于PCI设备中断,低电平表示有中断请求,对于ISA设备,高电平表示有中断请求。 第二个周期为恢复阶段,由设备输出高电平或悬浮态,SERIRQ信号线由上拉电阻保持为高电平。 第三个阶段为翻转阶段,设备输出端为悬浮态,SERIRQ信号线保持为高电平。数据帧的个数由ICH所支持的串行中断个数决定。
停止帧: 数据帧结束后,由ICH发送2-3个PCI时钟周期的停止 帧。 使用串行中断减少了中断请求的引脚数,但每个设备的相应逻辑变得复杂了。在开始帧出现之后,每个设备都要“侦听”SERIRQ信号线上的信号,以便在属于它的数据帧中发送正确的信号。
传统的外设,如键盘、鼠标等设备的接口集成在称为“Super I/O”的芯片中。它们的中断请求由“Super I/O”芯片转换成串行中断信号通过“LPC I/F”送往ICH(参考图8-8)。 ICH内的控制逻辑在收到来自SERIRQ信号线的串行中断信号后,将它们转换成独立的中断请求信号送往内部的8259A。
2. ICH内8259A的连接 ICH内集成了相当于二片8259A的中断管理逻辑。 主片8259A使用20H和21H二个端口地址,提供了IRQ0, 1, 3~7的中断接入管理。 从片8259A的中断请求输出INTR连接在主片的IR2引脚上,提供了IRQ8~15的中断接入管理,它使用0A0H和0A1H二个端口地址。
8.5.3 APIC中断 新型微型计算机为了进一步提高性能,支持多处理器系统。这样带来了一个新的问题: 由哪一个处理器来启动系统; 一个外部中断到达之后,交给哪一个处理器去处理。 为了解决多处理器环境下处理器之间的联络、任务分配和中断处理,新一代微机计算机采用了 “高级可编程中断控制子系统(Advanced Programmable Interrupt Controlor,APIC)”。
APIC子系统由三部分组成: (1)Local APIC:这一部分集成在微处理器中,包括了8259A和8254的功能。它可以接受并响应来自APIC子系统的外部中断请求、经APIC子系统传来的其他处理器发来的中断请求,以及处理器内部产生的中断请求。 (2)I/O APIC:它集成在ICH或“南桥”芯片的内部,它支持24个APIC中断。 (3)APIC总线:这是由三根线组成的一组同步总线,其中APICD0和APICD1传送数据,APICCLK传送时钟信号。这组总线连接所有的Local APIC和I/O APIC。 系统中只有单片微处理器时,可以通过设定“绕过”方式,不使用APIC。
APIC中断与传统8259A的区别: 中断信号在APIC上串行传送; 无需中断响应周期; 中断优先级与中断类型号相独立,中断类型号不决定它的中断优先级; 多中断控制器,APIC通过仲裁允许连接多个中断控制器; 更多的中断,支持24个中断。
习题8 1. 查找相关资料,用列表方式给出8088,8086,......直到P4各代微处理器的地址、数据线引脚数量,并推算出各自的内存寻址空间。 2. 什么是MMX指令?它有什么特点? 3. 什么叫动态执行?使用动态执行技术会带来什么好处? 4. 32位微处理器有哪几种工作方式?各有什么特点? 5. 叙述XT总线与ISA总线的异同之处。 6. 什么叫分级总线?使用分级总线有什么优点? 7. 简述“两个中心”结构与“南北桥”结构的区别,同时说明“两个中心”结构的优越之处。
8. CPU←→Cache,Cache←→主存,主存←→辅存之间的数据传输各有什么特点?为什么?请分析原因。 9. 什么叫“相联存储映像表”?说明它的结构和用途。 10. 为什么要进行Cache和主存的“映像”?有哪几种相联映像的方法?比较各自的利弊。 11. 什么叫“突发总线周期”?它有什么优点? 12. 逻辑地址是怎样转换成线性地址的?简要叙述转换过程。 13. 线性地址是怎样转换成物理地址的?简要叙述转换过程。 14. 请分析使用虚拟存储管理带来的利弊。 15. 32位微处理器实施保护机制的目的是什么?有哪些主要措施?
16. 说明操作系统在保护模式下启动一个任务的过程。 17. 32位微处理器如何实施对I/O过程的管理? 18. 简要叙述保护方式与实地址方式下的中断管理方法的区别。 19. 什么叫“串行中断”?它有什么优点? 20. 什么叫“APIC”中断?它有什么用途?