news 2026/6/23 9:05:35

操作系统--内存管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
操作系统--内存管理

目录

1.内存管理的目的和功能

2.程序的装入

2.1绝对装入

2.2静态重定位

2.3动态重定位

3.程序的链接

4.内存空间的分配与回收

4.1连续分配管理方式

4.2非连续分配管理方式:

1.内存管理的目的和功能

引入目的:

更好的支持多道程序的并发执行,提高系统性能

主要功能:

(1)内存空间的分配与回收

(2)存储的保护和共享:保证各道作业在各自的存储空间内运行,互不干扰

(3)地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。

(4)内存扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。

2.程序的装入

2.1绝对装入

在编译时,如果知道程序将驻留在内存的什么位置,那么,编译程序将产生绝对地址的目标代码。
即按照物理内存的位置赋予实际的物理地址

优点:在时间效率上很高。

缺点:

1)是由于内存大小限制,能装入内存并发执行的进程数大大减少
2)编译程序必须知道内存的当前空闲地址部分和其地址,而在多通道程序下,编译程序根本不可能知道当前空闲地址的部分,因此绝对装入方式只适用于单道程序环境

2.2静态重定位

即在程序装入对目标代码装入内存的过程中完成,是指在程序开始运行前,程序中指令和数据的各个地址均已完成重定位,即完成虚拟地址到内存地址映射。地址变换通常是在装入时一次完成的,以后不再改变。

优点:不需要硬件支持(这里的硬件,指的是后文提到的重定位寄存器)(对比一下动态重定位)

缺点:程序在静态重定位之后就不能在内存中搬动了并且要求程序的存储空间是连续的(对比动态
重定位

2.3动态重定位

动态重定位的方式是把地址转换推迟到程序真正要执行时才进行。但这种方式需要硬件支持,也
就是重定位寄存器的支持,否则会影响指令的执行速度

优点:可以解决碎片问题。(因为不需要像静态重定位一样要求整段程序装入,每个模块之间的存
储区域不一定需要相联,只需要有自己的重定位寄存器就行)

缺点:需要硬件支持。(对比静态重定位)

3.程序的链接

静态链接:在程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的可执行程序,
以后不再拆开。

装入时链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的链
接方式。

运行时链接:对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接。其
优点是便于修改和更新,便于实现对目标模块的共享。

4.内存空间的分配与回收

4.1连续分配管理方式

单一连续分配:分配到内存固定的区域(单用户/单任务的操作系统)

固定分区分配:分配到内存不同的固定区域,分区可以相等可以不等,但要求一定是固定。

动态分区分配:

(1)可变分区存储管理:按照程序的需要进行动态的划分
(2)动态分区的分配策略算法:

首次适应:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的一个空闲分区。

最佳适应:空闲分区按容量递增的方式形成分区链,找到第一个能满足要求的空闲分区。

最坏适应:空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,即挑选出最大的分区。

邻近适应:由首次适应算法演变而成。不同之处是,分配内存时从上次查找结束的位置开始继续查找。

4.2非连续分配管理方式:

非连续分配管理方式最大的好处可以看到非连续三个字,是解决了动态分区,连续分区,单一分区中必须要连续分配的弊端,因为连续分配可能会出现很多的外部碎片,导致空间不能够充分利用。

(1)基本分页式存储管理将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”,或称“页帧”、“内存块”、“物理块”每个页框有一个编号,即“页框号”页框号从0开始。将用户进程的地址空间也分为与页框大小相等的一个个区域,称为“页”或“页面”每个页面也有一个编号,即“页号”,页号也是从0开始。

操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框有一一对应的关系。各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 18:45:32

CppCon 2024 学习: Dependency Injection in C++ A Practical Guide

1⃣ 减少功能模块之间的耦合度(Decreases coupling between functionality blocks) 理解: 在传统设计中,一个类或函数通常会直接创建或依赖另一个类,这会造成强耦合(tight coupling)。例如&…

作者头像 李华
网站建设 2026/6/22 23:54:27

SAP 权限创建操作简介与实例

首先介绍一下SAP权限的几个基本概念:(仅供大家参考学习) * SAP系统权限:某SAP操作用户能在SAP系统中做哪些操作。比如(大致概念)用户XX-A只能查看物料信息,在SAP系统中就分配事物码MM03给XX-A。SAP的权限控制是控制到字段级的,换句话说,其权限控制机制可以检查你是否有…

作者头像 李华
网站建设 2026/6/23 13:38:11

YOLO13-C3k2-MBRConv3:窗户检测与识别模型详解

1. YOLO13-C3k2-MBRConv3:窗户检测与识别模型详解 1.1. 引言 在智能建筑、自动驾驶和智能家居等领域,窗户的检测与识别是一项基础且重要的任务。传统的窗户检测算法往往在复杂场景下表现不佳,检测精度不高且实时性不足。针对这些问题&#…

作者头像 李华
网站建设 2026/6/23 17:25:10

卡簧目标检测基于改进YOLO11-C3k2-Star模型的实现

1. 卡簧目标检测基于改进YOLO11-C3k2-Star模型的实现 在工业自动化检测领域,卡簧作为常见的紧固件,其质量控制至关重要。然而,卡簧尺寸小、形态多样、背景复杂等特点给传统检测方法带来了巨大挑战。今天,我要分享一种基于改进YOL…

作者头像 李华
网站建设 2026/6/22 19:40:49

Harmony之路:网络请求——HTTP模块与数据交互

Harmony之路:网络请求——HTTP模块与数据交互 一、引入:为什么需要网络请求? 在现代移动应用中,几乎所有的应用都需要与服务器进行数据交互,无论是获取新闻列表、用户登录、上传图片还是同步数据,都离不开网…

作者头像 李华