【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 程序占用连续的 ...
随机推荐
- 矩阵的基本性质 之 对称矩阵,Hermite矩阵,正交矩阵,酉矩阵
1.对称矩阵 2.Hermite矩阵 3.正交矩阵 4.酉矩阵
- P1136 迎接仪式 题解
题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出"欢迎欢迎欢迎欢 ...
- Jmeter(十七) - 从入门到精通 - JMeter后置处理器 -上篇(详解教程)
1.简介 后置处理器是在发出“取样器请求”之后执行一些操作.取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的.例如 ...
- python测试开发面试之深浅拷贝
先来道题热热身 a = ('a', 'b','c') c = copy.copy(a) d = copy.deepcopy(a) if c == d: print("c和d的值相等" ...
- scratch编程——画笔模块画各种同心图案
我们今天是要用画笔来画出不同的同心图案,在画之前,我们先来了解一下画笔模块: 1.画笔模块的用法 画笔模块的用法就是在舞台上留下不同颜色粗细的线条,它的默认是情况是抬笔,我们在使用的时候要让角色移动到 ...
- 浅谈6种JS数组遍历方法的区别
本篇文章给大家介绍一下6种JS数组遍历方法:for.foreach.for in.for of.. each. ().each的区别.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...
- 来了,来了,你们要的Nginx教程来了
一 Nginx简介 1.1 什么是Nginx Nginx是一个高性能的http和反向代理服务器,其特点是占用内存小,并发能力强.Nginx专为性能优化而开发,性能是其最重要的考量,能经受高负载的考验, ...
- DDD之5限界上下文-定义领域边界的利器
上图是一张普通地图,最刺眼的就是边界? 非常好奇地图绘制工程师是如何描绘如此弯曲多变的边界的?强制行政区域还是人群历史原因自然的人以群分? 我们再换个视角,对工程师或者架构师来说,微服务的边界如何划分 ...
- npm 使用报错合集
1.Unexpected end of JSON input while parsing near '...e,"directories":{},"d' 这个问题经常会出 ...
- 解决element上传功能清除单个文件的问题
今天,在使用 element 实现一个上传文件的功能. 接下来,要对上传的文件列表,实现删除单文件的功能. 看了 element 开发文档,发现 on-remove 没有特别的详细的说明,刚开始使用 ...