【操作系统复习随手记】(五)内存管理概述

185 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详情 这也是第26篇文章

Q:为什么要管理内存?

A:因为资源有限,只能省着用,只要还达不到“私有、无限容量、速度无限快、永久”的条件,无论存储器多大,若不加以管理,程序都能将它填满。

Q:同一块存储区域可以同时运行多个程序吗?

A:早在学计导时就知道,若程序2覆盖了程序1的代码,这两个程序都会立即崩溃。

那么如何解决?

无存储器抽象时的方案:

  • 多线程
    • 缺点:多个线程对同一内存映像可见,但人们更希望同一时间运行没有关联的程序。
  • 交换技术: image.png
  • 特殊硬件支持

注意:不要使用绝对物理地址。可通过静态重定位技术解决这个问题

存储器抽象————地址空间

是什么

一个进程用于寻址内存的一套地址集合。 每个进程都有一个自己的、独立于其他进程的地址空间。

如何保证地址空间不重复

(现已不使用)动态重定位

将每个进程的地址空间映射到内存的不同部分。 (如基址寄存器和界限寄存器)

内存管理

空闲内存管理

位图

一个位对应于一个分配单元的状态(0/1)

链表内存管理

image.png 算法:

  • FF(first-fit):沿着链表找,直到找到足够大的空闲区
  • NF(next-fit):从上次找到合适时的位置开始找
  • BF(best-fit):满足条件中的最小的
  • WF(worse-fit):满足条件中的最大的
  • QF(quick-fit):为常用大小的空闲区维护单独的链表

解决内存超载问题——交换技术、虚拟内存

交换技术

image.png A的地址改变是通过前述的硬件支持的重定位方案 几点补充:

  • 有一种叫“内存紧缩”的技术

image.png

  • 解决进程长度动态增长的一种可能方案:

(原因? 进程 的data segment增长,而这又是因为程序语言层面允许从堆中动态分配内存)

A:当换入或移动进程时分配额外内存给它;换出时只换实际内容

有关虚拟内存的内容,请待下回分解~