【整理】虚拟地址全解析:操作系统内存管理与进程调度的深度揭秘!

news/2024/9/18 22:51:40/文章来源:https://www.cnblogs.com/o-O-oO/p/18406243

原创 freedom47

概述

在现代计算机系统中,虚拟地址是内存管理的关键组成部分。
虚拟地址不仅帮助操作系统高效地管理物理内存,还在进程的内存分配中发挥重要作用。
本文将详细介绍虚拟地址的定义、作用、操作系统的内存管理、进程内存分配、32 位与 64 位架构的内存分配差异,以及物理内存不足时的分配策略。

虚拟地址是什么

虚拟地址(Virtual Address)是由操作系统和硬件共同管理的逻辑地址。
它为每个进程提供一个独立的、连续的地址空间,使进程能够认为自己占据了整个内存空间,而实际的物理内存可能是分散的,部分数据甚至可能存放在磁盘上。

虚拟地址的管理依赖于硬件(主要是内存管理单元 MMU)和操作系统。
MMU 负责将虚拟地址映射到物理地址,页面表(Page Table)用于维护虚拟地址与物理地址之间的映射关系。

虚拟地址的作用

1. 地址空间隔离:每个进程都有独立的虚拟地址空间,相互隔离,避免了进程间的数据干扰和非法访问,提高了系统安全性。2. 简化内存管理:虚拟地址让程序无需关心物理内存的实际布局和大小,开发者可以专注于编写代码,内存管理的复杂性由操作系统处理。3. 扩展内存使用:虚拟地址支持虚拟内存技术,可以将不常用的数据换入硬盘(如交换分区或页面文件),从而突破物理内存的限制。4. 内存保护:通过权限控制(如读、写、执行权限),虚拟地址可以保护进程的内存空间,防止恶意或错误的内存访问。

操作系统如何使用物理内存

操作系统通过虚拟地址来管理物理内存,使用分页(Paging)和分段(Segmentation)机制,将物理内存划分为较小的单位,并通过页面表将这些单位映射到虚拟地址。

1. 分页机制:物理内存被划分为固定大小的页面框(Frame),虚拟地址被划分为对应大小的页面(Page)。MMU 将虚拟页面映射到物理页面框,实现虚拟地址到物理地址的转换。2. 分段机制:将虚拟地址划分为多个段(Segment),每个段可以具有不同的长度和权限,用于代码、数据、堆栈等不同类型的数据组织。分段机制用于逻辑分离,常与分页机制结合使用。3. 页面调度:当物理内存不足时,操作系统会将不常用的页面交换到磁盘的交换空间(Swap Space)中,从而腾出物理内存。4. 内存保护与管理:操作系统通过页面表设置访问权限,确保进程只能访问合法的内存区域,避免越界访问其他进程的内存。

进程如何分配虚拟地址空间

每个进程在启动时,操作系统会为其创建一个独立的虚拟地址空间。这个空间通常包含以下几个部分:

1. 代码段(Text Segment):存储可执行代码,通常为只读,以防止程序错误地修改自身代码。2. 数据段(Data Segment):用于存放已初始化和未初始化的全局变量、静态变量等数据。3. 堆区(Heap Segment):用于动态内存分配,程序在运行时可随时调整堆的大小,用于存储动态创建的数据。4. 栈区(Stack Segment):用于函数调用时的临时变量分配,包括局部变量和函数参数。栈具有自动分配和释放的特性。

操作系统通过每个进程独立的页面表来管理虚拟地址到物理地址的映射,确保进程之间的内存使用互不干扰。

32 位与 64 位架构下的内存分配区别

1. 地址空间大小:32 位系统的虚拟地址空间最大为 4GB,而 64 位系统的虚拟地址空间理论上可以达到 16EB(Exabytes),但受限于当前硬件和操作系统的实现。2. 内存寻址能力:32 位系统最多可寻址 4GB 的物理内存,而 64 位系统的物理内存寻址能力更强,支持更大规模的数据处理和更高效的系统性能。3. 页面表结构:64 位系统使用多级页面表来管理更大的地址空间,但也增加了内存开销和复杂性。4. 性能和效率:64 位系统的寄存器数量更多,指针和数据宽度更大,能处理更大的数据块,但相应地也增加了内存占用,这在资源紧张时可能成为负担。

物理内存不足时,各个进程间是如何分配使用的

当物理内存不足时,操作系统通过虚拟内存管理机制进行优化和调度,主要策略包括:

1. 页面置换(Page Replacement):当物理内存无法满足需求时,操作系统通过页面置换算法(如 LRU、FIFO 等)将不常用的页面换出内存,并在需要时重新载入。2. 内存交换(Swapping):当内存极度不足时,操作系统可能会将整个进程的工作集交换到磁盘中,以释放物理内存供其他进程使用。3. 优先级调度:操作系统根据进程优先级分配物理内存,高优先级进程可能获得更多内存资源,而低优先级进程可能被限制或交换出内存。4. 内存回收和紧缩:操作系统定期回收未使用的内存区域,并整理内存碎片,尽可能优化内存的利用率。5. 内存超分配(Overcommitment):部分操作系统(如 Linux)允许进程申请超过实际可用物理内存的空间,以提高内存利用效率。但在资源不足时,这可能导致 OOM(Out of Memory)错误,系统会终止某些进程以释放内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795156.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.9.10 搜索引擎+字体

今天是人工智能的第一节课!我们主要学了引擎的搜索以及字体两部分,干货满满!有一种走了20年弯路的感觉(⊙︿⊙)第一次拥有了博客账号,在我小学的时候我妈妈会用博客记录生活,对于博客有一种熟悉的陌生感hhha 【知识小课堂1】 搜索引擎分为两类: 一、目录式分类搜索引擎,…

The Teachers Day gift a future teacher wants

`#include include void printBanner(); void printHeart(); void printFlower(); int main() { std::cout << "\n"; printBanner(); std::cout << std::endl; printFlower(); std::cout << std::endl; printHeart();return 0;}`点击查看代码 vo…

解决路由缓存问题

路由缓存问题即:当再vue3中使用带参数的路由时,随着路由跳转,组件被重新复用,不能正常执行生命周期 尤其我们通常在onMounted中使用的请求的发送,那么如何解决呢 1.粗暴的方法:强制替换销毁 vue官方曾说,key可以强制替换一个元素或者组件,而不是复用它 那么我们可以在组件中使用…

第二章python基本语法

位运算符 例1:检测列表里重复元素l=[1,3,5,7,8,3,9,4,2,5,6]flag=0for i in range(len(l)): if(1<<l[i]&flag)>0: print("重复:%d"%l[i]) flag|=(1<<l[i])#flag=flag|(1<<l[i]) 注:flag记录已经出现过的元素,其实用对应位为…

VS安装插件,按CTRL+鼠标左键进入函数

1。菜单栏-》工具-》扩展和更新 2.进入扩展和更新,点击联机,vs库,右上输入“Go To Definition” 3.搜索 出插件,选择作者是“Noah Richards” 4.下载安装重启即可hello,world~~~

【Azure Service Bus】创建 ServiceBus 的Terraform脚本报错GetAuthorizationRule: Invalid input

问题描述 在使用Terraform部署Service Bus时候,遇见了如下报错: Error: Error making Read request on Azure ServiceBus Topic Authorization Rule : servicebus.TopicsClient#GetAuthorizationRule: Invalid input: autorest/validation: validation failed: parameter=aut…

IIC工作模式时序分析

IIC工作模式时序分析 此处利用IO口模拟IIC通信过程中的时序。通信过程 在IIC通信过程SDA存在两种模式(接收模式和发送模式),发送或接受一个字节(器件的7个bit+1个bit方向(1 - 读方向,0 - 写方向)) 模式配置当SDA为接入模式接收了1字节数据后在第九个时钟脉冲期间就要变…

第四章 视图(views)

4.视图 4.1 文件or文件夹4.2 相对和绝对导入urls注意实现:不要再项目根目录做相对导入。 原则:绝对导入 相对导入(层级深)4.3 视图参数 urlpatterns = [path(login/, account.login, name="login"),path(auth/, order.auth, name=auth), ]from django.shortcuts …

[设计模式] Cola-StateMachine : 一个轻量实用的Java状态机框架

1 概述:状态机 1.0 状态机 vs 工作流在介绍状态机之前,先介绍一个工作流(WorkFlow),初学者通常容易将两个概念混淆。工作流(WorkFlow),大体是指业务过程(整体或者部分)在计算机应用环境下的自动化,是对工作流程及其各操作步骤之间业务规则的描述。在计算机系统中,工…