美文网首页
第四章 内存管理

第四章 内存管理

作者: 喜忧参半 | 来源:发表于2021-08-27 18:28 被阅读0次

内存管理的功能:

  • 内存空间的分配与回收。由操作系统完成主存储器空间的分配与管理。
  • 地址转换。存储管理必须提供地址变换功能,把逻辑地址转换成对应的物理地址。
  • 内存空间的扩充。利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
  • 存储保护。保证葛道程序在各自的存储空间内允许,互不干扰。

程序的执行过程

  • 编译:由编译程序将用户源代码编译成若干目标模块。
  • 链接:由链接程序将编译后形成的一组目标模块及所需库函数链接在一起,形成一个完整的装入模块。
  • 装入:由装入程序将装入模块装入内存运行。
    地址转换和物理存储器

地址重定位的方法:

  • 绝对装入:

在可执行文件中记录内存地址,装入时直接定位在上述(即文件中记录的地址)内存地址。
优点:装入过程简单。
缺点:过于依赖于硬件结构,不适于多道程序系统。

  • 可重定位装入:

程序在执行前集中一次性完成的地址变换方式,只完成一个首地址不同的连续地址转换。
优点:不需硬件支持,可装入有限多道程序
缺点:一个程序通常需要占用连续的内存空间,程序装入内存后不能移动。不易实现共享。

  • 动态装入:

程序在执行过程中,当CPU访问指令或数据时进行的地址变换方式。
优点:
OS可以将一个程序分散存放于不连续的内存空间,可以移动程序,有利用实现共享。
能够支持程序执行中产生的地址引用,如指针变量(而不仅是生成可执行文件时的地址引用)。
缺点:需要硬件支持(通常是CPU) ,os实现较复杂。它是虚拟存储的基础。

逻辑地址、物理地址和地址映射

逻辑地址(相对地址,虚地址):用户的程序中相对于某个基准量(通常为0)编址所用的地址。

  • 其首地址为0,其余指令中的地址都相对于首地址来编址。
  • 不能用逻辑地址在内存中读取信息。

物理地址(绝对地址,实地址):内存中存储单元的地址。物理地址可直接寻址。

地址映射:将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址。当程序装入内存时,操作系统要为该程序分配一个合适的内存空间,由于程序的逻辑地址与分配到内存物理地址不一致,而CPU执行指令时,是按物理地址进行的,所以要进行地址转换。

虚拟存储技术的核心与形式

虚拟存储技术

其核心是把作业的地址空间和主存的存储空间看做两个不同的概念。
一个计算机为程序员提供了多大的地址空间,他就可以在这个地址空间内编制多大的程序,而完全不顾及实际内存的大小。
所谓虚拟存储器就是一个地址空间,正如主存对应于存储空间一样。

虚拟存储的形式
  • 单段式虚存:一个连续的线性空间,其地址顺序为:0,1,2,...n—1,n。
  • 多段式虚存:把地址空间分成若干个,而在每一个段内则是一个连续的线性空间
引入虚拟存储的好处
  • 大程序:可在较小的可用内存中执行较大的用户程序;
  • 大的用户空间:提供给用户可用的虚拟内存空间通常大于物理内存;
  • 并发:可在内存中容纳更多程序并发执行。
虚拟存储的特征
  • 不连续性:物理内存分配的不连续,虚拟地址空间使用的不连续(数据段和栈段之间的空闲空间,共享段和动态链接库占用的空间)
  • 部分交换:与交换技术相比较,虚拟存储的调入和调出是对部分虚拟地址空间进行的;
  • 大空间:通过物理内存和快速外存相结合,提供大范围的虚拟地址空间
    总容量不超过物理内存和外存交换区容量之和

分区存储管理

  • 分区存储管理是能满足多道程序设计的最简单的存储管理技术,它运行多个作业共享内存。
  • 在内存中为每个进程划分一个相应的存储区,以连续存储各进程的程序段和数据段,使得各进程得以并发执行。

固定分区法

①分区个数固定,分区大小固定
②不支持虚拟存储技术

优点 缺点
简单,易行 内存空间极度浪费(内存碎片过多),大作业无法运行

地址重定位:在地址中加上起始地址

动态分区法

①选择分区分匹配中的数据结构
②分区分配算法(从若干个空闲分区中找到这个分区)
③不支持虚拟存储技术

①最先适应算法(First fit)

优点:优先利用内存低址部分的内存空间
缺点:内碎片产生的太多,低址部分不断划分,增加了查找开销。

②最佳适应算法(Best fit)

优点:使内存空间分布均匀,减少查找的开销。
缺点:缺乏大的空闲分区,不利于装入大作业

③最坏适应算法(Worst fit)

优点:易于实现,系统开销小
缺点:产生许多难以利用的小空闲区


覆盖技术(共用体就是覆盖技术)

缺点:增加了编程人员的负担
从外存装入覆盖文件,以时间换空间。

交换技术(牺牲了计算机的工作效率)

①将单位缩小
②实现非连续存储
通过部分装入,对程序进行分割。


页面管理

Unix中页面大小为1K,Linux中页面大小为4K。
①在装入内存时,做分页。
内存以页的大小分割,以存放个个程序的页。

页式管理的优点

①内存利用率最高(空间使用效率高)
②实现了非连续存储

静态页式分配算法

①把作业切割成多页,求出页数。
②查找存储页面表
③若满足:

  • 1、页表构造过程
  • 2、请求表
  • 3、页表清空

优点:实现了非连续存储,一定程度上解决了内存碎片的问题。
缺点:不支持虚拟存储技术,作业要一次性全部装入。

相关文章

  • 《深入理解java虚拟机》读后感

    目录 第二部分 自动内存管理机制 第二章 java内存区域与内存溢出异常 第三章 垃圾收集器与内存分配策略 第四章...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • JavaScript —— 内存管理及垃圾回收

    目录 JavaScript内存管理内存为什么需要管理?内存管理概念JavaScript中的内存管理JavaScri...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • 3. 内存管理

    内存管理 内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射 除了内存管理模块, 其他都使用虚拟地址(包括...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

  • 【笔记】C++的150个建议,第三章

    目录第一部分 语法篇 第一章 从C继承而来 第二章 从C到C++ 第三章 内存管理 第四章 类 第三章 内存管理 ...

  • jvm 基础第一节: jvm数据区

    程序内存管理分为手动内存管理和自动内存管理, 而java属于自动内存管理,因此jvm的职能之一就是程序内存管理 j...

网友评论

      本文标题:第四章 内存管理

      本文链接:https://www.haomeiwen.com/subject/blamiltx.html