操作系统内存的基础知识和内存管理的概念

Posted bfhonor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统内存的基础知识和内存管理的概念相关的知识,希望对你有一定的参考价值。

一、内存

(一)什么是内存?有何作用?

  • 内存可存放数据。程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾。

1. 几个常用的数量单位

2. 指令的工作原理


  • 指令的工作基于“地址”。每个地址对应一个数据的存储单元
  • 可见,我们写的代码要翻译成CPU能识别的指令。这些指令会告诉CPU应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。在这个例子中,我们默认让这个进程的相关内容从地址#0开始连续存放,指令中的地址参数直接给出了变量 x 的实际存放地址(物理地址)。
  • 思考:如果这个进程不是从地址#0 开始存放的,会影响指令的正常执行吗?

(二)装入的三种方式

1. 绝对装入

  • 绝对装入 :在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。

2. 可重定位装入(静态重定位)

  • 静态重定位 :又称 可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“==重定位”,将逻辑地址变)。

3. 动态运行时装入(动态重定位)

  • 动态重定位 :又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。

(三)从写程序到程序运行

  • 编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言
  • 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
  • 装入(装载):由装入程序将装入模块装入内存运行.

(四)链接的三种方式

1. 静态链接

  • 静态链接 :在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。

2. 装入时动态链接

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

3. 运行时动态链接

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

二、内存管理的概念

(一)内存空间的分配与回收

(二)内存空间的扩充

(三)地址转换


(四)存储保护


以上是关于操作系统内存的基础知识和内存管理的概念的主要内容,如果未能解决你的问题,请参考以下文章

操作系统王道考研 p32-34 内存的基本知识内存管理的概念覆盖与交换

操作系统:内存管理(概念)

操作系统3(内存页表段表)

谢烟客---------Linux之进程管理基础概念

操作系统存储管理

操作系统存储管理