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. 句柄Handle的释放(8)

    本篇首先介绍几个与句柄分配与释放密切相关的类,然后重点介绍句柄的释放. 1.HandleArea.Area与Chunk 句柄都是在HandleArea中分配并存储的,类的定义如下: // Thread ...

  2. 基于SSM框架的简单问答社区

    前言:学习了Spring.SpringMVC.MyBatis框架后,开发了一套简单的问答社区,前端采用Bootstrap开发框架. 版本信息 IDEA:2020.1.2 JDK:14.0.1 Mave ...

  3. 《2020版Linux云计算学习图谱》帮你提升80%专业技能,在线免费领

    2亿人在家办公.视频会议的需求,给钉钉后台系统带来巨大压力.据了解,钉钉在通过阿里云紧急扩容1万台服务器后,再度扩容1万台云服务器. 受疫情影响,在家办公需求暴涨.从29号开始到2月6日,腾讯会议每天 ...

  4. 数据库-SQL查询语言(一)

    SQL数据定义 DDL sql的DDL不仅能定义一组关系,还能定义每个关系的信息,包括: 每个关系的模式 每个属性的取值类型 完整性约束 每个关系的维护的索引集合 每个关系的安全性和权限信息 每个关系 ...

  5. STL源码剖析:配置器

    作用:对内存的管理 接口:申请和释放 内容: 几个全局函数 一级配置器 二级配置器 准备知识 POD是什么: Plain Old Data简称POD,表示传统的C语言类型:与POD类型对应的是非POD ...

  6. 如何获取json某一级节点的数据

    如何获取json某一级节点的数据 最近做项目有获取和设置固定格式某一级节点值的需求.但是要一级一级地取对于多级的结构来说代码过于冗余且重复,于是写了个递归的方法根据json路径完成值的定点操作.废话不 ...

  7. Mybatis——Mapper代理

    mapper的代理对象生成位于org.apache.ibatis.binding.MapperProxyFactory的newInstance方法,使用jdk的动态代理,代理的InvocationHa ...

  8. jq转盘抽奖

    之前项目的时候要写一个抽奖,自己写了以后就记录一下. 先是html <div class="turntable_zhan"> <img class="y ...

  9. R 常用基本函数

    R 常用的数字.矩阵和数列的处理函数 数值篇 mean() #均值 colMeans() #对列求均值 sum() #求和 max() #最大值 min() #最小值 prod() #连乘 var() ...

  10. HTML自动刷新页面

    <meta http-equiv="refresh"content="5"/> 英文""