7.2.1 分区内存管理

把内存分为若干个区给用户使用

  • 单一区存储管理
  • 分区存储管理
    • 固定分区
    • 动态分区

单一区存储管理(不分区存储管理)

定义:用户区不分区,完全被一个程序占用。例如:DOS

优点:简单,不需要复杂硬件支持,适于单用户单任务OS

缺点:

  • 程序运行占用整个内存,即使小程序也是如此

    • 内存浪费,利用率低

分区存储管理

定义:

  • 把用户区内存划分为若干大小不等的分区,供不同程序使用
  • 适合单用户担任内务系统

分类:

  • 固定分区
  • 动态分区

固定分区

把内存固定地分为若干大小不等的分区供各个程序使用。每个分区大小和位置固定,系统运行期间不再重新划分。

分区表:记录分区位置、大小和使用标志

固定分区的例子(4个分区为例)

区号 大小 起址 标志
1 16K 20K 未占用
2 32K 36K 未占用
3 64K 68K 未占用
4 128K 132K 未占用

3个程序被占用

区号 大小 起址 标志
1 16K 20K 已分配
2 32K 36K 已分配
3 64K 68K 已分配
4 128K 132K 未占用

使用特点:

例:IBM的OS/360采用了固定分区的方法,适合具有固定任务数的多道程序系统

  • 在程序装入前,内存已被分区,不再改变

  • 每个分区大小可能不同,以适应不同大小的程序

  • 系统维护分区表,说明分区大小、地址和使用标志

固定分区的缺点

  1. 浪费内存:程序比所在分区小
  2. 大程序可能无法运行:程序可能比最大分区大

建议

  • 根据分区表安排程序的装入顺序,使得每个程序都能找到合适的分区运行;
  • 当程序大小、个数、装入顺序等都固定时,内存使用效率很高。

动态分区

定义:在程序装入时创建分区,使分区大小刚好与程序大小相等。解决固定分区浪费内存和大程序不能运行的问题。

特点:分区动态建立

动态分区例子

动态分区存在的问题

动态分区的特点

  • 分区的个数和大小均可变动;

  • 存在内存碎片

动态分区需要解决的问题

  • 分区的分配
  • 分区的选择
  • 分区的回收
  • 解决内存碎片问题

7.2.2 分区放置策略

分区的分配

空闲区表:描述内存空闲区的位置和大小的数据结构

分配过程(假定用户要求的空间大小为SIZE)

空闲区表

位置 大小
30K 20K
66K 24K
120K 8K
  1. 从空闲区表中的第一个区开始,寻找≥SIZE的空闲区;

  2. 找到后从分区中分割出大小为SIZE的部分分配给用户使用;

  3. 分割后的剩余部分作为空闲区仍然登记在空闲区表中。

    注意:分割空闲区时一般从底部分割

分区的选择—放置策略

放置策略(空闲区表的排序原则)

  • 按空闲位置(首地址)递增排序—首次适应算法
  • 按空闲位置(首地址)递减排序
  • 按空闲区大小递增排序—最佳适应算法
  • 按空闲区大小递减排序—最坏适应算法

首次适应算法

前提

空闲区表按首地址递增排序

特点/优点

  • 尽可能得先利用低地址空间,保证高地址空间有较大空闲区

  • 当大程序需要较大分区时,满足的可能性较大;

最佳适应算法

位置 大小
120K 8K
30K 20K
66K 24K

前提

空闲区按大小递增排序

特点/优点

  • 尽可能地先使用较小的空闲区,保留大的空闲区
  • 当需要较大分区时有较大的满足可能性

最坏适应算法

位置 大小
66K 24K
30K 20K
120K 8K

前提

空闲区按大小递减排序

优点

  • 大空间分割后剩下部分还是很大,还能装下较大的程序

特点

  • 仅做一次查找就可找到所要分区

分区的回收

功能:

回收程序结束后所释放的分区(释放区),将其适当处理后登记到空闲区表中,以便再分配

回收算法

  • 若释放区与空闲区不相邻,则把释放区直接插入空闲区表
  • 若相邻,则把释放区与相邻空闲区合并后作为新的更大的空闲区插入到空闲区表

7.2.3 内存覆盖技术

覆盖—Overlay

目的

在较小的内存空间中运行较大的程序

内存分区

常驻区:被某段单独且固定地占用,可划分多个;

覆盖区:能被多段重复共用的区域,可划分多个;

覆盖的例子

  • 内存(110K):一个常驻区,两个覆盖区
  • 程序(190K):6个段

覆盖的缺点

  • 编程复杂:程序员划分程序模块并确定覆盖关系
  • 程序执行时间长:从外存装入内存耗时

7.2.4 内存交换技术

交换技术—Swapping

原理

  • 内存不够时把进程写到磁盘(换出)
  • 当进程要运行时重新写回内存(换入)

优点

  • 增加进程的并发数
  • 不考虑程序结构

缺点

  • 换入和换出增加CPU开销
  • 交换单位太大(整个进程)

考虑问题

  • 减少交换传送的信息量(模块/段)
  • 外存交换空间的管理方法
  • 程序换入的地址重定位

换出与换入的地址重定位

7.2.5 内存碎片

  • 过小的空闲区,难实际利用
  • 内存碎片会降低内存有效利用率

解决碎片方法

1、规定门限值

分割内存区时,若剩余部分小于门限值,则此空闲区不进行分割,而是全部分配给用户。

2、内存拼接技术

将所有空闲区集中一起构成一个大的空闲区

拼接的时机

  • 释放区回收的时候

    • 拼接频率过大,系统开销大
  • 系统找不到足够大的空闲区时
    • 空闲区的管理复杂
  • 定期
    • 空闲区管理复杂

缺点

  • 消耗系统资源
  • 离线拼接
  • 重新定义作业

3、解除程序占用连续内存才能运行的限制

把程序分拆多个部分装入不同分区,充分利用碎片

【av68676164(p43-p47)】物理内存管理的更多相关文章

  1. LInux中的物理内存管理

    2017-02-23 一.伙伴系统 LInux下用伙伴系统管理物理内存页,伙伴系统得益于其良好的算法,一定程度上可以避免外部碎片为何这么说?先回顾下Linux下虚拟地址空间的分布. 在X86架构下,系 ...

  2. Lab2:物理内存管理

    前言 现在内存管理的方法都是非连续内存管理,也就是结合段机制和分页机制 段机制 段地址空间 进程的段地址空间由多个段组成,比如代码段.堆栈段和符号表段等等 段对应一个连续的内存"块" ...

  3. 《Tsinghua oc mooc》第5~7讲 物理内存管理

    资源 OS2018Spring课程资料首页 uCore OS在线实验指导书 ucore实验基准源代码 MOOC OS习题集 OS课堂练习 Piazza问答平台 暂时无法注册 疑问 段式内存管理中,逻辑 ...

  4. Linux内存:物理内存管理概述

    内存中的物理内存管理 概述 一般来说,linux内核一般将处理器的虚拟地址空间划分为2部分.底部比较大的部分用于用户进程,顶部则专用于内核. 在IA-32系统上,地址空间在用户进程和内核之间划分的典型 ...

  5. ucore操作系统学习笔记(二) ucore lab2物理内存管理分析

    一.lab2物理内存管理介绍 操作系统的一个主要职责是管理硬件资源,并向应用程序提供具有良好抽象的接口来使用这些资源. 而内存作为重要的计算机硬件资源,也必然需要被操作系统统一的管理.最初没有操作系统 ...

  6. Linux下的物理内存管理2-slab缓存的管理

    2017-03-02 在Linux下的物理内存管理中,对SLAB机制大致做了介绍,对SLAB管理结构对象也做了介绍,但是对于小内存块的分配没有介绍,本节重点介绍下slab对小内存块的管理. 内核中使用 ...

  7. linux物理内存管理

    1.为什么需要连续的物理内存: Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了.利用分页管理有助 ...

  8. ucore lab2 物理内存管理 学习笔记

    总的来讲把的LAB1代码逻辑理顺后再往后学就轻松了一大截.LAB2过遍课程视频,再多翻翻实验指导书基本上就没遇到啥大坎儿.对这节学得东西做个总结就是一张图: 练习0:填写已有实验 本实验依赖实验1.请 ...

  9. 【av68676164(p48-p50】虚拟内存管理(1)

    7.3.1 页式虚拟内存管理概念 物理内存(即实内存)管理 特点 缺点 1 源程序直接使用内存的物理地址 程序间容易访问冲突 2 程序必须全部装入内存才能运行 内存太小程序无法运行 3 程序占用连续的 ...

随机推荐

  1. bzoj3381[Usaco2004 Open]Cave Cows 2 洞穴里的牛之二*

    bzoj3381[Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 题意: RMQ问题.序列长度≤25000,问题数≤25000. 题解: 倍增. 代码: #include < ...

  2. drf☞jwt自动签发与手动签发

    目录 一.自动签发 二.手动签发 一.自动签发 urls from rest_framework_jwt.views import obtain_jwt_token # 使用jwt自带的登录视图 ur ...

  3. Java批量入库Demo

    java中往数据库批量插入数据Demo java代码: //入库数据是需要批量入库的List int len =入库数据.size(); //每次循环10条 int incremnet = 10; / ...

  4. CSS:有点难的面试题①

    1 举例说明匿名块框和匿名行内框2 什么是标准文档流?3 inline-block遵循怎样的渲染规则?4 什么是BFC?如何触发BFC?5 什么是Line box?(最好画图说明) 6 <met ...

  5. git常用命令操作

    git常用命令 #查看配置 git config -l #查看系统config git config --system --list #查看当前用户(global)配置 git config --gl ...

  6. 《Head First 设计模式》:抽象工厂模式

    正文 一.定义 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类. 要点: 抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产品的具体产品是什么.这样 ...

  7. 如何在 UltraEdit 删除空行(含空格,制表符)

    如何在 UltraEdit 删除空行(含空格,制表符) 打开UltraEdit,ctrl+r弹出替换对话框,点选启用正则表达式方法1:在查找框输入 ^p^p:在替换框输入 ^p执行全部替换:这种方法是 ...

  8. PHP gregoriantojd() 函数

    ------------恢复内容开始------------ 实例 把格利高里历法的日期转换为儒略日计数,然后再转换回格利高里历法的日期: <?php$jd=gregoriantojd(6,20 ...

  9. 一本通 高手训练 1788 爬山 dp 斜率 凸包

    LINK:爬山 很早以前看的题目 发现自己想的完全不对 这道题还是比较有价值的. 先不考虑走的路线问题 考虑某个点能看到的最高的山. 分左边和右边来考虑 考虑左边 利用单调栈存长度单调递减的山 不能直 ...

  10. CF R638 div2 F Phoenix and Memory 贪心 线段树 构造 Hall定理

    LINK:Phoenix and Memory 这场比赛标题好评 都是以凤凰这个单词开头的 有凤来仪吧. 其实和Hall定理关系不大. 不过这个定理有的时候会由于 先简述一下. 对于一张二分图 左边集 ...