江小南
2023/04/25阅读:26主题:萌绿
【操作系统】内存的基本知识与内存管理概念
1. 内存的基础知识

1. 什么是内存,有何作用
内存可存放数据。程序执行前需要先放到内存中才能被CPU处理—缓和CPU与硬盘之间的速度矛盾。
思考:在多道程序环境中,系统中会由多个程序并发执行,也就是会有多个程序的数据需要同时放在内存中。那么,如何区分各个程序的数据是存放在什么地方呢?
方案:给内存的存储单元编地址。 常用的数量单位:
2. 装入的三种方式
1. 绝对装入
绝对装入:在编译时,如果知道程序将放在内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。 绝对装入只适用于单道程序环境。
程序中使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。通常情况下都是编译或汇编时再转换为绝对地址。
2. 可重定位装入
静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。 静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。
3. 动态运行时装入
动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。
注意:采取动态重定位时允许程序在内存中发生移动。
3. 从写程序到程序运行
1. 从写程序到程序运行
编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)。
链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
装入(装载):由装入程序将装入模块装入内存运行。
2. 链接的三种方式
链接的三种方式:
-
静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。

-
装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。

-
运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。

2. 内存管理的概念

操作系统作为系统资源的管理者,需要对内存进行管理。
-
操作系统负责内存空间的分配与回收。 -
操作系统需要提供某种技术从逻辑上对内存空间进行扩充。 -
操作系统需要提供地址转换功能负责程序的逻辑地址与物理地址的转换。 -
操作系统需要提供内存保护功能。保证各进程在各自存储空间内运行,互不干扰。
地址转换:
三种装入方式:链接的三种方式
内存保护:
方法一:在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。 方法二:采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。重定位寄存器中存放的是进程的起始物理地址。界地址寄存器中存放的是进程的最大逻辑地址。
3. 小结
作者介绍