微机接口技术是采用硬件和软件相结合的方法,研究微处理器如何与“外部世界”进行最佳联结,以实现CPU与“外部世界”之间的高效可靠的信息交换的一门技术。(这里所说的“外部世界”是指除CPU以外的所有设备和电路)
微机接口技术包括信息类的多种技术(计算机技术、通信技术、电子技术、控制技术等)和计算机技术的多门课程(计算机组成原理、微机原理、程序设计语言、设备驱动程序及操作系统)知识的应用。
接口技术的内容可分为:上层(用户层)和接口的底层两个层次。
上层的负责的是接口用户应用程序的编写,包括MS-DOS和Win32程序两种形式的上层用户应用程序。
底层则是用户不可见的接口部分,其基本内容是本地总线与PCI总线之间的总线接口设计和为实现上层用户应用程序对底层硬件访问的设备驱动程序的设计,包括虚拟设备驱动程序(VDD)和内核设备驱动程序(WDM)程序的设计,而设备驱动程序又会牵涉到windows操作系统的内核;还包括实现PCI设备的即插即用而对配置空间的设置与访问。
先来看看下面的图片:
在图中很明显:微处理器采用的是以PCI总线为中心的多总线结构,I/O设备接口的一侧是与本地总线想连接,另外一次是与低速I/O设备相连,而高速I/O设备则直接与PCI总线相连。与低速I/O设备相似,扩展存储器通过扩展存储器的接口与本地总线相连,而主存储器则直接与Host桥相连
图中已经明确说明了:I/O设备接口和存储器等都是挂在微机的总线上,并且按照高速和低速分别连接在3级不同层次的总线上,都不是直接与CPU相连接的,而是通过各个关卡逐步靠近CPU。
值得注意的是,I/O设备接口是CPU与外设I/O设备之间的桥梁,所以I/O设备接口的发展自然要随着CPU和I/O设备之间的变化而变化。
I/O接口的设计主要是以硬件为基础,硬软结合的方法:
①硬件设计方法:
通常采用可编程接口芯片并编写相应的控制程序,这要求对各种芯片的功能、特点、工作原理、使用方法及编程技巧,都要有深入了解和熟练的。
②软件设计的方法:
软件的方法包括两种系统下的程序编写,即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位微处理器处理就好像是一个快速的8086、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负责这种切换。