目录

1.段的定义

2.段描述符表

3.段选择符

4.段描述符

5.直达底部

段的定义

段的介绍

分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存单元。 80386虚拟地址空间中的虚拟地址(逻辑地址)由一个段部分和一个偏移部分构成。段是虚拟地址到线性地址转化的基础。每个段有三个参数定义:

  1. 段基地址,指定段在线性地址空间中的开始地址。基地址是线性地址对应于段中偏移 0 处。
  2. 段限长,是虚拟地址空间中段内最大可用偏移地址。定义了段的长度。
  3. 段属性,指定段的特性。如该段是否可读、可写或可作为一个程序执行,段的特权级等。

多个段映射到线性地址中的范围可以部分重叠或覆盖,甚至完全重叠,如下图所示

相关的数据结构

段的基地址、段限长以及段的保护属性存储在一个称为段描述符的结构项中。在逻辑地址到线性地址的转换映射过程中会使用这个段描述符。段描述符保存在内存中的段描述符表中。

段描述符表是包含段描述符项的一个简单数组。 使用段选择符来指定段描述符表中一个段描述符的位置来指定相应的段。

虚拟地址到线性地址转化

即使是使用段的最小功能,使用逻辑地址也能访问处理器地址空间中的每一个字节。逻辑地址由 16 位的段选择符合 32 位的偏移量组成。

当需要访问处理器地址空间中的某个字节时。段选择符指定了该字节所在的段,偏移量指定了该字节在段中相对于段基址的位置。处理器会吧每个逻辑地址转换成线性地址。线性地址是处理器线性地址空间中的 32 位地址。也是平坦的 4GB 地址空间,地址范围从 0 到 0xFFFFFFFF。线性地址空间中含有系统定义的所有段和系统表。

处理器把逻辑地址转化成一个线性地址的过程:

  1. 使用段选择符中的偏移值(段索引,我感觉这个偏移值应该是相对于段描述符表其实地址的偏移)在GDT(全局描述符表) 或 LDT(局部描述符表)中定位相应的段描述符。(仅当一个新的段选择符加载到段寄存器中时才需要 ??)

  2. 利用段描述符校验段的访问权限和范围,以确保该段是可以访问的并且偏移量位于段界限内。

  3. 利用段描述符中取得的段基地址加上偏移量,形成一个线性地址。

返回目录

段描述符表

段描述符表示存放段描述符的一个数组。 它的长度可变,最多可以包含 8192 个段描述符,每个段描述符长度为 8 个字节。段描述符表有两种:全局描述符表GDT和局部描述符表LDT。段描述符表结构如下图所示。

段描述符表存储在由操作系统维护着的特殊数据结构中,由处理器的内存管理硬件来引用。 这些特殊的数据结构保存在只有操作系统能够访问的受保护的内存区域,防止被应用程序修改。

虚拟地址空间被分割成大小相等的两半。一半由GDT来映射变换到线性地址,另一半由LDT来映射。整个虚拟地址空间共含有 2^14 个段: 一般空间(2^13)是由GDT映射的全局虚拟地址空间,另一半是由LDT映射的局部虚拟地址空间。 指定一个描述符表(GDT或LDT)和表中的描述符号,就可以定位到一个段描述符(通过段描述符就可以定位到段)。

当任务切换时,LDT会更换成新任务的LDT,GDT不会改变,因为GDT所映射的一半虚拟地址空间是系统中所有任务公有的,LDT所映射的另一半则在任务切换时被改变。系统中所有任务共享的段有GDT来映射。

系统中每个应用程序对应一个任务,并且每个任务都有自己的LDT,如下图所示,应用程序A在任务A中运行,拥有LDTa ,用来映射段Codea和Dataa。类似地,应用程序B在任务B中运行,使用LDTb来映射Codeb和Datab。操作系统内核的两个段Codeos和Dataos 使用GDT来映射,这样它可以被像个人物所共享。 LDTa和LDTb两个段也使用 GDT来映射。

当任务A在运行时,可以访问 LDTa映射的Codea 和Dataa段,以及GDT映射的操作系统段COdeos和Dataos。当任务B在运行时,可以访问的段包括LDTb映射的Codeb和Datab段,以及GDT映射的操作系统段COdeos和Dataos。

通过让每个任务使用不同的LDT,演示了虚拟地址空间如何隔离每个任务。当任务A在运行时,任务B的段不是虚拟地址空间的部分。因此,任务A无法访问任务B的内存。同样的,当任务B运行时,任务A的段也不能被任务B访问。这种使用LDT来隔离每个应用程序任务的方法,正式关键保护的需求之一。

每个系统必须定义一个GDT,并可用于系统中所有程序或任务。可以选定义一个或多个LDT。可以为每个运行任务定义一个LDT,或者某些任务共享一个LDT。

GDT本身并不是一个段,而是线性地址空间的一个数据结构。GDT的基线性地址和长度必须加载进 GDTR 寄存器中。处理器并不使用 GDT中的第一个描述符。把这个"空描述符"加载到段寄存器中并不会产生一个异常。但是,如果使用这些加载了空描述符的段选择符来访问内存就会引发一般保护性异常。通过使用这个段选择符初始化段寄存器,就会引发异常。

LDT表存放在LDT类型的系统段中。此时GDT必须含有LDT的段描述符。如果系统支持多LDT,那么每个LDT都必须在GDT中有一个段描述和段选择符。一个LDT的段描述符可以存放在GDT表的任何地方。 访问LDT需使用其段选择符。为了在访问LDT是减少地址转换次数,LDT的段选择符、段基址、段限长以及访问权限需要存放在LDTR寄存器中。

返回目录

段选择符

段选择符(或称段选择子)是段的一个十六位标志符,如下图所示。段选择符并不直接指向段,而是指向段描述符表中定义段的段描述符。 段选择符包括 3 个字段的内容:

  • 请求特权级RPL([0:1])
  • 表指引标志TI([2])TI = 0 ,表示描述符在GDT中,TI = 1,表示描述符在LDT中。
  • 索引值,给出了描述符在GDT或LDT表中的索引项号。

下面是一些段选择符的示例:

段描述符

每个段描述符长度是 8 字节,含有三个主要字段:段基地址、段限长和段属性。段描述符通常由编译器。链接器、加载器或者操作系统来创建,绝不可能由应用程序来创建。

段描述符通用格式如下:

返回目录

转载于:https://www.cnblogs.com/ay-a/p/8338377.html

操作系统学习(二)、分段机制相关推荐

  1. 操作系统学习- 二 -同步-信号量(semaphore)

    信号量(semaphore) 锁的机制保证了临界区的基本要求,也帮助我们初步解决了同步互斥问题.但是基础的锁只能解决两个进程之间的同步问题在实际开发中,我们常常会遇到类似一个进程要与多个进程同步的情况 ...

  2. ROS机器人操作系统学习(二)

    ROS机器人操作系统学习(二) ROS概念 通信机制+开发工具+应用功能+生态系统 提高机器人研发中的软件复用率 通信机制 松耦合分布式通信 开发工具 应用功能 生态系统 节点与节点管理器 话题与服务 ...

  3. 操作系统篇-分段机制与GDT|LDT

    || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在<操作系统篇-浅谈实模式与保护模式>中提到了两种模式,我们说在操作系统中,其实大部分时间是待在保护模式中的.因此若想 ...

  4. 操作系统学习笔记-04-操作系统的运行机制和体系结构

    操作系统学习笔记-2019 王道考研 操作系统-04-操作系统的运行机制和体系结构 文章目录 4-操作系统的运行机制和体系结构 4.1知识总览 4.2运行机制 4.2.1预备知识:什么是指令? 4.2 ...

  5. 【操作系统学习笔记】—— 【二】进程、线程、死锁

    本文参考: JavaGuide 王道考研-操作系统 CS-Notes 文章目录 一.进程的概念.组成.特征 1. 概念 2. 进程的组成 PCB 程序段 数据段 3. 进程的特征 二.进程的状态 三. ...

  6. 8086的内存分段机制

    文章目录 1 代码段和数据段 2 8086的分段机制 2.1 8086的分段机制 1 代码段和数据段 对于我们的程序来说,通常分为代码段和数据段: 对于上面的代码使用的是绝对地址,当我们的操作系统把数 ...

  7. Linux内存管理:内存寻址之分段机制与分页机制

    目录 Linux 内存寻址之分段机制 前言 分段到底是怎么回事? 实模式的诞生(16位处理器及寻址) 保护模式的诞生(32位处理器及寻址) IA32的内存寻址机制 寻址硬件 IA32的三种地址 MMU ...

  8. 操作系统实验二:物理内存管理系统

    操作系统实验二:物理内存管理系统 一. 实验目的 二. 实验内容 三. 实验准备 [实验概述] [关键数据结构] [执行流程] 四. 实验步骤 (一) 练习0:填写已有实验 (二) 练习1:实现 fi ...

  9. 操作系统学习体会之进程管理篇

    计算机基础知识的学习中,操作系统则是重中之重.继对微机原理和计算机组成原理的基础知识了解和学习后,对硬件和基础原理的理论有了初步的了解,结合在所在公司的项目中开发应用的经历和体会,进行了操作系统的学习 ...

最新文章

  1. 2018-3-11 HDFS2.X
  2. 第章量子计算机产业,又一个世界第一,九章量子计算机诞生,中国战斗机智能空战不是梦...
  3. 找出数组中最长的连续数字序列(JavaScript实现)
  4. dart - 如何从Dart中的列表中找到最小值和最大值
  5. JS实现Ajax异步刷新
  6. 基于区块链的数据市场
  7. java 手机信息管理系统照相功能_Android实现手机拍照功能
  8. x86从实模式到保护模式 pdf_【自制操作系统04】从实模式到保护模式
  9. VC++中多线程学习(MFC多线程)二(线程的相关操作、线程间的通信)
  10. CPDA认证|数据分析师如何撰写数据报告?
  11. Replace Autoprefixer browsers option to Browserslist config.
  12. 【SAP】在制品报表 查询及结算余额查询
  13. 我们应该拥有怎样的职场价值观
  14. eclipse 汉化教程(中文语言包的下载和安装)
  15. 漫画版python_不能错过的Python漫画
  16. 畅游CTO洪晓健:BW和CE3游戏引擎各取所长
  17. 【洛谷P5514】永夜的报应【模拟】
  18. 【转载】广告联盟中CPC、CPS、CPA、CPM、CPV广告有什么区别
  19. 【STM32H7教程】第91章 STM32H7的FDCAN总线基础知识和HAL库API
  20. 基于51单片机的八路抢答器汇编语言Proteus仿真原理图程序

热门文章

  1. 颜色和心理年龄测试软件,超准的色彩心理学:选8个颜色,就可以测出你的心理年龄...
  2. ftp 501错误_分享,HTTP协议错误代码大全
  3. 如何在pycharm debug类似python -m的命令
  4. no response after clicking clone in github desktop
  5. 余承东宣布鸿蒙系统视频,余承东宣布鸿蒙系统开源:打造全球的操作系统
  6. 最新(2019)斯坦福CS224n深度学习自然语言处理课程(视频+笔记+2017年合集)
  7. 14英寸电脑长宽多少_华为MateBook 14 2020款 14英寸轻薄笔记本王者升级
  8. python实现新闻网站_Python 教你 4 行代码开发新闻网站通用爬虫
  9. 数据结构排序系列详解之四 快速排序
  10. 总结MySQL建表、查询优化实用小技巧