转载:保护模式1

实模式与保护模式

摘自ITWIKI,为我和还没搞明白真实模式保护模式的XDJM们

真实模式

Intel 8086和8088有14个16缓存器。其中四个(AX, BX, CX, DX)是通用目的(尽管每个缓存器有额外的目的;举个例子:CX可以被用来当作loop循环)指令的计数器。每个缓存器可以被当成两个分开的字节存取(因此BX的高位可以被当成BH以及低位BL)。除了这些缓存器, 还有四个区段缓存器(CS、DS、SS、ES)。他们用来产生内存的寻址。还有两个指针缓存器(SP是指向堆栈的底部, BP可以用来指向堆栈或内存的其它地方)。两个指针缓存器(SI和DI)可以用来指向数组的内部。最后,有旗标缓存器(包含状态旗标比如进位溢位、结果为零,等等)。以及IP是用来指向目前执行指令个地址。

在真实模式下,内存的存取是被区段开来。为了得到最后20位的内存地址,要将区段的地址往左移动4位,并且加上偏移的地址。因此,真实模式下总共可以寻址的空间是220字节, 或者是1MB,于1979年是相当让人印象深刻的象征。在真实模式下有两种寻址模式:near和far。在 far模式,区段跟偏移都需要被指定;在near模式,只需要偏移模式被指定,而内存区段是由适当的区段缓存器获得。以数据而言是使用DS缓存器,程序代码是CS缓存器,堆栈是SS缓存器。举个例子,如果DS是A000h且SI是5677h,DS:SI会指向计忆体的绝对地址DS × 16 + SI = A5677h

在这种架构下,两对不同的区段/篇移可以指向一个相同的绝对地址。因此如果DS是A111h且SI是4567h,DS:SI会指向跟上一段相同的A5677h。除了duplicity之外,这种架构无法同时一次拥有4个以上的区段。此外,CS、DS和SS是为了程序正确功能而必须的,因此仅仅只有ES可以被用来指向其它的地方。这种模式原本是为了与Intel 8085兼容,导致程序设计师永无止尽的痛苦。

除了以上所说的,8086也拥有8-bit的64K(另一种说法是16-bit的32K)输出输入en:I/O)空间,以及一个由硬件支持的64K(一个区段)内存堆栈。只有words(2字节)可以被推入到堆栈中。堆栈是由内存的上端往下成长,他的底端是由SS:SP指向。有256个中断interrupts),可以由硬件或是软件同时组成。中断是可以串连在一起,使用堆栈来储存返回被中断的程序地址。

 

16位保护模式

Intel 80286可以在不改变任何东西下支持8086的真实模式16位软件,然而它也支持额外的工作模式称为保护模式,可以将可寻址的物理内存扩充到16MB,可寻址的虚拟内存最大到 1GB。这是使用节区缓存器来储存在节区表格中的索引值。处理器中有两个这样的表格,分别为GDTLDT,每一个可以储存最多8192个节区的描述子,每一个节区可以给予最大到64KB的内存存取。节区表格提供一个24位的基地址(base address),可以用此基地址增加想要的偏移量来创造出一个绝对地址。此外,每一个节区可以被赋予四种权限等级中的一种(称为 "rings")。

尽管这个推出的功能是一项进步,但是他们并没有被广泛地使用,因为保护模式的操作系统无法执行现有的真实模式软件。这样的能力只有在随后80386处理器的虚拟86模式中出现。

在同时,操作系统比如OS/2尝试使用类似乒乓的方法,让处理器在保护和真实模式间切换。这样都会让计算机变慢且不安全,像是在真实模式下的程序可以轻易地使计算机当机。OS/2也定义了限制性的程序设计规则允许"Family API"或"bound"程序可以在真实模式或保护模式下执行。然而这是给原本为保护模式下设计的程序有关,反之则不然。保护模式程序并不支持节区选择子和物理内存之间的关系。有时候会错误地相信在16位保护模式下执行真实模式的程序,导致IBM必须选择使用Intel保留给BIOS的中断呼叫。事实上这类的程序使用任意的选择子数值和使用在上面提到的“节区运算”的方式有关。

这个问题也在Windows 3.x上出现。这个推出版本想要在16位保护模式下执行程序,而先前的版本只能在真实模式下执行。理论上,如果Windows 1.x或2.x程序是写得“适当”且避免使用节区运算的方式,它就有可能在真实和保护模式两者下执行。Windows程序一般来说都会避免节区运算,这是因为Windows实作出软件的虚拟内存方式,及当程序不执行时候,搬移内存中的程序代码和数据,所以操作绝对地址的方式是很危险的;当程序不执行时,被认为要保持内存区块的“handles”,这样的handles已经非常相当于保护模式的选择子。在保护模式下的Windows 3.0执行一个旧的程序,会触发一个警告对话盒,建议在真实模式下执行Windows(推测还是仍然可以使用扩充内存,可能是在80386机器用EMM386模拟,因此它并不被局限于640KB)或是从厂商那更新到新的版本。好的行为之程序可能可以使用特别的工具来避免这样的对话盒。不可能有些GUI程序在16位保护模式下执行,且其它GUI程序在真实模式执行,可能是因为这会需要两个分开的环境且会依于前面所提到的处理器在两个模式间的乒乓效应。从Windows 3.1版开始,真实模式就消失了。

 

32位保护模式

Intel 80386推出后,也许是到目前为止x86架构的最大跃进。除了需要值得注意的Intel 80386SX32位架构但仅只有24位寻址(和16位数据总线)。除此之外其它架构都是32位 - 所有的缓存器指令集、输出输入空间和内存寻址。为了能够在后者所说的功能工作,要使用32位扩充的保护模式。然而不像286、386所有的区段可以使用32位的偏移量,即使内存空间有使用区段,但也允许应用程序存取超过4GB空间而不需要区段的分隔。此外,32位保护模式提供分页的支持,是一种让虚拟内存得以实现的机制。

没有新的通用缓存器被加入。所有16位缓存器除了区段缓存器外都扩充为32位。Intel在缓存器的助记符号上加入“E”来表示(因此扩充的AX变成EAX,SI变成ESI,依此类推)。因为有更多的缓存器数量、指令、和运算单元,因此机器码的格式也被扩充。为了提供与先前的架构兼容,包含执行码的区段可以被标示为16或是32位的指令集。此外,特殊的前置符号也可以用来在16位的区段包含32位的指令码,反之亦然。

分页跟区段的内存存取是为了支持现在多任务操作系统所必须要的。Linux386BSDWindows NTWindows 95都是一开始为386所发展,因为它是第一颗提供可靠地程序分离内存空间的支持(每个程序拥有自己的寻址空间)以及可以在必要的情况下打断他们程序的执行(使用ring,一种x86保护模式下权力分级的名称)。这种386的基本架构变成未来所有x86系列发展的基础。

Intel 80386数学辅助运算处理器也在整合到这个CPU之后的x86系列中,也就是Intel 80486。新的FPU可以帮助浮点数运算,对于科学计算和图形设计是非常重要。

转载于:https://www.cnblogs.com/loopever/archive/2013/03/24/2979502.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浙江移动无线dns服务器地址,浙江移动4g的dns服务器地址

浙江移动4g的dns服务器地址 内容精选换一换当创建文件系统后,您需要使用云服务器来挂载该文件系统,以实现多个云服务器共享使用文件系统的目的。本章节以Windows 2012版本操作系统为例进行NFS文件系统挂载,其他版本请参考以下主要步骤根据实际…

Android之给gridview的单元格加上分割线

有时候需要给gridview加上分割线,没有现成的解决方案,这里写好一个可以直接用的自定义gridview,就叫做LineGridView吧。先上图,zaker客户端第三方分享的gridview样式: 可以看到靠边的格子都是半封闭的,要实…

Azure Machine Learning - 如何使用 GPT-4 Turbo with Vision

介绍如何在Azure中使用GPT-4 Turbo with Vision 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理…

系统命名与 SQL 命名之争 - 第 1 部分

创建数据库对象的命名规范 创建数据库对象时,开发人员可以选择一种命名方法,可以选择遵循传统 IBM i 行为的系统命名模式 (*SYS),也可以选择遵循SQL 标准规则的 SQL 命名规范 (*SQL)。 DB2 for i 与其他数据库管理系统 (DBMS) 之间的主要差别…

C++ const 关键字使用

2019独角兽企业重金招聘Python工程师标准>>> 为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号…

论大象如何装进冰箱

全世界只有3.14 % 的人关注了爆炸吧知识在这美好的一天,想和大家讨论一个有趣的数学话题:怎么才能将一只大象装进冰箱呢?数学的方法把大象放到冰箱里的分析学方法1)先把大象微分,然后把它放到冰箱里,再在冰…

2020下半年新机最新消息_提前剧透 2020 年下半年五大新机

华为 Mate40系列 美帝一系列封杀骚操作,并没有影响到华为手机下一代的处理器——台积电代工的、采用了 5nm 进程的 Mate40 处理器——麒麟 1020。为了 3D 脸部识别,可能还是采用刘海屏。Mate40 Pro 的曲率更大,正面屏幕的视觉冲击更加震撼&am…

手把手教你学Dapr - 5. 状态管理

介绍使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中。您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来保存和读取键/值对,如下图所示。例如,通过使用 HTTP POST,您可以保存键/值对&#xf…

Android之drawlayout使用和总结

DrawLayout 今天发的Android之SlidingMenu博客之后,有人说out了,说用DrawLayout,我插,被叼了,然后我就到网上查drawLayout是什么?原来是侧滑菜单,好吧,赶快学习下,网上很多例子,都不怎么全面,然后找了找了呀,终于找到到了个成形的,然后自己改了下,不说了,先爆照 …

qtp服务器怎么获得日志信息,QTP自动化测试-打开运行报告

微信JSAPI支付最近在微信H5页面内集成微信JSAPI支付,遇到不少问题,现将集成步骤及遇到的问题记录如下: 1.官方下载SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api ...如何Windows分页控件中增加统计功能在我的博客里面,很多Winform程序里面都用到了分页处理,这样可以不管…

eclipse 汉化教程(语言包)

Eclipse 汉化图形教程此教程仅仅以links方式安装eclipse插件,且接下来主要以eclipse安装语言包为例,如果教程过程中哪里不对,请指出,谢谢。因使Eclipse版本太多,我这里就以eclipse3.5.2为例,讲讲如何将其汉…

4. MyBatis几个可以优化的地方

与其说是优化, 还不如说是让配置更简单.一: 连接数据库的配置单独放到一个属性文件中在 src 路径下新建一个 db.properties 属性文件, 并把数据库连接信息放入文件中, 然后在 conf.xml 文件中导入属性文件引用就可以了, 这样更好管理.1. 新建 db.properties 文件2. 写入属性信息…

免费使用的支付宝,到底是怎么一年赚1206亿的?

全世界只有3.14 % 的人关注了爆炸吧知识眨眼间,马云居然退休已经一年了,真可谓白驹过隙,恍惚而逝啊!不过,你以为马云退休了,就清风明月,万事不管了。太年轻!其实马云依旧掌控者蚂蚁集…

C#中使用opencv处理图像

OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android、ios等操作系统上,它轻量级而且高效---由一系列C函数和少量C类构成,同时提供了Python、Ruby、MATLAB等语言的接口…

php psr 编码规范_PHP之PSR-4规范:自动加载

1. 概述本 PSR 是关于由文件路径 自动载入 对应类的相关规范,本规范是可互操作的,可以作为任一自动载入规范的补充,其中包括 PSR-0,此外,本 PSR 还包括自动载入的类对应的文件存放路径规范。关于「能愿动词」的使用为了…

Android之日期时间选择器使用方法

// 设置日期 @Override public void onClick(View v) {new DatePickerDialog(activity,new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) {// 设置calendar.set(year, monthOfYear, day…

两台服务器虚拟成一个ip地址,两台服务器如何用一个ip地址

两台服务器如何用一个ip地址 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。检查Pkey是否一致。查看弹性云服务器内部分配到的Pkey…

近期调优总结

近期由于公司举行大促,访问量巨增,预计流量为平时流量的60倍,在增加了两台服务器后,为了更大程度的压榨服务器性能,从各个层面上进行了优化,现在做下总结以备忘。 1)nginx优化 nginx优化主要涉及…

SQL注入漏洞全接触--高级篇

2019独角兽企业重金招聘Python工程师标准>>> 看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到,或程序作者过滤了一些特殊字符,怎么提高注入的成功率?怎么样提高猜解效率?请大家接…

除了沉迷酒色之外,你还做过什么?

1 是了,说的就是我▼2 你这叫落井又下石...▼3 如何让衣服瞬间好看?▼4 自己品品...▼5 买家秀与卖家秀▼6 舍友的水杯...妥妥养生局!▼7 还有...▼你点的每个赞,我都认真当成了喜欢