操作系统内存的基础知识和内存管理的概念
Posted bfhonor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统内存的基础知识和内存管理的概念相关的知识,希望对你有一定的参考价值。
一、内存
(一)什么是内存?有何作用?
- 内存可存放数据。程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾。
1. 几个常用的数量单位
2. 指令的工作原理
- 指令的工作基于“地址”。每个地址对应一个数据的存储单元
- 可见,我们写的代码要翻译成CPU能识别的指令。这些指令会告诉CPU应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。在这个例子中,我们默认让这个进程的相关内容从地址#0开始连续存放,指令中的地址参数直接给出了变量 x 的实际存放地址(物理地址)。
- 思考:如果这个进程不是从地址#0 开始存放的,会影响指令的正常执行吗?
(二)装入的三种方式
1. 绝对装入
- 绝对装入 :在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。
2. 可重定位装入(静态重定位)
- 静态重定位 :又称 可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“==重定位”,将逻辑地址变)。
3. 动态运行时装入(动态重定位)
- 动态重定位 :又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。
(三)从写程序到程序运行
- 编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
- 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
- 装入(装载):由装入程序将装入模块装入内存运行.
(四)链接的三种方式
1. 静态链接
- 静态链接 :在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
2. 装入时动态链接
- 装入时动态链接 :将各目标模块装入内存时,边装入边链接的链接方式。
3. 运行时动态链接
- 运行时动态链接 :在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。
二、内存管理的概念
(一)内存空间的分配与回收
(二)内存空间的扩充
(三)地址转换
(四)存储保护
以上是关于操作系统内存的基础知识和内存管理的概念的主要内容,如果未能解决你的问题,请参考以下文章