内存访问为什么要分段?

news2024/11/19 15:23:43

内存分段是处理器为访问内存而设计的机制,称为内存分段机制。

简单的内存知识

  • 内存结构(连续且地址依次升高
    在这里插入图片描述
  • 访问方式
    内存是随机读写设备,即访问其内部任何处,不需要从头开始找,只要直接给出其地址便可。如访问内存 0XC00,只要将此地址写入地址总线便可。

pro:那内存访问为什么要分段?

原因1:重定位

分段是从 CPU 8086 开始的,当时CPU 和寄存器等宽度都是 16 位的。16 位寄存器意味着其可存储的数字范围是2的16次方,即 64 KB,8086 的 CPU 还没有 虚拟地址,只有物理地址,也就是说,如果两个相同的程序编译出来的地址相同,那么这两个程序是无法同时运行的。为了解决这个问题,操作系统设计人员提出了让 CPU 使用 段基址 + 段内偏移 的方式来访问任意内存。

重定位的定义:简单来说就是将程序中指令的地址改 成另外 个地址,但该地址处的内容还是原地址处的内容。

所以,CPU 采用 段基址+段内偏移地址的形式访问内存,就需要专门提供段基址寄存器,这些是 cs ds,es 。程序中需要用到哪块内存,只要先加载合适的段到段基址寄存器中,再给出相对于该段基址的偏移地址便可, CPU 中的地址单元会将这两个地址相加后的结果用于内存访问,送上地址总线实现访存。

在这里插入图片描述

段重定位演示

简单来说,就是程序分了段,把整个段平移到任何位置后,段内的地址相对于段基址是不变的,无论段基址是多少,只要给出段内偏移地址, CPU 就能访问到正确的指令。于是加载用户程序时,只要将整个段的内容复制到新的位置,再将段基址寄存器中的地址改成该地址,程序便可准确无误地运行。

原因2:访问到所有内存

8086 的 CPU 有 20 根地址总线,最大的寻址能力是 1MB.

段基址所在的寄存器宽度只有 16 位,最大为 64 KB 的寻址能力.

64 KB 显然不能满足 1MB 的最大寻址范围,所以就要把内存分段,每个段的最大寻址能力是 64KB,但是仍旧不能达到最大 1 MB 的寻址能力,所以这时候就需要 偏移地址的辅助,偏移地址也存入寄存器,同样为 64 KB 的寻址能力,这么一看还是不能满足 1MB 的寻址,所以 CPU 的设计者对地址单元动了手脚,将段基址左移 4 位,然后再和 16 位的段内偏移地址相加,就达到了 1MB 的寻址能力。所以内存分段的第二个目的就是能够访问到所有内存。

参考资料

  • 《操作系统真象还原》

  • 内存为什么要分段?

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

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

相关文章

【项目启动】IDEA新建项目同步到Github

文章目录SSH秘钥检查GitHub创建项目IDEA创建项目IDEA同步GitHubSSH秘钥检查 目前,github不支持https形式的远程同步方式,如果使用https形式进行同步会报以下错误: remote: Support for password authentication was removed on August 13, 2…

C# WinForm CAD文件显示(dxf,dwg显示)

找遍全网很难找到开源dxf显示控件(C# winform),大部分控件都需要收费,对于做软件开发很麻烦 C# WPF倒是有nefdxfZoomableCanvas可以实现,确实很方便,这个在github:https://github.com/shao200/WpfDxfViewer上也能找到开…

c++11 标准模板(STL)(std::deque)(六)

定义于头文件 <deque> std::deque 容量 检查容器是否为空 std::deque<T,Allocator>::empty bool empty() const; (C11 前) bool empty() const noexcept; (C11 起) (C20 前) [[nodiscard]] bool empty() const noexcept; (C20 起)检查容器是否无元素&#xff0c…

大数据NiFi(四):NiFi单节点安装

文章目录 NiFi单节点安装 一、介绍与下载 二、单节点安装

JavaWeb:JSP概述及原理

1&#xff0c;JSP概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java服务端页面。 是一种动态的网页技术&#xff0c;其中既可以定义 HTML、JS、CSS等静态内容&#xff0c;还可以定义 Java代码的动态内容&#xff0c;也就是 JSP HTML Java…

javaee之SpringMVC2

SpringMVC返回值类型以及响应数据类型 1.搭建环境 还是按照springMVC1中的搭建环境进行搭建。这里就不多说。 响应之返回值是String类型 我们先来创建一个User类 User,java package com.pxx.domain;import java.io.Serializable;public class User implements Serializab…

PS 矩形选区工具(1)基本用法 生成图层 选区方式演示讲解

我们先打开PS 然后打开一个项目 我们可以选择一个图层 然后 点击左上角 图像>调整>色相.饱和度 弹出操作框之后 我们拉动色相的色条 对应视图就会发生主体颜色的变化 然后 我们打开一个只有一个图层的图片项目 我们对这个图层操作 整个都会变化 但如果我只是想改其中…

后悔升级iPhone?教你如何把iOS15降回iOS14

还在使用betabeta版iOS 15和iPadOS 15吗&#xff1f;如果你出于某种原因准备返回稳定的iOS 14&#xff0c;本篇文章将会为你详细介绍如何从 iOS 15 beta版降级到 iOS 14&#xff0c;这对于有一定动手能力的人来说并不难。 如何从 iOS 15 beta版降级到 iOS 14 重要提示&#xf…

Spring是怎么回事?新手入门就看这篇吧

前言 今天壹哥给大家介绍一套开源的轻量级框架&#xff0c;它就是Spring。在给大家详细讲解Spring框架之前&#xff0c;壹哥先给大家介绍Spring框架的主要内容&#xff1a; Spring的基本概念 Spring核心思想之ioc Spring核心思想之aop Spring框架对事务的支持 在本系列文章…

解决前端如何使用插件crypto-js进行AES加密方式数据加密

一、问题 目录 一、问题 1.1 问题概述 1.2 操作过程描述 二、解决 2.1 说明 2.2 crypto-js安装 2.3 使用crypto-js 1.1 问题概述 如何进行加密和解密以及采用什么方式进行加密解密是本文主要解决的内容~ 之前有小伙伴问了关于加密解密的事&#xff0c;确实是的&#xff…

pdfbox / XSL + FOP 转换 PDF文档

XSL-FO是XSL Formatting Objects的缩写&#xff0c;它是一种用于文档格式的XML 置标语言。XSL-FO是XSL的一部分&#xff0c;而XSL是一组定义XML数据转换与格式的W3C技术。XSL的其他部分有XSLT与XPath。 XSL-FO是用于格式化XML数据的语言&#xff0c;全称为Extensible Styleshe…

python基础讲解 02

人工智能学习基础四剑客&#xff08;库&#xff09;Numpy ( Numerical Python)使用创建随机数组查看数组的属性数组与标量之间的计算四剑客&#xff08;库&#xff09; Python被大量应用在数据挖掘和深度学习领域,其中使用极其广泛的是Numpy&#xff08;N维数组对象和向量运算&…

Nessus学习

攻击主机&#xff1a; Kali 192.168.11.106靶机&#xff1a;windows server 2008 r2 192.168.11.134 x64 32位nessus实验原理&#xff1a;利用漏洞扫描器能够自动应用漏洞扫描原理&#xff0c;对目标主机安全漏洞进行检测&#xff0c;附带识别主机漏洞的特征库的功能&#xf…

使用客户端证书登录MySQL

使用客户端证书登录MySQL登录MySQL具有安全性高、不用输入密码的优点&#xff0c;这里说明生成证书和登录的过程。 实验环境是Linux上的的MySQL 8.0.31社区版。 生成证书 使用openssl req创建X.509证书&#xff0c;下面的命令创建有效期10年的私钥&#xff0c;使用man req可…

Kali Linux中shutdown指令的用法3-3

3 TIME介绍 TIME是shutdown指令的第二个参数&#xff0c;用来表示实现关机计划的时间&#xff0c;如果不指定TIME&#xff0c;则默认是1分钟之后实现关机计划。 3.1 通过hh:mm格式指定时间 可以通过hh:mm格式指定关机的具体时间&#xff0c;其中hh表示小时&#xff0c;mm表示…

CredSSP加密数据库修正

新部署的机器&#xff0c;远程登录时&#xff0c;提示如下&#xff1a; 原因是注册表里面缺少东西&#xff0c;新建一个文本文件&#xff0c;复制如下内容保存&#xff0c;然后将保存的文本文件保存为后缀为reg的可执行文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_…

【Django项目开发】权限相关的模型设计(五)

文章目录一、什么是权限二、RBAC模型三、权限模型类设计1、需要设计那些字段2、特别注意四、角色模型类设计1、需要定义的字段有2、 多对多模型类设计(重点)五、用户模型类设计(前面已经设计好了)六、菜单模型类设计(前面已经设计好了)七、总结:上面4个表的关联关系为:如下八、…

Spring注解详解(使用注解的方式完成IOC)

补充&#xff1a;xml配置 最开始(Spring 1.x)&#xff0c;Spring都是通过xml配置控制层(controller)--业务逻辑层(service)--dao层--数据源的关系&#xff0c;但是比较复杂 Spring 2.x的时候&#xff0c;随着JDK1.5支持注解的方式&#xff0c;实现了 "xml 注解" 的开…

Vue自定义指令,自定义插件,过滤器,混入,nextTick

自定义指令&#xff1a;自己定义类似指令的技术。V-开关的特殊属性&#xff0c;是一个对象&#xff0c;自己定义其作用。 指令: v-特殊属性 * vue内置指令: v-html v-text v-pre * v-bind v-on v-if v-show v-for …

我的前端学习经历

我最近在开发一个NFT相关的Saas&#xff0c;部分截图如下&#xff1a;这是我一段时间前&#xff0c;朋友圈发的图&#xff0c;现在Saas在页面上有点变化&#xff0c;但懒得再截图了。客观而言&#xff0c;布局还可以&#xff0c;这一套的技术栈是&#xff1a;React TailwindCs…