首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

物理内存管理

前言: 书接上回《内存映射技术分析》,继续来分析一下linux的物理内存管理。 分析: 1,物理内存 PC上的内存条,或者手机上的内存芯片,物理上实实在在的内存,就是物理内存。...Orz 2,e820 使用dmesg查看内核log: 从时间上也看得出来,在kernel启动的早期阶段,会得到物理内存的RAM map。 ?...所以kernel把高于896M的物理内存标记为High Memory Zone,访问High Memory Zone的内存就不能使用固定映射了,需要动态映射。...而且在服务器上也一般不会使用到。 9,slab 内核中分配内存的最小单位是page。但是,很多数据结构只有几十byte。第一是浪费空间,第二是分配/回收page的代价太高。于是就有了slab。...比如说互联网服务器上,它的skb肯定很多,小文件很多的机器上,它的inode占用肯定要多一些。 10,sparse mem 物理内存上,如果存在巨大的hole,可以考虑使用sparse mem。

2.6K70
您找到你想要的搜索结果了吗?
是的
没有找到

物理内存与虚拟内存

物理内存就是你的机器本身内存了(如内存条的大小)。物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。...当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件(页面文件)上,并将需要访问内存的程序的内容从页面文件中换入到物理内存。...所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个虚拟内存内存交换区。...的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。...总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

2.1K31

【Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

文章目录 一、物理页 page 简介 1、物理页 page 引入 2、物理页 page 与 MMU 内存管理单元 3、物理页 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 与 物理页 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理页 Page , Linux 内核中 , 使用 上述...3 级结构 描述 和 管理 " 物理内存 " ; 一、物理页 page 简介 ---- 1、物理页 page 引入 " 内存节点 " node 是内存管理的 最顶层结构 , " 内存节点 " 再向下划分..., 就是 " 内存区域 " zone , " 内存区域 " 再向下划分 , 就是 " 物理页 " page ; 2、物理页 page 与 MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元...结构体 " 物理页 " page 是 Linux 内核 " 内存管理 " 中的 最小单位 , 物理页 中的 " 物理地址 " 是连续的 , 每个 " 物理页 " 使用 struct page 结构体

6.8K10

python统计httpd 进程的内存

本文结构: 介绍用命令行如何统计内存占用百分比 介绍用python 如何通过读取进程文件,统计进程的内存总大小,然后计算系统内存的百分比 第一部分: 在linux 下,统计apache 进程的内存使用百分比...,有很多方法: 使用命令将所有apache 的进程进行统计,然后相加,然后和系统的物理内存相除,求百分比。...如图,"ps   aux" 命令输出的第六个字段就是某个进程所占的物理内存,单位是KB.然后就可以将需要的apache 进程过滤出来,统计。 最后,用free 就可以看到系统的总内存: ?...可以通过读取文件,获取各个apache 进程的VmRSS(物理内存)大小,以及系统的总内存。 2.1 通过什么文件查看进程占用内存的信息?...如上图,VmRSS 这行就是内存大小。 2.2 如何获取所有apache 的进程id号? 因为apache 通常都会fork 很多的子进程,这些子进程都会占用内存

1.3K20

物理服务器是什么?物理服务器有哪些优势?

物理服务器是什么?物理服务器有哪些优势?...目前大型企业在选择公司服务器的时候往往会选择物理服务器,因为物理服务器租用费用相对较高,中小型企业使用不划算,而且也会造成资源浪费,但是最近我们接收到从其他服务器商那里转来的客户中,我们发现一些问题,他们租用服务器的时候费用比较低...,但是在使用的过程中成本逐渐升高,下面赵一八笔记就给大家讲解物理服务器有哪些优势?...一、物理服务器租用对运行需求高吗? 大多数低成本物理服务器租用提供商使用的是老旧硬件,或者难以保障长时间稳定运行的桌面级服务器组件。...对内存而言,您需要确保使用ECC RAM,它可以自动检测并自动纠正大部分内部数据损坏。对硬盘而言,无论HDD还是SSD,建议选择国际品牌硬件商提供的企业级硬盘。

4.3K10

Redis的String类型,原来这么内存

图片 Redis的String类型,原来这么内存 存一个 Long 类型这么内存,Redis 的内存开销都花在哪儿了?...len: 4 个字节,表示 buf 的已用长度,不包括'\0'。 alloc:也 4 个字节,表示 buf 的实际分配长度,不包括'\0'。...flags: 1 个字节,标记当前字节数组的属性,是sdshdr8还是sdshdr16等。...当保存的是字符串数据,并且字符串小于等于 44 字节时,RedisObject 中的元数据、指针和 SDS 是一块连续的内存区域,这样就可以避免内存碎片。...最终我们分析出来的内存开销,为 66 字节,比较接近上文场景中的平均值 68 了。 最后 既然 String 类型这么内存,那么你有好的方案来节省内存吗?

1.2K60

物理内存管理之zone详解

上一次说过了物理内存由node,zone,page三级结构来描述。而node是根据当前的系统是NUMA还是UMA系统。假设我们当前是UMA系统架构,则只有一个node。 ?...WMARK_LOW:低水位,代表内存已经开始吃紧,需要启动回收页内核线性kswapped去回收内存 WMARK_HIGH:高水位,代表内存还是足够的。...,当系统内存出现不足的时候,系统就会使用这些保留的内存来做一些操作,比如使用保留的内存进程用来可以释放更多的内存 free_area:用于维护空闲的页,其中数组的下标对应页的order数。...通过pglist_data结构就可以完全的描述一个内存的layout了。...,就会开启内核swapd来回收内存 每次申请的page都会挂到lru链表中,当出现内存不足的时候,就会根据lru算法找出那些page最近很少使用,然后释放

3.4K10

Redis的String类型,原来这么内存

Redis的String类型,原来这么内存 存一个 Long 类型这么内存,Redis 的内存开销都花在哪儿了?...• flags: 1 个字节,标记当前字节数组的属性,是sdshdr8还是sdshdr16等。...当保存的是字符串数据,并且字符串小于等于 44 字节时,RedisObject 中的元数据、指针和 SDS 是一块连续的内存区域,这样就可以避免内存碎片。...图片 ID 使用 sdshdr5 数据结构来保存,会为 10 位的图片 ID 分配 16 个字节,结束符 '\0' 1 个字节。 共占用 34 个字节。...最终我们分析出来的内存开销,为 66 字节,比较接近上文场景中的平均值 68 了。 最后 既然 String 类型这么内存,那么你有好的方案来节省内存吗?

92060

kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)

在x86_32体系结构总, 高于896MB的所有物理内存的范围大都是高端内存, 它并不会永久地或自动映射到内核地址空间, 尽管X86处理器能够寻址物理RAM的范围达到4GB(启用PAE可以寻址64GB)...虚拟内存中连续、但物理内存中不连续的内存区,可以在vmalloc区域分配. 该机制通常用于用户过程, 内核自身会试图尽力避免非连续的物理地址。...它与通过固定公式与物理内存关联的直接映射页相反,虚拟固定映射地址与物理内存位置之间的关联可以自行定义,关联建立后内核总是会注意到的. ?...直接映射区 线性空间中从3G开始最大896M的区间, 为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。...动态内存映射区 该区域由内核函数vmalloc来分配, 特点是 : 线性空间连续, 但是对应的物理空间不一定连续. vmalloc分配的线性地址所对应的物理页可能处于低端内存, 也可能处于高端内存.

6.5K21

如何查看linux系统中空闲内存物理内存使用剩余内存

查看linux系统中空闲内存/物理内存使用/剩余内存 查看系统内存有很多方法,但主要的是用top命令和free 命令 当执行top命令看到结果,要怎么看呢?...一些简单的计算方法:  物理已用内存 = 实际已用内存 - 缓冲 - 缓存 = 6811M - 350M - 5114M 物理空闲内存 = 总物理内存 - 实际已用内存 + 缓冲 + 缓存  应用程序可用空闲内存...内容如下: Mem: 191272k total  物理内存总量   173656k used  使用的物理内存总量   17616k free  空闲内存总量   22052k buffers  ...RES=CODE+DATA   r  CODE  可执行代码占用的物理 内存大小,单位kb   s  DATA  可执行代码以外的部分(数据 段+栈)占用的物理 内存大小,单位kb   t  SHR...proc/cpuinfo | grep "cpu cores" | uniq 查看CPU型号 # cat /proc/cpuinfo | grep 'model name' |uniq 那么,该服务器

20.1K41

内存管理两部曲之物理内存管理

随着用户程序功能的增加,进程所需要的内存空间越来越大,进程空间很容易就突破了物理内存的实际大小,导致进程无法运行。 因此,为了解决内存不足的情况,缓和大程序与小内存之间的矛盾,扩充内存容量势在必行。...可以从物理和逻辑两方面来考虑扩充内存容量,物理扩容没啥技术含量,需要我们研究的自然是如何从逻辑上扩充内存容量。 所谓逻辑扩充,就是说实际上物理内存的容量没有发生改变,但是它能装的东西却变多了。...前两种逻辑扩充技术已经成为历史,虚拟内存技术是目前的主流。所以也有很多人把内存管理这块的内容直接区分为物理内存管理和虚拟内存管理,一目了然。...内存管理整部分总览如上,而本文,内存管理第一部曲,讲的仅是物理内存管理这块。 连续分配管理方式 其实在早期的操作系统中,采用的都是连续内存空间分配的策略。...若 TLB 命中,就不需要再访问内存了;若 TLB 中没有目标页表项,则还需要去查询内存中的页表(慢表),从页表中得到物理页框地址,同时将页表中的该表项添加到 TLB 中。

87410

你写的Java对象究竟多少内存

分代年龄(age)占用4 bits,偏向模式(biased_lock)占用1 bits,锁标记(lock)占用2 bits,剩余26bits 未使用(也就是全为0) 可偏向(Biased): 线程id 54bits...,epoch 2 bits,分代年龄(age)占用4 bits,偏向模式(biased_lock)占用1 bits,锁标记(lock)占用2 bits,剩余 1bit 未使用。...GC 标记:标记位2bits,其余为空(也就是填充0) 以上就是我们对Java对象头内存模型的解析,只要是Java对象,那么就肯定会包括对象头,也就是说这部分内存占用是避免不了的。...nullObject=new NullObject(); private int a; } 这个演示类中引入了别的对象,我们知道int类型是占用4个字节,NullObject对象占用16字节,对象头12...字节,还有一个很重要的情况 NullObject在当前这个类中是一个引用,所以不会存真正的对象,而只存引用地址,引用地址4字节,所以总共就是12+4+4=20字节,内存对齐后就是24字节。

1.3K40

示例展示虚拟内存物理内存的分配

通过前两篇文章(系统调用mmap的内核实现分析,Linux下Page Fault的处理流程)我们可以知道,虚拟内存是在我们向操作系统申请内存(比如malloc或mmap)时分配的,而物理内存是在我们使用...不管是虚拟内存的分配还是物理内存的分配,都是以page为单位的,page的默认大小为4096。 之前的两篇文章理论和代码部分比较多,所以,现在我们用示例的形式,展示下虚拟内存物理内存的分配。...该区域的虚拟内存大小是8k,因为我们在调用mmap时指定的内存大小是4097,page对齐后正好是8k。 该区域的物理内存大小是0,因为我们还没使用过该区域。...通过上面的示例程序和pmap命令,我们可以清楚的看到,进程的虚拟内存物理内存是何时分配的。 那如何确定物理内存的分配是page fault触发的呢?...由此可见,示例程序中的那两次赋值操作,触发了page fault,进而分配了物理内存

1.5K10

MySQL的内存结构与物理结构

“从MySQL的物理结构和内存结构开始了解MySQL的运行机制” ?...MySQL的数据存储结构主要分两个方面:物理存储结构与内存存储结构,作为数据库,所有的数据最后一定要落到磁盘上,才能完成持久化的存储。...内存结构为了实现提升数据库整体性能,主要用于存储临时数据和日志的缓冲。本文主要讲MySQL的物理结构,以及MySQL的内存结构,对于存储引擎也主要以InnoDB为主。 ?...redo log是记录的都是关于每个页(Page)的更改的物理情况,InnoDB要读取或修改数据是从磁盘读取到内存中进行的,然后再通过一套完整的策略来刷回磁盘,这其中并不是每次都要刷回磁盘的,因为会产生大量的随机...通常在专用服务器上,80%的物理内存会分配给Buffer Pool。

8K20

Win32之内存管理之虚拟内存物理内存

一丶虚拟内存物理内存   我们知道每个应用程序都有自己独立的4GB空间. ...而值是存储在物理内存的.如下图所示. ? 根据上图所示. 我们可以分清虚拟内存物理内存. 如果我们更改了物理内存的值.那么就会影响A进程或者B进程....所以说虚拟内存是假的.当用的时候才会存储在物理内存 二丶物理内存的管理.   物理内存是使用4K的方式来管理的.也就是4096个字节.也成为一页.所以以后我们使用API的时候....用户模式可以使用的内存就是橘黄色的位置.但是没有对应的物理页.当我们申请了内存才会有对应的物理页 如果想看三环程序使用的物理页.可以通过双机调试. 调试我们的程序....物理页大小根据你的物理内存.大小来设置的.也就是说你的物理内存多大就可以换算出来.我们可以通过任务管理器查看你的物理页总数. 例如下图: ?

1.3K40
领券