内存分段详解

news2024/12/28 18:39:54

内存分段

1.1 分段机制概述

1.1.1 分段机制产生的原因

对于分段机制,要从Intel的微处理器的8086开始说起,刚开始内存空间比较小,内存寻址采用的是直接访问物理地址的方式。由于技术的发展,计算机做的事情越来越多,程序也越来越大,为了更大的内存空间,把地址总线扩展到20位。但是,对于内存设计,一个很尴尬的问题产生了,之前的设计CPU的ALU宽度只有16位,也就是说,ALU不能访问20位的地址空间,那时就设计了段机制来处理这种情况。为了坚持这种兼容性,386依然运用段机制,直至现在的64位处理器已经看不到段机制的身影。

1.1.2 硬件分段机制

在内存分段管理中,程序是由若干个逻辑分段组成的,如可由代码分段、数据分段、堆段、栈段组成。不同的段是有不同的属性的,所以就用分段的形式把这些段分离出来。

分段机制下的虚拟地址由两部分组成,段选择子和段内偏移量。

  • 段选择子就保存在段寄存器里面。段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址、段的界限和特权等级等。

  • 虚拟地址中的段内偏移量应该位于 0 和段界限之间,如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址。

内存分段下的地址映射过程:

  • 虚拟地址由段选择子和段偏移量组成;
  • 通过段选择子中的段号从段表中找到对应的段内描述符;
  • 段描述符里提供了段基址,加上虚拟地址上的段偏移量得到物理地址;

1.1.3 不足之处

产生外部内存碎片。

内存交换的效率低。

1.2 分段机制

1.2.1 段选择子

段选择子(又称段选择符)是段的一个十六位标志符,段选择子并不直接指向段,而是指向段描述符表中定义段的段描述符。

在这里插入图片描述

段选择子包括三个字段的内容:

  • 请求特权级RPL:0代码核心态,1代表用户态;
  • 表指引标志TL:0表示描述符在GDT中,1表示描述符在LDT中;
  • 索引值:给出了描述符在GDT或LDT表中的索引项号。

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

1.2.2 段描述符

段描述符表是段描述符的一个数组,如下图所示,描述符表的长度可变,最多可以包含8192个8byte描述符。有两个描述符表,全局描述符表GDT(Global descriptor table),局部描述符表LDT(Local descriptor table),由段选择符的bit[2]会选择到对应的GDT表还是LDT表去拿到对应的段基址。

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

段描述符通用格式如下:

了解了这个过程,我们来总体梳理下,如果使用分段机制,那么怎么使虚拟地址转到对应的物理地址空间呢?转化过程如下图所示 :

1、取出虚拟地址空间中的段选择子,根据TI位判断段描述符是存储在GDT还是LDT中;

2、段选择子中的index*8,也就是左移3位,就是段描述符在GDT中的位置,再加上GDT的基地址,就是段描述符的地址,从而取出段描述符;

3、段描述符中保存了该段的基地址,加上虚拟地址中的偏移量就是对应到的物理地址空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Connection closed, EOF detected错误

生产遇到了这个问题 原因:两个http网址,即没有启用SSL 解决方案 在 weblogic的启动文件 bin里面 的 setDomainEnv.sh 这个文件 。 加上这一句 set JAVA_OPTIONS%JAVA_OPTIONS% -DUseSunHttpHandlertrue

IS230STAOH2A开关柜的基本特征是什么以及开关柜如何用于电力系统的保护

​ IS230STAOH2A开关柜的基本特征是什么以及开关柜如何用于电力系统的保护 什么是开关柜 开关设备是用于开关控制和保护电路和设备的装置,电力在我们现代文明中的重要性非常高,因此为了获得持续的电力,我们必须确保电力系统免受大故障的影响…

电脑死机的常用排查思路

在工作过程中难免会遇到死机的问题,排查起来并不是那么轻松,下面分享一下我排查死机问题的思路。 判断是软件还是硬件级别的故障 在死机时先尝试移动鼠标,按大小写切换键或数字键盘锁定键,看看光标是否可以移动,大小…

LabVIEWCompactRIO 开发指南15 托管和监控网络发布的共享变量

LabVIEWCompactRIO 开发指南15 托管和监控网络发布的共享变量 托管 要使用网络发布的共享变量,共享变量引擎必须在分布式系统中的至少一个节点上运行。网络上的任何节点都可以读取或写入共享变量引擎发布的共享变量。所有节点都可以在不安装共享变量引擎的情况下…

【C语言】有符号整型(int) 与 无符号整型(unsigned int)的运算

/*有符号整型(int) 与 无符号整型(unsigned int)的运算1.全局变量,静态变量都是放在静态区,不初始化的时候,默认值为0。局部变量,放在栈区,不初始化的时候,默认值是随机值,编译器会报错2.int 与 unsigned i…

Linux知识点 -- Linux权限

Linux知识点 – Linux权限 文章目录 Linux知识点 -- Linux权限一、shell命令及运行原理二、Linux权限1.概念2.文件类型和访问权限3.更改文件的权限4.没有权限的情况5.更改文件的拥有者和所属组6.添加用户到信任列表7.umask权限掩码8.粘滞位 一、shell命令及运行原理 Linux严格…

【头歌】数组-稀疏矩阵的转置

数组-稀疏矩阵的转置 第1关:一般转置算法 任务描述 本关任务:实现稀疏矩阵的转置操作(采用一般转置算法,即按列序转置)。 相关知识 为了完成本关任务,你需要理解:1. 矩阵的压缩存储&#x…

np读取txt、csv文件的数据

目录 1、基础参数 2、参数详解 3、应用参数示例 机器学习中使用np.loadtxt()可以高效的导入数据,np.loadtxt()适合.txt文件和.csv文件。但是它默认读取float类型的值。 1、基础参数 numpy.loadtxt(fname, dtype, comments#, delimiterNone, convertersNone, s…

11. 类的继承

一、为什么要用继承 一个简化的Student类 class Student { private:string name;string studentID; public:string getName(){ return name; }void setName(string newName) { name newName; }string getStudentID(){ return studentID; }void setStudentID(string newID) {…

操作系统基础知识介绍之内存技术和优化(一)(包含SRAM和DRAM、SDRAM、GDRAMs)

使用 SRAM 可以满足最小化高速缓存访​​问时间的需要。 然而,当缓存未命中时,我们需要尽快将数据从主存中移出,这就需要高带宽内存。 这种高内存带宽可以通过将构成主内存的许多 DRAM 芯片组织成多个内存条并使内存总线更宽来实现&#xff0…

数字孪生可视化开发工具在各行业中的应用

数字孪生就是指在信息化平台内模拟物理实体、流程或者系统,即打造一个现实场景的数字化孪生双胞胎。出于成本和周期考虑,快速低成本搭建数字孪生系统成为中小型企业的期望,深圳华锐视点研发的UE4数字孪生编辑器,是一种能够帮助用户…

【Shell脚本】Linux安装Nginx以及开机自启

目录 一、Linux安装Nginx脚本1、把编写好的安装Nginx脚本放置到nginx.sh文件中2、在检查网络的时候,这里的IP地址,填写的需要安装Nginx服务器的IP地址3、这里的端口号可按照自己的需要进行修改4、安装Nginx脚本 二、Nginx开机自启 一、Linux安装Nginx脚本…

API网关|JD|pinduoduoAPI接入

API网关是什么 在日常工作中,不同的场合下,我们可能听说过很多次网关这个名称,这里说的网关特指API网关(API Gataway)。字面意思是指将所有API的调用统一接入API网关层,由网关层负责接入和输出。 那么在什…

相遇于此,“相交链表”问题的两种思路

本篇博客会讲解力扣“160. 相交链表”的解题思路,这是题目链接。 老规矩,先来审题。这道题的题干有点长,简而言之,就是判断2个链表是否相交,如果相交就返回第一个相交结点,不相交就返回NULL。看看题目原文…

轻松打造完美客户服务系统,这4个关键点不容错过

客户服务对于一个企业来说非常重要,有以下几个原因: 1、建立客户忠诚度:通过提供高质量的客户服务,可以增加客户满意度和忠诚度。这将有助于企业保持竞争优势并吸引新客户。 2、提高客户满意度:客户对企业的服务感到…

MySQL 升级到 8.0 变慢问题分析

1. 背景介绍 前段时间,客户线上 MySQL 版本从 5.7.29 升级到 8.0.25。 升级完成之后,放业务请求进来,没到一分钟就开始出现慢查询,然后,慢查询越来越多,业务 SQL 出现堆积。 整个过程持续了大概一个小时&…

Java学习笔记 --- Stream流

一、体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得到的集合 …

使用群晖NAS Mail Server搭建个性化邮件系统

准备工作 一个顶级域名可以获取公网IP的宽带路由使用DDNS功能,或使用群晖自带DDNS,解析顶级域名可以做“端口映射”的路由器 搭建开始 step1:安装套件 登录群晖NAS,打开[套件中心],搜索“mail”,安装如…

idea-easyYapi的使用

链接: EasyYapi官方文档. 网上搜到的easyYapi基本上都是千篇一律,比较浅,稍微有点定制的东西都搜不到,帮此把自己的一些心得写出来,后续有新发现也会继续更新 第一步:安装插件 第二步:配置数据 yapi的t…

运营商大数据助力贷款行业快速精准获取意向客户

流量,是企业发展的一大痛点。随着市场格局不断变化,获取流量越来越成为企业摆脱发展困局的一种重要途径,如何在庞大的市场竞争中,实现自身的流量突破,也成为企业所要解决的首要问题。 贷款行业的竞争也很强烈&#xf…