第十一课 实模式到保护模式 中

  为了解决内存访问越界的问题,英特尔发明了80286处理器,这款处理器引入了保护模式,为现代操作系统和应用程序奠定了基础,但是80286在设计上有些奇葩,例如:

  段寄存器为24位,通用寄存器为16位,这样显得不伦不类。

  理论上,段寄存器中的数值可以直接作为段基址。80286中16位寄存器最多访问64K的内存,为了访问16M的内存,必须不停的切换段基址。

  虽然存在以上的问题,但是80286引入的保护模式是成功的,为了改进以上存在的问题,英特尔设计出了80386,这时计算机进入新时期的标志,80386有以下特性:

1、32位的地址总线(可支持4G的内存空间)

2、段寄存器和通用寄存器都为32位,任何一个寄存器都能访问到内存的任意角落,这也开启了平坦内存模式的新时代,将段基址设置为0,使用通用寄存器即可访问4G内       存空间。

  80386依然要兼容8086和80286,因为已经有很多程序在这两款机器上运行,因此,80386有以下三种运行模式:

  下面我们分析分段机制,首先,给出段属性,如下所示:

  每个段有自己的属性,相应的选择子也有自己的属性,选择子属性如下:

  段描述符是64位的,具体如下所示:

  在汇编程序中,我们需要定义自己的段,也要自己定义段描述符,因此,给出如下的汇编宏,这是一个宏定义,其定义的64位数据正好能和上图对应起来。

  有了以上的宏定义,我们就可以使用它直接定义自己的段描述符了,这个宏接受3个参数,也即上图中Descriptor 3中的3代表接受三个参数,而%1,%2,%3分别表示取出第几个参数,下面给出保护模式中的段定义:

  上图中,第一个段描述符的基地址部分定义为0,这是x86处理器要求的,而第二个段描述符基地址也定义为0,我们在程序的运行过程中会进行修改,而GDT结束后,下面紧接着是GDT的界限和GDT的基地址。

  

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9343341.html

时间: 2024-10-11 01:09:44

第十一课 实模式到保护模式 中的相关文章

第十课 实模式到保护模式 上

远古时期的程序开发是直接操作物理内存的,CPU指令的操作数直接使用实地址(实际内存地址),程序员拥有绝对的权利,可以随意访问内存的任意一个地址,可以说是指哪打哪. 使用绝对的物理地址会带来很多问题,例如: 1.难以重定位,程序每次都需要同样地址的内存来运行. 2.给多道程序设计带来了障碍,也就是说,不管内存多大,但凡一个字节被其他程序占用都无法执行. 为了解决以上的问题,英特尔开发出了8086 CPU处理器,其引入了如下特性: 1.地址线宽度为20位,可访问1M内存空间 2.引入[段地址:偏移地

【OS】实模式和保护模式区别及寻址方式

实模式和保护模式区别及寻址方式 转载请注明出处:http://blog.csdn.NET/rosetta 64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为什么实模式下最大寻址空间为1MB?段的最大长度不超过64KB?而保护模式下为啥最大寻址能力就变成了64TB?每个段最大也达4GB? 更甚者分段和分页这两个高深的概念像我这种菜鸟怎么也理解不了啊!

【自制操作系统04】从实模式到保护模式

通过前三章的努力,我们成功将控制权转交给了 loader.asm 这个程序.具体说就是 bios 通过加载并跳转到 0x7c00(IMB大叔们定的) 把控制权转交给了我们操作系统的第一个汇编程序 mbr.asm,然后 mbr.asm 里做的事就是通过加载 loader 程序并跳转到 0x900(这个是我们自己定的)把控制权转交给了 loader.asm 程序,目前这个程序里还只是向屏幕输出一行字符串"loader",今天我们就将扩展它.并且今天我们要做的事,是操作系统中的第一个精彩之处

程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26

程序的加载和执行(六)--<x86汇编语言:从实模式到保护模式>读书笔记26 通过本文能学到什么? NASM的条件汇编 用NASM编译的时候,通过命令行选项定义宏 Makefile的条件语句 在make命令行中覆盖Makefile中的变量值 第13章习题解答 复习如何构造栈段描述符 我们接着上篇博文说. 在我修改后的文件中,用到了条件汇编. 比如: %ifdef DEBUG put_core_salt: ;打印内核的符号 ... ... put_usr_salt: ;打印用户的符号 ... .

Linux进程5——实模式和保护模式

早期的Inter芯片只支持1MB内存,采用实模式,采用16bit地址.后来随着技术进步,出现可以访问更多内存的 保护模式芯片,采用32bit地址.为了保持对前面芯片的兼容,Inter支持这两种模式.当芯片启动时,默认处于实模式, 然后OS控制进入保护模式. 实模式和保护模式的最大区别: 实模式下,程序地址为真实的物理地址,可以访问任意地址空间,这样不同进程可能访问到其它进程程序,造成 严重错误. 保护模式下,程序地址为虚拟地址,然后由OS系统管理内存访问权限,这样每个进程只能访问分配给自己的物理

Linux-0.11源代码阅读二 实模式到保护模式

bootsect部分已经执行完成,程序也跳转到setup部分: start: ! ok, the read went well so we get current cursor position and save it for ! posterity. mov ax,#INITSEG ! this is done in bootsect already, but... mov ds,ax mov ah,#0x03 ! read cursor pos xor bh,bh int 0x10 ! sa

程序的载入和运行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25

程序的载入和运行(五)--<x86汇编语言:从实模式到保护模式>读书笔记25 前面几篇博文最终把代码分析完了.这篇就来说说代码的编译.运行和调试. 1.代码的编译及写入镜像文件 之前我们都是在命令行输入命令进行编译和写入.源文件少的时候还不认为麻烦,当源文件多了,就会认为特别麻烦.有没有简单的方法呢? 当然有,就是用make工具. 1.1.什么是make工具 make是一个命令工具,它解释Makefile中的指令.在Makefile文件里描写叙述了整个project全部文件的编译顺序.编译规则

存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18

本文是原书第12章的学习笔记. 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志.司马迁曰:“文王拘而演<周易>:仲尼厄而作<春秋>:屈原放逐,乃赋<离骚>:左丘失明,厥有<国语>:孙子膑脚,<兵法>修列:不韦迁蜀,世传<吕览>……”好了,不煽情了,进入正题. 第12章的代码如下. 1 ;代码清单12-1 2 ;文件名:c12_mbr.asm 3 ;文件说明:硬盘主引

Linux下的实模式和保护模式

实模式:(即实地址访问模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容处理器(CPU)的一种操作模式.实模式被特殊定义为20位地址内存可访问空间上,这就意味着它的容量是2的20次幂(1M)的可访问内存空间(物理内存和BIOS-ROM),软件可通过这些地址直接访问BIOS程序和外围硬件.实模式下处理器没有硬件级的内存保护概念和多道任务的工作模式.但是为了向下兼容,所以80286及以后的x86系列兼容处理器仍然是开机启动时工作在实模式下.80186和早期的

存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20

存储器的保护(三) 改动本章代码清单,使之能够检測1MB以上的内存空间(从地址0x0010_0000開始,不考虑快速缓存的影响).要求:对内存的读写按双字的长度进行.并在检測的同一时候显示已检測的内存数量.建议对每一个双字单元用两个花码0x55AA55AA和0xAA55AA55进行检測. 上面的文字选自原书第12章的习题1. 这篇博文就讨论一下这道题.由于是初学,我不正确自己做太高的要求.仅仅要实现功能就可以. 代码清单 ;文件说明:第12章习题-1 ;创建日期:2016-3-7 ;------