Linux内存术语小记

整理一下内存的一些术语。

内存:

内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它的存取速度慢于CPU缓存,但快于硬盘。算是存储结构中的第二层。

我们的程序要运行,都需要先读取到内存中。我们所说的内存,通常指的就是物理内存,也就是内存条

虚拟存储器:

Linux使用虚拟存储器来管理内存。通过将对内存进行抽象,将其作为存储在硬盘上数据的高速缓存,只将当前进程部分代码缓存到主存中(当前进程的程序较少时,可以全部缓存在主存中),从而提高了主存的利用率,使其同时可以容纳更多的进程同时运行。

虚拟存储器是对主存的的一种抽象,基本思想:利用硬盘来充当内存,用内存作硬盘的缓存。即虚拟地址空间维护的是硬盘中的数据,通过将要使用的数据缓存在内存中,使应用程序误以为数据一直在内存中。

如图所示,页表中有的地址指向的是物理存储器,有的指向虚拟存储器(磁盘)。如果访问的内存没有载入物理内存,则会引发缺页。操作系统就会把磁盘中对应的页调入内存。

文件映射页(有名页):

文件映射页指的是内存中能对应到文件的页(也叫有名页),比如我们读取一个txt文件,这个文件在内存中的映像就是一个文件映射页。载入内存的程序代码也都是文件映射页。

文件映射页如果被改写,就被称为脏页。在内存不足或者程序调用刷盘指令时,脏页会被刷回磁盘。因此,通常情况下,内存不足时最先释放文件映射页。

匿名页:

并不是所有的内存都能对应到文件,比如程序中的一些中间数据,malloc申请的内存空间。它们没有对应的文件,所以被称之为匿名页

交换分区(SWAP):

操作系统划了一个专门的空间来给匿名页做交换。称之为交换分区(SWAP),Windows中称之为虚拟内存。当物理内存紧张时,脏页被刷回磁盘文件,而匿名页则被交换到SWAP中。

但,因为使用SWAP会消耗大量IO,而且也会大量浪费内存(记录地址等),加上目前内存容量越来越大。所以大多情况下,SWAP都不启用。

Page Cache

页高速缓冲存储器,简称页高缓。page cache的大小为一页,通常为4K。在linux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。显然,这是文件映射页。

Page cache是vfs文件系统层的cache,例如 对于一个ext3文件系统而言,每个文件都会有一棵radix树管理文件的缓存页,这些被管理的缓存页被称之为page cache。所以,page cache是针对文件系统而言的。

Buffer Cache

其中文名称为缓冲器高速缓冲存储器,buffer cache是对设备数据的缓存。

在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘block进行读写,那么数据会缓存到buffer cache。

这里给人一种重复缓存的感觉,Buffer Cache缓存了一次,Page Cache又缓存了一次,这显然是没必要的。所以,在Linux 2.6的内核中Page cache和Buffer cache进一步结合,Buffer pages其实也是Page cache里面的页。所以,如果数据既在Buffer Cache缓存又在Page Cache缓存,那就直接用Page Cache存储,不会存两份。当然,一些磁盘的信息,依然是Buffer Cache存储的。

转载请注明:旅途@KryptosX » Linux内存术语小记

时间: 2024-06-19 20:40:32

Linux内存术语小记的相关文章

Linux内存管理【转】

转自:http://www.cnblogs.com/wuchanming/p/4360264.html 转载:http://www.kerneltravel.net/journal/v/mem.htm Linux内存管理 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理

Linux内存管理 【转】

转自:http://blog.chinaunix.net/uid-25909619-id-4491368.html Linux内存管理 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理. 前言 内存管理一向是所有操作系统书

Linux内存管理

转载:http://www.kerneltravel.net/journal/v/mem.htm Linux内存管理 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理. 前言 内存管理一向是所有操作系统书籍不惜笔墨重点讨论

深入理解Linux内存管理机制(一)

深入理解Linux内存管理机制(一)通过本文,您即可以: 1. 存储器硬件结构: 2.分段以及对应的组织方式: 3.分页以及对应的组织方式. 注1:本文以Linux内核2.6.32.59本版为例,其对应的代码可以在http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.59.tar.bz2找到. 注2:本文所有的英文专有名词都是我随便翻译的,请对照英文原文进行理解. 注3:推荐使用Source Insig

linux内存映射

内存管理分为对连续物理内存区管理和非连续内存区管理,本文主要讲解连续的物理内存区管理的技术中所涉及到的内核线性地址空间映射的相关知识.涉及到的东西有:页框,管理区(高端内存,低端内存),高端内存映射等,这些知识是掌握伙伴系统算法和slab分配器的基础. 一.页框 页框为物理内存分配的基本单元,现代32位计算机一般设置为4KB(见上文计算机内存寻址).内核必须记录每个页框的当前状态,例如:页框属于哪个经常的页,哪些页框抱哈的是内核代码或内核数据等,由此linux定义了一个页框的描述符:page.l

《Oracle高性能自动化运维》一一1.4 Linux内存体系与Oracle内存空间

1.4 Linux内存体系与Oracle内存空间1.4.1 Linux用户空间与内核空间 一般来说,Linux操作系统把虚拟地址空间划分为用户空间和内核空间.例如x86架构下的32位Linux虚拟地址空间是4GB(0x0000 0000-0xffff ffff),其中大致将前3GB(0x0000 0000-0xbfff ffff)划分为用户空间,后1GB(0xc000 0000-0xffff ffff)划分为内核空间. 用户程序只能在用户模式(用户空间)下执行,而不能访问特权模式(内核空间)的数

使用 smem 可视化显示Linux内存使用情况

使用 smem 可视化显示Linux内存使用情况 物理内存不足对Linux桌面系统和服务器系统的性能影响都很大.当你的计算机变慢时,要做的第一件事就是释放内存.尤其是在多用户环境以及执行关键任务的服务器环境下,内存消耗会变得更加关键,因为多个用户和应用线程会同时竞争更多的内存空间. 如果要监测系统内各种资源的使用情况(比如说CPU或内存),图形化显示是一种高效的方法,通过图形界面可以快速分析各用户和进程的资源消耗情况.本教程将给大家介绍在linux下图形化分析内存使用情况的方法,使用到命令行工具

linux编程-关于linux内存 数据段和bss段的疑惑???

问题描述 关于linux内存 数据段和bss段的疑惑??? 数据段和bss段分别存放 已初始化/未初始化 的全局变量和静态变量. 那么,假如bss段的全局变量和静态变量在代码执行中被初始化了,那么会不会被转移到 数据段存储呢??? 解决方案 首先我觉得你所说的在执行中被初始化的说法是不正确的,应该叫赋值. 接下来我们看一段代码: #include <stdio.h> int a; int b=10; int c=11; int main(void) { int d; int e=12; ret

深入理解Linux内存映射机制

作者:王智通   一. 绪 论 二. X86的硬件寻址方法 三. 内核对页表的设置 四. 实例分析映射机制一. 绪 论 我们经常在程序的反汇编代码中看到一些类似0×32118965这样的地址,操作系统中称为线性地址,或虚拟地址.虚拟地址有什么用?虚拟地址又是如何转换为物理内存地址的呢?本章将对此作一个简要阐述. 1.1  Linux内存寻址概述 现代意义上的操作系统都处于32位保护模式下.每个进程一般都能寻址4G的物理空间.但是我们的物理内存一般都是几百M,进程怎么能获得4G的物理空间呢?这就是