【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 程序占用连续的 ...
随机推荐
- 数据库02 /MySQL基础数据类型、完整性约束、sql_mode模式
2.MySQL基础数据类型.完整性约束.sql_mode模式 目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 MySQL常用数据类型预览 1. 1 数 ...
- java 基本语法(十) 数组(三) 二维数组
1.如何理解二维数组? 数组属于引用数据类型数组的元素也可以是引用数据类型一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组. 2.二维数组的声明与初始化 正确的方式: int[ ...
- 数据可视化之DAX篇(二)Power BI中的度量值和计算列,你搞清楚了吗?
https://zhuanlan.zhihu.com/p/75462046 对于初学者,总是会把度量值和计算列搞混,我也经常碰到这样的问题,有些星友用文章中的代码总是报错,发给我一看,才知道TA把本来 ...
- hihoCoder 1041 国庆出游 最详细的解题报告
题目来源:国庆出游 解题思路(下面是大神的写的): 把题目中的序列称作S,树称作T.那么对于S中的任意节点x,x的子孙节点如果在S出现的话,那么这个子孙节点的位置是有一定要求的:x的所有子孙节点在S中 ...
- 一文快速掌握华为云IPv6基础知识及使用指南
随着5G.物联网等新兴技术领域的发展,IP空间需求巨大,IPv6成为万物互联的基础,势在必行:华为云作为IPv6成熟商用开拓者,针对金融.广电.媒资等不同行业推出IPv6解决方案,助力企业平滑升级到I ...
- Windows 磁盘分区后如何再合并&如何用Windows自带工具扩大某个分区
Windows 磁盘分区后如何再合并&用Windows自带工具扩大某个分区 注:此方法有一定的成功率,更加完善可行的方法请看http://www.diskgenius.cn/help/part ...
- IDEA 2020.1 查看内存使用情况
- LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题53篇文章,我们一起来看看LeetCode中的85题,Maximal Rectangle(最大面积矩形). 今天的 ...
- Java NIO的理解和应用
Java NIO是一种基于通道和缓冲区的I/O方式,已经被广泛的应用,成为解决高并发与大量连接和I/O处理问题的有效方式. Java NIO相关组件 Java NIO主要有三个核心部分组成,分别是:C ...
- springboot(12)Redis作为SpringBoot项目数据缓存
简介: 在项目中设计数据访问的时候往往都是采用直接访问数据库,采用数据库连接池来实现,但是如果我们的项目访问量过大或者访问过于频繁,将会对我们的数据库带来很大的压力.为了解决这个问题从而redis数据 ...