内存的基础知识

1. 内存的基础知识

在这里插入图片描述

2. 什么是内存,有何作用

内存是用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理。

思考:在多道程序环境下,系统中会有多个程序并发执行,也就是说会有多个程序的数据需要同时放到内存中。那么,如何区分各个程序的数据是放在什么地方的呢?
方案:给内存的存储单元编地址

内存地址从0开始,每个地址对应一个存储单元

在这里插入图片描述

内存中也有一个一个的“小房间”,每个小房间就是一个“存储单元”
如果计算机“按字节编址”,则每个存储单元大小为1字节,即1B,即8个二进制位
如果字长为16位的计算机“按字编址”,则每个存储单元大小为1个字:每个字的大小为16个二进制位

3.几个常用的数量单位

一台手机/电脑有4GB内存, 是什么意思?

是指该内存中可以存放4x2^30个字节。如果是按字节编址的话,也就是有4*2的30次方 =2的32次方个“小房间”
这么多“小房间”,需要2^32个地址才能一一标识, 所以地址需要用32个二进制位来表示(0~ 2的32次方-1)

在这里插入图片描述

4. 逻辑地址vs物理地址

宿舍四个人一起出去旅行,四个人的学号尾号分别是0、1、2.、3。
住酒店时酒店给你们安排了4个房号相连的房间。四个人按学号递增次序入住房间。比如0. 1. 2. 3号同学分别入住了5、6、7、8号房间。
四个人的编号0. 1. 2. 3其实是一个“相对位置”,而各自入住的房间号是一个“绝对位置”.
只要知道0号同学住的是房号为N的房间,那么M号同学的房号一定是N+M.
也就是说,只要知道各个同学的“相对位置”和“起始房号”,就一定可以算出所有同学的“绝对位置”

指令中的地址也可以采用这种思想。编译时产生的指令只关心“相对地址”,实际放入内存中时再想办法根据起始位置得到“绝对地址”。

Eg:编译时只需确定变量x存放的相对地址是100 ( 也就是说相对于进程在内存中的起始地址而言的地址)。CPU想要找到x在内存中的实际存放位置,只需要用进程的起始地址+100即可。

相对地址又称逻辑地址,绝对地址又称物理地址。

5. 从写程序到程序运行

在这里插入图片描述
编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
装入(装载) :由装入程序将装入模块装入内存运行

6. 装入的三种方式

绝对装入:

绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。
Eg:如果知道装入模块要从地址为100的地方开始存放。

在这里插入图片描述

绝对装入只适用于单道程序环境。

程序中使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。通常情况下都是编译或汇编时再转换为绝对地址。

静态重定位

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

在这里插入图片描述

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

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

在这里插入图片描述

采用动态重定位时允许程序在内存中发生移动。

重定位寄存器:存放装入模块存放的起始位置
并且可将程序分配到不连续的存储区中;在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存:便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。

7. 链接的三种方式

链接的三种方式:

  1. 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
    2.装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
    3.运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。

在这里插入图片描述

8. 小结

在这里插入图片描述

发布了168 篇原创文章 · 获赞 1 · 访问量 2964

猜你喜欢

转载自blog.csdn.net/yrx420909/article/details/104475874