Lecture 14: Memory Management 1

本章总结:

  • 内存管理简介
  • 多程序设计建模
  • 固定分区的内存管理

内存管理:

计算机系统中的一种技术,用于有效地分配、跟踪和释放内存资源,以满足程序的需求并避免内存泄漏和内存碎片化。

内存管理简介

内存层级

计算机通常具有内存层次结构:

  • 寄存器,L1/L2/L3缓存
  • 主存储器(RAM)
  • 磁盘

高级内存”更快、更昂贵且易失性强,“低级内存”更慢、更便宜且非易失性强

操作系统提供了一个内存抽象

内存可以看作是字节/字(bytes/words)的线性数组

操作系统的责任

  • 当进程请求时分配/释放(allocate/deallocate内存
  • 跟踪已使用/未使用的内存
  • 在进程之间分配内存并模拟一个“无限大”的内存空间
  • 应用多道程序设计时的控制访问
  • 显式地将数据从内存移动到磁盘,反之亦然

内存管理方法

内存管理的历史:内存管理随着时间的推移而发展
历史重演:

  • 现代消费电子产品通常需要不那么复杂的内存管理方法
  • 许多早期的想法支撑了更现代的内存管理方法(例如:搬迁(relocation))

分区(Partitioning):连续vs.非连续

连续内存管理模型单个块中分配内存,没有任何漏洞间隙
非连续内存管理模型

  • 多个块中分配内存
  • 可以放置在物理内存中的任何位置(即,不一定彼此相邻)

连续的方法

1. 单编程(Mono-programming):为用户进程设置一个单独的分区
2. 使用固定分区进行的多路编程(Multi-programming)

  • 固定大小相等的分区
  • 固定大小不等的分区

3. 使用动态分区进行的多路编程

单编程

无内存抽象

在任何时间点,只有一个用户进程在内存中/执行(没有多编程)

一个固定的内存区域分配给OS/kernel,剩余的内存被保留给单个进程(MS-DOS就是这样工作的)

这个进程直接访问物理内存(即不发生地址转换)。

Mono-programming

每个进程都被分配连续的内存块,即它不包含“漏洞”(“holes”)或“间隙”(“gaps”)。
整个内存空间被分配给一个进程
进程总是位于相同的地址空间
不同用户进程之间不需要保护(一个进程)
覆盖使程序员能够使用比可用内存更多的内存(对程序员的负担)

单程序设计的缺点:

  • 由于进程可以直接访问物理内存,所以它可以访问操作系统内存
  • 操作系统可以看作是一个进程——所以我们有两个进程
  • 硬件资源利用率低(CPU、I/O设备等)
  • 在现代机器上可以进行多道程序设计

在基本的嵌入式系统现代消费电子产品中,如洗衣机、微波炉、汽车的ecu等,直接存储器访问和单编程是很常见的。

模拟Multi-Programming

通过交换(swapping)模拟多编程

  • 进程交换到磁盘并加载一个新磁盘(上下文切换将变得非常耗时
  • 在同一进程中应用线程(仅限于一个进程)

假设多路编程可以提高CPU利用率?直觉上,这是对的。我们如何建立这个模型?

多路编程

概率模型

内存中n个进程
一个进程花费百分之p的时间等待I/O
CPU利用率计算为:1减去所有进程等待I/O的时间:

  • 例如,p = 0.9,则CPU利用率= 1 - 0.9 ⇒ 0.1 (1 - p)

所有n个进程都在等待I/O(即CPU空闲)的概率是p^n,即 p ×p ×p…
CPU利用率由1− p^n给出

I/O等待时间为20%的情况下,四个进程几乎可以实现100%的CPU利用率 (1−0.2^4
I/O等待时间为90%的情况下,10个进程可以实现大约65%的CPU利用率 (1−0.9^{10}
随着进程数量增加,CPU 利用率会上升;而随着 I/O 水平的提高,CPU 利用率则会下降

CPU利用率是I/O比率和进程数量的函数

假设:

  • 一台计算机有1MB的内存
  • 操作系统占用200KB,为4个200KB的进程留出空间

然后:

  • 如果我们有80%的I/O等待时间,那么我们将实现不到60%的CPU利用率(1 - 0.8^{4}
  • 如果我们增加1 MB内存,它将允许我们运行另外5个进程
  • 我们可以实现大约87%的CPU利用率(1− 0.8^{9}
  • 如果我们添加另一个兆字节的内存(14个进程),我们会发现CPU利用率将增加到约96%(1− 0.8^{14}

多编程确实能够提高资源利用率 ⇒ 内存管理应该支持多程序设计

警告:

  • 这个模型假设所有的进程都是独立的,这是不正确的
  • 更复杂的模型可以使用排队理论来构建,但我们仍然可以使用这个简单的模型来进行近似预测

排队论 (queuing theory):

或称随机服务系统理论, 是通过对服务对象到来及服务时间的统计研究,得出这些数量指标(等待时间、排队长度、忙期长短等)的统计规律,然后根据这些规律来改进服务系统的结构或重新组织被服务对象,使得服务系统既能满足服务对象的需要,又能使机构的费用最经济或某些指标最优。

固定大小相等的分区

将内存划分为具有固定大小固定位置静态、连续和大小相等的分区

  • 任何进程都可以占用任何(足够大的)分区
  • 为进程分配固定大小相等的分区是容易解决的
  • 开销很小实现简单
  • 操作系统跟踪哪些分区正在使用,哪些是空闲的

静态等大小分区缺点

固定大小不相等的分区

将内存划分为具有固定大小固定位置静态、不相等大小分区

  • 减少内部碎片
  • 必须仔细考虑将进程分配到分区

固定分区(分配方法):

每个分区一个私有队列

  • 将每个进程分配到适合它的最小分区
  • 减少内部碎片
  • 是否会降低内存使用率(例如,大量小作业导致未使用的大分区)并导致内存耗尽(starvation

所有分区的单个共享队列可以将小进程分配给大分区,但会导致内部碎片增加

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值