内存的基础知识-第四十天

目录

什么是内存?内存的作用

常用的数量单位

指令的工作原理

思考

三种装入方式

绝对装入

可重定位装入(静态重定位)

动态运行时装入(动态重定位)

写程序到程序运行 

编译和链接

链接的三种方式

本节思维导图


什么是内存?内存的作用

基本概念:暂时存放CPU中的运算数据,以及与硬盘等 外部存储器 交换的数据

作用:缓和CPU与硬盘之间的速度矛盾,程序执行前需要先放到内存中才能被CPU处理

        原本数据是放在外存中进行处理的,但是外存处理速度很慢,CPU的处理速度很快,所以引入内存概念,将要处理的数据放入内存中让CPU进行快速处理

思考:多道程序环境下,系统中会有多个程序并发执行,也就是说会有多个程序的数据需要放到内存中,那么,如果区分各个程序的数据是放在什么位置?

答案:给内存的存储单元编写地址

        位、字节、字是计算机数据存储的单位。位是最小的存储单位,每一个位存储一个1位的二进制码,一个字节由8位二进制组成。而字通常为16、32或64个二进制位组成。

常用的数量单位

  • 2^10 = 1k(千)
  • 2^20 = 1M(兆,百万)
  • 2^30 = 1G(十亿,千兆)

        一台手机有4GB内存,是指该内存中可以放4*2^30个字节,如果按字节编址,就有4*2^30 = 2^32个内存单元,这些内存单元需要2^32个地址才能一一标识,所以地址需要32个二进制位来标识(0~2^32-1)

指令的工作原理

指令(操作码,与该操作相关的必要参数,与该操作相关的必要参数...) 

  1. 输入代码x=x+1.代码被编译成三条指令(机器码),每条指令都有其相应的作用
  2. 程序运行时,这些指令就会被放入内存的程序段中,等待上CPU
  3. 指令1在CPU上执行时,CPU发现操作码代表的意思是数据传送指令:将地址为01001111中存放的数据放入地址为00000011的寄存器中,然后执行指令2
  4. 指令2在CPU上执行时,CPU发现操作码代表的意思是加法指令:将地址为00000011的寄存器中存放的数据10加上1(00000001),此时该寄存器中存放的数据是11,然后执行指令3
  5. 指令3在CPU上执行时,CPU发现操作码代表的意思是数据传送指令:将地址为00000011的寄存器中存放的数据放入地址为01001111的内存单元中
  6. 至此完成x=x+1这段代码

(01001111这些码都是瞎编的,目的是为了方便理解) 

结论:我们写的代码在执行后会要翻译成CPU能识别的指令(这些指令会告诉CPU应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。在这个例子中,我们默认让这个进程的相关内容从地址#0开始连续存放,指令中的地址参数直接给出了变量x的实际存放地址(物理地址)

思考

如果这个进程不是从地址#0开始存放的,会影响指令的正常执行吗

利用装入模块中提供的逻辑地址

起始为#0:

起始不为#0: 

那么如何将指令中的逻辑地址最终转换为物理地址?

三种装入方式

绝对装入

概念:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码,装入程序按照装入模块中的地址,将程序和数据装入内存

缺点:只适用于单道程序环境(不存在操作系统时期使用的方法),可以移植性低(将该代码放在另一个操作系统中时,如果绝对地址为179的位置不能使用就会出错)

可重定位装入(静态重定位)

概念:编译、链接后的装入模块的地址都是从0开始的。指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行”重定位“,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)

缺点:一个作业在装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请空间

动态运行时装入(动态重定位)

概念:编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址(这种方式主要是利用了一个重定位寄存器)

重定位寄存器:存放装入模块存放的起始地址

 如果想要从200开始,就将重定位寄存器中存放的起始地址修改为200即可

优点:

  1. 允许程序在内存中发生移动
  2. 可将程序分配到不连续的存储区中
  3. 在程序运行前只需要装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存
  4. 便于程序段的共享,可以向用户提供一个比存储空间大很多的地址空间

写程序到程序运行 

编译和链接

链接的三种方式

本节思维导图

~over~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS Code 如何调试Python文件

VS Code中有1,2,3处跟Run and Debug相关的按钮, 1 处:调试和运行就不多说了,Open Configurations就是打开workspace/.vscode下的lauch.json文件,而Add Configuration就是在lauch.json文件中添加当前运行Python文件的Configuratio…

Flyweight享元/共享模式(对象性能)

Flyweight 链接:享元模式实例代码 解析 目的 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然…

前端开发加速器:十个VSCode插件精选

前端开发是一个不断发展的领域,随着技术的进步,工具也在不断更新。Visual Studio Code(VSCode)是前端开发者广泛使用的编辑器之一,得益于其强大的插件系统,可以帮助开发者提升工作效率。以下是十个对于前端…

1*2*3+3*4*5+...+99*100*101python,1加到100的程序算法python

大家好,本文将围绕python中123一直加到100程序怎么写展开说明,计算123456...100的值python是一个很多人都想弄明白的事情,想搞清楚计算1-23-45 … -100的值python需要先了解以下几个事情。 今天下午上python课的时候,老师留了一个…

广播及代码实现

广播(Broadcast)是一种网络通信方式,它允许一台设备向网络中的所有其他设备发送消息。广播通常用于在网络上传递一些信息,让所有设备都能接收并处理。在广播中,通信的目标是整个网络而不是特定的单个设备。 向子网中…

SpringCloud微服务安全之API审计日志功能实现

SpringCloud微服务安全之API审计日志功能实现 1.审计功能介绍2.记录的实体类设计3.保存审计记录到数据库的工具4.审计功能实现1.审计功能介绍 审计日志 定义:谁,在什么时间,干了什么事。位置:认证之后,授权之前。这样就知道是谁在访问,拒绝掉的访问也能被记录。如果放在认…

Text-to-SQL小白入门(十一)DAIL-SQL教你刷Spider榜单第一

论文概述 学习这篇Text2SQLLLM的benchmark论文前,可以先学习一下基础的Text2SQL知识。 可以参考GitHub项目:GitHub - eosphoros-ai/Awesome-Text2SQL: Curated tutorials and resources for Large Language Models, Text2SQL, Text2DSL、Text2API、Text2…

Transforer逐模块讲解

本文将按照transformer的结构图依次对各个模块进行讲解: 可以看一下模型的大致结构:主要有encode和decode两大部分组成,数据经过词embedding以及位置embedding得到encode的时输入数据 输入部分 embedding就是从原始数据中提取出单词或位置&…

腾讯云2024年最新优惠活动整理汇总

腾讯云作为国内领先的云计算服务提供商,一直致力于为用户提供优质、高效的服务。为了更好地满足用户需求,腾讯云经常推出各种优惠活动,本文将对腾讯云最新优惠活动进行整理汇总,帮助用户更好地了解和利用这些福利。 一、腾讯云新用…

根本记不住MySQL进阶查询语句

1 MySQL进阶查询 1.1 MySQL进阶查询的语句 全文以数据库location和Store_Info为实例 ---- SELECT ----显示表格中一个或数个字段的所有数据记录 语法:SELECT "字段" FROM "表名"; select 列名 from 表名 ; ---- DISTINCT ----不显示重复的数…

LINUX加固之命令审计

一、前言 在LINUX安全范畴中,安全溯源也是很重要的一个环节。对主机上所有曾操作过的命令详细信息需要有一份记录保存,当系统遭受破坏或者入侵,拿出这份记录,可以帮助定位一些可疑动作。 很多系统通常都会配置安全堡垒机&#xff…

ROS 系列学习教程(总目录)

ROSLearning 一、ROS概览 1.1 ROS简介 To be continued… 1.2 ROS安装 Ubuntu 安装 ROS 详细教程(以最后一个ROS1版本Noetic为例) 1.3 ROS Hello World ROS创建工作空间添加包并编译 ROS Hello World 1.4 ROS架构 ROS架构:文件系统 …