Linux 虚拟地址空间(通俗易懂)

简介: Linux 虚拟地址空间(通俗易懂)

前言


虚拟地址的定义

虚拟地址又叫虚拟内存,虚拟内存是内存管理的一种方式, 它在磁盘上划分出一块空间由操作系统管理,当物理内存耗尽时充当物理内存来使用。它将多个物理内存碎片和部分磁盘空间重定义为连续的地址空间,以此让程序认为自己拥有连续可用的内存。当物理内存不足时,操作系统会将处于不活动状态的程序以及它们的数据全部交换到磁盘上来释放物理内存,以供其它程序使用。

虚拟地址空间的定义

 虚拟地址空间(virtual address space)是2018年公布的计算机科学技术名词。

 是由进程的虚地址构成的地址空间。

 在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中,这个沙盘就是虚拟地址空间(virtual address space)。虚拟地址空间由内核空间(kernel space)和用户模式空间(user mode space)两部分组成。


说明:虚拟地址空间主要是为了解决,程序所需内存过大,如果直接使用物理内存可能造成程序存放的内存在地址上不连续问题!


一、虚拟地址空间分布


f997007ea0c1499099a17302f0298417.png

下面由高地址到低地址依次介绍:


二、具体介绍

2.1 内核空间


内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。可以通过对Linux系统进行系统调用


2.2 栈(stack)


栈是由高地址向低地址扩展的连续内存,栈的大小一般为 2M 或者 10M。


栈内存是由系统分配,系统释放的,以函数为单位进行栈内存分配,函数栈帧,局部变量,形参变量等都存放在栈内存上。栈的内存分配释放速度快效率高,内存都是连续的。


2.3 堆(heap)


堆是由低地址向高地址扩展的非连续内存,堆的大小影响的因素比较多,和系统虚拟内存的大小有关系。


堆需要用户自己管理,因此堆内存很容易造成内存泄露,而栈内存不会。堆内存的分配释放相对于栈来说效率低一些,内存不一定连续,容易产生内存碎片,但是灵活性高。


2.4受保护的地址


主要存放 NULL/nullptr


说明:其他几个模块作用见上图说明!

相关文章
|
4月前
|
存储 Linux 调度
深入理解Linux内核:从用户空间到内核空间的旅程
【8月更文挑战第4天】在这篇文章中,我们将探索Linux操作系统的核心—内核。通过了解内核如何管理硬件资源,以及它是如何在用户空间和内核空间之间架起桥梁的,我们可以更好地理解操作系统的工作原理。本文将介绍一些关键概念,并通过代码示例来揭示这些概念是如何在实际中应用的。无论你是开发者、系统管理员还是对操作系统感兴趣的爱好者,这篇文章都将为你提供一个深入了解Linux内核的机会。让我们开始这段旅程吧!
|
2月前
|
网络协议 Linux 开发工具
linux系统配置固定地址
linux系统配置固定地址
|
4月前
|
存储 NoSQL Linux
深度探索Linux操作系统 —— 从内核空间到用户空间3
深度探索Linux操作系统 —— 从内核空间到用户空间
52 9
|
4月前
|
存储 NoSQL Linux
深度探索Linux操作系统 —— 从内核空间到用户空间2
深度探索Linux操作系统 —— 从内核空间到用户空间
50 7
|
3月前
|
Linux Python
linux之部署python环境&创建虚拟环境
linux之部署python环境&创建虚拟环境
|
4月前
|
存储 安全 Linux
深度探索Linux操作系统 —— 从内核空间到用户空间1
深度探索Linux操作系统 —— 从内核空间到用户空间
57 4
|
4月前
|
Linux 持续交付 虚拟化
在Linux中,Docker和容器虚拟概念是什么?
在Linux中,Docker和容器虚拟概念是什么?
|
4月前
|
监控 Linux
在Linux中,如何检查磁盘使用情况和剩余空间?
在Linux中,如何检查磁盘使用情况和剩余空间?
|
4月前
|
Linux 开发工具 C语言
如何在Arch Linux上构建Raspberry Pi虚拟环境
【8月更文挑战第18天】在Arch Linux中构建Raspberry Pi虚拟环境需先安装QEMU等工具,接着获取Raspberry Pi固件与内核。配置QEMU时,建立启动脚本指定硬件与软件参数,并设置执行权限。最后运行脚本即可启动虚拟环境。整个过程可能需要依据个人配置进行调试。确保拥有合法权限使用相关软件与固件。