博客
关于我
2021-05-11 现代操作系统 《现代操作系统 第4版》第3章 内存管理——总结(分段,分页,段页)(转载)
阅读量:659 次
发布时间:2019-03-15

本文共 1035 字,大约阅读时间需要 3 分钟。

内存分配技术

内存管理是操作系统中至关重要的核心机制之一。其主要目标是提升内存的利用率,这涉及到为进程分配内存空间的方式。

在深入探讨内存分配方法之前,让我们首先思考以下问题:进程在执行之前是如何存储在内存中的?这一问题的理解将帮助我们更好地理解内存分配的原理。

连续分配

在早期的操作系统中,内存只能存放一个进程,称为单一连续存储。随着多道批处理系统的发展,内存能够存放多个进程。此时,便出现了连续分区分配。进程连续地存储在内存中会产生两种碎片:内部碎片和外部碎片。随着操作系统的不断进步,连续分区分配已无法满足内存利用率的提高需求。

固定分区分配

固定分区分配是连续分区分配的一种方式,系统预先定义了内存区间的大小。分区可以是大小相等或不等的。然而,固定分区分配的一个显著缺点是容易产生空闲空间,从而影响内存利用率。此外,固定分区还存在用户进程只能存储一个固定大小的过程的问题。

为了克服固定分区分配的局限性,动态分区分配逐渐成为主流。动态分区分配的关键在于根据进程的需求动态地分割内存空间。

动态分区分配

动态分区分配的特点是系统初始只有一个大量空闲区。当进程请求内存时,系统根据进程所需的空间大小划分出一片空闲区并分配给该进程。动态分区分配能有效减少外部碎片问题,但也会产生内外部碎片。

离散分配与分页存储管理

为了进一步提升内存利用率,行业逐渐采用离散分配的思想。离散分配将内存空间分割成更小的单位,一根析离散分配在现代操作系统中的表现形式是分页存储管理。将进程划分为与内存块大小相当的页面,如上图所示,进程按照逻辑地址划分为多个小进程,并将这些小进程非连续地存放到内存中。

在分页存储管理中,需要将进程划分为与内存物理帧(页框)大小相当的页样。在进程存储的单元中,关键是要将逻辑地址转换为物理地址。地址转换的逻辑如下:

步骤:1:根据页大小算出页框的起始地址2:加上该指令在该页的页内偏移量3:两者相加即可得出物理地址

为了支持分页存储管理,系统引入了页表,将虚拟地址映射到物理地址。

作为分页存储管理的延伸,合理地结合分段存储管理,一方面确保进程能够按照程序员逻辑分布在内存中,另一方面让内核能够高效地管理内存资源。所有内核通过段表来完成逻辑地址到物理地址的映射。

总结

至此,关于内存分配的相关知识已经完示。在撰写本文期间,逐步梳理了从连续分配到分页存储管理的内存分配过程,也提到了动态分区分配和固定分区分配。如有不当之处,还请多方指出与我交流详细讨论。

转载地址:http://ryfqz.baihongyu.com/

你可能感兴趣的文章
SpringBoot使用@Email报错误
查看>>
Rabbitmq的内存磁盘监控
查看>>
访问servlet时弹出文件下载框解决方法
查看>>
IDEA-@Slf4j和log标签&@Data(Lombok)无效
查看>>
SpringCloud-Eureka报错 Error creating bean with name解决
查看>>
Thymeleaf 生成下标,索引,使用Stat变量
查看>>
初始微服务---Springcloud发展【第一期】
查看>>
RAFT 拜占庭将军 共识算法
查看>>
UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
查看>>
cmd编译.java文件 : java:720: 错误: 编码GBK的不可映射字符 Why ? ? ? ?
查看>>
Android 架构组件 – 让天下没有难做的 App
查看>>
能解决数据可视化大屏需求的3款可视化工具
查看>>
如何在VSCode中定制JSON的IntelliSense
查看>>
椭圆曲线的定义
查看>>
多代理区块链框架客户端的操作
查看>>
RSA操作中的公钥和私钥的生成
查看>>
go语言中类的继承和方法的使用
查看>>
一些技术博客
查看>>
第01问:MySQL 一次 insert 刷几次盘?
查看>>
libvirtd:内部错误:Failed to apply firewall rule
查看>>