内存的基础知识
内存?
是用于存放数据的硬件
内存作用
程序执行前需要先放到内存中才能被cpu处理
存储单元
在多道程序环境下,系统中会有多个程序并发的执行,也就是说会有多个程序和数据需要同时放到内存中,那如何区分各个程序的数据放在什么地方?
给内存的存储单元编址
如果计算机“按字节编址”,则每个存储单元大小为1字节,即1B,即8个二进制位
如果字长为16位的计算机“按字编址”,则每个存储单元大小为1个字,一个字大小为16个二进制位
逻辑地址和物理地址
逻辑地址--相对地址
物理地址--绝对地址
地址转换(重定位)
把程序和数据的逻辑地址转换为物理地址
- 静态重定位
- 动态重定位
静态重定位
在一个作业装入内存时作业装入程序实现地址转换,必须分配要求的全部内存空间,如果没有足够的内存,就不能装入作业
作业一旦进入内存后,在运行期间不能再移动,也不能再申请内存空间
动态重定位
装入程序把装入模块装入内存后,并不会把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行
内存管理
- 内存分配和回收
- 内存扩充
- 地址转换
- 存储保护和共享
内存扩充
- 覆盖技术
- 交换技术
覆盖技术
思想:
- 将程序分为多个段,常用的段常驻内存,不常用的段在需要时调入内存
- 内存中分为一个固定区和若干个覆盖区
- 需要常驻内存的段放在固定区,不常用的段放在覆盖区,需要时调入内存,不需要时调出内存
缺点:
需由程序员声明覆盖结构,怎加了编程负担
交换技术
思想: 内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存和磁盘间动态调度)
- 1.应该在外存(磁盘)的什么位置保存被换出的进程?
- 2.什么时候应该交换?
- 3.应该换出哪些进程? 1.具有交换功能的os中,通常把磁盘空间分为文件区和对换区两部分。文件区追求存储空间的利用率,因此采用离散分配方式;对换区空间只占磁盘空间的小部分,被换出的进程数据放在对换区,主要追求换入换出速度,因此采用连续分配方式,对换区的IO速度比文件区的更快 2.多线程运行且进程吃紧时进行交换,例如发现许多进程运行时经常发生缺页 3.优先换出阻塞进程,优先级低的进程
内存分配和回收
- 单一连续分配
- 固定分区分配
- 动态分区分配