操作系统的地址、数据存储和大小端问题

news2024/11/20 9:13:51

文章目录

  • 基本概念
      • 什么是位,什么是字节?
      • 地址总线
      • 内存地址
        • 物理地址
        • 虚拟地址
    • 寻址空间
    • 存储单元
    • CPU位数
    • CPU寻址
    • 大端存储和小端存储
      • 原理
      • 为什么会有大小端模式的区分

基本概念

什么是位,什么是字节?

  • 位表示的是二进制位,一般称为比特,即0或1,是计算机存储的最小单位;
  • 字节是计算机中数据处理的基本单位,计算机进行数据存储的基本单位是字节。

地址总线

是CPU或有DMA能力的单元,用来沟通这些单元想要访问(读取/写入)计算机内存组件/地方的物理地址;简单来说地址总线是专门用来传送地址的,决定了将信息送往何处。

在这里插入图片描述

地址总线AB是专门用来传送地址的,由于地址只能从CPU传向外部存储器或I/O端口,所以地址总线总是单向三态的,这与数据总线不同。地址总线的位数决定了CPU可直接寻址的内存空间大小,比如8位微机的地址总线为16位,则其最大可寻址空间为216=64KB,16位微型机的地址总线为20位,其可寻址空间为220=1MB。一般来说,若地址总线为n位,则可寻址空间为2^n位。

举例来说:一个 16位元 宽度的位址总线 (通常在 1970年 和 1980年早期的 8位元处理器中使用) 到达 2 的 16 次方 = 65536 = 64 KB 的内存位址,而一个 32位单元位址总线 (通常在像现今 2004年 的 PC 处理器中) 可以寻址到 4,294,967,296 = 4 GB 的位址

总结

​ (1)CPU是通过地址总线来指定存储单元的。

​ (2)地址总线决定了cpu所能访问的最大内存空间的大小。

​ (3)地址总线是地址线数量之和。

内存地址

物理地址

内存中的数据是按照字节连续排布的,每个存储的数据都有一个索引与之对应,这个索引就是内存的地址。

在这里插入图片描述

如果我们的CPU想要访问内存,最朴素的想法就是CPU直接指定一个内存的地址就可以了,这个地址就是物理地址,即Physical Address,简称PA。
在这里插入图片描述

虚拟地址

直接使用物理地址虽然方便,但是在操作系统上直接用物理地址访问内存产生了一些问题,比如:

  1. 地址之间不隔离:难以避免一个程序恶意写入另一个程序所使用的内存。
  2. 内存容易不够用:当同时运行的程序比较多时,内存很容易就不够用了。
  3. 内存使用效率低:即使当一个程序执行完毕后释放了自己的内存,它留下的“内存空洞”不太可能完全匹配另一个程序所需要的内存大小,可能会产生一些难以利用的“内存碎片”

后来,人们设计出了虚拟地址来解决这些问题。虚拟地址和物理地址之间经过了一层转换,软件或者说CPU通过虚拟地址来访问内存,并不能看到真实的地址,而在中间起到转换作用的是一个专用的模块——MMU(Memory Management Unit)。

当CPU发起对一个虚拟地址的访问时,MMU会去查询页表,将虚拟地址转换为物理地址,这个过程如下图所示:

在这里插入图片描述

一般情况下MMU都是被集成在CPU内部的,所以以后的图中我们会把MMU放到CPU中。

页表本身也储存在内存当中,每个进程都有一份,也就是每个进程都有一份虚拟-物理地址的映射关系。当不同的进程访问相同的地址时,最终对应的内存的物理地址是不同的。

寻址空间

寻址空间一般指的是CPU对于内存寻址的能力。通俗地说,就是能最多用到多少内存的一个问题。数据在存储器(RAM)中存放是有规律的 ,CPU在运算的时候需要把数据提取出来就需要知道数据存放在哪里 ,这时候就需要挨家挨户的找,这就叫做寻址,但如果地址太多超出了CPU的能力范围,CPU就无法找到数据了。 CPU最大能查找多大范围的地址叫做寻址能力 ,CPU的寻址能力以字节为单位

对于32位操作系统而言,一共可以表示的地址范围为0~2^32次方,其中,每个地址对应内存中的一块数据。而内存中数据存储的最小单位为字节,也就是8bit为一个整体一起存储。所以在32位操作系统中,能寻址的内存大小为:

2^32 * 1B
=4 * 2^10 * 2^10 * 2^10 *1B

由于1KB = 2^10B
1MB = 2^10KB
1GB = 2^10MB

所以上式
=4GB

这也是为什么32位的CPU最大能搭配4G内存的原因 ,再多的话CPU就找不到了。

存储单元

1)8位二进制(1字节)作为一个存储单元,这是由历史原因决定的,早期的ASCII是7位,后来又有IBM的8位EBCDIC得到广泛使用

2)每一个存储单元有一个地址编号,地址总线可以确定每个地址单元的编号,所以CPU的最小可寻址单位就是1字节(Byte)

3)内存也是数据存储器的一种,所以内存也是以1字节为单位

CPU位数

32位CPU表示CPU一次最多能够处理数据的位数为32bit,即机器字长为32bit

CPU寻址

1)寻址空间一般指的是CPU对于内存寻址的能力。通俗地说,就是能最多用到多少内存的一个问题。

2)每个CPU的寻址能力是要看其地址线的数量,32位CPU一般有32根地址总线,那么就一共可以寻232个地址=也就是4x1024x1024x1024=4G个地址,1个地址对应1字节的存储单位,对应到内存上就是4GB(4GByte)

大端存储和小端存储

原理

  • 大端模式:就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

    (其实,大端模式才是我们直观上认为的模式,但实际并不是这样)

  • 小端模式:就是低字节排放在内存的低地址端,高位字节排放在内存的高地址端。
    在这里插入图片描述

下面我们看个例子

在这里插入图片描述

数据本来在内存中存储是由高地址到低地址的 ,但图中可以看到它是由高字节序到低字节序存储的,也就是小端存储。

为什么会有大小端模式的区分

在计算机系统中我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit,但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题,因此就导致了大端存储模式和小端存储模式。
例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。
我们常用的X86结构是小端模式,而KEIL C51则为大端模式,很多的ARM,DSP都为小端模式,有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。
我们常用的X86结构是小端模式,而KEIL C51则为大端模式,很多的ARM,DSP都为小端模式,有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

目前的Windows、linux系统下基本都是小端存储的模式

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

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

相关文章

C语言中用sizeof和strlen观察数组的变化2

目录 一.前言 二.用sizeof观察字符串数组的变化 代码 运行结果 结果解释 图解 三.用sizeof观察字符数组的变化 代码 注意 运行结果 图解 注意 证明 一.前言 数组名大部分情况下是首元素的地址,只有两种情况除外: sizeof(数组名&…

哈希桶的基本操作 || HashMap和HashSet介绍(手撕源码)

目录 前言: 哈希表介绍 哈希冲突 闭散列 开散列(哈希桶) 模拟实现哈希桶中插入和获取方法 代码实现 HashMap介绍 手撕源码 HashSet介绍 手撕源码 小结: 前言: 🎈一棵搜索树的最快查找数据的时间复杂度是O(…

Java------String类和正则表达式

String在设计时被定义成了final类(最终类),所以不能定义String类的子类,String用来表示字符串常量,是引用数据类型,一旦String类对象的字符序列被定义,那么这个字符序列的值是不能再变化的。 创…

今年十八,喜欢SQL注入

#1024程序员节|用代码,改变世界# 前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:被吉师散养的职业混子 🫒每日emo:怀揣…

牛客竞赛每日俩题 - Day5

DP贪心 年终奖_牛客题霸_牛客网 思路: 定义f(i,j)表示从左上角走到坐标(i,j)处能获得的最大奖励。 搜索所有从左上角走到右下角的路径,找到最优路径。 f(i,j)分三种情况: 第一列:f(i, 0) f(i-1, 0) board(i, 0) 如果…

Java:企业应该用Java构建供应链软件吗?

很多公司使用Java编程语言,Java是最流行的编程语言之一,它帮助开发人员简化复杂企业解决方案的应用程序开发过程。 供应链是零售和制造业的重要组成部分,6%的零售业公司使用Java,另一方面,4%的制造公司使用编程语言&am…

基于莱维飞行扰动策略的麻雀搜索算法-附代码

基于莱维飞行扰动策略的麻雀搜索算法 文章目录基于莱维飞行扰动策略的麻雀搜索算法1.麻雀优化算法2. 改进麻雀算法2.1 莱维飞行搜索机制2.2 莱维飞行扰动策略2.3 初始化混沌搜索机制3.实验结果4.参考文献5.Matlab代码6.Python代码摘要:为了解决麻雀搜索算法存在迭代…

(02)Cartographer源码无死角解析-(04) 熟悉bag文件,配置.launch与.lua文件,初步调参

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

算法 | 详解斐波那契数列问题

14天阅读挑战赛 本篇是学习了《趣学算法(第2版)》 第一章之后总结的。 上一篇讲到了等比数列求和问题,求Sn122223...263?S_n 1 2 2^2 2^3 ... 2^{63} ?Sn​122223...263?,该函数属于爆…

1024,我们节日

文章目录1024的前奏1024应该锻炼身体1024 ?为何是1024其他的1024代码有Bug,世界却温暖特殊的一类人群(一)特殊的一类人群(二)写在最后1024的前奏 写博文的时间是23号,距离1024这个标志性的节日…

趣学算法14天阅读|Day2

14天阅读挑战赛 文章目录前言什么是算法?算法复杂度如何评定好算法案例案例一:棋盘的麦子案例二:兔子数列总结前言 📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端中级工…

@AutoConfigurationPackage注解详解

AutoConfigurationPackage是在springboot启动类注解SpringBootApplication下的EnableAutoConfiguration下。AutoConfigurationPackage作用是指定springboot扫描包,默认就是扫描启动类同包下的类。可以通过AutoConfigurationPackage来附加其他路径,然后sp…

asp.net园林绿化服务交易网站

本设计的目的是通过对园林绿化的初步了解,在巩固网站设计所学知识的基础上。运用于实践,在实践中强化理论知识,做到理论联系实践。在设计中学会搜集资料地方法,学会查阅设计规程。掌握设计步骤,同时培养创新能力&#…

【图像评价】基于matlab GUI图像评价系统【含Matlab源码 2185期】

一、图像质量评价 图像质量评价对图像处理算法的可行性分析以及某类算法达成效果的比较都起着非常重要的指导作用。随着图像处理技术的发展,对于图像质量评价的研究也日益深入,新的评价指标和评价算法不断涌现,共同推动了图像质量评价的进步…

【模型训练】YOLOv7旋翼无人机检测

YOLOv7旋翼无人机检测 1、YOLOv7算法旋翼无人机检测模型训练2、YOLOv7模型模型评估3、模型和数据集下载1、本项目采用YOLOv7算法实现对空中旋翼无人机的检测,在一万多张旋翼无人机检测数据集中训练得到,我们训练了YOLOv7模型,经评估我们得出了各个模型的评价指标; 2、目标类…

研发效能工程实践开篇

背景 随着技术的发展,大至一线互联网公司、小至几十人研发团队的公司都开始开展devops运动。大公司有能力自研,小公司则采用开源解决方案。如何实施devops业界已经有非常成熟的方案,所以本系列不再谈devops工具链以及如何实施。本系列想谈谈…

初识C++ - 类与对象(中篇·下半)

目录 赋值运算符重载 以下是一个日期类的运算符重载的案例(重点) 关于流插入与流提取的使用 方法一:定义与声明分离 方法二:使用内联函数 const成员 概念 关于上述日期类代码为什么需要在函数后面加入const 取地址及const取地址操作符重载 …

5G核心网技术基础自学系列 | 网络切片

书籍来源:《5G核心网 赋能数字化时代》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G核心网技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 支持网络切片是设计5G架构的主要驱…

【牛客刷题--SQL篇】必会的常用函数之条件函数SQL26计算25岁以上和以下的用户数量(多种写法)

💖个人主页:与自己作战 💯作者简介:CSDN博客专家、CSDN大数据领域优质创作者、CSDN内容合伙人、阿里云专家博主 💞牛客刷题系列篇:【SQL篇】】【Python篇】【Java篇】 📌推荐刷题网站注册地址&a…

基于WEB的二维码生成系统设计与实现(Asp.net)

目 录 1 引言 6 2 二维码的生成原理 6 2.1基础知识 6 2.1.1定位图案 7 2.1.2功能性数据 8 2.1.3数据码和纠错码 8 2.2数据编码 8 2.3结束符和补齐符 9 2.3.1补齐码(Padding Bytes) 9 2.3.2纠错码 10 2.4最终编码 11 2.4.1穿插放置 11 2.4.2Remainder Bi…