IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Virtual Memory

共 6 篇相关文章

IT 累计浏览 10,487

linux内核研究笔记(一)内存管理 – page介绍

这篇讲的是 Linux 内核内存管理中最基础的数据结构——`struct page`。作者以一名服务器程序员的视角,从对“虚拟内存”的好奇出发,深入内核底层,剖析了物理内存管理的核心。 文章首先展示了 `page` 结构体的关键字段,并指出它是内核描述物理内存页的最小单元。核心在于,这片物理页在不同场景下被赋予不同角色:作为页缓存(`mapping` 域)加速文件IO,作为私有数据(`private` 域)用于缓冲或交换,或作为页表映射支撑用户空间的 `malloc`。 作者进一步通过宏定义,解释了页帧号(pfn)与 `page` 指针、物理地址、内核逻辑地址之间的转换机制。比如 `pfn_to_page` 本质上是操作全局数组 `mem_map`,巧妙地将连续的物理内存抽象为可索引的对象。文章还厘清了“内核逻辑地址”与“内核虚拟地址”的区别,并点明在 x86_32 架构下 `PAGE_OFFSET` 的由来。 理解 `page` 结构是窥探内核如何管理伙伴系统、slab分配器乃至整个虚拟内存系统的钥匙。这篇笔记从最底层的数据结构切入,为后续理解更复杂的内存管理机制打下了坚实基础。

IT 累计浏览 3,662

内存学习――虚拟内存

这篇讲的是虚拟内存的核心机制与设计逻辑。文章紧接上一篇对“为什么需要虚拟内存”的探讨,深入到具体实现层面,解释了操作系统如何通过页表、缺页中断等机制,将进程的逻辑地址空间映射到物理内存,从而构建出一个稳定、隔离且大于实际物理内存的虚拟环境。 作者从进程的视角出发,阐述了虚拟内存如何让每个程序都“错觉”自己拥有连续完整的内存空间,而底层物理内存却可能被分散地分配在不同位置。文中可能会剖析关键的内存管理单元(MMU)工作原理,以及当程序访问的页面不在物理内存时,系统如何通过换入换出机制透明地完成数据调度。 读完这篇文章,你不仅会明白虚拟内存“是什么”,更能理解它“为什么这样设计”——比如如何实现内存保护、简化编程模型,以及在资源有限的系统上高效运行多个进程。这些底层细节是理解现代操作系统性能优化和故障分析的基础。

IT 累计浏览 5,129

内存学习――为什么需要虚拟内存

这篇讲的是虚拟内存存在的必要性。作者从自己初学时对物理内存、虚拟内存的模糊认知出发,梳理出两者最核心的差异:物理内存是真实、有限的硬件,而虚拟内存为每个进程提供了一个独立、连续且远大于实际内存的地址空间。文章清晰地解释了这种抽象如何解决进程隔离、内存安全以及高效利用物理内存这几个关键问题,比如让每个程序“以为”自己独占内存,实际上则由操作系统在幕后将虚拟地址映射到真实的物理页帧。作者通过具体的逻辑推导,阐明了虚拟内存作为现代操作系统基石的作用,帮助读者从“为什么”这个源头建立起理解。

IT 累计浏览 3,231

vmstat 命令

这篇讲的是Linux/Unix系统中一个非常经典但又容易被忽略的性能分析工具:vmstat。作者直接从命令语法切入,解析了`vmstat [-a] [-n] [delay [count]]`这几个核心参数的实际意义。 文章着重解释了`-a`参数如何揭示内存的活跃与非活跃状态,`-n`参数如何省略冗长的头部信息以聚焦数据本身,以及`delay`与`count`如何组合来控制采样频率和持续时长。这些参数的灵活运用,能让系统管理员或开发者从进程、内存、I/O和CPU等多个维度,快速获取系统负载的快照或连续视图。 对于需要诊断系统性能瓶颈、特别是判断是内存不足还是I/O阻塞的场景,理解vmstat输出的每一列(如`r`列表示运行队列、`si/so`表示交换活动)至关重要。这篇介绍虽然简短,但抓住了工具最核心的使用逻辑,为后续深入分析系统状态打下了基础。

IT 累计浏览 4,024

linux磁盘管理学习笔记补充:连接ln、虚拟内存

这篇笔记从实际应用场景出发,首先将Linux中的“连接”类比为Windows用户熟悉的快捷方式,解释了其核心概念,随后深入辨析了硬连接与符号连接这两种连接方式的关键差异。 作者具体阐述了实现机制的不同:硬连接实质上是在目标文件的目录下新增一条指向相同 inode(文件系统索引节点)的记录,因此创建后,多个路径将指向完全相同的文件数据,占用同一份存储空间。而符号连接(软连接)则创建了一个新的独立文件,其内容仅仅是指向目标文件或目录的路径字符串。 通过为 `/root/a.txt` 创建硬连接到 `/home/test/b.txt` 这个具体例子,文章直观地展示了硬连接如何使两个不同目录下的文件名关联到同一份物理数据。这种对底层原理的剖析,帮助读者理解了硬连接不能跨文件系统、也不能针对目录等限制,而符号连接则更灵活但会增加文件系统开销的区别。 了解这两种连接的本质,对于合理规划文件组织、节省存储空间以及理解文件删除(如硬连接计数)等操作至关重要。

IT 累计浏览 3,876

关于虚拟内存的一点理解

这篇讲的是虚拟内存中一个容易被忽略的基础限制:程序可寻址的内存空间大小实际上是由CPU的指针位宽决定的。作者从32位系统的指针类型入手,清晰地说明了为什么这类机器上单个程序无法使用超过4GB的内存——因为4字节的指针最多只能表示4GB(2^32)的地址空间。 更进一步,文章还提到,这个理论上的4GB上限在实际操作系统中往往还无法达到。因为操作系统自身需要保留一部分地址空间用于内核和其他系统用途,所以用户态程序实际可用的内存会比这个理论值更小。这个细节很关键,它解释了为什么许多32位应用在占用内存接近但未达到4GB时,就可能出现内存不足的异常。 虽然篇幅不长,但文章直指虚拟内存寻址的一个核心概念:内存指针的位宽直接框定了程序能“看到”和使用的内存边界。这对于理解为什么需要64位系统、以及32位应用迁移到64位平台时会面临怎样的内存模型变化,是一个扎实的起点。