什么是内存?有何作用
内存是用于存放数据的硬件,程序执行前需先放到内存中才能被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开始,指令中的地址是逻辑地址,但区别是动态重定位在装入后不会立即将逻辑地址转化为物理地址,他会在运行时,才转换。且动态重定位支持移动,因为它有重定位寄存器支持(存放装入模块存放的起始地址)
## 链接的三种方式
静态链接:在装入前就将各个模块链接,之后不再拆开
装入时动态链接:装入时立即链接
运行时动态链接:装入后,要运行的时候再链接
## 内存管理
操作系统作为资源的管理者,当然也要管理内存,如下是它所需要做的,未展开叙述的就是后续会补上的内容
内存空间的分配与回收 内存地址的扩充(实现虚拟性) 地址转换(三种转换方式)
存储保护:保证各进程在自己的内存空间中运行,不会越界访问
两种方式:设置上下限寄存器;利用重定位寄存器,界地址寄存器(逻辑地址的最大值)进行判断