操作系统(11)----内存管理1

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 操作系统(11)----内存管理

内存管理分类如下:

一.地址转换

在上一小节中,我们讲到的模块装入方式,就是从逻辑地址转换为物理地址的方式,我们来回顾一下:

1.绝对装入

绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。(也就是将编译程序中各变量的地址修改为正确的绝对地址)

例如:如果直到装入模块要从地址为100的地方开始存放

装入内存,从100开始装入:

缺点:灵活性很差,只适用于单道程序环境。

2.可重定位装入(静态重定位)

静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。


与绝对装入的区别在于,静态重定位是在程序装入内存时,再进行地址转换,将逻辑地址转为物理地址。

静态重定位的特点:

•在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。

•作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。

•一般用于早期的多道批处理操作系统。

3.动态运行时装入(动态重定位)

动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。


重定位寄存器:


存放了装入模块存放的起始位置,例如下图,起始位置为100。


当CPU访问指令0时,会将其中的逻辑地址79,与重定位寄存器的起始位置相加,得到其访问的地址。


与静态重定位的区别在于,动态重定位装入时依旧保持使用逻辑地址。

动态重定位的特点:

•采用动态重定位时允许程序在内存中发生移动。

•可将程序分配到不连续的存储区中;

•在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;

•便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。


二.内存保护

内存保护即操作系统需要保证各进程在各自存储空间运行互不干扰。

这里假设进程1的逻辑地址空间0~179;实际物理地址空间为100~279;

1.设置上、下限寄存器



在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。

CPU会根据上下限寄存器中存储的数据,来判断进程访问某个地址时是否越界。

2.重定位寄存器和界地址寄存器

采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。重定位寄存器中存放的是进程的起始物理地址。界地址寄存器中存放的是进程的最大逻辑地址。


加入进程1想要访问逻辑地址为80的内存单元,首先逻辑地址会与界地址寄存器中的数据对比,若没有超过这一数据,就认为没有越界,再与重定位寄存器中的数据相加,就可以得到实际要访问的物理地址。

三.内存空间的扩充

1.覆盖技术

早期的计算机内存很小,比如 IBM 推出的第一台PC机最大只支持 1MB 大小的内存。因此经常会出现内存大小不够的情况。后来人们引入了覆盖技术,用来解决“程序大小超过物理内存总和”的问题。


覆盖技术将程序分为多个段(多个模块)常用的段常驻内存,不常用的段在需要时调入内存。

内存中分为一个“固定区”和若干个“覆盖区。需要常驻内存的段放在“固定区”中,调入后就不再调出(除非运行结束)。不常用的段放在“覆盖区”,需要用到时调入内存用不到时调出内存。


若程序X中,模块A会依次调用B和C模块,B模块可能会调用D模块,C模块可能会调用E,F模块。因为A不可能同时访问B,C模块,所以可以将B,C模块设置在同一个覆盖区,同理也可以将D,E,F模块设置在一个覆盖区。


所以,采用覆盖技术可以按照自身逻辑结构,让那些不可能同时被访问的程序段共享同一个覆盖区。


采用覆盖技术中用:8K+10K+12K=30K的大小

必须由程序员声明覆盖结构,操作系统完成自动覆盖。

缺点:对用户不透明,增加了用户编程负担。覆盖技术只用于早期操作系统,现在已经不使用这一技术。

2.交换技术

交换(对换)技术就是指,内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)


内存紧张时,内存就会将某些进程放入外存,而这些进程的PCB会保留在内存中,并插入到挂起队列中。当内存不紧张了,就可以将这些进程调入内存中。


PCB保留在内存中的原因是用于保存该进程在外存中存放的位置,操作系统根据PCB中存放的信息就可以对进程进行管理了。


补充:


暂时换出外存等待的进程状态为挂起状态(挂起态,suspend)


挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态:


当就绪态被换出内存就称为就绪挂起态,当阻塞态被换出内存就称为阻塞挂起态。

我们之前有讲过高级调度,中级调度和低级调度,那么交换技术就是中级调度使用的一种交换策略,忘记了可以回顾一下:

中级调度就是用来决定哪个处于挂起状态的进程将被重新调入。


1.应该在外存(磁盘)的什么位置保存被换出的进程?


具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分。


文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;


对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式。总之,对换区的I/O速度比文件区的更快。

操作系统(11)----内存管理2:https://developer.aliyun.com/article/1511164

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
15天前
|
存储 Linux 调度
深入理解操作系统:从进程管理到内存分配
【8月更文挑战第44天】本文将带你深入操作系统的核心,探索其背后的原理和机制。我们将从进程管理开始,理解如何创建、调度和管理进程。然后,我们将探讨内存分配,了解操作系统如何管理计算机的内存资源。最后,我们将通过一些代码示例,展示这些概念是如何在实际操作系统中实现的。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
|
1月前
|
安全 索引
操作系统中的内存管理策略
【8月更文挑战第23天】
57 1
|
2天前
|
Python
python对电脑的操作,获取几核,获取操作系统,获取内存
python对电脑的操作,获取几核,获取操作系统,获取内存
|
1月前
|
算法 安全 UED
探索操作系统的内核空间:虚拟内存管理
【7月更文挑战第50天】 在现代操作系统中,虚拟内存管理是核心功能之一,它允许操作系统高效地使用物理内存,并为应用程序提供独立的地址空间。本文将深入探讨操作系统虚拟内存管理的机制,包括分页、分段以及内存交换等关键技术,并分析它们如何共同作用以实现内存的有效管理和保护。通过理解这些原理,读者可以更好地把握操作系统的内部工作原理及其对应用程序性能的影响。
|
1月前
|
存储 算法 安全
深入剖析操作系统的内存管理机制
在数字世界的构建中,操作系统扮演着至关重要的角色。本文将探讨操作系统中的内存管理机制,揭示其背后的技术原理和设计哲学。从内存分配策略到虚拟内存的实现,再到内存保护和回收机制,我们将一探究竟,解析操作系统如何高效、安全地管理宝贵的内存资源。
|
28天前
|
开发者
探索操作系统核心:一个简单的内存管理模拟
【8月更文挑战第31天】在数字世界的构建中,操作系统扮演着基石的角色。它不仅仅是软件与硬件之间的桥梁,更是维持计算机系统有序运行的心脏。本文将带您一探操作系统的核心奥秘——内存管理,通过一个简化的模型和代码示例,揭示内存分配、回收及优化的内在机制。无论您是编程新手还是资深开发者,这篇文章都将为您打开一扇理解计算机深层工作原理的大门。
|
28天前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存分配
【8月更文挑战第31天】在数字世界的每一次点击和滑动背后,都隐藏着一个复杂而精妙的世界——操作系统。它如同一座无形的桥梁,连接着人类与机器的沟通。本文将带你一探究竟,从进程的生命周期到内存的精细管理,我们将一起解码操作系统的核心机制。通过直观的代码示例,你将看到理论与实践的结合如何让冷冰冰的机器生动起来。准备好了吗?让我们开始这段探索之旅,揭开操作系统神秘的面纱。
|
30天前
|
存储 算法 调度
深入理解操作系统:从进程管理到内存优化
【8月更文挑战第29天】在数字世界的心脏跳动着的,是无数行代码构成的操作系统。本文将带领读者穿梭于操作系统的两大核心领域——进程管理和内存优化,揭示它们如何协同工作以确保计算机系统的高效运行。通过实际代码示例,我们将探索进程的生命周期、调度策略以及内存分配和回收机制。加入我们,一起解锁操作系统的秘密,理解其背后的逻辑与哲学。
|
1月前
|
算法 程序员
理解操作系统内存管理:页面置换算法全解析
大家好,我是小米,热爱分享技术的大哥哥!今天聊的是操作系统中的页面置换算法。它解决的是内存满载时,如何选择合适的页面移出以腾出空间的问题。主要有三种算法:FIFO(先进先出),简单但性能不佳;LRU(最近最久未使用),考虑时间局部性,性能较好但实现较复杂;OPT(最佳置换),理论上最优但无法实际应用。这些算法各有千秋,在实际应用中需根据场景选择最合适的方案。希望这能帮大家更好地理解内存管理的核心机制!
78 2
|
1月前
|
分布式计算 算法 内存技术
深入理解操作系统的内存管理机制
【7月更文挑战第32天】 在现代计算机系统中,操作系统扮演着至关重要的角色,它负责协调和管理整个系统的资源。其中,内存管理作为操作系统的核心功能之一,其效率和稳定性直接影响到系统的整体性能。本文旨在探讨操作系统中内存管理的基本原理、关键技术以及面临的挑战,为读者提供一个全面了解内存管理机制的视角。通过分析不同的内存分配策略、分页与分段机制以及虚拟内存技术,我们揭示了操作系统如何优化内存使用,保证多任务环境下的数据完整性和安全性。

热门文章

最新文章