【av68676164(p43-p47)】物理内存管理
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采用了固定分区的方法,适合具有固定任务数的多道程序系统
在程序装入前,内存已被分区,不再改变
每个分区大小可能不同,以适应不同大小的程序
系统维护分区表,说明分区大小、地址和使用标志
固定分区的缺点
- 浪费内存:程序比所在分区小
- 大程序可能无法运行:程序可能比最大分区大
建议
- 根据分区表安排程序的装入顺序,使得每个程序都能找到合适的分区运行;
- 当程序大小、个数、装入顺序等都固定时,内存使用效率很高。
动态分区
定义:在程序装入时创建分区,使分区大小刚好与程序大小相等。解决固定分区浪费内存和大程序不能运行的问题。
特点:分区动态建立
动态分区例子

动态分区存在的问题

动态分区的特点
分区的个数和大小均可变动;
存在内存碎片
动态分区需要解决的问题
- 分区的分配
- 分区的选择
- 分区的回收
- 解决内存碎片问题
7.2.2 分区放置策略
分区的分配
空闲区表:描述内存空闲区的位置和大小的数据结构

分配过程(假定用户要求的空间大小为SIZE)
空闲区表
| 位置 | 大小 |
|---|---|
| 30K | 20K |
| 66K | 24K |
| 120K | 8K |
从空闲区表中的第一个区开始,寻找≥SIZE的空闲区;
找到后从分区中分割出大小为SIZE的部分分配给用户使用;
分割后的剩余部分作为空闲区仍然登记在空闲区表中。
注意:分割空闲区时一般从底部分割
分区的选择—放置策略
放置策略(空闲区表的排序原则)
- 按空闲位置(首地址)递增排序—首次适应算法
- 按空闲位置(首地址)递减排序
- 按空闲区大小递增排序—最佳适应算法
- 按空闲区大小递减排序—最坏适应算法
首次适应算法
前提
空闲区表按首地址递增排序
特点/优点
尽可能得先利用低地址空间,保证高地址空间有较大空闲区
当大程序需要较大分区时,满足的可能性较大;
最佳适应算法
| 位置 | 大小 |
|---|---|
| 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)】物理内存管理的更多相关文章
- LInux中的物理内存管理
2017-02-23 一.伙伴系统 LInux下用伙伴系统管理物理内存页,伙伴系统得益于其良好的算法,一定程度上可以避免外部碎片为何这么说?先回顾下Linux下虚拟地址空间的分布. 在X86架构下,系 ...
- Lab2:物理内存管理
前言 现在内存管理的方法都是非连续内存管理,也就是结合段机制和分页机制 段机制 段地址空间 进程的段地址空间由多个段组成,比如代码段.堆栈段和符号表段等等 段对应一个连续的内存"块" ...
- 《Tsinghua oc mooc》第5~7讲 物理内存管理
资源 OS2018Spring课程资料首页 uCore OS在线实验指导书 ucore实验基准源代码 MOOC OS习题集 OS课堂练习 Piazza问答平台 暂时无法注册 疑问 段式内存管理中,逻辑 ...
- Linux内存:物理内存管理概述
内存中的物理内存管理 概述 一般来说,linux内核一般将处理器的虚拟地址空间划分为2部分.底部比较大的部分用于用户进程,顶部则专用于内核. 在IA-32系统上,地址空间在用户进程和内核之间划分的典型 ...
- ucore操作系统学习笔记(二) ucore lab2物理内存管理分析
一.lab2物理内存管理介绍 操作系统的一个主要职责是管理硬件资源,并向应用程序提供具有良好抽象的接口来使用这些资源. 而内存作为重要的计算机硬件资源,也必然需要被操作系统统一的管理.最初没有操作系统 ...
- Linux下的物理内存管理2-slab缓存的管理
2017-03-02 在Linux下的物理内存管理中,对SLAB机制大致做了介绍,对SLAB管理结构对象也做了介绍,但是对于小内存块的分配没有介绍,本节重点介绍下slab对小内存块的管理. 内核中使用 ...
- linux物理内存管理
1.为什么需要连续的物理内存: Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了.利用分页管理有助 ...
- ucore lab2 物理内存管理 学习笔记
总的来讲把的LAB1代码逻辑理顺后再往后学就轻松了一大截.LAB2过遍课程视频,再多翻翻实验指导书基本上就没遇到啥大坎儿.对这节学得东西做个总结就是一张图: 练习0:填写已有实验 本实验依赖实验1.请 ...
- 【av68676164(p48-p50】虚拟内存管理(1)
7.3.1 页式虚拟内存管理概念 物理内存(即实内存)管理 特点 缺点 1 源程序直接使用内存的物理地址 程序间容易访问冲突 2 程序必须全部装入内存才能运行 内存太小程序无法运行 3 程序占用连续的 ...
随机推荐
- Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归
Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...
- Mysql UDF提权方法
0x01 UDF UDF(user defined function)用户自定义函数,是mysql的一个拓展接口.用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sq ...
- 深入理解JVM(③)再谈线程安全
前言 我们在编写程序的时候,一般是有个顺序的,就是先实现再优化,并不是所有的牛P程序都是一次就写出来的,肯定都是不断的优化完善来持续实现的.因此我们在考虑实现高并发程序的时候,要先保证并发的正确性,然 ...
- echarts 实战 : 标题的富文本样式
官方文档在这一块交待的不是很清楚,记录一下. title:{ left:15, top:10, subtext:"AAA {yellow|316} BBB {blue|219}", ...
- Ordinary - 官方原版软件下载站
官网:http://a-1.vip/exe/
- STL源码剖析:序
STL源码包含哪些内容 容器:STL的核心 适配器:容器都是在一种最底层的基础容器上使用适配器实现 空间配置器:提供内存的管理 迭代器:由于遍历容器中的数据 算法:由于操作容器中的数据,如排序,拷贝, ...
- C++语法小记---经典问题之一(malloc和new的纠缠)
malloc和new以及free和delete的区分 new和malloc以及delete和free的区别 new和delete是C++的关键字,malloc和free是库函数 new和delete会 ...
- C++语法小记---类型转换
类型转换 C++类型转换主要包含两种: 隐式类型转换 小类型向大类型转换 char -> int short ->int int -> unsigned int int -> ...
- HashMap源码实现分析
HashMap源码实现分析 一.前言 HashMap 顾名思义,就是用hash表的原理实现的Map接口容器对象,那什么又是hash表呢. 我们对数组都很熟悉,数组是一个占用连续内存的数据结构,学过C的 ...
- .Net Core in Docker极简入门(上篇)
目录 前言 开始 环境准备 Docker基础概念 Docker基础命令 Docker命令实践 构建Docker镜像 Dockerfile bulid & run 前言 Docker 是一个开源 ...