接口控制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机接口与通信
在保护模式下80386支持多任务,可以依靠硬件,仅 在一条指令中实现任务切换。任务环境的保护工作 是由处理器自动完成的。
在保护模式下,80386还支持优先级机制,不同的程 序可以在不同的优先级上运行。
优先级分0~3共4个级别。 操作系统运行在最高级0上,应用程序则运行在比较
低的级别上。 配合良好的检查机制后,系统既可以在任务间实现数
计算机接口与通信
通过这些措施,保证了8086程序既可以正常运行下去, 在执行这些指令时又觉察不到已经被虚拟86管理程 序作了手脚,而操作系统又不会因执行了这些指令 受影响。MS-DOS应用程序在Windows操作系统中 就是这样运行的。
计算机接口与通信
处理器的保护机制
80286之前的处理器只支持单任务,操作系统并没有 安全性可言,计算机全部的资源包括操作系统的内 部资源都可以任凭程序员调用。
为了解决这个问题,虚拟86管理程序采用虚拟的方法 来执行这些指令。让这些特权指令执行的时候引起 保护异常,虚拟86管理程序在异常处理程序中检查 这些产生异常的指令,如果是中断指令,则从虚拟 86任务的中断向量表中取出中断处理程序的入口地 址,并将控制转移过去;如果是危及操作系统的指 令,如cli等,则简单地忽略这些指令,在异常处理 程序返回的时候直接返回到下一条指令。
计算机接口与通信
运行于优先级3上的程序有很多限制。
如编Win32程序,所有的特权指令都是不可执行的, 如lgdt,lldt,lidt指令;对CRx,TRx等寄存器赋值 等。代码段是不可写的,数据段只有变量部分的页 面是可写的。虽然可以寻找所有的4GB空间,但访 问了超出权限以外的东西还是会引发保护异常的。
Windows操作系统为PC机用户提供了标准的用户图 形界面。其强大的图形处理能力和简单灵便的操作, 使很多即使对计算机不是很了解的人也很容易使用 计算机,深受广大用户欢迎。
大多数计算机检测、控制等应用程序的开发,都已转 向或逐渐转向Windows环境下的编程。
在Windows环境下实现对计算机硬件资源和内存资源 的访问(如端口I/O、DMA、中断、直接内存访问 等),对外设的控制和管理是目前工业控制、数据 采集系统开发的重要方面。
计算机接口与通信
Windows环境下编程的基本知识
1、 处理器的工作模式 80X86处理器的工作模式有三种:实模式、保护模式和虚拟86模式。 其中实模式和虚拟86模式是为了和早期的8086处理器兼容而设计 的,以保证用户早期设计的软硬件资源得以继续使用。 计算机系统在不同的环境和条件下在这三种模式中切换工作。 1)实模式 80386处理器被复位或加电时,以实模式启动。这时处理器中的各 寄存器以实模式的初始化值工作。 80386处理器相当于一个快速的8086处理器在工作。虽然80386是 32位机,但在实模式时的存储器寻址方式和8086的16位机一样, 由段寄存器的内容乘以16做基地址,加上段内的偏移地址形成最 终的物理地址。这时候它的32位地址线只使用了低20位,最大寻 址空间1MB。
这在DOS汇编是不可想象的。
计算机接口与通信
在Windows下,操作系统运行于优先级0,应用程序 运行于优先级3。
因为Alpha计算机只支持两个优先级,为了便于将应 用程序移植到Alpha计算机,Windows操作系统不 使用优先级1和2。
Windows操作系统充分利用了80386的保护机制,所 有和操作系统密切相关的东西都是受保护的。
·页的类型检查——除了可以在段级别上指定整个段是 否可以读写外,在页表中也可以为每个页指定是否 可读写。对于特权级下的代码,所有的页都是可以 写的。但对于1,2,3级的代码,还要根据页表中 的R/W项决定是否可读写,若企图对只读的页进行 写操作会产生页异常。
计算机接口与通信
·访问数据时的级别检查——优先级低的代码不能访问 优先级高的数据段。80386的段描述符中有一个 DPL域(描述符优先级),表示这个段可以被访问 的最低优先级。而段选择器中含有RPL域(请求优 先级),表示当前执行代码的优先级。只有DPL在 数值上大于或等于RPL值的时候,该段才是可以访 问的,否则会产生一般性异常保护。
第十章 WINDOWS接口控制 1、 Windows环境下编程的基本知识 2、 Windows环境下的端口操作 3、 Windows操作系统的API调用 4、 Windows下DLL编程技术及应用 5、 Windows下的串行通信接口 6、线程控制技术
计算机接口与通信
Windows 接口控制的必要性
计算机接口与通信
虚拟86模式是以任务的形式在保护模式上运行的。 在80386上可以同时支持由多个真正的80386任务和虚拟86模
式构成的任务。 在虚拟86模式下,80386支持任务切换和内存分页。 在Windows操作系统中,有一部分程序专门用来管理虚拟86模
式的任务,称为虚拟86管理程序。 为了和8086程序的寻址方式兼容,虚拟86模式采用和8086一
特权级代码一般是操作系统的代码,可以访问全部资 源;其余级别的代码一般是用户程序,可以访问的 资源受到限制。
80386采用保护机制,主要是为了检查和防止低级别 代码的越权操作,如访问了不该访问的数据、端口 以及调用了高优先级的代码等。保护机制主要由如 下几方面组成:
计算机接口与通信
·段的类型检查——段的类型是由段的描述符指定的, 主要属性有是否可执行,是否可读和是否可写等。 而CS,DS,和SS等段选择器是否能装入某种类型 的段描述符是有限制的。如果段类型检查通不过, 则处理器会产生一般性保护异常或堆栈异常。
·I/O操作的保护——I/O地址也是受保护的对象。因为 通过I/O的操作可以绕过系统对很多硬件进行控制。 80386可以单独为I/O空间提供保护,每个任务有个 任务段TSS,用来记录任务切换的信息。TSS中有 个I/O允许位图,用来表示对应的I/O端口是否可以 操作。某个I/O地址在位图中对应数据位为0时表示 可以操作;如果为1则还要看eflags中的IOPL位, 它表示的优先级高于当前代码段的优先级,才允许 访问该I/O端口。
对于多任务的Windows操作系统,某个程序若随意使 用了一些如关中断等影响别的任务执行的指令后, 就可能使整个系统陷入瘫痪。所以80286及以上的 处理器引入了优先级的的概念。80386处理器共设4 个(0~3)优先级。0级是最高级(特权级);3级 是最低级(用户级);1级和2级介于它们之间。
计算机接口与通信
在Windows 98中,系统硬件用到的I/O端口是受保护 的,但其余的I/O则可以操作。如用一块地址是 300h的插卡,应用程序是可以直接对该端口操作的。 但要操作3F8H(串口)和1F0H(硬盘端口)等系 统已定义的端口就不行了。
在Windows NT中,任何的端口操作都是禁止
计算机接口与通信
如果违反了Windows的“保护条例”,处理器会毫不 犹豫的把控制权转移到对应的异常处理程序中去。 Windows会在处理程序中产生一个“非法操作”对 话框把用户的程序判“死刑”。
实模式下不支持硬件上的多任务切换。
计算机接口与通信
2)保护模式 当80386工作在保护模式下时,它的所有功能都是可
用的。它的32根地址线都可寻址,物理寻址空间高 达4GB。 在保护模式下,支持内存分页机制,提供了对虚拟内 存的良好支持。与8086只可寻址1M的物理地址空 间相比,80386可寻址的4G物理地址空间确实是够 大的了,但是至今,实际的微机系统仍不可能安装 如此巨大的物理内存。因此,为了运行大型程序和 真正实现多任务,虚拟内存技术就成为必须的了
3)虚拟86模式 虚拟86模式是为了操作系统运行在支持多任务的保护
模式下,仍能执行8086程序而设置的。 虽然80386处理器已经提供了实模式来兼容8086程序,
但80386在实模式下的8086程序实际上只是运行得 快一些,对CPU的管理还是独占的。 而且,在保护模式的多任务环境下运行8086程序时, 程序中的很多指令和保护模式的环境是格格不入的, 如段寻址方式、对中断的处理和I/O操作的特权问题 等。为此,80386处理器又设计了一个虚拟86模式。
计算机接口与通信
实模式下的中断处理方式和8086处理器一样,也用中断向量表 来定位中断服务程序地址。中断向量表的结构也和8086处 理器一样,每4个字节组成一个中断向量,其中包括两个字 节的段地百度文库和两个字节的偏移地址。
实模式下80386不支持优先级,所有的指令相当于工作在特权 级(优先级0),所以所有的特权级的指令都可以执行,包 括读写控制寄存器CR0等。
样的寻址方式,即用段寄存器乘以16做基地址,再配合偏移 地址形成线性地址,寻址1MB的空间。 当多个虚拟86任务要运行时,Windows操作系统利用分页机制 将不同虚拟86任务的地址空间影射到不同的物理地址上去, 使每个虚拟86任务看起来都是在使用自己的1MB地址空间。
计算机接口与通信
8086代码中,有相当一部分指令在保护模式下属于特 权指令,如屏蔽中断的cli和中断返回指令iret等。这 些指令在8086程序中是合法的。如果不能让这些指 令执行,8086程序就无法工作,而要让它执行,操 作系统又会出错。
计算机接口与通信
因此,Windiws操作系统干脆设计为尽量为用户程序 “安排好一切”。
比如对Win32汇编程序来说,整个源程序都不用管各 种段寄存器,操作系统已为用户程序的代码段、数 据段和堆栈段都预定义好了段描述符。这些段的起 始地址都为0,限长都为ffffffff,即可以直接寻找全 部的4GB地址空间。程序开始执行时,CS,DS, ES,SS都已经指向了正确的描述符,在整个程序 的生命周期内,程序员不必改动这些段寄存器,也 不必关心它们的值究竟是多少。
80386开机时就是在实模式下初始化32位的4个控制寄存器 CR0~CR3、48位的全局描述符表寄存器GDTR、16位的局 部描述符表寄存器LDTR、48位的中断描述符表寄存器IDTR、 任务状态段寄存器TR等管理寄存器及页表等,然后再通过 修改CR0寄存器,使其保护模式的使能位PE(位0)置位 (=1)而进入保护模式工作的。
计算机接口与通信
Windows的保护机制
Windows操作系统是个支持多任务的操作系统。 Windows操作系统的一个重要任务是管理好系统的资
源,保证各任务在能正常使用系统资源的同时,又 不影响别的任务正常使用系统的资源。 因此,它最首要的宗旨就是“稳定压倒一切”。 任何权限的开放可能引发的安全问题都是很严重的, 如在Windows9X操作系统中,中断描述符是用户可 写的,CIH病毒可利用它将自己的权限提高到优先 级0;而Windows NT下的中断描述符是用户不可写 的,CIH病毒在Windows NT下也就无法进驻内存了。
据的安全共享,也可以很好地隔离各任务。
计算机接口与通信
实现从实模式切换到保护模式,首先要建立保护模式 必需的一些数据表,如全局描述符表GDT和中断描 述符表等,然后通过修改控制寄存器CR0的控制位 PE(位0)来实现。
DOS操作系统运行于实模式下,而Windows操作系统 运行于保护模式下。
计算机接口与通信
控制转移的检查——在处理器中,有很多指令可以实 现控制转移,如jmp,call,ret,int和iert等。但在 存在多任务的系统中,优先级低的代码不能随意转 移到优先级高的代码中去。所以执行到这些指令时, 处理器要检查转移的目的位置是否合法。
计算机接口与通信
·指令集的检查——有两类指令可以影响保护机制。第 一类是能改变全局描述符表GDT、局部描述符表 LDT、中断描述符表IDT以及控制寄存器等关键寄 存器的指令,称为特权指令;第二类是能操作I/O端 口的指令以及cli和sti等能改变中断允许状态的指令, 称为敏感指令。
显然,如果用户级的程序允许用cli禁止一切中断(包 括系统时钟中断),那此时整个系统将无法正常运 行,所以这些指令的运行要受到限制。特权指令只 能在优先级0上才能运行,而敏感指令取决于eflags 寄存器中的IOPL位。只有该位表示的优先级高于或 等于当前代码段的优先级时,指令才可以执行。
计算机接口与通信
在保护模式下80386支持多任务,可以依靠硬件,仅 在一条指令中实现任务切换。任务环境的保护工作 是由处理器自动完成的。
在保护模式下,80386还支持优先级机制,不同的程 序可以在不同的优先级上运行。
优先级分0~3共4个级别。 操作系统运行在最高级0上,应用程序则运行在比较
低的级别上。 配合良好的检查机制后,系统既可以在任务间实现数
计算机接口与通信
通过这些措施,保证了8086程序既可以正常运行下去, 在执行这些指令时又觉察不到已经被虚拟86管理程 序作了手脚,而操作系统又不会因执行了这些指令 受影响。MS-DOS应用程序在Windows操作系统中 就是这样运行的。
计算机接口与通信
处理器的保护机制
80286之前的处理器只支持单任务,操作系统并没有 安全性可言,计算机全部的资源包括操作系统的内 部资源都可以任凭程序员调用。
为了解决这个问题,虚拟86管理程序采用虚拟的方法 来执行这些指令。让这些特权指令执行的时候引起 保护异常,虚拟86管理程序在异常处理程序中检查 这些产生异常的指令,如果是中断指令,则从虚拟 86任务的中断向量表中取出中断处理程序的入口地 址,并将控制转移过去;如果是危及操作系统的指 令,如cli等,则简单地忽略这些指令,在异常处理 程序返回的时候直接返回到下一条指令。
计算机接口与通信
运行于优先级3上的程序有很多限制。
如编Win32程序,所有的特权指令都是不可执行的, 如lgdt,lldt,lidt指令;对CRx,TRx等寄存器赋值 等。代码段是不可写的,数据段只有变量部分的页 面是可写的。虽然可以寻找所有的4GB空间,但访 问了超出权限以外的东西还是会引发保护异常的。
Windows操作系统为PC机用户提供了标准的用户图 形界面。其强大的图形处理能力和简单灵便的操作, 使很多即使对计算机不是很了解的人也很容易使用 计算机,深受广大用户欢迎。
大多数计算机检测、控制等应用程序的开发,都已转 向或逐渐转向Windows环境下的编程。
在Windows环境下实现对计算机硬件资源和内存资源 的访问(如端口I/O、DMA、中断、直接内存访问 等),对外设的控制和管理是目前工业控制、数据 采集系统开发的重要方面。
计算机接口与通信
Windows环境下编程的基本知识
1、 处理器的工作模式 80X86处理器的工作模式有三种:实模式、保护模式和虚拟86模式。 其中实模式和虚拟86模式是为了和早期的8086处理器兼容而设计 的,以保证用户早期设计的软硬件资源得以继续使用。 计算机系统在不同的环境和条件下在这三种模式中切换工作。 1)实模式 80386处理器被复位或加电时,以实模式启动。这时处理器中的各 寄存器以实模式的初始化值工作。 80386处理器相当于一个快速的8086处理器在工作。虽然80386是 32位机,但在实模式时的存储器寻址方式和8086的16位机一样, 由段寄存器的内容乘以16做基地址,加上段内的偏移地址形成最 终的物理地址。这时候它的32位地址线只使用了低20位,最大寻 址空间1MB。
这在DOS汇编是不可想象的。
计算机接口与通信
在Windows下,操作系统运行于优先级0,应用程序 运行于优先级3。
因为Alpha计算机只支持两个优先级,为了便于将应 用程序移植到Alpha计算机,Windows操作系统不 使用优先级1和2。
Windows操作系统充分利用了80386的保护机制,所 有和操作系统密切相关的东西都是受保护的。
·页的类型检查——除了可以在段级别上指定整个段是 否可以读写外,在页表中也可以为每个页指定是否 可读写。对于特权级下的代码,所有的页都是可以 写的。但对于1,2,3级的代码,还要根据页表中 的R/W项决定是否可读写,若企图对只读的页进行 写操作会产生页异常。
计算机接口与通信
·访问数据时的级别检查——优先级低的代码不能访问 优先级高的数据段。80386的段描述符中有一个 DPL域(描述符优先级),表示这个段可以被访问 的最低优先级。而段选择器中含有RPL域(请求优 先级),表示当前执行代码的优先级。只有DPL在 数值上大于或等于RPL值的时候,该段才是可以访 问的,否则会产生一般性异常保护。
第十章 WINDOWS接口控制 1、 Windows环境下编程的基本知识 2、 Windows环境下的端口操作 3、 Windows操作系统的API调用 4、 Windows下DLL编程技术及应用 5、 Windows下的串行通信接口 6、线程控制技术
计算机接口与通信
Windows 接口控制的必要性
计算机接口与通信
虚拟86模式是以任务的形式在保护模式上运行的。 在80386上可以同时支持由多个真正的80386任务和虚拟86模
式构成的任务。 在虚拟86模式下,80386支持任务切换和内存分页。 在Windows操作系统中,有一部分程序专门用来管理虚拟86模
式的任务,称为虚拟86管理程序。 为了和8086程序的寻址方式兼容,虚拟86模式采用和8086一
特权级代码一般是操作系统的代码,可以访问全部资 源;其余级别的代码一般是用户程序,可以访问的 资源受到限制。
80386采用保护机制,主要是为了检查和防止低级别 代码的越权操作,如访问了不该访问的数据、端口 以及调用了高优先级的代码等。保护机制主要由如 下几方面组成:
计算机接口与通信
·段的类型检查——段的类型是由段的描述符指定的, 主要属性有是否可执行,是否可读和是否可写等。 而CS,DS,和SS等段选择器是否能装入某种类型 的段描述符是有限制的。如果段类型检查通不过, 则处理器会产生一般性保护异常或堆栈异常。
·I/O操作的保护——I/O地址也是受保护的对象。因为 通过I/O的操作可以绕过系统对很多硬件进行控制。 80386可以单独为I/O空间提供保护,每个任务有个 任务段TSS,用来记录任务切换的信息。TSS中有 个I/O允许位图,用来表示对应的I/O端口是否可以 操作。某个I/O地址在位图中对应数据位为0时表示 可以操作;如果为1则还要看eflags中的IOPL位, 它表示的优先级高于当前代码段的优先级,才允许 访问该I/O端口。
对于多任务的Windows操作系统,某个程序若随意使 用了一些如关中断等影响别的任务执行的指令后, 就可能使整个系统陷入瘫痪。所以80286及以上的 处理器引入了优先级的的概念。80386处理器共设4 个(0~3)优先级。0级是最高级(特权级);3级 是最低级(用户级);1级和2级介于它们之间。
计算机接口与通信
在Windows 98中,系统硬件用到的I/O端口是受保护 的,但其余的I/O则可以操作。如用一块地址是 300h的插卡,应用程序是可以直接对该端口操作的。 但要操作3F8H(串口)和1F0H(硬盘端口)等系 统已定义的端口就不行了。
在Windows NT中,任何的端口操作都是禁止
计算机接口与通信
如果违反了Windows的“保护条例”,处理器会毫不 犹豫的把控制权转移到对应的异常处理程序中去。 Windows会在处理程序中产生一个“非法操作”对 话框把用户的程序判“死刑”。
实模式下不支持硬件上的多任务切换。
计算机接口与通信
2)保护模式 当80386工作在保护模式下时,它的所有功能都是可
用的。它的32根地址线都可寻址,物理寻址空间高 达4GB。 在保护模式下,支持内存分页机制,提供了对虚拟内 存的良好支持。与8086只可寻址1M的物理地址空 间相比,80386可寻址的4G物理地址空间确实是够 大的了,但是至今,实际的微机系统仍不可能安装 如此巨大的物理内存。因此,为了运行大型程序和 真正实现多任务,虚拟内存技术就成为必须的了
3)虚拟86模式 虚拟86模式是为了操作系统运行在支持多任务的保护
模式下,仍能执行8086程序而设置的。 虽然80386处理器已经提供了实模式来兼容8086程序,
但80386在实模式下的8086程序实际上只是运行得 快一些,对CPU的管理还是独占的。 而且,在保护模式的多任务环境下运行8086程序时, 程序中的很多指令和保护模式的环境是格格不入的, 如段寻址方式、对中断的处理和I/O操作的特权问题 等。为此,80386处理器又设计了一个虚拟86模式。
计算机接口与通信
实模式下的中断处理方式和8086处理器一样,也用中断向量表 来定位中断服务程序地址。中断向量表的结构也和8086处 理器一样,每4个字节组成一个中断向量,其中包括两个字 节的段地百度文库和两个字节的偏移地址。
实模式下80386不支持优先级,所有的指令相当于工作在特权 级(优先级0),所以所有的特权级的指令都可以执行,包 括读写控制寄存器CR0等。
样的寻址方式,即用段寄存器乘以16做基地址,再配合偏移 地址形成线性地址,寻址1MB的空间。 当多个虚拟86任务要运行时,Windows操作系统利用分页机制 将不同虚拟86任务的地址空间影射到不同的物理地址上去, 使每个虚拟86任务看起来都是在使用自己的1MB地址空间。
计算机接口与通信
8086代码中,有相当一部分指令在保护模式下属于特 权指令,如屏蔽中断的cli和中断返回指令iret等。这 些指令在8086程序中是合法的。如果不能让这些指 令执行,8086程序就无法工作,而要让它执行,操 作系统又会出错。
计算机接口与通信
因此,Windiws操作系统干脆设计为尽量为用户程序 “安排好一切”。
比如对Win32汇编程序来说,整个源程序都不用管各 种段寄存器,操作系统已为用户程序的代码段、数 据段和堆栈段都预定义好了段描述符。这些段的起 始地址都为0,限长都为ffffffff,即可以直接寻找全 部的4GB地址空间。程序开始执行时,CS,DS, ES,SS都已经指向了正确的描述符,在整个程序 的生命周期内,程序员不必改动这些段寄存器,也 不必关心它们的值究竟是多少。
80386开机时就是在实模式下初始化32位的4个控制寄存器 CR0~CR3、48位的全局描述符表寄存器GDTR、16位的局 部描述符表寄存器LDTR、48位的中断描述符表寄存器IDTR、 任务状态段寄存器TR等管理寄存器及页表等,然后再通过 修改CR0寄存器,使其保护模式的使能位PE(位0)置位 (=1)而进入保护模式工作的。
计算机接口与通信
Windows的保护机制
Windows操作系统是个支持多任务的操作系统。 Windows操作系统的一个重要任务是管理好系统的资
源,保证各任务在能正常使用系统资源的同时,又 不影响别的任务正常使用系统的资源。 因此,它最首要的宗旨就是“稳定压倒一切”。 任何权限的开放可能引发的安全问题都是很严重的, 如在Windows9X操作系统中,中断描述符是用户可 写的,CIH病毒可利用它将自己的权限提高到优先 级0;而Windows NT下的中断描述符是用户不可写 的,CIH病毒在Windows NT下也就无法进驻内存了。
据的安全共享,也可以很好地隔离各任务。
计算机接口与通信
实现从实模式切换到保护模式,首先要建立保护模式 必需的一些数据表,如全局描述符表GDT和中断描 述符表等,然后通过修改控制寄存器CR0的控制位 PE(位0)来实现。
DOS操作系统运行于实模式下,而Windows操作系统 运行于保护模式下。
计算机接口与通信
控制转移的检查——在处理器中,有很多指令可以实 现控制转移,如jmp,call,ret,int和iert等。但在 存在多任务的系统中,优先级低的代码不能随意转 移到优先级高的代码中去。所以执行到这些指令时, 处理器要检查转移的目的位置是否合法。
计算机接口与通信
·指令集的检查——有两类指令可以影响保护机制。第 一类是能改变全局描述符表GDT、局部描述符表 LDT、中断描述符表IDT以及控制寄存器等关键寄 存器的指令,称为特权指令;第二类是能操作I/O端 口的指令以及cli和sti等能改变中断允许状态的指令, 称为敏感指令。
显然,如果用户级的程序允许用cli禁止一切中断(包 括系统时钟中断),那此时整个系统将无法正常运 行,所以这些指令的运行要受到限制。特权指令只 能在优先级0上才能运行,而敏感指令取决于eflags 寄存器中的IOPL位。只有该位表示的优先级高于或 等于当前代码段的优先级时,指令才可以执行。
计算机接口与通信