`
hongbochen1223
  • 浏览: 43796 次
文章分类
社区版块
存档分类
最新评论

实模式和保护模式的段式存储

 
阅读更多

intel 8086是16位的CPU,有着16位的寄存器,16位的数据总线和20位的地址总线。但由于其寄存器和数据总线都是16位,仅仅具有64kb的寻址能力,所以采用段+偏移的方式得到20位的即1M的寻址能力。则其计算公式为:
物理地址 = 段值 * 16 + 偏移。
也就是段值左移一位 + 偏移。 —其中,段值和偏移都是16位的

但80386开始,CPU进入32位时代,其具有32位地址线,所以寻址能力变为4G。寻址空间虽然变大了,但是依然采用“段:偏移”的形式,但是具体的策略却发生了变化。
在实模式下,段值还可以看成是地址的一部分,段值仅仅就是左移一位,然后加上偏移地址就是实际的物理地址;但是在保护模式下,段值仅仅变成了一个索引,该索引指向一个数据结构的一个表项,表项记录着段的基址,段界限,以及属性等内容,该数据结构就是GDT。GDT中的一个表项就是段描述符(Descriptor)。
下面是段描述符的一个结构图:
这里写图片描述

属性的详细了解:
(1):P:存在位
P=1 表示描述符对地址转换是有效的,或者说该描述符所描述的段存在,即在内存中
P=0 表示描述符对地址转换无效,即该段不存在,使用该描述符进行内存访问时会引起异常

(2):DPL: 描述符特权级(Descriptor privilege level).共2位。规定了描述段的特权级,用于特权检查,以决定对该段能否访问。

(3):S: 描述符的类型
对于存储段描述符,S=1系统段描述符和门描述符,S=0
(4):TYPE: 说明存储段描述符所描述的存储段的具体属性

(5):G: 段界限粒度位(Granularity)
G=0: 表示段界限粒度位字节
G=1: 表示段界限粒度为4k字节
注意:界限粒度位只对段界限有效,对段基址是无效的,段基址总是以字节为单位。

(6): D位
D位是一个很特殊的位,在描述可执行段、向下扩展数据段或由SS寄存器寻址的段(通常是堆栈段)的三种描述符中的意义各不相同。
⑴ 在描述可执行段的描述符中,D位决定了指令使用的地址及操作数所默认的大小。
① D=1表示默认情况下指令使用32位地址及32位或8位操作数,这样的代码段也称为32位代码段;
② D=0 表示默认情况下,使用16位地址及16位或8位操作数,这样的代码段也称为16位代码段,它与80286兼容。可以使用地址大小前缀和操作数大小前缀分别改变默认的地址或操作数的大小。
⑵ 在向下扩展数据段的描述符中,D位决定段的上部边界。
① D=1表示段的上部界限为4G;
② D=0表示段的上部界限为64K,这是为了与80286兼容。
⑶ 在描述由SS寄存器寻址的段描述符中,D位决定隐式的堆栈访问指令(如PUSH和POP指令)使用何种堆栈指针寄存器。
② D=1表示使用32位堆栈指针寄存器ESP;
② D=0表示使用16位堆栈指针寄存器SP,这与80286兼容。

(7):AVL:软件可利用位

下面学习一下段选择子,首先段选择子不是刚刚所说的那个索引,段选择子为16为,其中13位为描述符索引,一位TI位,两位RPL位。
这里写图片描述

TI:(table Indicator): 引用描述符表指示位
TI = 0 : 指示从全局描述符表GDT中读取描述符
TI =1:指示从局部描述符表LDT中读取描述符

RPL(requested Privilege level): 请求特权级,用于特权检查

现在使用一张图描述一下段存储机制的寻址过程。
这里写图片描述

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    计算机软件及应用数据库基础知识.pptx

    数据世界:将概念世界中的数据在计算机中进行存储和处理。 现实世界 概念世界 数据世界 概念模型 独立于DBMS 数据模型 依赖于DBMS 计算机软件及应用数据库基础知识全文共33页,当前为第9页。 1.2.3 概念模型 概念...

    微机课后题目答案 答案

    32位段基地址和20位段界限值定位了该段在存储空间中的位置,其它有关位决定访问权限及段的长度单位。系统段描述符与存储器段描述符大多数字节段相同,有关访问权及属性字节段有些不同。门描述符用来改变程序的特权...

    操作系统复习题(包含习题讲解)

    掌握分区、页式与请求页式、段式与虚拟段式的实现原理和地址变换。了解段页式存储管理技术,虚存中的置换算法。 第六章 文件系统 本章的学习目的是使学生掌握文件系统的基本概念和实现过程。要求掌握文件的逻辑结构...

    asp.net知识库

    几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段...

    mysql官方中文参考手册

    14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器...

    MYSQL中文手册

    9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. ...

    大数据安全核心技术.pdf

    分布式应⽤⼀般采⽤两种模式存储数据:垂直划分和⽔平划分的数据模式。垂直划分数据是指分布式环境中每个站点只存储部 分属性的数据,所有站点存储的数据不重复。⽔平划分数据是将数据记录存储到分布式环境中的多个...

    MySQL 5.1参考手册 (中文版)

    14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器...

    MySQL 5.1参考手册中文版

    9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. ...

    MySQL 5.1参考手册

    14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器...

    数据库系统及应用课程总结.docx

    第六章知识点有:存储过程的创建和执行过程、修改和删除;触发器的基本概念,建立,插入和删除视图,插入、删除和更新类触发器。最后介绍了数据完整性。第七章介绍安全性,包括安全性措施的层次、数据库管理系统的...

    MySQL 5.1中文手冊

    14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器...

    MySQL5.1参考手册官方简体中文版

    9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    这部分内容是笔者讲授“疯狂java实训”的培训讲义,也是本书的重点部分。第三部分提供了一个jsf+ejb 3+ jpa整合开发的项目:电子拍卖系统。这个项目包括5个实体,这5个实体之间具有复杂的关联关系,而且业务逻辑也...

    2005-2009软件设计师历年真题

     • 数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树、平衡树、线索树、线索树、堆)、图等的定义、存储和操作  • Hash(存储地址计算,冲突处理)  ...

    自己动手写操作系统(含源代码).part2

     本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关的知识,都作为介绍对象加以讨论,所以,从开发环境的搭建,到保护模式,再到IBMPC中有关芯片的知识,最后到操作系统本身的设计实现,都能在本文中...

    自己动手写操作系统(含源代码).part1

     本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关的知识,都作为介绍对象加以讨论,所以,从开发环境的搭建,到保护模式,再到IBMPC中有关芯片的知识,最后到操作系统本身的设计实现,都能在本文中...

    数据库架构设计.pdf

    动态数据:订单等 数据概念模型:根据需求分析,进⾏综合分析,形成独⽴于具体DBMS的概念模型,要理清 实体和实体关系 属性和域 业务规则(应⽤实现和数据库实现) 并综合考虑如下⼏点 存储哪些数据 数据来源 数据的...

Global site tag (gtag.js) - Google Analytics