实模式和保护模式

一、背景

以80x86电脑说,一开始的8086/8088系列的地址总线只有20位,所以只有1M的地址空间。通过“段基址:偏移”的方式,就可以获得实际的物理地址。
但是这种方式不安全:用户程序可以修改系统程序的内存或者其他用户程序的内存;而且内存太小了。
随着硬件的发展,后来出现了32位甚至64位的机器,地址总线就有32位或64位,地址空间可以扩展到4GB甚至更大。所以后来就出现了保护模式。保护模式可以对每个进程的内存使用进行限制,更加安全;保护模式有更大的内存空间,可以支持多进程;保护模式的内存分段、分页管理机制,为实现虚拟内存提供了硬件支持。

二、实模式

实模式的最大寻址空间为1MB。
一开始8086/8088系列的地址总线有20位,寄存器只有16位。如何用16位的寄存器表示20位的地址呢?
既然一个寄存器无法表示,那就用两个寄存器吧。前一个寄存器(段寄存器)表示在内存中的哪一段,后一个寄存器表示在这一段中的偏移地址。计算方式为:

段地址<<4 + 偏移地址 = 物理地址
段地址左移4位加上偏移地址,这样就得到了实际的物理地址。

三、保护模式

保护模式下,程序员指定逻辑地址,用16位段寄存器和32位寄存器来表示。但是这时段寄存器里面保存的值,不再是段基地址,而是一个选择子(Selector)。操作系统根据这个选择子的值,来算出段基地址,再和偏移地址相加,就是实际的物理地址。
保护模式寻址示意图操作系统根据段寄存器里面的值,来查GDT表(Global Descriptor Table,全局描述符表)或者LDT(Local Descriptor Table,局部描述符表)表,来获得段基地址。
此时,段寄存器里面的16位,意义如下:
选择子根据2位TI确定查GDT表还是LDT表,然后根据3-15位的索引值来查表。
以GDT表为例,它首先是一个表,存放了很多表项,每一项由 基地址、界限、访问权、附加字段 组成。

基地址界限访问权附加字段
段的起始地址段的长度R/W等

根据这个表,我们就得到的基地址,加上偏移地址,最终就可以得到真正的物理地址了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值