操作系统之内存管理

简介: 内存的基础知识什么是内存因为cpu的处理速度很快,而外存的读取速度又很慢,所以我们就需要先加载到内存中,内存的读取速度比外存要快得多,如此实现更高效的处理进程的工作原理指令的工作原理从X=X+1大致看一下指令的执行过程指令的工作基于地址。每个地址对应一个数据的存储单元。逻辑地址(相对地址)vs物理地址(绝对地址)从写程序到程序运行—编译、链接、装入不修改装入模块中的指令地址就直接装入内存的话:也就是说只有当装入模块使用的内存从#0开始时,不修改装入模块中的指令地址才能行得通装入的三种方式绝对装入 这也叫就意味着这个程序

内存的基础知识
什么是内存

因为cpu的处理速度很快,而外存的读取速度又很慢,所以我们就需要先加载到内存中,内存的读取速度比外存要快得多,如此实现更高效的处理

进程的工作原理
指令的工作原理
从X=X+1大致看一下指令的执行过程

指令的工作基于地址。每个地址对应一个数据的存储单元。

逻辑地址(相对地址)vs物理地址(绝对地址)

从写程序到程序运行—编译、链接、装入

不修改装入模块中的指令地址就直接装入内存的话:

也就是说只有当装入模块使用的内存从#0开始时,不修改装入模块中的指令地址才能行得通

装入的三种方式
绝对装入

这也叫就意味着这个程序换一台就不能运行了,此方式灵活性较低

静态重定位

动态重定位

链接的三种方式
首先我们了解一下什么是链接:

程序的链接阶段主要做了以下几件事:

符号解析:将各个模块中使用的符号(函数名、全局变量名等)替换为实际的地址。例如如果模块A调用模块B的函数foo(),那么链接器会找到模块B中foo()的实际地址,并在模块A的调用指令中填入那个地址。
重定位:修改程序中用到的地址,以适应最终的加载地址。例如模块A中有一个data段从0x1000开始,模块B有一个data段从0x2000开始。那么链接器可能决定模块A加载到0x5000,模块B加载到0x6000。这时候链接器需要修改模块A中所有0x1000的地址为0x5000,修改模块B中的0x2000为0x6000。
解决外部符号:如果有模块调用了未定义的外部符号(例如调用了标准库函数),那么链接器需要链接适当的库来满足这些外部需求。
重复符号处理:如果有多个模块定义了相同的符号,链接器需要决定使用哪一个,并可能报错。
生成输出文件:链接的最后,链接器会将所有输入的目标文件组合成一个输出文件(可执行文件或共享库)。这个输出文件就包含了所有符号解析、重定位等处理的结果。
所以简单来说,链接的作用是将多个目标模块组合为一个连贯的程序,使其可以顺利执行或被其他程序使用。它解决了跨模块的符号引用和地址变化等问题,并生成最终的输出文件。

静态链接

装入时动态链接

运行时动态链接

我们总结一下这一章:

什么是内存管理?
内存空间的分配与回收

内存空间的扩展(实现虚拟性)

地址转换

地址转换三种方式

内存保护

内存保护的两种方式

最后我们总结一下这一章:

覆盖与交换技术

覆盖技术

交换技术

复习一下进程调度

最后我们总结一下这一章:

内存的分配与回收

单一连续分配

固定分区分配

分区说明表

动态分区分配(可变分区分配)

系统要用怎样的数据结构记录内存的使用情况呢?

当多个空闲分区都能满足要求时,应该选择哪个分区进行分配?

如何进行分区的分配?

如何进行分区的回收?

内部碎片与外部碎片

最后总结一下本章内容:

动态分区分配算法

首次适应算法

最佳适应算法

最坏(大)适应算法

临近适应算法

四种算法归纳比较

分页存储

基本分页存储管理的思想

分页存储管理的重要概念

如何实现地址的转换

如何计算页号和页偏移量

为什么页面大小一般设为2的整数次幂?

分页存储的逻辑结构

如何知道页面在内存中的起始地址?

最后我们总结一下这一章的内容:

分页存储管理的基本地址变换结构

页表寄存器

例题:

对页表项大小的进一步讨论

总结一下:

快表的地址变换结构
我们前面说了分页存储管理的基本地址变换结构,这一章是对基本地址变换结构的改进版。

什么是快表

能否把整个页表都放在TLB中?

局部性原理引入快表机制

引入快表后,地址的变换过程
一个例图了解基于快表的地址变换结构

引入快表后,地址变换的过程的文字描述:

基本地址变换与快表地址变换的比较

二级页表
为什么引入二级页表?
因为单级页表存在一些问题,所以引入二级页表和多级页表,有两个问题:

二级页表的原理和地址结构
对页表再次分组

二级页表的地址结构及对应关系

如何实现二级页表的地址变换?

上面的部分我们解决了问题一,接下来是问题二,这里简单叙述一下,后面的文章会继续深入剖析。

几个小细节

最后总结一下:

基本分段存储管理

什么是分段?

分段的逻辑地址结构

段表

地址变换

分段、分页管理的对比

分段实现信息共享共享

为什么分页不方便实现信息共享和保护?

分段比分页更容易实现信息共享的原因主要有:

分段的地址空间是逻辑地址空间,与物理地址空间分离。每个段都有一个段表,映射逻辑地址到物理地址。这个映射可以在不同的进程中共享,所以多个进程可以共享同一个段。
分段允许段重叠,不同进程可以共享某些段。而分页的页映射通常是唯一的,不允许重叠,所以难以直接在地址空间中共享页面。
分段的粒度较大,通常是一个函数、数据结构等,更适合作为共享单元。而分页的页大小较小,不太方便作为共享信息的基本单元。
分段可以实现共享只读段,多个进程只读访问同一段,而分页实现只读共享页较为困难。
具体例子:

共享程序代码段:多个进程可以共享只读的代码段,从而减少内存占用。
共享库段:多个进程可以共享动态链接库的代码和数据段。
共享数据段:多个进程共享只读数据段,如常量数据。
堆栈段不共享:每个进程有自己的唯一堆栈段。
相比而言,分页实现共享信息较为困难,通常需要更复杂的机制,如复制现有的共享页等,比较低效。所以,总体来说,分段更容易高效实现信息共享。

最后总结一下:

段页式存储管理

分页、分段的优缺点分析

分段+分页=段页式管理

段页式管理的逻辑地址结构

段页式存储的段表、页表

段页式管理的地址转换过程

最后总结一下:

虚拟内存

传统存储管理的特征、缺点

局部性原理

虚拟内存的定义和特征

如何实现虚拟内存技术

最后总结一下:

请求分页管理方式

页表机制—请求页表与基本页表的区别

缺页中断机构

地址变换机构

最后总结一下:

页面置换算法

最佳置换算法—OPT

先进先出置换算法—FIFO

最近最久未使用置换算法—LRU

时钟置换算法—CLOCK

改造型时钟置换算法
只需一轮

需要两轮

需要三轮:

需要四轮

总结:

页面分配策略

驻留集

驻留集(Resident Set)是操作系统管理内存的一个重要概念。它指的是一个进程当前占用的内存页面集合。

当一个进程运行时,它需要从辅助存储器(如硬盘)将代码和数据读入内存。不可能将整个进程的所有代码和数据都读入内存,因为内存有限。所以,操作系统会根据一定的页面置换算法(如LRU),选择将一些页面驻留在内存中,这些驻留在内存中的页面集合就是驻留集。

驻留集是描述一个进程运行时实际占用内存的页面集合,它的大小和内容随着进程的运行而动态变化,密切相关到操作系统的内存管理和进程调度。

页面分配、置换策略

固定分配局部置换、可变分配局部置换、可变分配全局置换

何时调入页面?

从何处调页?

抖动(颠簸)现象

工作集
工作集(Working Set)是操作系统内存管理的一个重要概念,与驻留集相类似,但有一定区别。

工作集指的是进程在最近一段时间内实际访问的页面集合。它表示进程近期的内存访问局部性,通过工作集的大小可以反映出进程最近一段时间的内存使用情况和访问模式。

操作系统通过定期统计每个进程的工作集,来发现进程的内存访问模式的变化。当工作集大小发生较大变化时,说明进程的内存访问模式可能已发生改变,这时操作系统会相应地调整进程的驻留集,以适应新的工作集大小和访问模式。

工作集与驻留集的主要区别在于:

工作集反映的是进程最近一段时间的内存访问情况,它是短期的和动态变化的。而驻留集表示进程当前占用的内存,它由工作集演变而来,相对而言是较长期和稳定的。
工作集的页面可能没有全部驻留在内存,而驻留集中的页面全部在内存中。工作集只是访问的页面集合,不代表这些页面实际驻留在内存。
操作系统不直接管理工作集的大小,它通过STATISTICS得到工作集信息,并据此调整驻留集。而驻留集的大小由操作系统的页面置换算法直接管理。
工作集用于发现进程内存访问模式的变化,指导驻留集的调整,而驻留集直接影响进程的运行效率。
总之,工作集和驻留集都描述进程占用和访问的内存,但工作集更注重内存访问模式,用于发现进程内存模式的变化;而驻留集直接影响进程运行,由操作系统根据工作集信息加以管理。两者互为依存,共同服务于操作系统的内存管理。

总结:

————————————————
版权声明:本文为CSDN博主「十八岁讨厌编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyb18507175502/article/details/130643126

目录
相关文章
|
8天前
|
算法 调度 UED
深入理解操作系统内存管理:原理与实践
【4月更文挑战第23天】 在现代计算机系统中,操作系统的内存管理是保证系统高效、稳定运行的关键组成部分。本文旨在深入探讨操作系统中内存管理的理论基础、关键技术以及实际操作过程,通过对内存分配策略、虚拟内存技术、分页与分段机制等核心概念的详细解析,为读者提供一个清晰、全面的内存管理视角。此外,文章还将通过案例分析,展示内存管理在解决实际问题中的应用,以期加深读者对操作系统内存管理复杂性的认识和理解。
|
4天前
|
缓存 算法 调度
深入理解操作系统的内存管理机制
【4月更文挑战第27天】 在现代计算机系统中,操作系统扮演着至关重要的角色,尤其在资源管理和调度方面。内存管理是操作系统的核心功能之一,它负责分配、跟踪和回收应用程序使用的物理内存。本文将探讨操作系统如何通过不同的内存管理技术来优化内存使用效率,包括分页、分段以及虚拟内存等概念。通过对这些技术的深入分析,读者将获得对操作系统内部工作原理的更深刻理解,并了解它们如何影响应用程序性能和系统稳定性。
|
21小时前
|
机器学习/深度学习 自动驾驶 安全
深入理解操作系统内存管理:策略与实现基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第30天】 在现代计算机系统中,操作系统的内存管理是确保系统高效、稳定运行的关键组成部分。本文将深入探讨操作系统中内存管理的多种策略及其实现机制,包括但不限于分页、分段和段页式结合等技术。我们将剖析内存分配的原理,讨论虚拟内存技术的实现以及它如何提供更大的地址空间并允许内存的交换。同时,我们还会涉及内存保护机制,它们是如何防止程序访问未授权的内存区域。最后,文中将对现代操作系统如Linux和Windows中的内存管理实践进行比较分析,以期给读者提供全面而深入的理解和参考。 【4月更文挑战第30天】 随着人工智能技术的飞速发展,深度学习已经
|
1天前
|
内存技术
深入理解操作系统:内存管理与虚拟内存
【4月更文挑战第30天】本文深入探讨了操作系统中的关键组成部分——内存管理,并详细解析了虚拟内存的概念、实现机制及其在现代计算系统中的重要性。我们将从物理内存的分配和回收讲起,逐步引入分页、分段以及虚拟地址空间等概念。文章旨在为读者提供一个清晰的框架,以理解内存管理背后的原理,并通过具体示例加深对虚拟内存技术的理解。
|
1天前
|
安全 Linux Windows
深入理解操作系统内存管理:分页与分段的融合
【4月更文挑战第30天】 在现代操作系统中,内存管理是确保多任务环境稳定运行的关键。本文将深入探讨分页和分段两种内存管理技术,并分析它们如何相互融合以提供更为高效、安全的内存使用策略。通过对比这两种技术的优缺点,我们将探索现代操作系统中它们的综合应用,以及这种融合对操作系统设计和性能的影响。
|
1天前
|
存储 算法 内存技术
深入理解操作系统内存管理:从虚拟内存到物理内存的映射
【4月更文挑战第30天】 在现代操作系统中,内存管理是一个复杂而关键的功能。它不仅确保了系统资源的有效利用,还为每个运行的程序提供了独立的地址空间,保障了程序之间的隔离性和安全性。本文将探讨操作系统如何通过分页机制和虚拟内存技术实现内存的抽象化,以及这些技术是如何影响应用程序性能的。我们将详细解析虚拟地址到物理地址的转换过程,并讨论操作系统在此过程中扮演的角色。文章的目的是为读者提供一个清晰的框架,以便更好地理解内存管理的工作原理及其对系统稳定性和效率的影响。
|
1天前
|
算法 安全 Android开发
深入理解操作系统的内存管理机制构建高效Android应用:Kotlin的协程优势
【4月更文挑战第30天】 在现代计算机系统中,操作系统的内存管理是确保系统高效、稳定运行的关键。本文将探讨操作系统内存管理的核心技术,包括内存分配、虚拟内存、分页和分段等概念,以及它们是如何协同工作以提高内存利用率和系统性能的。通过对这些技术的详细分析,我们可以更好地理解操作系统背后的原理,并评估不同内存管理策略对系统行为的影响。 【4月更文挑战第30天】 在移动开发领域,尤其是针对Android平台,性能优化和流畅的用户体验始终是开发者追求的核心目标。随着Kotlin语言的普及,协程作为其在异步编程领域的杀手锏特性,已经逐渐成为提高应用性能和简化代码结构的重要工具。本文将深入探讨Kotli
|
4天前
|
存储 算法 安全
深入理解操作系统的内存管理机制
【4月更文挑战第27天】 本文将探讨操作系统中一个至关重要的组成部分——内存管理。我们将深入分析内存管理的基本原理,包括分页、分段和虚拟内存的概念,以及它们如何共同作用以支持现代多任务操作系统。文章还将讨论内存管理的关键性能指标,如页面置换算法的效率对系统响应时间的影响,以及内存碎片问题的解决方案。通过对这些高级概念的剖析,读者将获得操作系统内存管理机制深层次的认识。
|
5天前
|
算法
深入理解操作系统的内存管理
【4月更文挑战第26天】 在现代计算机系统中,操作系统的内存管理是确保系统高效、稳定运行的关键组成部分。本文将深入探讨操作系统内存管理的核心技术,包括虚拟内存、物理内存分配策略、分页和分段机制以及内存交换技术。通过分析这些技术的工作原理及其优缺点,读者将获得对操作系统如何优化内存使用和管理的深刻理解。
|
6天前
|
算法
探索现代操作系统的虚拟内存管理
【4月更文挑战第25天】 操作系统的心脏——虚拟内存管理,是确保多任务并发执行和系统稳定性的关键。本文将深入剖析虚拟内存的核心机制,包括分页、分段、请求调页以及交换技术。我们将探讨虚拟内存如何允许操作系统使用有限的物理内存来模拟更大的地址空间,以及这一过程对性能的影响。此外,文章还将介绍一些高级话题,比如内存分配策略、页面置换算法以及虚拟内存的优化方法。