内存的基础知识

什么是内存?有何作用

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

内存

若计算机“按字节编址”,则每个存储单元大小为1个字节,即8位2进制

若字长为16的计算机“按字编址”,则每个存储单元大小为1字,即16位2进制

2的10次方=1K(千)

2的20次方=1M(兆,百万)

2的30次方=1G(千兆,十亿)

例如一台电脑有4GB内存,是指该内存中可存放4*2的30次方个字节,如果是按字节编址,也就是有2的32次方个存储单元(地址长度)(0~2的32次方-1)

逻辑地址&物理地址

逻辑地址:一般编译产生的都是逻辑地址(相对地址),即可通过起始地址算出绝对地址

物理地址:在内存中实际存放的地址,又叫绝对地址

从写程序到程序运行

内存

编译就是由高级语言到机器语言

逻辑地址到物理地址的转换(装入)

绝对装入(还未产生操作系统):在编译时,若知道程序将放到内存中的哪个位置,编译程序就产生绝对地址的目标代码,即装入时直接按模块里给的地址之机装到相应位置即可

只适用于单道程序环境

通常情况下,这个绝对地址是编译或汇编再转换成的,也可以是程序员直接赋予

静态重定位(用于早期的多道批处理操作系统):编译,连接后的模块,装入模块的地址都是从0开始,里面指令的地址是相对地址,在装入时对地址进行重定位,获得物理地址(转换是在装入时一次完成的)

静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入,且装入后就不能移动了

动态重定位(用于现代操作系统):现在的计算机系统一般都采用这种方式,在编译,链接也和静态的一样地址都从0开始,指令中的地址是逻辑地址,但区别是动态重定位在装入后不会立即将逻辑地址转化为物理地址,他会在运行时,才转换。且动态重定位支持移动,因为它有重定位寄存器支持(存放装入模块存放的起始地址)

## 链接的三种方式

静态链接:在装入前就将各个模块链接,之后不再拆开

装入时动态链接:装入时立即链接

运行时动态链接:装入后,要运行的时候再链接

## 内存管理



操作系统作为资源的管理者,当然也要管理内存,如下是它所需要做的,未展开叙述的就是后续会补上的内容

内存空间的分配与回收 内存地址的扩充(实现虚拟性) 地址转换(三种转换方式)

存储保护:保证各进程在自己的内存空间中运行,不会越界访问

两种方式:设置上下限寄存器;利用重定位寄存器,界地址寄存器(逻辑地址的最大值)进行判断

-------------本文结束感谢您的阅读-------------