地址空间

地址访问分为实地址模式,保护模式
实地址模式:段寄存器 <<4 + 寄存器 ——> 物理地址
典型代表就是inter 8086处理器:该处理器为16位处理器,地址线20根(ALU为16位)里面存在四个内存区段寄存器,CS(可执行代码)、DS(数据)、SS(堆栈)和ES(其他)该cpu要访问1mb的空间,但16位只能访问64k的空间,086 把段地址左移 4 位然后在加上16位的访问空间来达到访问目的,
但在该模式下会让各分段有重叠,同时因为方式没有保护,程序可以直接访问真实的物理地址,可能会修改不属于本身的内存空间,引起混乱。
保护模式:
因为实地址模式存在安全隐患,所以在80286之后的x86系统中变为保护模式提供最高的性能和兼容性,并且提高了安全性,以同时增加了GDTR,和LDTR两种寄存器,并保留了之前的4个寄存器,因为要兼容老版本,所以cpu实模式访问保留下来。保护模式以分段和分页为管理机制,以32位系统为例:访问地址规则变为:基+逻辑地址=线性地址(虚拟地址)->物理地址,但32位系统本身就可以访问4GB的内存空间,所以基地址位0,GDT全局描述表,在保护模式下一个重要的数据结构。GDT可以被放在内存的任何位置,那么当程序员通过段寄存器来引用一个段描述符时,CPU必须知道GDT的入口,所以Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址。
GDT的作用是用来提供段式存储机制,在整个系统中GDT表只有一张
GDT表在这里插入图片描述
其中以B开头为段基地址,以L开头为段界限
当 G 位是“ 0”时,段界限以字节为单位。此时,段的扩展范围是从 1 字节到 1 兆字节( 1B~1MB),因为描述符中的界限值是 20 位的。相反,如果该位是“ 1”,那么,段界限是以 4KB 为单位的。这样,段的扩展范围是从 4KB到 4GB
DPL 表示描述符的特权级 0-3级,Linux下只有内核态(0)和用户态(3)
P: 存在位。
; P=1 表示描述符对地址转换是有效的,或者说该描述符所描述的段存在,即在内存中;
; P=0 表示描述符对地址转换无效,即该段不存在。使用该描述符进行内存访问时会引起异常。
TYPE 字段共 4 位,用于指示描述符的子类型,或者说是类别。
S 位用于指定描述符的类型( Descriptor Type)。当该位是“ 0”时,表示是一个系统段;为“ 1”时,表示是一个代码段或者数据段(堆栈段也是特殊的数据段)。
LDT
LDT在系统中可以存在多个,LDT不是全局可见的,它们只对引用它们的任务可见,每个任务最多可以拥有一个LDT。另外,每一个LDT自身作为一个段存在,它们的段描述符被放在GDT中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值