九.输入/输出保护为了支持多任务,80386不仅要有效地实现任务隔离,而且还要有效地控制各任务的输入/输出,避免输入/输出冲突。本文将介绍输入输出保护。 这里下载本文源代码。 <一>输入/输出保护80386采用I/O特权级IPOL和I/O许可位图的方法来控制输入/输出,实现输入/输出保护。 1.I/O敏感指令输入输出特权级(I/O Privilege Level)规定了可以执行所有与I/O相关的指令和访问I/O空间中所有地址的最外层特权级。IOPL的值在如下图所示的标志寄存器中。 标 志寄存器 BIT31—BIT18 BIT17 BIT16 BIT15 BIT14 BIT13—BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 00000000000000 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF I/O许可位图规定了I/O空间中的哪些地址可以由在任何特权级执行的程序所访问。I/O许可位图在任务状态段TSS中。 I/O敏感指令 指令 功能 保护方式下的执行条件 CLI 清除EFLAGS中的IF位 CPL<=IOPL STI 设置EFLAGS中的IF位 CPL<=IOPL IN 从I/O地址读出数据 CPL<=IOPL或I/O位图许可 INS 从I/O地址读出字符串 CPL<=IOPL或I/O位图许可 OUT 向I/O地址写数据 CPL<=IOPL或I/O位图许可 OUTS 向I/O地址写字符串 CPL<=IOPL或I/O位图许可 上表所列指令称为I/O敏感指令,由于这些指令与I/O有关,并且只有在满足所列条件时才可以执行,所以把它们称为I/O敏感指令。从表中可见,当前特权级不在I/O特权级外层时,可以正常执行所列的全部I/O敏感指令;当特权级在I/O特权级外层时,执行CLI和STI指令将引起通用保护异常,而其它四条指令是否能够被执行要根据访问的I/O地址及I/O许可位图情况而定(在下面论述),如果条件不满足而执行,那么将引起出错码为0的通用保护异常。 由于每个任务使用各自的EFLAGS值和拥有自己的TSS,所以每个任务可以有不同的IOPL,并且可以定义不同的I/O许可位图。注意,这些I/O敏感指令在实模式下总是可执行的。 2.I/O许可位图如果只用IOPL限制I/O指令的执行是很不方便的,不能满足实际要求需要。因为这样做会使得在特权级3执行的应用程序要么可访问所有I/O地址,要么不可访问所有I/O地址。实际需要与此刚好相反,只允许任务甲的应用程序访问部分I/O地址,只允许任务乙的应用程序访问另一部分I/O地址,以避免任务甲和任务乙在访问I/O地址时发生冲突,从而避免任务甲和任务乙使用使用独享设备时发生冲突。 因此,在IOPL的基础上又采用了I/O许可位图。I/O许可位图由二进制位串组成。位串中的每一位依次对应一个I/O地址,位串的第0位对应I/O地址0,位串的第n位对应I/O地址n。如果位串中的第位为0,那么对应的I/O地址m可以由在任何特权级执行的程序访问;否则对应的I/O地址m只能由在IOPL特权级或更内层特权级执行的程序访问。如果在I/O外层特权级执行的程序访问位串中位值为1的位所对应的I/O地址,那么将引起通用保护异常。 I/O地址空间按字节进行编址。一条I/O指令最多可涉及四个I/O地址。在需要根据I/O位图决定是否可访问I/O地址的情况下,当一条I/O指令涉及多个I/O地址时,只有这多个I/O地址所对应的I/O许可位图中的位都为0时,该I/O指令才能被正常执行,如果对应位中任一位为1,就会引起通用保护异常。 80386支持的I/O地址空间大小是64K,所以构成I/O许可位图的二进制位串最大长度是64K个位,即位图的有效部分最大为8K字节。一个任务实际需要使用的I/O许可位图大小通常要远小于这个数目。 当前任务使用的I/O许可位图存储在当前任务TSS中低端的64K字节内。I/O许可位图总以字节为单位存储,所以位串所含的位数总被认为是8的倍数。从前文中所述的TSS格式可见,TSS内偏移66H的字确定I/O许可位图的开始偏移。由于I/O许可位图最长可达8K字节,所以开始偏移应小于56K,但必须大于等于104,因为TSS中前104字节为TSS的固定格式,用于保存任务的状态。 1.I/O访问许可检查细节保护模式下处理器在执行I/O指令时进行许可检查的细节如下所示。 (1)若CPL<=IOPL,则直接转步骤(8);(2)取得I/O位图开始偏移;(3)计算I/O地址对应位所在字节在I/O许可位图内的偏移;(4)计算位偏移以形成屏蔽码值,即计算I/O地址对应位在字节中的第几位;(5)把字节偏移加上位图开始偏移,再加1,所得值与TSS界限比较,若越界,则产生出错码为0的通用保护故障;(6)若不越界,则从位图中读对应字节及下一个字节;(7)把读出的两个字节与屏蔽码进行与运算,若结果不为0表示检查未通过,则产生出错码为0的通用保护故障;(8)进行I/O访问。设某一任务的TSS段如下: TSSSEG SEGMENT PARA USE16 TSS <> ;TSS低端固定格式部分 DB 8 DUP(0) ;对应I/O端口00H—3FH DB 10000000B ;对应I/O端口40H—47H DB 01100000B ;对用I/O端口48H—4FH DB 8182 DUP(0ffH) ;对应I/O端口50H—0FFFFH DB 0FFH ;位图结束字节TSSLen = $TSSSEG ENDS 再假设IOPL=1,CPL=3。那么如下I/O指令有些能正常执行,有些会引起通用保护异常: in al,21h ;(1)正常执行 in al,47h ;(2)引起异常 out 20h,al ;(3)正常实行 out 4eh,al ;(4)引起异常 in al,20h ;(5)正常执行 out 20h,eax ;(6)正常执行 out 4ch,ax ;(7)引起异常 in ax,46h ;(8)引起异常 in eax,42h ;(9)正常执行 由上述I/O许可检查的细节可见,不论是否必要,当进行许可位检查时,80386总是从I/O许可位图中读取两个字节。目的是为了尽快地执行I/O许可检查。一方面,常常要读取I/O许可位图的两个字节。例如,上面的第(8)条指令要对I/O位图中的两个位进行检查,其低位是某个字节的最高位,高位是下一个字节的最低位。可见即使只要检查两个位,也可能需要读取两个字节。另一方面,最多检查四个连续的位,即最多也只需读取两个字节。所以每次要读取两个字节。这也是在判别是否越界时再加1的原因。为此,为了避免在读取I/O许可位图的最高字节时产生越界,必须在I/O许可位图的最后填加一个全1的字节,即0FFH。此全1的字节应填加在最后一个位图字节之后,TSS界限范围之前,即让填加的全1字节在TSS界限之内。 I/O许可位图开始偏移加8K所得的值与TSS界限值二者中较小的值决定I/O许可位图的末端。当TSS的界限大于I/O许可位图开始偏移加8K时,I/O许可位图的有效部分就有8K字节,I/O许可检查全部根据全部根据该位图进行。当TSS的界限不大于I/O许可位图开始偏移加8K时,I/O许可位图有效部分就不到8K字节,于是对较小I/O地址访问的许可检查根据位图进行,而对较大I/O地址访问的许可检查总被认为不可访问而引起通用保护故障。因为这时会发生字节越界而引起通用保护异常,所以在这种情况下,可认为不足的I/O许可位图的高端部分全为1。利用这个特点,可大大节约TSS中I/O许可位图占用的存储单元,也就大大减小了TSS段的长度。 <二>重要标志保护输入输出的保护与存储在标志寄存器EFLAGS中的IOPL密切相关,显然不能允许随便地改变IOPL,否则就不能有效地实现输入输出保护。类似地,对EFLAGS中的IF位也必须加以保护,否则CLI和STI作为敏感指令对待是无意义的。此外,EFLAGS中的VM位决定着处理器是否按虚拟8086方式工作。 80386对EFLAGS中的这三个字段的处理比较特殊,只有在较高特权级执行的程序才能执行IRET、POPF、CLI和STI等指令改变它们。下表列出了不同特权级下对这三个字段的处理情况。 不同特权级对标志寄存器特殊字段的处理 特权级 VM标志字段 IOPL标志字段 IF标志字段 CPL=0 可变(初POPF指令外) 可变 可变 0 不变 不变 可变 CPL>IOPL 不变 不变 不变 从表中可见,只有在特权级0执行的程序才可以修改IOPL位及VM位;只能由相对于IOPL同级或更内层特权级执行的程序才可以修改IF位。与CLI和STI指令不同,在特权级不满足上述条件的情况下,当执行POPF指令和IRET指令时,如果试图修改这些字段中的任何一个字段,并不引起异常,但试图要修改的字段也未被修改,也不给出任何特别的信息。此外,指令POPF总不能改变VM位,而PUSHF指令所压入的标志中的VM位总为0。 <三>演示输入输出保护的实例(实例九)下面给出一个用于演示输入输出保护的实例。演示内容包括:I/O许可位图的作用、I/O敏感指令引起的异常和特权指令引起的异常;使用段间调用指令CALL通过任务门调用任务,实现任务嵌套。 1.演示步骤实例演示的内容比较丰富,具体演示步骤如下:(1)在实模式下做必要准备后,切换到保护模式;(2)进入保护模式的临时代码段后,把演示任务的TSS段描述符装入TR,并设置演示任务的堆栈;(3)进入演示代码段,演示代码段的特权级是0;(4)通过任务门调用测试任务1。测试任务1能够顺利进行;(5)通过任务门调用测试任务2。测试任务2演示由于违反I/O许可位图规定而导致通用保护异常;(6)通过任务门调用测试任务3。测试任务3演示I/O敏感指令如何引起通用保护异常;(7)通过任务门调用测试任务4。测试任务4演示特权指令如何引起通用保护异常;(8)从演示代码转临时代码,准备返回实模式;(9)返回实模式,并作结束处理。
上传时间: 2013-12-11
上传用户:nunnzhy
掌握先进微处理器芯片结构、微型计算机实现技术、计算机主板构成、各种接口技术原理及其应用编程方法;掌握汇编语言程序的编写方法,尤其掌握接口访问的方法。了解微机技术新的发展趋势,系统科学地获得分析问题和解决问题的训练;提高分析和设计接口的能力。不仅要学习微机各种接口电路的原理与作用,熟悉PC系列机接口电路,而且还要掌握常用接口的设计与分析方法,学会使用汇编语言和C语言对接口进行编程,并具有一定的动手实验能力和接口应用程序的编写能力,为微机的深入应用和嵌入式系统SOC设计等的学习与实践打下良好基础。同时有兴趣的同学自学Windows 2000/XP驱动程序的编写方法。一定要下载和打印或复印电子讲义,课堂上注意听讲并及时记录教师课堂上补充的内容,认真独立完成作业,做好课程实验和自修实验、做好课前预习和课后复习。1)抓住IBM PC/XT机基本结构这条主线,分析其基本结构,掌握各接口电路及可编程接口芯片的应用。2)进一步扩展和延伸CPU—从8086~Core 2 Duo,从实模式~保护模式;汇编语言-CPU及接口直接控制,16位~32位汇编;总线—PCI,USB等; 中断—从实模式下的中断向量~保护模式下的中断描述符;从传统中断~PCI中断~串行中断 芯片组—从中大规模集成电路(8237、8254、8255、8259等)~ 超大规模集成电路(82815EP、82801BA)。第1章—CPU与整机:CPU的信号与工作模式、PC结构第11章--软件如何控制CPU和接口:指令系统和汇编编程(在教师讲授重点的基础上,通过预习、实验与练习自学) 第2章--CPU如何与MEM或I/O设备通信:I/O接口与译码 第3章--总线如何工作:总线标准(PCI、USB) 第4章--I/O接口直接和MEM通信:DMA(8237,全自学) 第5章--I/O接口如何主动与CPU通信:中断技术(8259) 第6章--I/O接口的定时与计数功能:(8254) 第7章--I/O接口的并行通信:8255与打印机接口标准 第8章--I/O接口的串行通信:串行通信协议与8250 第10章--I/O软接口技术:保护模式存储,WDM驱动程序编写(全自学)
上传时间: 2014-01-21
上传用户:徐孺
实现了分段分页,实模式和保护模式的切换,以及对显示缓存的操作
上传时间: 2013-12-27
上传用户:标点符号
ucos ii中文版(包含范例)第一章:范例 在这一章里将提供三个范例来说明如何使用 µ C/OS-II。笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用 µ C/OS-II。在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。 这些例子曾经用Borland C/C++ 编译器(V3.1)编译过,用选择项产生Intel/AMD80186处理器(大模式下编译)的代码。这些代码实际上是在Intel Pentium II PC (300MHz)上运行和测试过,Intel Pentium II PC可以看成是特别快的80186。笔者选择PC做为目标系统是由于以下几个原因:首先也是最为重要的,以PC做为目标系统比起以其他嵌入式环境,如评估板,仿真器等,更容易进行代码的测试,不用不断地烧写EPROM,不断地向EPROM仿真器中下载程序等等。用户只需要简单地编译、链接和执行。其次,使用Borland C/C++产生的80186的目标代码(实模式,在大模式下编译)与所有Intel、AMD、Cyrix公司的80x86 CPU兼容。
上传时间: 2014-01-15
上传用户:lindor
从表面上看,保护模式和实模式并没有太大的区别,二者都使用了内存段、中断和设备驱动来处理硬件,但二者有很多不同之处。我们知道,在实模式中内存被划分成段,每个段的大小为64KB,而这样的段地址可以用16位来表示。内存段的处理是通过和段寄存器相关联的内部机制来处理的,这些段寄存器(CS、DS、 SS和ES)的内容形成了物理地址的一部分。具体来说,最终的物理地址是由16位的段地址和16位的段内偏移地址组成的。用公式表示为:物理地址=左移4位的段地址+偏移地址。
标签: 表面
上传时间: 2015-11-16
上传用户:manking0408
动手写操作系统源代码,非常好的学习资料,在实模式下调试用td,当调试32位和16位汇合代码时,需要使用bochs来调试
上传时间: 2013-12-23
上传用户:大融融rr
本书全面细致地讲述了汇编语言程序设计的各个方面。从微处理器体系结构、工作机制到指令集;从最基本的编译器链器的使用到高级过程、结构和宏的使用;从用纯汇编编写程序到用C/C++等最新编译器与汇编的混合接口编程;从16位实模式下BIOS、DOS实模式文本及图形程序设计到32位保护模式的Windows程序设计。
上传时间: 2019-10-28
上传用户:xiangpingfly100
资源包含以下内容:1.三菱PLC A系列 AD 变换模块A1S68AD.pdf2.三菱PLC A系列 CPU模块Q2ASCPU.pdf3.三菱PLC A系列 DA 变换模块A1S62DA .pdf4.三菱PLC A系列 GPPWLLT编程调试程序.pdf5.三菱PLC A系列 Io link 网络系统模块A1SJ51T64.pdf6.三菱PLC A系列 QnACPU 编程参考.pdf7.三菱PLC A系列 Q系列 CC-LINK网络系统.pdf8.三菱PLC A系列 余CPU模块Q4ARCPU.pdf9.三菱PLC A系列 模拟输入输出模块A1S66ADA.pdf10.三菱PLC A系列 热电偶温度数字变化模块A1S68TD .pdf11.三菱PLC A系列 网络系统.pdf12.三菱PLC A系列 网络系统设置.pdf13.三菱PLC A系列 远程网络篇.pdf14.三菱PLC A系列 高速记数模块A1SD62.pdf15.三菱PLC FX-20P-E手持编程器操作手册.pdf16.三菱PLC FX1N使用手册.pdf17.三菱PLC FX1S,FX1N,FX2N,FX2NC系列编程手册.pdf18.三菱PLC FX2N-10GM和20GM硬件、编程手册.pdf19.三菱PLC FX2N-10PG用户手册.pdf20.三菱PLC FX2N-2LC温度控制模块用户手册.pdf21.三菱PLC FX2N-5A特殊功能模块用户手册.pdf22.三菱PLC FX2N使用手册.pdf23.三菱PLC FX3U FX3UC编程手册(基本)应用指令说明书.pdf24.三菱PLC FX3UC使用手册(硬件篇).pdf25.三菱PLC FX3U·FX3UC用户手册(定位控制篇).pdf26.三菱PLC FX3U·FX3UC用户手册(模拟量控制篇).pdf27.三菱PLC FX3U硬件手册.pdf28.三菱PLC FX中文文字版002.pdf29.三菱PLC FX系列特殊功能模块手册b.pdf30.三菱PLC FX系列特殊功能模块用户手册.pdf31.三菱PLC FX通讯用户手册.pdf32.三菱PLC QCPU用户手册(功能解说-程序基础篇).pdf33.三菱PLC QCPU(Q系列)QnACPU编程手册(PID控制指令篇).pdf34.三菱PLC QCPU-QnACPU 编程手册(SFC 控制指令篇).pdf35.三菱PLC Q系列 +series+temperature+control+module+user+manual.pdf36.三菱PLC Q系列 CC-LinK Safety系统 主站模块 详细篇.pdf37.三菱PLC Q系列 CC-LINK SAFETY系统远程Io模块 详细篇.pdf38.三菱PLC Q系列 CC-Link数字模拟变换模块.pdf39.三菱PLC Q系列 CC-Link本地站模块.pdf40.三菱PLC Q系列 CC-link系统主站本地站模块用户手册.pdf41.三菱PLC Q系列 CC-link系统小型IO模块用户手册(详细篇).pdf42.三菱PLC Q系列 CC-Link远程IO模块.pdf43.三菱PLC Q系列 CPU 功能解说 程序基础.pdf44.三菱PLC Q系列 Fl net(OPCN-2)接口模块用户手册.pdf45.三菱PLC Q系列 GX comfinurator-DP Version.pdf46.三菱PLC Q系列 G网络系统 控制网络篇.pdf47.三菱PLC Q系列 H网络系统 plc至plc网络.pdf48.三菱PLC Q系列 IO模块用户手册.pdf49.三菱PLC Q系列 manual list price 2005-07.pdf50.三菱PLC Q系列 MELSEC通讯协议用户手册.pdf51.三菱PLC Q系列 MES接口模块.pdf52.三菱PLC Q系列 PROFIBUS-DP从站模块.pdf53.三菱PLC Q系列 PROFIBUS-DP接口模块(详细篇).pdf54.三菱PLC Q系列 Q62DA,Q64DA,Q68DAI,Q68DAV用户手册.pdf55.三菱PLC Q系列 Q62HLC用户手册.pdf56.三菱PLC Q系列 Q64RD 热电阻输入模块用户手册.pdf57.三菱PLC Q系列 Q66DA-G用户手册(详细篇).pdf58.三菱PLC Q系列 QCPU+Users+Manual(Hardware+Design).pdf59.三菱PLC Q系列 QCPU用户手册(多CPU系统).pdf60.三菱PLC Q系列 QD62,QD62D,QD62E用户参考手册.pdf61.三菱PLC Q系列 QD70定位模块用户手册.pdf62.三菱PLC Q系列 QD72P3C3型内置计数器功能定位模块 详细篇.pdf63.三菱PLC Q系列 QD75P定位模块用户手册(硬件篇).pdf64.三菱PLC Q系列 QD75P定位模块用户手册(详细篇).pdf65.三菱PLC Q系列 QJ61CL12用户手册(详细篇).pdf66.三菱PLC Q系列 QJ71PB92D用户手册(详细篇).pdf67.三菱PLC Q系列 QJ71PB93D用户手册.pdf68.三菱PLC Q系列 QJ71WS96用户手册(详细篇).pdf69.三菱PLC Q系列 QnACPU编程手册 公共指令.pdf70.三菱PLC Q系列 QnACPU编程手册(PID控制指令篇).pdf71.三菱PLC Q系列 QnAprogram(add).pdf72.三菱PLC Q系列 QnA编程手册.pdf73.三菱PLC Q系列 QnPRHCPU用户手册冗余系统篇.pdf74.三菱PLC Q系列 QnPRHCPU编程手册(过程控制指令).pdf75.三菱PLC Q系列 QS CPU 功能解说 程序基础篇.pdf76.三菱PLC Q系列 QS CPU 硬件设计 维护点检篇.pdf77.三菱PLC Q系列 QSCPU公共指令篇.pdf78.三菱PLC Q系列 Q基本模式CPU硬件设计保养.pdf79.三菱PLC Q系列 Q系列H网主-从站使用手册.pdf80.三菱PLC Q系列 Q系列I-O模块使用手册.pdf81.三菱PLC Q系列 Q系列MELSECNETH网络系统参考手册(远程IO网络).pdf82.三菱PLC Q系列 Q系列MELSECNETH远程IO模块.pdf83.三菱PLC Q系列 Q高性能CPU功能解说程序基础.pdf84.三菱PLC Q系列 SW0IVNT-CSKP通信包入门手册.pdf85.三菱PLC Q系列 以太网模块基础.pdf86.三菱PLC Q系列 以太网模块用户手册(web功能篇).pdf87.三菱PLC Q系列 以太网(应用篇).pdf88.三菱PLC Q系列 冗余系统用户手册.pdf89.三菱PLC Q系列 基本模式CPU功能解说程序基础篇.pdf90.三菱PLC Q系列 多通道高速计数器模块 详细篇.pdf91.三菱PLC Q系列 安全应用程序指南.pdf92.三菱PLC Q系列 定位模块QD75P QD75D详细篇.pdf93.三菱PLC Q系列 数模转换模块.pdf94.三菱PLC Q系列 模数转换模块 用户手册.pdf95.三菱PLC Q系列 模数转换模块.pdf96.三菱PLC Q系列 温度控制模块用户手册.pdf97.三菱PLC Q系列 热电偶输入模块 通道绝缘形型电偶 微电压输入模块.pdf98.三菱PLC Q系列 类串行口通信模块 应用篇.pdf99.三菱PLC Q系列 编程手册(SFC).pdf100.三菱PLC Q系列 通信协议.pdf101.三菱PLC Q系列 高速计数器模块.pdf102.三菱PLC Q系列(硬件设计维护点检篇).pdf103.三菱PLC Q系类 串行口通信模块 基础篇.pdf104.三菱PLC X2N-16CCL-M和FX2N-32CCL CC-Link主站模块和接口模块用户手册.pdf105.三菱PLC X3U用户手册(硬件手册).pdf106.伺服电机使用手册Vol.2.pdf107.运动控制器(实模式).pdf108.运动控制器(虚模式).pdf109.运动控制器使用手册SFC编程手册.pdf110.运动控制器用户手册.pdf111.三菱PLC A系列、FX系列、Q系列资料合集
标签: 激光
上传时间: 2013-04-15
上传用户:eeworm
rc5-cts 模式的实现源码,与RFC中的实有所不同
上传时间: 2013-12-21
上传用户:weiwolkt
在实地址模式访问4g内存,对了解操作系统底层的人有帮助
上传时间: 2015-08-24
上传用户:xuanchangri