微机接口技术是采用硬件和软件相结合的方法,研究微处理器如何与“外部世界”进行最佳联结,以实现CPU与“外部世界”之间的高效可靠的信息交换的一门技术。(这里所说的“外部世界”是指除CPU之外的全部设备和电路)程序员
微机接口技术包括信息类的多种技术(计算机技术、通讯技术、电子技术、控制技术等)和计算机技术的多门课程(计算机组成原理、微机原理、程序设计语言、设备驱动程序及操做系统)知识的应用。编程
接口技术的内容可分为:上层(用户层)和接口的底层两个层次。windows
上层的负责的是接口用户应用程序的编写,包括MS-DOS和Win32程序两种形式的上层用户应用程序。安全
底层则是用户不可见的接口部分,其基本内容是本地总线与PCI总线之间的总线接口设计和为实现上层用户应用程序对底层硬件访问的设备驱动程序的设 计,包括虚拟设备驱动程序(VDD)和内核设备驱动程序(WDM)程序的设计,而设备驱动程序又会牵涉到windows操做系统的内核;还包括实现PCI 设备的即插即用而对配置空间的设置与访问。服务器
先来看看下面的图片:ide
在图中很明显:微处理器采用的是以PCI总线为中心的多总线结构,I/O设备接口的一侧是与本地总线想链接,另一次是与低速I/O设备相连,而高 速I/O设备则直接与PCI总线相连。与低速I/O设备类似,扩展存储器经过扩展存储器的接口与本地总线相连,而主存储器则直接与Host桥相连工具
图中已经明确说明了:I/O设备接口和存储器等都是挂在微机的总线上,而且按照高速和低速分别链接在3级不一样层次的总线上,都不是直接与CPU相链接的,而是经过各个关卡逐步靠近CPU。post
值得注意的是,I/O设备接口是CPU与外设I/O设备之间的桥梁,因此I/O设备接口的发展天然要随着CPU和I/O设备之间的变化而变化。编码
I/O接口的设计主要是以硬件为基础,硬软结合的方法:spa
①硬件设计方法:
一般采用可编程接口芯片并编写相应的控制程序,这要求对各类芯片的功能、特色、工做原理、使用方法及编程技巧,都要有深刻了解和熟练的。
②软件设计的方法:
软件的方法包括两种系统下的程序编写,即MS-DOS和windows系统下的4种编写。
而在DOS下有3种方式: ⑴直接对硬件编程,这种方式能够充分发挥底层硬件的潜力和提升程序代码的效率,可是要求对硬件的细节有至关的了解,熟悉硬件的脾气。且程序对硬件的依赖性大,可移植性差。
⑵/⑶分别是BIOS调用和DOS系统功能调用编程。这两类主要针对的是标准的系统资源,包括键盘、显示器、打印机、串行口等的程序编写,而不须要对底层硬件编程。
在windows下,⑷用户利用win32的API调用来编写。
不难理解,且动动脑子就能想到:从应用角度了解硬件资源的外部特性和功能而不在乎内部硬件细节的方法才是最佳的设计和分析的方法。
32位微处理器的工做模式有三种:实模式、保护模式、虚拟8086(V86模式)。
1.实模式
①存储器地址空间采用实地址,而不支持虚拟存储器。
②无保护机制,不支持存储器保护功能
③单任务运行,不支持多任务
④存储器管理采用分段机制,支持段式管理;不支持分页机制,不支持页式管理
⑤使用20位地址总线,支持1MB的内存空间寻址
在进入实模式后,微处理器的状态能够从相关的寄存器的内容看出来,先来看看下面的图片:
例如:
CRo的第0位 PE=0,代表微处理器工做在实模式下
第3位 TS=0, 代表无任务转换,即不支持多任务
第16位 WP=0,代表不进行写保护,不支持保护功能
第31位 PG=0, 代表不使用分页式管理
IDTR的基地址=0和界限=3FFH,表示实模式的中断向量表安排在存储器的00000H~003FFH区域,而且固定不变。
实际上,实模式下的分段机制对存储器的段也是按照段描述符的格式定义的,只不过是根据实模式的特色进行的,而且所定义的段描述符中的各类属性是固定不变的。所以,不像保护模式那样,因为段的各类属性是变化的,而须要使用描述符来描述各个具体的段。
下面是实模式下对段描述符的定义,内容包括段基址、段界限和段属性3个域:
●代码段 段基地址 = 段值 x 16
段界限 = OFFFFH(64KB)
段属性: P = 1, 段老是存在(由于是实地址)
G = 0, 段界限以字节为单位
CPL = 0, 当前特权级为0(正在执行的代码段的访问特权级)
R = 1,可读可写
E = 0, 向上扩展,偏移值必须小于等于段界限
C = 0, 非一致代码段,访问特权级与被访问特权级恒等
●其余段 段基地址 = 段值 x 16
段界限 = 0FFFFH(64KB)
段属性: P = 1, 段老是存在 (由于是实地址)
G = 0, 段界限以字节为单位
CPL = 0, 当前特权级为0(段的被访问特权级)
R = 1, 可读可写
E = 0, 向上扩展,偏移值必须小于等于段界限
因为各个段的基地址、界限和属性都是按照上面固定的值由微处理器复位时就设置好了,因此,实模式下再也不要求用段描述符来讲明各个段的具体属性。
实模式下,用户在程序中所使用的地址是逻辑地址,而代码和数据放在物理地址中,CPU要运行程序就要将逻辑地址转换为物理地址。物理地址 = 段值 X 16 + 偏移量
在实模式下,存储器的寻址范围 220B=1MB ,通常状况下,各段在存储器中的位置分配是由操做系统负责的,除非专门指定。每一个段能够独占1个段,段也可重叠。实际使用中,每一个段的大小(尺寸)能够根据须要肯定,可使任意不超过64KB的范围,另外,段的起始位置必须从16的整数倍地址单元开始。
2.保护模式
保护模式的特色:
①采用虚拟技术,支持虚拟存储器
②采用保护措施,实现存储器内容的保护与隔离
③采用分段与分页机制,实现虚拟存储器的管理
④采用分段与分页机制,实现虚拟存储器管理
⑤基于虚拟机,支持多任务
在保护模式下,程序中所使用的地址是虚拟地址而不是实地址,存储器也是虚拟存储器。实际的物理存储器是由存储器芯片所组成的一个存储器实体,它的最 大容量取决于地址总线的位数,20位地址有1MB空间,32位地址线可达4GB的空间。虚拟存储器是采用虚拟技术设计出来的一种比实际存储器容量大得多 的,而并不是实际存在的存储器。固然,虚拟存储器空间也不可能无限大,从32位微处理器段式管理方式的段+偏移可知,寻址目标地址最多46位(选择子14 位,偏移量32位),可见32位处理器的虚拟地址空间可达246=64TB,这个空间比实际中的4GB大了16000倍。
实现虚拟存储的方法:
首先,虚拟存储器由存储器管理器(MMU)及1个大容量硬盘(HD)支持。操做系统的存储器管理器控制物理存储器的分配和施放,以及硬盘和 物理存储器之间的数据交换。当程序访问的一个段或页已在存储器(内存)时,操做正常;若是不在,就产生异常,并转入异常处理程序,异常处理程序则将该段或 者页从硬盘装入内存。这样,在编程中看来全部段和页都是在存储器中,这就是虚拟存储技术。
保护模式下的保护机制
存储器的保护措施大体可分为特权级保护和条件保护两类
①特权级保护措施:
是对各段人为的附加一个特权级别,而且规定低级别的程序不能访问,更不能修改高级别程序与数据。每当一个程序试图访问一个段时,就把它的特权级(CPL)与要访问的段的特权级(DPL)进行比较,以决定是否容许访问。从而实现保护的目的。
特权级保护也叫访问权限保护,可分为两个层次:同一任务内的保护和不一样任务之间的保护。
②条件保护性措施:
是针对那些不够条件而进行的违规操做,用以包拯系统的安全。这类违规操做会引发异常,异常处理程序会处理他们并重启操做。
在保护模式下I/O地址空间也属于访问保护范围。可是端口地址与存储器地址不一样,它既不是分段的,也不是分页的,故它的寻址不须要段寄存器,于是对存储器所采用的那些保护措施就不适用于I/O端口了。所以采用IOPL特权级与I/O许可位图进行保护。
保护模式下的存储器管理
在保护模式下,存储器空间用虚拟地址空间、线性地址空间和物理地址空间三种方式来描述。采用扩充的分段和可选的分页管理方式,并由CPU中的存储器不见MMU实现
保护模式下存储器的管理方式
在保护模式下有两种存储器管理方式:即段式管理和页式管理。
①段式管理:
段式管理将存储器空间划分为任意长度的段,并采用段+偏移量造成物理地址,在名称和形式上与16位微处理器相同,可是含义彻底不一样,它对段的描述已经添加了许多标志为保护的属性,而把“段”扩展为“段描述符”,所以,把保护模式下的段式管理称为扩展段式管理。
②页式管理:
页式管理将存储空间划分为固定大小的页,而且采用页表将线性地址页转换为物理页,再将物理页+页内偏移量造成物理地址。
虚拟地址空间到物理地址空间的转换
在保护模式下,用户在程序中使用的地址都是虚拟地址,而代码和数据是存放在物理地址中的,所以,微处理器要运行程序就要将虚拟地址转换(映射)到物理地址。
①段式管理的地址转换
在段式管理下,仍然采用 段+偏移量的方案来表示,在形式上也是 段寄存器:偏移量 ,如代码段的虚拟地址CS:EIP。可是,这里的段寄存器里装的并非真正的段基址,而是1个指向某段描述符的选择子,真正的段基址放在段描述符中。因 此,要从虚拟地址转换(映射)物理地址,必须利用段选择子到描述符表中找到相应的描述符,从描述符中取出段基址,再把 段基地址+偏移量,最后获得物理地址(线性地址),(反过来,线性地址不必定是物理地址,只有在页式管理被禁止使用是,现行地址才等于物理地址)。
之因此不直接把段基址放在段寄存器中,是由于在保护模式下,对段的描述除了段基址外,还加入了段的特权级属性和段限长等保护信息(64位的段描述符),使得16位的段寄存器不够存放这么多信息。
②页式管理的地址转换
在页式管理下,存储器线性地址不等于物理地址,要获得物理地址还必须将线性地址再进行一次转换(映射)。为了实现这种转换,分页机制将32 位存储空间划分为大小固定为4KB/4MB的物理页,并提供两级转换表:页表目录和页表。利用两级转换表创建线性地址和物理地址的对应关系。
其中:
线性地址的高10位(22~31位)对应页表目录项;
线性地址的次高10位(12~21位)对应页表项;
线性地址的低12位(0~11位)对应页内的偏移量;
即:
要访问存储器单元。经过对两级转换表的页表目录项和页表项的两次查表,就能够产生与线性地址相对应的物理页,这叫作页变换。将也变换所获得的物理页加上线性地址低12位(0~11位)所肯定的页内偏移量,就是要访问的存储单元。
3. 虚拟8086模式(V86模式)
V86模式是在32位微处理器中模拟运行16位微处理器的一种工做模式,是在保护模式下由保护机制控制运行的8086工做模式。在V86模式下, 段寄存器的用法跟实模式的同样,用来保存段起始地址的高16位;可寻址地址空间为1MB;20位的物理地址的计算也是段寄存器内左移4位加段内偏移地址。 所以,32位微处理器处理就好像是一个快速的808六、8088微处理器。
V86模式和实模式的区别
V86模式和实模式都是为了与8086/8088兼容而设置的16位操做模式。可是V86是在保护模式下运行8086的工做模式,因此V86模式跟真正的8086模式有很大的区别。
①在V86模式下可寻址的存储空间虽然为1MB,可是能够采用存储器分页管理机制,将1MB的存储空间分为256个页面,每页4KB。
在V86模式下中断处理不是采用实模式下的中断向量表,而是采用保护模式下的中断描述符表,即采用保护模式下的中断处理机制。
②实模式是整个微处理器的工做模式,而V86模式是在保护模式下一个任务内的代码段、数据段和堆栈段的工做模式。所以,在32位微处理器的任务系统中,可以使用其中的一个或多个任务同事工做于V86模式,运行在V86模式下的任务被称虚拟86任务,简称V86任务。
因而可知,V86模式即保持了与8086/8088工做模式的兼容,又支持了保护模式下的保护机制、存储分页管理机制和多任务机制。另外,在V86模式下,各段的特权级均为3级,而在实模式下,各段的特权级都为0级。所以,V86模式限制了一些特权指令的执行。
虚拟8086机
在V86模式下,V86任务的执行是由一个被称为V86监控程序的系统软件控制的。V86任务和V86监控程序以及微处理器的硬件组成了一个“虚拟 8086机”,其中V86监控程序控制V86任务的外部界面、中断和输入/输出,微处理器硬件提供该任务运行所需的1MB的虚拟地址空间,并执行V86任 务中的指令。
32位微处理器可在保护模式和V86模式之间切换。windows操做系统和windows应用程序运行在保护模式下,若是要运行DOS操做系统和DOS应用程序,微处理器就切换到V86模式,而且由虚拟机管理器VMM负责这种切换。
1、 基于微处理器的微机系统软件模型
所谓微机系统软件模型,就是从软件编程的角度去看待微型计算机系统,也就是从编程使用的角度来考量危急中的微处理器、存储器及I/O系统,而不深究其内部电路结构的硬件细节。
微机系统软件模型所描述的对象包括微处理器的寄存器模型、存储器模型和I/O地址空间模型。这些都是用户能够用程序的方法访问和使用的危机系统资源,而那些用户不能够用程序的方法访问和使用的硬件资源(如微处理器的运算部件,流水线等)则不属于微机系统软件模型的范围。
微机系统软件模型概述
①从编程的观点来看待微机系统的硬件资源,能够简化对内部硬件细节的了解。例如,对微处理器,就只需着重了解他的可编程的寄存器的功能、使用方法,而对微处理器内部电路结构没必要在乎。
②使用微处理器的汇编语言编程,也必须从软件的观点去了解微处理器及其存储器子系统和I/O子系统的操做。掌握软件模型中寄存器的功能和使用方法、存储器的分段与分页机制和访问方法,以及I/O端口的读、写方法,对汇编语言程序设计相当重要。
③因为微处理器的活动(操做)都是靠软件来驱动的,用户编写什么样的程序就可使微处理器产生什么样的活动(操做)。因此,用户对微机的应用,实际上就是用过本身的程序来实现。
④,从兼容性来看,强调功能上、逻辑上兼容,而不强调物理上的兼容即内部电路细节上的兼容,采用软件模型也是合适的。
2、实模式下微处理器的寄存器模型
先来看看下面图片:
图中不打阴影的部分表示在实模式下能够编程使用的寄存器,包括:
4个通用寄存器:AX、BX、CX、DX
6个段寄存器:CS、DS、SS、ES、FS、GS
2个指针寄存器:BP、SP
2个变址寄存器:SI、DI
1个指令指针:IP
1个标致寄存器:ELAGS
1个控制寄存器:CR0
下面来介绍个寄存器的做用和格式
①通用寄存器
实模式下的4个通用寄存器是:累加器(A)、基址寄存器(B)、计数寄存器(C)、数据寄存器(D)
做为16位使用时在寄存器名后面加X,如AX、BX、CX、DX等
做为32位使用是,则在16位的基础上加E,如:EAX、EBX、ECX、EDX。
4个寄存器各自具备不一样的功能:
A寄存器猪腰用于存放程序执行过程当中的一些中间结果,以及存放I/O数据
C寄存器在串、循环、循环移位、移位等操做中做计数寄存器
D寄存器也能存放地址信息,如存放I/O端口地址等
②段寄存器
段寄存器是为了存储器分段的须要而设置的,用于存放段基址,全部段寄存器都是16位的。所以段基址必须是16B的整数倍,而且段与段之间能够是连续的、相邻的、独立的或者是部分重合的。系统中能够同时有6个段被激活而处于工做状态,即:
1个代码段
1个堆栈段
4个数据段(D、E、F、G)
这些寄存器中保存的值被称为当前段寄存器值。
段寄存器内的数值能够由程序员经过软件加以改变。所以程序要访问存储器的哪一个段,只须要将该段的段基址写入相关寄存器。例如:
要选用存储器中不一样数据段空间的数据,只要改变数据段寄存器(DS、ES、FS和GS)中的数值便可。
一样的,当执行段间调用指令使程序发生转移时,就须要改变代码段寄存器CS的数值。
一段内存是否能够用来作代码的存储空间、数据的存储空间、仍是作堆栈空间,主要是由微处理器中的段寄存器来指定。例如:
由CS与IP置顶为代码的存储空间
由DS与偏移置顶数据的存储空间
由SS与SP置顶为堆栈存储空间
③指令指针
实模式的指令指针IP为16位,它只是存储器中当前代码段内的偏移量,即代码与代码段段基址的距离。在实模式下,由微处理器把IP的偏移量和CS的 当前值组合为指令代码的地址,故要访问代码的地址为CS:IP。可见,指令指针是存放程序代码的偏移地址的,而不是存放数据的。
④指针和变址寄存器
因为有些指令(算术、逻辑指令)的操做数在数据寄存器中,另外一些指令(串指令)的操做数不在数据寄存器中,而在存储器内,所以,须要一些可以肯定操 做数在寄存器中的位置的寄存器。指针寄存器和变址寄存器就是用于存放偏移量地址,而不是存放数据的寄存器。他们分别以指针方式或变址方式选中存储器的 64KB段内的具体存储单元。
指针寄存器(SP、BP)用于选取堆栈段内的具体存储单元,即指针寄存器的值指向堆栈段的栈顶或者栈内的具体存储单元;
变址寄存器(SI、DI)用于选取数据段内的具体存储单元,即变址寄存器的值指向存储器数据段或附加段内的存储单元。
因此,若是要访问存储器堆栈存储区,只要把SP或BP内的数值与堆栈段寄存器SS中内容合并成存储器物理地址便可。其中,栈顶指针SP或BP内的数 值与堆栈段寄存器SS中内容合并成为存储器物理地址便可。其中栈顶指针SP与SS组合起来(SS:BP)造成20位地址指针,指向堆栈内的存储单元。
实模式下,BP常常用于读取堆栈内一些参数,传递给子程序,于是称为子程序参数传递的一种经常使用方法。为此,子程序内应包括使用基址寻址的指令,该指令将从堆栈里读取参数值。
另外两个变址寄存器SI和DI用于存放数据段的偏移地址。在指令中包含变址时,SI用于保存源操做数的偏移量地址,DI用于保存目标操做数的偏移地址。
⑤标志寄存器
先来看看标志寄存器的图片:
标志寄存器(ELAGS)是一个32位的寄存器,用于指示微处理器的状态并控制他的工做。标志寄存器在实模式下只使用9位,即下图:
它包括状态标志与控制标志两类。状态标志的逻辑状态取决于指令执行的结果,是自动产生的,其余指令可使用这些标志来决定是否使用程序发生转移。控制寄存器是在程序中使用专门指令设置的,不是自动产生的,用来控制一些操做,如中断的开和关、地址的加与减的方向等。
⑴6位状态标志的做用
●进位标志位CF(Carry Flag)
当执行算术指令时,若其结果的最高位有进位或借位,则将CF置1;不然复位
●奇偶标志位PF(Parity Flag)
当操做结果中有偶数个1时,置1;不然,置0。
●辅助进位标志位AF(Auxlliary Carry Flag)
在8位、16位、32位二进制数内,若其较低字节中有低位半字节向高位半字节进位,
或者高位半字节借位给低位半字节,则将AF置1;不然,AF复位
●零标志位ZF(Zero Flag)
若是算术或者逻辑运算结果为零,则将ZF置1;不然,ZF复位
●符号标志位SF(Sign Flag)
记录运算结果的符号,若结果为负,则SF置1;不然,置0
●溢出标志位OF(Overflow Flag)
在运算时,若带符号的结果超出机器可以表示的范围,则OF置1;不然,置0
⑵3位控制标志的做用
●陷阱标志位TF(Trap Flag)
用于设置陷阱中断,若TF置1时,则在执行指令时产生单补中断,即CPU进入单步方式:
它执行一条指令后就跳到一个专用服务器程序上去,检查指令执行状况,用于程序调试。
●中断容许标志IF(Interrupt Flag)
当IF置1时,容许中断请求;当IF置0时,禁止中断请求
●方向标志位DF(Direction Flag)
决定串操做的方向。当DF置1时,串指令自动按减地址执行,即串数据传输过程是从高地址到低地址;
当DF置0时,串指令按增长地址执行,即串数据传输过程是从低地址到高地址。即:
在串处理时控制变址寄存器SI和DI递增或递减方式。
至于每次递增或者递减多少,取决于每次传输的是字节、字、双字
如果字节,则加/减1;
如果字,则加/减2;
如果双字,则加/减4;
3、 保护模式下微处理器的寄存器模型
先来看看下面的图片:
对比前面实模式下寄存器的图片能够发现:
保护模式寄存器模型是实模式寄存器模型集的一个超集,保护模式模型除了实模式中使用过的寄存器以外,新增了4个系统地址寄存器GDTR、IDTR、LDTR、TR和4个控制寄存器CR0~CR3。另外,一些寄存器的功能也获得了扩展,例如:指令指针为EIP,长度为32位;标志寄存器EFLAGS的更多位获得了利用。
系统地址寄存器
在保护模式下,微处理器内部新增了4个寄存器 GDTR、IDTR、LDTR和TR,这些寄存器是为了提供地址信息在肯定全局描述符表GDT、中断描述符表IDT、局部描述符表LDT和任务状态段TSS等4种表格在存储器中的位置,故把他们叫作系统地址寄存器。
①全局描述符表寄存器GDTR用来在存储器地址空间定位一个全局描述符表GDT。GDTR的格式以下图:
从图中能够看出,GDTR长48位,由这个48位地址做为指针,直接指定GDT表在存储空间的位置。其中GDTR的高32位基地址Base,指示GDT在存储器中的开始位置。32为基址容许把GDT定位在线性地址空间的任何地方。
GDTR的低16位指示GDT的段限长Limit,它规定了GDT按字节计算的大小(Limit的值要比实际表小1。例如,若是 Limit=00FFH,则表长为256B)。16位段限长容许GDT表最大可达65536B,于是最多能容纳8192个描述符(每一个描述符长8B),实 际应用中根据须要来肯定GDT的长度。
中断描述符表寄存器
中断描述符表寄存器IDTR用来在存储器中定位一个中断描述符表IDT。IDTR也是48位长,由这个48位地址指针,直接指定IDT在存储器空间 的位置。其中IDTR的高4个字节基地址Base,用于表示IDT在存储器中的起始地址,32位基地址容许IDT定位在线性地址空间的任何地方。
IDTR的低2个字节表示IDT的段限长Limit,以定义表的大小(表实际的大小等于Limit+1个字节)。可定义IDT的最大长度为65536字节长,但系统只支持256个中断和异常,因此,实际上IDT最大长度是2KB,以字节为单位的段界限为7FFH。
局部描述符表寄存器
局部描述符表寄存器LDTR并不直接指示局部描述符表LDT在寄存器中的位置,所以,他的格式与GDTR和IDTR都不一样,LDTR的格式以下:
LDTR是16位长。这个16位的值是一个选择子,他指向存放GDT中的LDT的描述符。选择子不能直接定位LDT,只有描述符才能定位LDT。因 此,当向LDTR中装入一个选择子是,相应的LDT的描述符就自动从GDT中读出来并装入LDTR的高速缓冲寄存器中(如上图中虚线框部分)。真正的 LDT描述符就在这个高速缓冲寄存器中。它是64位的,其中32位的Base值只是LDT在存储器的起始地址,16位的Limit值指示LDT的大小,还 有12位的Attribute值说明LDT的属性。
可见,LDT须要2次定位。首先利用LDTR中的选择子,在GDT中找到LDT的描述符,而后利用LDT的描述符,来定位LDT在存储器中的位置。
任务状态段寄存器
任务状态寄存器TR与LDTR相似,也不能直接指定任务状态段TSS在存储器空间的位置。
TR是16位长。这个16位的值也是一个选择子,不过这个选择子用来指示TSS段的描述符在GDT表中的位置的。找到了TSS段描述符,经过描述符 就可以指定TSS段在存储器空间的位置了。所以,当选择子装入TR时,相应的TSS段的描述符就自动从全局描述符表GDT中读取并装入TR的高速缓冲寄存 器中(如上图右侧虚线框部分)。这个高速缓冲寄存器为64位,它提供了TSS段的32位起始地址Base和TSS段的16位Limit以及TSS段的12 位属性Attributte。
可见,TSS段也须要2次定位。首先,利用TR中的选择子,在GDT中找到TSS段的描述符,而后,利用TSS段的描述符,来定位TSS段在存储器中的位置。
控制寄存器
保护模式新增的4个32位控制寄存器CR0、CR1、CR2、CR3 ,是为了控制微处理器的工做方式和分段管理机制以及分页管理机制,以下图:
①控制寄存器CR0
CR0的主要功能是选择微处理器的工做方式和存储器的管理模式。各位的含义以下:
⑴保护模式容许置PE位
PE位控制微处理器是进入是模式仍是进入保护模式,所以由叫作微处理器工做模式控制位。
PE置0,为实模式
PE置1,为保护模式
系统开机或者重启时PE清零,微处理器处于实模式。若是要进入保护模式,必须经过程序将PE置1
⑵分页管理启用位PG
PG控制禁止仍是启用分页管理机制。
PG置0,禁止使用分页机制,此时由分段机制造成的线性地址做为物理地址;
PG置1,启用分页机制,此时线性地址还不是物理地址,线性地址必须通过分页转换后
才能造成物理地址。
以下图:
因为PG=1且PE=0是非法组合,即实模式下不能使用分页管理,只有保护模式下才能分页,所以,当用PG为1和PE为0的值装入CR0寄存器将引发通用保护异常。
⑶协处理器操做控制位(MP、EM、TS、ET)
CR0中的位1~位4分别标记为MP(算术存在位)、EM(模拟位)、TS(任务切换位)和ET(扩展类型位),他们控制浮点协处理器的操做。
②控制寄存器CR2
CR2 由分页管理机制使用,用于报告发生页故障时的出错信息。若是某页不在存储器中,则在页转换时会发生缺页故障,此时,微处理器把引发页故障的线性地址保存在CR2 中。操做系统中的页故障处理程序经过检查CR2 的内容,就能够查出是线性地址空间中的哪一页引发的故障。
③控制寄存器CR3
CR3 也是由业管理机制使用的,用于保存页表目录的起始物理地址。在肯定页表目录在存储器空间的位置时,须要使用页表目录的基地址,CR3的高20位就是提供页表目录的基地址的,故称页表目录的基地址寄存器PDBR。因为基地址仅高2位有效,低12位不用,因此,向CR3中装入一个页表目录的其实物理地址(基地址)时,低12位必须为0;而从CR3中取值时,低12位被忽略。
改变功能的寄存器
一些在实模式和保护模式下均可以使用的寄存器,在切换到保护模式时,其功能会发生变化。
①段寄存器
段寄存器在保护模式下称为段选择子寄存器,仍然是16位,其值不在是段基址而是选择子。选择子并不直接置顶存储器地址,它选择一个定义存储器段的段基址、大小和属性的描述符。其具体格式以及做用到之后再研究。
值得指出的是,在保护模式下,每一个段寄存器都是一个相应的高速缓冲寄存器,他对通常编程人员是不可见的。
②标志寄存器
在保护模式下标志寄存器EFLAGS长度扩充到32位,新增长了5位。如图:
这些新增的5位标志位只有在保护模式下使用。例如:输入/输出特权级码IOPL、嵌套任务标志NT、恢复标志RF,以及V86模式标志VM。
●IOPL(2位) 用来指定最大输入/输出特权级。
若是IOPL值为00,则只有在特权级0级才能访问I/O操做。
若是IOPL值为11,则I/O容许较低特权级访问。
●NT 指明当前任务是否嵌套,便是否被别的任务调用。该位在发生任务嵌套时自动设置,而且只能用软件复位。
●VM 指明VM位为1时,微处理器就处于V86模式。此时,其当前特权级由微处理器自动设置为3。
因为微处理器没有提供直接改变VM标志位的指令,而且只有当前特权级CPL=0时,对VM的改变才有效,
因此V86模式与保护模式的切换不能简单地经过改变VM位而进行。
●RF 恢复标志,与调试寄存器断点或单步操做一块儿使用。
●AC 对准检查标志,当AC=1时,且程序运行特权级为3时,对存储器访问边界进行对准检查。
●VIF 虚拟中断标志,在虚拟方式下中断标志只对Pentium机有效。
●VIP 虚拟中断暂挂标志,为Pentium微处理器提供有关虚拟模式中断的信息。它用于多任务环境下,
给操做系统提供虚拟中断标志和中断暂挂信息。
●ID 标识标志,指示Pentium微处理器支持CPUID指令。CPUID指令为系统提供有关Pentium微处理器的信息,
如:版本、制造商等。
程序不可见寄存器
32位微处理器中包含了一些不直接被应用程序访问的“程序不可见的寄存器”,又叫程序不可见高速缓冲寄存器(并非微处理器中的一级或者二级高速 缓冲存储器Cache),是用来保存描述符的。一个描述符包含段基址、段限长和段属性共8个字节64位长,所以,程序不可见高速缓冲寄存器也是8个字节。
6个段寄存器和任务寄存器TR,以及局部描述符表寄存器LDTR都分配了一个程序不可见高速缓冲寄存器,以下图虚线部分所示:
原来,每当用户在程序中向段寄存器(或TR、LDTR寄存器)装入一个新的选择子时,微处理器就会自动访问描述符表,从表中读取一个描述符,并把描 述符装入该寄存器对应的程序不可见高速缓冲寄存器中。这个描述符一直保存在这里,并在访问存储器段时使用,知道段的选择子再次变化为止。这就使得微处理器 在重复访问一个内存段时,没必要每次都花时间到存储器中查找描述符表,而是直接快速地从程序不能够见寄存器中读取和使用描述符,所以称之为高速缓冲寄存器。
可见,程序不可见寄存器是用来提供描述符,以便指定存储段(代码段、数据段和堆栈段)、TSS段以及LDT段在存储器空间的具体位置的重要资源。虽然他们在程序中不出现,而由微处理器在内部直接操做,可是它们对定位与访问保护模式存储器的做用是不可忽视的。例如:
为了定位与访问任务状态段,在程序中只须要将TSS的选择子装入任务寄存器TR,如同选择子装入段寄存器同样。这个选择子会自动访问全局描述符表,从中读取TSS的描述符,而且将任务状态段TSS的基地址、段界限和访问权限装入LDTR高速缓冲寄存器。
至于为何要把描述符以隐藏的方式存放在程序不可见告诉缓冲寄存器中,而不是放在显示的段寄存器中,其缘由也许是为了使32位微处理器在 保护模式下指令书写与在实模式下指令书写格式保持一致,都是向段寄存器写16位数据。虽然在16位数据的含义不一样,在保护模式下入选择子时,也就同事向高 速缓冲寄存器写入描述符,有了描述符也就等于有了段基址。
告诉缓冲寄存器是64位长,分3个字段(域),包括32位段基址,20位段限长和12位段属性。高速缓冲寄存器各字段的定义域格式以下图:
4、实模式存储器模型
存储器软件模型是从软件编程的角度去看存储器是什么样子的,也就是用户在编程时只考虑如何使用存储器,而不考虑它的硬件细节。存储器软件模型的内容包括:存储器空间、存储器的分段与分页、存储器的寻址和存储器物理地址的造成等。
实模式下存储器地址空间和数据组织
①实模式下存储地址空间
32位微处理器在实模式下,支持1MB存储器,从软件观点看这1MB的存储器是由00000H~FFFFFH地址编码(编号)的空间。数据以字节为单位存储在连续的地址码所组织的空间内,但能够连续两个字节(字长)和连续4个字节(双字长)来访问存储空间。
实模式的1MB存储空间均可以被用户访问,不过根据安排有些地址空间有专门用途,专用存储空间不能存储程序中的数据或者指令,如:00000H~003FFH区域专门用于存放中断向量表。通用区域能够存储程序的指令或者数据,通用区域的范围是400H~FFFFFH。
②实模式下存储器的数据组织
存储单元能够存放数字、字符和指令等信息。一个存储单元中存放的信息称为该存储单元的内容。以下图:
若是数据是以字节为单位存入存储器的,如上图中 0004H中存放的信息为34H,则表示为(0004)=34H。
若是数据是以字为单位存入存储器的,如上图中表示为(0004)=1234H。
因此,同一个地址便可看做是字节单元的地址,又可看做是字单元的地址,这要根据使用状况而定。
实模式存储器地址的分段
①实模式存储器地址的分段
实模式采用分段的办法来管理和使用存储器,每一个段为64KB。所以,程序员在编写程序时要把存储器分红段,并在程序的开头设置各段寄存器的值,以定义所须要用到的几个段。通常状况下,各段的地址在存储器中的分配是由操做系统负责的。
值得注意的是: 实模式下的段不能起始于任意地址,而必须从字节地址的16的整数倍的任意一小段开始。
微处理器规定:从0开始,每16个字节为一小段,下面列出了存储器最低地址区的三个小段
的地址区间,每行为一小段。
其中,第一列就是每一个小段的首地址。能够看出这个首地址是字节地址的16整数倍,若以十六进制表示,则最低位为0(即20位地址的低4位为0)。在1MB的地址空间里,共有64KB个小段首地址。
每一个段能够独立占用64KB存储区,以下图:
同时,各个段也能够重叠,以下图:
下面说明段重叠的含义:
假设有一个存储区,包括一个代码段、数据段和堆栈段。代码段的首地址是2000H,代码长度为8KB,数据段的数长度只有256B。此时段 的分配如上图所示。从上图能够看出来,代码段的最大区域能够是02000H~11FFFH,但因为代码长度只用了8KB,因此代码段结束后的第一个小段的 首地址4000H就能够做为数据段的起始地址。也就是说,在这里,代码段和数据段能够重叠一块儿。同理,数据段的最大区域能够是 04000H~13FFFH,但因为数据段只须要2KB,因此数据段结束后的第一个小段的首地址4800H就做为堆栈段起始地址。在这里,数据段和堆栈段 又重叠在一块儿了。固然,每一个存储单元的内容是不容许发生冲突的。在这里所谓的段重叠只是指每一个段实际占用的大小能够根据实际须要来分配,而不必定占有 64KB的最大段空间。
实际上,段区的分配工做是由操做系统完成的。可是系统也容许程序员在必要时指定需占用的内存区,例如:可由程序员指定代码段的起始位置(从100H地址开始)。
②实模式存储器逻辑地址
存储器逻辑地址也就是编程时所使用的地址,实模式的逻辑地址由段基址和偏移地址两部分组成,在程序中,段基址值用16位的段寄存器(CS、DS、 SS、ES、FS、GS)表示,偏移量用16位的指令指针IP、基址寄存器BX、指针寄存器BP或变址寄存器SI/DI表示。例如:代码段逻辑地址表示为 CS:IP,数据段逻辑地址表示为 DS:BX,也可用其中几个寄存器的内容组合成一个偏移量。
段基址与偏移量的关系以下图:
其中,数据段寄存器DS中的段基址表示存储器中64KB的段的起始位置,即段中的最低位地址。BX寄存器中的偏移量是要访问的存储单元的位置与起始地址的距离。所以,段的最低地址的偏移量是0000H,最高地址的偏移量是FFFFH。
实模式下存储器寻址
实模式下只容许微处理器寻址第一个1MB存储器空间,所以第一个1MB存储器称为实模式存储器或者常规内存。
①段+偏移的寻址方案
这个不写了,太熟悉不过了,看下图:
②段+偏移的寻址组合的潜在规则
段+偏移的寻址组合,实际上就是段寄存器和偏移寄存器组合。微处理器对此有一套规则,用于访问不一样的存储器段。这套规则既适用于实模式也适用于保护模式,该规则定义了各类寻址方式中,段地址寄存器和偏移地址存储器的组合方式。例如:
代码段寄存器老是和指令指针组合成 CS:IP用于寻址程序的下一条指令。
另一种默认的组合用于堆栈。经过栈指针(SP)或基址针(BP)寻址寄存器堆栈段中的数据。这些组合用SS:SP或SS:BP表示。例如:
若是SS=2000h,BP=3000h,则微处理器寻址堆栈段寄存器的23000h单元。
实模式下,微处理器默认的段寄存器与偏移寄存器的组合以下图:
另外,微处理器内有一个叫“段超越前缀”的装置,能够改变上述寄存器和偏移寄存器的默认组合,
例如:
数据访问时可以让ES寄存器做为数据段寄存器。
③段+偏移寻址方案容许重定位
可重定位的程序是一个能够放入存储器的任何区域且不加修改仍然能执行的程序,可重定位的数据是能够放在存储器的任何区域,且不须要修改就能够被程序引用的数据。
各类PC微型计算机系统的存储器结构可能不一样,若是没有这个特性,若想要在不一样的机子上运行程序,可能要大范围的重写或者更改,这将会是可怕的噩梦。
存储器用偏移地址在段内寻址,若是咱们将整个存储器段移到存储器系统内的任何地方,只要将段寄存器内容改变为程序所移到的新存储器的地址,而不准改变其偏移地址。
例如:
一条指令位于距段首地址8个字节的位置,则它的偏移地址是8;整个程序一到新的存储器后,这个偏移地址8仍然指向距离段首地址8个字节的位置。
实模式下存储器物理地址的造成
①存储器物理地址的计算
不想多说,看下图:
②不一样的逻辑地址能够映射成同一个物理地址
不解释。
5、保护模式存储器模型
①保护模式下虚拟存储器的地址空间
保护模式下,程序中使用的地址都是虚拟地址,所以虚拟地址也就是逻辑地址。32为微处理器支持虚拟地址空间为64TB。
在32位微处理器的存储器分段模型中,将存储器空间分红了全局和局部地址,各占32TB,而且各包含8192个段,每一个段4GB,如图:
图中表示的是虚拟存储空间的最大值,但因为在实际应用中不是全部的描述符都在使用,因此实际使用的虚拟地址并无这么大。
把虚拟地址空间分红全局和局部地址的目的是:
32位微处理器的多任务环境中,防止任务之间的相互干扰及破坏。当微处理器启动一个任务时,它能够访问全局存储器段也能够访问局部存储器 段。全局地址空间,一般包含能被全部任务共享的资源和数据。局部地址空间的数据和代码只能被相应的任务访问,而不能被其余的任务访问,这就为防止任务之间 的相互干扰及破坏提供了条件。
②保护模式下虚拟地址空间的分段
在保护模式下虚拟地址空间也采用分段方式,并使用48位存储器指针来表示虚拟地址空间,即在程序中用48位的存储器指针来访问存储器的地址单元。48位存储器指针包含16位选择子和32位偏移量,如图:
其中,选择子用来选择虚拟地址空间中的一个段,选择子为16位,只有14位用于选择存储器段,最多可达214=16K个段。偏移量是32位长,段最大可达232B=4GB。所以,正好能够表达整个虚拟地址空间16K x 4GB =64TB。
在实际应用中,一个程序所包含的段的个数是有限的,每一个段的大小也不会大到4GB。所以大多数程序所占用的地址空间要比64TB小得多。
保护模式下的段能够从任意地址开始,而不像实模式下的段必须从字节地址16整数倍的地址开始。
保护模式下存储器寻址
①保护模式下存储器寻址方案
保护模式下存储器寻址既能够访问1MB的存储区(常规内存),又能够访问1MB以上的存储区(扩展内存)的数据和程序。可是寻址这个扩展段,须要修改用于实模式存储器寻址方案。
在寻址扩展内存里的数据和程序时,仍然使用段+偏移地址的寻址方案,而且偏移地址仍然用于访问存储器段内的存储单元。区别是,保护模式下的段基址不 再像实模式那样由段寄存器直接提供,而是一种间接的方式,即在原来放段基址的段寄存器里放一个选择子,由选择子选择描述符表内的一个描述符,而后从描述符 中得到段基址。由于描述符中包含了存储器段的基地址、长度和属性。
因为段+偏移地址仍然用于访问1MB存储器内的数据和程序,因此保护模式指令和实模式指令是彻底相同的。事实上,不少在实模式下编写的程序,不用更改便可在保护模式下运行。
如今来对比一下保护模式下“段+偏移”寻址组合 和 实模式下 “段+偏移”寻址组合:
保护模式下“段+偏移”寻址组合:
实模式下 “段+偏移”寻址组合:
②段+偏移地址寻址组合的潜在规则
和实模式差很少,只是32位微处理器可使用32位寄存器,显然保护模式下的选择范围更大。
保护模式下段式地址的转换
保护模式下虚拟地址使用48位地址指针表示。而保护模式下的物理地址是32位共4GB的地址空间。所以,在保护模式下,将虚拟地址转变成为物理地址,实际上就是将48位的虚拟地址转变为32位物理地址。
保护模式下也采用与实模式相同的“段+偏移地址”的寻址方案,转变过程以下:
选择子--->描述符表中的段描述符--->从段描述符中读取32位段基地址--->再加上偏移量--->获得32位线性地址
保护模式下存储器地址空间的分页
①分页方式
保护模式下分页方式中,物理地址被划分红1048496页,每页4096B长,以下图:
分页管理器的页的大小固定为4KB,与分段管理器的段的大小不固定不一样。分页大大简化了存储管理的实现。须要提到的是CR0中的PE位和PG位及CR3中的页表目录基址寄存器(PDBR)是实现分页管理的关键,这些将在存储器管理中讨论。
②保护模式下页式地址转换
页式地址转换是把32位线性地址转换为32位物理地址。这里的线性地址和物理地址都是以页为单位的,每页4KB,4GB的线性地址和物理地址空间,均可分为1M页。线性地址空间的页称为虚页,物理地址空间的页称为实页,为此,采用页表进行映射。
6、实模式下I/O地址空间模型
32位微处理器实模式下的16位I/O地址范围是0000h~FFFFh,共64KB的地址,但在实模式下实用实际应用中只用了低10位地址,即1024个I/O端口地址。每一个地址对应一个字节宽的I/O端口。
I/O地址空间的分布如图:
地址0000h~00FFh是0页空间。0页是I/O地址空间的第一个256B寻址空间。0页内的I/O地址空间指定为系统板上接口芯片的输入或输出数据传输操做。其余页内I/O地址空间指定为扩展卡的输入或输出数据传输操做。
7、保护模式下I/O地址空间模型
保护模式下I/O地址也是16位的,从0000h到FFFFh,共64KB的地址,能寻址64个8位端口,或32K个16位端口,或16K个64位端口。与实模式下I/O地址空间模型不一样之处有两点:
①保护模式的I/O数据传输有字节宽度、字宽度和双字宽度,而且存储器空间能够独立编址,也能够统一编址;
②保护模式的I/O地址空间有保护措施,采用标志寄存器中的IOPL标志位和利用任务状态段TSS中的I/O容许位图两种措施来实现对I/O地址空间的保护。
基于微处理器的微机系统的硬件结构
任何一个基于微处理器的微机系统都是微处理器、存储器系统和I/O系统3个部分经过总线相互链接而成的。以下图:(图中的各部份内容是将要讨论的内容)
如下内容从应用的角度出发,着重了解微处理器、存储器和I/O端口和外部链接特性,即外部引脚的功能、逻辑定义和信息的传输方向等,而不在乎他们的内部电路细节。
1、微处理器
微处理器在微机系统中的做用
微机系统的核心是微处理器,他是微机系统的控制单元,也称为中央处理器CPU。如上图中所示,微处理器经过总线来链接存储器系统和I/O系统,经过执行存储在存储器中的指令,实现对存储器和I/O的访问与控制。
微处理器在微机系统中的主要工做有:
①在微处理器与存储器或者I/O之间传输数据;
②进行简单的算术和逻辑运算;
③经过简单的逻辑断定,控制程序的流向;
(微处理器正式经过这样一系列看似简单的工做,来完成很复杂的操做或者任务的)
32位微处理器家族,已拥有从iA80386开始到如今的Pentium一大批成员,其功能愈来愈强,处理速度愈来愈高。但他们的基本功能和对存储器空间及I/O空间的支持差异不大。因此,有时把iA80386做为32位微处理器的一个实例进行讨论。
因为不一样微处理器内部结构的差别和所采用的新技术不一样,因此微处理器的硬件兼容性不像软件兼容性那样强。
微处理器外部特性
微处理器的外部特性体如今它的信号线引脚上,32位微处理器的基本信号引脚,按功能及链接的对象不一样,可划分红4组,分别叫作存储器及I/O接口信号、中断接口信号、DMA接口信号和协处理器接口信号,以下图:
值得指出的是,从80386到Pentium的外部引脚在数量上愈来愈多,但对用户来讲,更感兴趣的仍是微处理器面向存储器和I/O设备的有关信号引脚。图中所示的引脚显然作了简化以后的基本信号引脚。
上述个信号线的名称、功能、I/O及有效电平以下表:
微处理器面向存储器和I/O的接口信号
微处理器面向存储器和I/O的接口信号,包括地址、数据和控制信号。
①地址信号线
⑴A0和A1不出如今地址线上
在实模式下,地址线A2~A19有效;在保护模式下,地址线A2~A31有效。可是实际上,实模式的地址长度有20位,保护模式的地址长度有32位。那么还有2位地址线A0和A1到哪里去了呢?原来这两位地址被微处理器内部译码,与数据传输的字节数(数据宽度)一块儿产生字节容许信号用以支持按4个独立的字节宽度的存储体(Bank0~Bank3)来组织32位存储器地址空间和I/O地址空间了。
对32位微处理器来讲,地址信号线就是A2~A31.他们用于传输从微处理器到存储器和I/O设备的地址信息。
⑵CPU和存储器之间的地址线
在实模式下,20位地址给出了微处理器寻址1MB物理地址空间的能力。在寻址时,须要使用地址线A2~A31和字节容许线。
另外,在保护模式下,经过软件提供的虚拟地址,能够寻址64TB的虚拟存储地址空间。
⑶CPU与I/O之间的地址线
不管是在实模式下仍是在保护模式下,32位微处理器均具备独特的64KB的I/O地址空间。因此,在寻址I/O设备时,只须要使用地址线A2~A15和字节容许线。
⑷存储器地址线与I/O地址线的区分
微处理器的地址信号线既链接到存储器,又链接到I/O设备接口芯片,那么,如何来识别从微处理器送出的地址信号是发给存储器的,仍是发给I/O设备的呢?为此,微处理器设置了信号=0时,代表是I/O总线周期,地址信号发给I/O设备。
②数据信号线
⑴32位微处理器的数据总线
32位微处理器的数据总线由32条数据线D0~D31构成,D31为最高位,D0为最低位。微处理器经过这些数据线与存储器及I/O设备之间进行并行通讯。传输的信息有:对存储器的 读/写 数据与指令,对I/O设备的输入或输出数据、命令代码及状态,以及读取来自中断控制器的中断号等。
⑵字节容许信号在数据传输中的做用
在一个总线周期内,微处理器经过数据总线能够传输一个字节,也能够传输一个字或一个双字。所以,微处理器必须告诉外部电路数据将经过数据总线的那一部分进行传输,微处理器是经过激活相应的字节容许信号来作到这一点。其中:
对应于数据线D0~D7
对应于数据线D8~D15
对应数据线D16~D23
对应数据线D24~D31
若是从存储器或I/O设备 读/写 一个数据字节,则使用1个;读/写 一个数据字,使用2个
;读写一个数据双字使用4个
。字节容许信号与数据总线的关系以下图:
假设:字节容许代码,将会产生多少字节的数据宽度?数据传输通过哪些数据线?
从上表能够知道,它传输一个数据字,而且是通过数据线D16~D31传输的。
③控制信号线
⑴总线周期指示信号
总线周期指示信号是指。总线周期指示信号并非直接对存储器和I/O设备接口的控制信号,而是在每一个总线周期开始时发出总线周期指示码,而后,在微处理器外部的总线控制逻辑电路中,对三个总线周期指示信号所组成的总线周期指示码进行译码,产生对存储器和I/O设备接口的控制信号
。下面先来看看两个名词。
●总线周期
总线周期是微处理器完成一次对存储器或I/O设备端口读/写操做的过程。
所以,总线周期是处理器与外部交换数据的基本过程,而且,总线周期有不一样的类型。
●总线周期类型
总线周期类型是由微处理器的总线周期指示信号及有关控制信号通过译码产生的存储器
读/写信号、I/O读/写信号和中断回答信号等不一样控制信号类型。
可见,总线周期指示信号与微处理器的其余控制信号配合,才能产生存储器和I/O设备接口的控制信号。
3个总线周期只是信号能够有8种组合,即有8种总线周期指示码来给出8种不一样类型的总线周期。总线周期指示信号与总线周期类型的关系以下图:
例如:若总线周期指示码=010,则将产生什么类型的总线周期?
经过查表,咱们能够知道,总线周期类型是:I/O数据读。于是产生,
它从I/O设备读取数据。
⑵地址线A20屏蔽信号
A20屏蔽信号使处理器把地址限制在00000000h~000FFFFFh之间,就像8086处理器同样。这使得处理器系统能够像8086微处理器的1MB模式存储器系统同样工做。当访问1MB之内的存储空间时,屏蔽地址A20,
置=0;当访问1MB以上的存储空间时,则开放地址线A20,置
=1.
⑶其余控制信号
●地址状态信号逻辑0有效。
当它有效时,表示总线周期指示码()、
字节容许码()以及地址信号码(
)全为稳定状态,
代表总线周期指示码和地址信号码有效的。
●准备好信号逻辑0有效。
当它无效时,表示存储器或I/O设备还没有准备好,要求在当前总线周期中插入等待状态。
只有当它变为有效时,即慢速存储器或I/O设备准备好时,才容许与微处理器交换数据。
●总线封锁信号逻辑0有效。
当它有效时,封锁共享资源,以独占使用。此信号用于支持多处理器结构。
④微处理器面向外部中断的接口信号
面向外部硬件中断的信号有两种:可屏蔽中断请求和不可屏蔽中断请求
。
⑴可屏蔽中断请求
INTR逻辑1有效。当它有效时,代表I/O设备须要获得服务。微处理器识别出一个有效的中断请求后,
在条件容许时,启动一个中断响应总线周期,其总线周期指示码为000.这个总线周期指示码被送
到总线控制逻辑电路译码,产生一个中断响应信号,通知I/O设备中断请求已经获得赞成,
并经过数据线从外部中断控制器读取中断类型号。这样就完成了中断请求与中断响应的握手过程。
可见,中断响应信号,并非由微处理器直接发出的。
⑵不可屏蔽中断请求
上述可屏蔽中断请求能够经过对标志寄存器的IF位置1或者置0来予以容许或禁止。
而不可屏蔽中断请求则不能。只要在
端出现0到1的跳变,一个中断服务请求就
被封锁在微处理器以内,而与IF位的状态无关。
⑤微处理器面向的接口信号
面向外部DMA控制器的信号只有两个:和
。
当外部的DMA控制器要求占用总线控制权时,它就经过HOLD信号向微处理器或者仲裁器提出申请。在当前总线周期完成后,微处理器就进入保持状态, 使总线信号处于高阻态,并经过HLDA信号线通知外部DMA控制器它已经交出了总线控制权。这样就完成了保持请求/保持响应的握手过程。
至于DMA控制器什么时候要求占用总线控制权,这是由I/O设备决定的,即当I/O设备须要与存储器进行DMA方式数据传输时,由I/O设备向DMA控制器提出请求DREQ,而后才由DMA控制器向微处理器发总线保持请求HOLD,申请占用总线控制权。
2、存储器系统
①存储器的分类
存储器可分为主存储器和辅助存储器。而主存储器包括只读存储器ROM和随机存储器RAM。辅助存储器有闪盘、硬盘等。
(一)ROM存储器
ROM存储器是将程序或者数据已经写入,可是用户只能读取,故称为只读存储器。好比:系统配置的BIOS程序就是存放在ROM存储器中的,而且不会由于停电而丢失,所以,开机就能够运行其中的引导程序。
由于只读不写,故ROM存储器只设置输出容许和芯片容许
控制信号。
当存储在ROM中的程序或者数据须要改变,并且又要长期保存,而且在关机停电后不会丢失时,能够采用另一种ROM,他们是EPROM和 EEPROM,前者叫作可擦除可编程只读存储器,如:2716EPROM。后者叫电可擦除可编程只读存储器,它不须要经过专用的工具(编程器)来擦除,然 后再重写。
此外,快闪存储器与下面将要讨论的SRAM存储器的惟一区别是快闪存储器须要12V编程电压来擦除原有的数据和写新的数据。
(二)RAM存储器
RAM存储器能够随时从中读取或者写入程序与数据,故称为随机存取存储器。因此,RAM存储器除了设置输出容许和输入容许
控制信号外,还须要设置写容许信号线。一旦关机或者停电,就会丢失全部数据。
RAM存储器可分为静态SRAM和动态DRAM。其差异在因而否要求RAM中的信息进行定时刷新(周期性地读取或者写入),静态SRAM在信息写入以后,不须要额外进行刷新就能维持,而动态RAM要维持写入的信息不小时,就必须不断地刷新。
②存储器件的外部特性
为了与微处理器链接而且交换信息,存储器件一半均可以有如下(引脚)信号线:
●地址线(输入)
用来选择存储器件中的存储单元。地址线老是被标为从最低位A0到An。
●数据线(双向)
用来从存储单元读写数据。一般标为D0~Dn
●选择线(输入)
用于选择或容许存储器件芯片,称为片选或者片容许
。若是
或者
有效,
则存储器件执行一次读/写操做;若无效,则存储器件被关闭,也就是不能执行读/写操做。
●控制线(输入)
用来控制存储器件数据的输入或者输出。ROM与RAM的控制线稍微有不一样:
a:ROM使用输出容许控制信号,若
有效,且
有效,则容许输出;
b:RAM使用一条或者两条控制线,使用一条控制线时就是。
当=1时,容许读(输入);
当=0时,容许写(输出);
③存储器地址空间的存储体组织
(一)存储器地址空间的存储体组织
32位微处理器,在保护模式下32位地址线能够造成4GB的物理存储器地址空间。
从软件的观点来看,存储器能够按字节来寻址,其地址范围是从00000000h~FFFFFFFFh。
从硬件的观点来看,此物理地址空间由4个独立的字节宽度的存储体(Bank0~Bank3)组成32位宽度的存储器,以下图:
这种32位宽度的存储器组织结构容许以字节、字或者双字为单位访问存储器。
(二)存储器地址空间的访问格式
虽然32位存储器地址空间在硬件上是以双字存储单元组织的,但在软件上实际访问存储器时,不必定都是固定以双字存储单元进行存取,而是有3中不一样宽度,即3中访问格式:
a:访问双字的1个字节
能够访问双字中4个字节的任何一个字节,具体访问哪个字节,取决于
哪个字节容许信号有效,以下图:
只有,其余的字节容许都无效,表示访问保存在Bank1中的字节数据D8~D15.
b:访问双字中的一个字
能够访问双字中2个字的任何一个字,具体访问哪个字,取决于哪2个字节容许信号同时有效。
以下图:
图中表示访问保存在Bank0和Bank1中的字数据D0~D15。
c:同理,访问一个双字的道理也是同样的,以下图:
I/O系统
①I/O 的地址空间
32位微处理器的I/O子系统的地址空间与早期的8086微处理器的I/O系统彻底兼容。I/O地址线都是16根,故系统中的I/O空间都是64KB,而且都采用IN和OUT指令在微处理器和I/O设备间传输I/O数据。
I/O接口一般链接的是8位的I/O设备,如打印机和键盘。不过如今已经有16位甚至32位的I/O设备,如图像显示器接口等。这些更宽的I/O通道提升了微处理器到I/O设备间的数据传输率。
对32位的I/O设备,I/O地址线A0~A1不出现,端口地址线是A2~A15,而且用来选择传输一个字节、字、双字的I/O数据。
以上是独立编址的I/O空间,对存储器映射的I/O系统就有所不一样,若是采用存储器映射的I/O,那么I/O空间的大小能够比64KB大得多。对存储器映射的I/O,由于I/O设备被当成存储器,故用于在微处理器与存储器系统之间传输数据的指令均可用来进行I/O传输。
②微处理器与I/O系统的接口
(一)I/O系统接口的任务
I/O系统接口的任务是,把微处理器的地址、数据和控制信号线转换成外围支持接口芯片相应的信号线。具体任务以下:
(1)提供外围接口芯片的选择信号,这个由I/O地址译码电路完成;
(2)提供I/O读/写控制信号,这个由总线控制逻辑电路实现;
(3)提供I/O数据传输方向控制信号,这个由数据总线收发器执行;
(4)提供I/O写数据宽度的控制信号,这个由I/O存储器写控制逻辑电路完成;
③总线
(一)地址总线
用于寻址存储器的一个存储单元或者I/O设备的一个I/O端口(寄存器)。
若是寻址I/O,则地址总线包含0000h~FFFFh的16位I/O地址。16位I/O地址能够选择64K个不一样的8位I/O设备。
若是寻址存储器,则地址总线包含存储器地址,地址总线宽度随着微处理器的不一样而变化。16位微处理器寻址1MB存储器,使用20位地址选择 00000H~FFFFFH之间的单元。32位微处理器寻址4GB存储器,用32位地址选择00000000h~FFFFFFFFh之间的单元。
(二)数据总线
用于在微处理器与它的存储器和I/O地址空间之间传输信息。Inter微处理器系列各个成员传输数据的宽度各不相同,从8位到64位宽。全部微处理器的存储器容量都按字节计算。
8088有8位数据总线,一次传输8位数据;
8086有16位数据总线,一次传输16位数据;
32位微处理器一次传输32为数据;
较宽数据总线的优点在与可以提升数据传输的速度。
(三)控制总线
用于控制存储器或者I/O设备完成读/写操做,大多数微机系统都是有4条控制线:存储器读控制、
存储器写控制、I/O写控制
。控制信号是低电平有效。
例如:
若是=0,则微处理器将经过数据总线向一个I/O设备写数据,而且该设备的地址出如今地址总线上。
微处理器读取一个存储单元的内容时,线经过地址总线发出一个存储器地址,而后发出存储器控制信号(),便从目的存储器读取数据,最后将从存储器读出的数据经过数据总线送到微处理器。当向存储器写时,按同理一次进行,区别是发出的是写操做控制信号,而数据则是经过数据总线从微处理器传出。