首页
学习
活动
专区
圈层
工具
发布

Linux分页机制之分页机制的演变--Linux内存管理(七)

1 页式管理 1.1 分段机制存在的问题 分段,是指将程序所需要的内存空间大小的虚拟空间,通过映射机制映射到某个物理地址空间(映射的操作由硬件完成)。...分段映射机制解决了之前操作系统存在的两个问题: 地址空间没有隔离 程序运行的地址不确定 不过分段方法存在一个严重的问题:内存的使用效率低。...分页机制解决了上面分段方法所存在的一个内存使用效率问题;其核心思想是系统为程序执行文件中的第x页分配了内存中的第y页,同时y页会添加到进程虚拟空间地址的映射表中(页表),这样程序就可以通过映射访问到内存页...但是Linux并没有采用这种机制 正如前面所述,通过设置页目录项的Page Size标志启用扩展分页功能。在这种情况下,分页单元把32位线性地址分成两个字段: Directory:最高10位。...如果置为1,页目录项指的是4MB的页面,请看后面的扩展分页。 第9~11位由操作系统专用,Linux也没有做特殊之用。 ?

2.8K20

Android内存管理(四)Linux的内存管理机制

linux内存管理卷帙浩繁,本文只能层层递进地带你领略冰山轮廓,通过本文你将了解到以下内容: 为什么需要管理内存 linux段页管理机制 内存碎片的产生机理 为什么需要管理内存 老子的著名观点是无为而治...物理内存和内存碎片 ---- 前面说的段页管理机制算是虚拟空间的部分,然而linux内存管理的另外一个重要部分就是物理内存的管理了,也就是如何分配和回收物理内存,这就涉及到一些内存分配算法和分配器。...linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。...如果是大量文件读写甚至重复读写,系统读写性能就变得非常低下,在这种情况下,Linux引入了缓存机制。...Linux和Windows在内存管理机制上的区别 在Linux系统使用过程中,你会发现,无论你的电脑内存配置多么优越,仍然不时的发生可用内存吃紧的现象,感觉内存不够用了,其实不然。

3.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux分页机制之分页机制的实现详解--Linux内存管理(八)

    1 linux的分页机制 1.1 四级分页机制 前面我们提到Linux内核仅使用了较少的分段机制,但是却对分页机制的依赖性很强,其使用一种适合32位和64位结构的通用分页模型,该模型使用四级分页机制,即...1.2 不同架构的分页机制 对于不同的体系结构,Linux采用的四级页表目录的大小有所不同:对于i386而言,仅采用二级页表,即页上层目录和页中层目录长度为0;对于启用PAE的i386,采用了三级页表...1.3 为什么linux热衷:分页>分段 那么,为什么Linux是如此地热衷使用分页技术而对分段机制表现得那么地冷淡呢,因为Linux的进程处理很大程度上依赖于分页。...这就允许存放在某个页框中的一个页,然后保存到磁盘上,以后重新装入这同一页时又被装在不同的页框中。这就是虚拟内存机制的基本要素。 每一个进程有它自己的页全局目录和自己的页表集。...3.2 Linux中通过4级页表访问物理内存 linux中每个进程有它自己的PGD( Page Global Directory),它是一个物理页,并包含一个pgd_t数组。

    4.3K42

    Linux内存机制以及手动释放swap和内存

    今天我们来谈谈Linux的内存机制。 首先我们理一下概念 一、什么是linux的内存机制?...Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。...要深入了解linux内存运行机制,需要知道下面提到的几个方面: Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面...Linux 进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟 内存,有时我们会看到这么一个现象:linux...这里你可以这么理解,当我将这个buffer_pool_size设置得过大,跟操作系统内存一样大的时候,我使用mysql,会在一段时间内调用大量的数据进内存,由于linux的内存机制,再根据最近最优的原则

    10.9K41

    Linux分页机制之概述--Linux内存管理(六)

    1 分页机制 在虚拟内存中,页表是个映射表的概念, 即从进程能理解的线性地址(linear address)映射到存储器上的物理地址(phisical address)....pgtable_xx.h . 2 页表 Linux内核通过四级页表将虚拟内存空间分为5个部分(4个页表项用于选择页, 1个索引用来表示页内的偏移)....其他内容请参照博主的另外两篇博客, 我就不罗嗦了 深入理解计算机系统-之-内存寻址(五)–页式存储管理, 详细讲解了传统的页式存储管理机制 深入理解计算机系统-之-内存寻址(六)–linux中的分页机制..., 详细的讲解了Linux内核分页机制的实现机制 3 Linux分页机制的演变 3.1 Linux的页表实现 由于程序存在局部化特征, 这意味着在特定的时间内只有部分内存会被频繁访问,具体点,进程空间中的...3.3 Linux的三级页表 当X86引入物理地址扩展(Pisycal Addrress Extension, PAE)后,可以支持大于4G的物理内存(36位),但虚拟地址依然是32位,原先的页表项不适用

    6.4K20

    Linux内存寻址之分段机制及分页机制【转】

    前言 本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制; 最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。...因为,Linux基本不使用分段的机制,或者说,Linux中的分段机制只是为了兼容IA32的硬件而设计的。...参考资料 《深入分析Linux内核源码》 在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程。下面,我们就来看看更加重要和复杂的分页机制。...Linux中的分页机制 Linux使用了一个适合32位和64位系统的分页机制。 ?...最后分享两篇linux内存寻址的实验文档,结合实例更容易理解。 Linux内存地址映射 Linux内核在x86_64 CPU中地址映射

    4.4K50

    认识 Linux 内存构成:Linux 内存调优之内存分配机制和换页行为认知

    写在前面 博文内容涉及 Linux 中内存分配和换页机制的基本认知 理解不足小伙伴帮忙指正 :),生活加油 99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑...不要站在原地想象困难,行动永远是改变现状的最佳方式 前面的文章和小伙伴们分享了 Linux 虚拟内存,物理内存,以及页表,TLB,大页认知,今天我们来看看具体的内存分配以及换页行为 内存分配机制和换页行为认知...内存分配机制 前面的博文我们有讲到,Linux 系统中进程内存的使用是通过申请虚拟内存,按需分配物理内存的方式,内存页是内存的基本单位,Linux 一个标准的内存页一般为 4kb, 具体要由 CPU...这一过程的触发水位和调控机制与以下核心概念和参数相关: Linux 内核通过三个 内存水位阈值(watermark) 衡量内存压力,并决定是否触发 kswapd 的回收行为: 页高阈值(pages_high...缓存/缓冲区机制 当内存不够时,Linux 会进行换页操作,在极端情况下会直接杀掉内存溢出进程的 OOM Killer,在内存充足的时候, Linux 会使用空闲的内存来作为文件系统的缓存,cache

    95910

    Java的内存机制

    分配给它的内存会被回收),Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。...这也是 Java 比较占内存的原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!...,两个对象输出的内容一样,实际上所谓的引用传递,就是将一个堆内存空间的使用权交个多个栈内存空间,每个栈内存空间都可以修改堆内存空间的内容,此程序的内存分配图如下所示: ?...注意点: Java本身提供垃圾收集机制(Garbage Collection,GC),会不定期施放不用的内存空间,只要对象不用了,就会等待GC释放空间,如上面堆内存中的name="李四";age=33...java中常用的内存区域 在java中主要存在4块内存空间,这些内存的名称及作用如下: 栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址) 堆内存空间:保存每个对象的具体属性内容

    91820

    Android内存管理(六)Android对Linux系统的内存管理机制进行的优化

    Android对内存的使用方式同样是“尽最大限度的使用”,这一点继承了Linux的优点。...只不过有所不同的是,Linux侧重于尽可能多的缓存磁盘数据以降低磁盘IO进而提高系统的数据访问性能,而 Android侧重于尽可能多的缓存进程以提高应用启动和切换速度。...Linux系统在进程活动停止后就结束该进程,而Android系统则会在内存中尽量长时间的保持应用进程,直到系统需要更多内存为止 。...那为什么内存少的时候运行大型程序会慢呢,原因是:在内存剩余不多时打开大型程序会触发系统自身的进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。...当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程) 中运行。

    2.7K10

    Java的内存机制

    分配给它的内存会被回收),Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。   ...堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。...我们可以从上图中发现,对象名称per被保存在了栈内存中(更加准确的说法是,在栈内存中保存的是堆内存空间的访问地址),而对象的具体内容,比如属性name和age,被保存在了堆内存中。...注意点: Java本身提供垃圾收集机制(Garbage Collection,GC),会不定期施放不用的内存空间,只要对象不用了,就会等待GC释放空间,如上面堆内存中的name="李四";age=33。...java中常用的内存区域 在java中主要存在4块内存空间,这些内存的名称及作用如下: 栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址) 堆内存空间:保存每个对象的具体属性内容

    85400

    深入解析Linux新系统调用mseal的内存密封机制

    Linux新系统调用mseal深度解析mseal的定位与特性内存密封机制允许开发者在程序运行时将内存区域标记为不可变,防止攻击者通过代码执行原语修改虚拟内存区域(VMA)的权限或布局。...)替换密封映射约束mremap的扩展/收缩操作内核实现剖析mseal系统调用签名如下:int mseal(unsigned long start, size_t len, unsigned long flags...mprotect(exec_offset, getpagesize(), PROT_EXEC); // 将失败防御内存洞穿攻击Chrome安全团队发现的危险模式:攻击者传入畸形指针触发unmap/remap...分配区域堆栈防护需注意动态扩展特性,建议采用分帧密封策略:随着glibc集成的完善,mseal将成为Linux生态对抗内存攻击的重要基石。...该机制特别适合浏览器JIT引擎、安全敏感服务等场景,为现代漏洞缓解体系提供新的防御维度。

    27300

    【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )

    文章目录 一、RCU 机制 二、RCU 机制的优势与弊端 三、RCU 机制的链表应用场景 一、RCU 机制 ---- RCU , 英文全称是 " Read-Copy-Update “ , 对应的中文名称是...” 读取-拷贝-更新 “ , 这是 Linux 内核中的 ” 同步机制 " ; Linux 内核中还有其它同步机制 , 如 " 原子操作 " , " 读写信号量 " 等 " 锁机制 " ; RCU 机制...副本 " , 然后再删除原来的 " 共享数据 " ; 二、RCU 机制的优势与弊端 ---- RCU 的优势是 " 读者 " ( 读取共享数据的线程 ) 不需要承担同步开销 , 同步开销指的是 : ①...获取 " 锁 " , ② 执行 " 原子指令 " , ③ 执行 " 内存屏障 " ; 与此相对的 RCU 机制也有一定弊端 , " 写者 " ( 修改共享数据的线程 ) 需要 承担很大的同步开销 ,...其需要 ① 延迟对象释放 , ② 读取 并 复制 共享数据 , ③ 必须使用 互斥锁 机制 ; 三、RCU 机制的链表应用场景 ---- RCU 机制 可以极大地 提高 " 链表 " 数据结构的 读取效率

    2.6K20

    redis内存的淘汰机制

    引入 Redis是基于内存存储,常用于数据的缓存,所以Redis提供了对键的过期时间的设置,实现了几种淘汰机制便于适应各种场景。...清除过期Key的机制 定期删除和惰性删除 定期删除:默认每隔100ms随机抽取设置过期的key,检查是否过期。保证性能。 缺点:会有很多过期key到时间没有被删除。...解决问题的方案:redis内存淘汰机制 内存淘汰机制 目的: 删除到达时间的键对象 内存使用到达maxmemory上限时出发内存溢出控制策略 mysql中有2000w数据,redis中只存20万数据,如何保证...no-eviction:禁止淘汰数据,内存不足时报错。 4.0以后新加的策略: volatile-lfu:从已设置过期时间的数据集中选择最不经常使用的数据淘汰。...allkeys-lfu:当内存不足时,在键空间,移除最不经常使用的key。

    74120

    Dart内存机制

    一、移动端的内存回收机制 GC(Garbage Collection),垃圾回收机制,简单地说就是程序中及时处理废弃不用的内存对象的机制,防止内存中废弃对象堆积过多造成内存泄漏 常见的垃圾回收算法有引用计数法...1、iOS端 Objective-C语言本身是支持垃圾回收机制的,但有平台局限性,仅限于Mac桌面系统开发中,而在iPhone和iPad等苹果移动终端设备中是不支持垃圾回收机制的。...,而无需开发者关心,比如Java中的垃圾回收机制; 引用计数是局部性的,开发者要管理控制每个对象的引用计数,单个对象引用计数为0后会马上被释放掉。...其次dart 的GC机制能够快速有效的进行对象回收,不用担心Widget创建过多导致OOM出现。...机制和老年代GC频率很低的原因,基本上不会出现这个问题。

    1.9K20

    【Linux 内核 内存管理】RCU 机制 ② ( RCU 机制适用场景 | RCU 机制特点 | 使用 RCU 机制保护链表 )

    文章目录 一、RCU 机制适用场景 二、RCU 机制特点 三、使用 RCU 机制保护链表 一、RCU 机制适用场景 ---- 在上一篇博客 【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介...| RCU 机制的优势与弊端 | RCU 机制的链表应用场景 ) 中 , 分析了 RCU 机制的优势与弊端 ; 优势 : RCU 的优势是 " 读者 " ( 读取共享数据的线程 ) 不需要承担同步开销..., 同步开销指的是 : ① 获取 " 锁 " , ② 执行 " 原子指令 " , ③ 执行 " 内存屏障 " ; 弊端 : 与此相对的 RCU 机制也有一定弊端 , " 写者 " ( 修改共享数据的线程...动态分配 指的是 使用 malloc , calloc 等内存申请函数 , 申请的数据结构 , 不是栈内存数据结构 ; RCU 机制保护的 " 临界区 " ( 函数代码块 ) 中 , 不能执行耗时操作...) 性能要求很高 ; 三、使用 RCU 机制保护链表 ---- RCU 机制 除了保护 普通指针 指向的数据 之外 , 还可以用于 保护 " 链表 " 数据结构 ; Linux 内核中 , 提供了 一系列的

    1.4K30

    启动期间的内存管理之pagging_init初始化分页机制--Linux内存管理(十四)

    1 今日内容(分页机制初始化) 在初始化内存的结点和内存区域之前, 内核先通过pagging_init初始化了内核的分页机制....在分页机制完成后, 才会开始初始化系统的内存数据结构(包括内存节点数据和内存区域), 并在随后初始化buddy伙伴系统来接管内存管理的工作 2 分页机制初始化 arm64架构下, 内核在start_kernel...()->setup_arch()中通过arm64_memblock_init( )完成了memblock的初始化之后, 接着通过setup_arch()->paging_init()开始初始化分页机制...虚拟内存中连续、但物理内存中不连续的内存区,可以在vmalloc区域分配。该机制通常用于用户过程,内核自身会试图尽力避免非连续的物理地址。...内核通常会成功,因为大部分大的内存块都在启动时分配给内核,那时内存的碎片尚不严重。但在已经运行了很长时间的系统上,在内核需要物理内存时,就可能出现可用空间不连续的情况。

    1.8K20

    Java的内存回收机制

    在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。...在这个状态下,系统的垃圾回收机制准备回收该对象的所占用的内存,在回收之前,系统会调用finalize()方法进行资源清理,如果资源整理后重新让一个以上引用变量引用该对象,则这个对象会再次变为可达状态;否则就会进入不可达状态...3.Java垃圾回收机制 其实Java垃圾回收主要做的是两件事:1)内存回收 2)碎片整理 3.1垃圾回收算法 1)串行回收(只用一个CPU)和并行回收(多个CPU才有用):串行回收是不管系统有多少个CPU...: ①Young代 : Ⅰ回收机制 :因为对象数量少,所以采用复制回收。...②Old代 : Ⅰ回收机制 :采用标记压缩算法回收。 Ⅱ对象来源 :1.对象大直接进入老年代。

    2.2K70

    oc的内存管理机制

    OC中每个对象都有一个与之对应的整数,叫“引用计数器”,当一个对象在创建之后它的引用计数器值加1,当调用这个对象的alloc、retain、new、copy方法之后引用计数器值自动在原来的基础上加1,当调用这个对象的...release方法之后它的引用计数器值减1,如果一个对象的引用计数器值为0,则系统会自动调用这个对象的dealloc方法来销毁这个对象。...内存管理原则: 1.使用new、alloc、copy方法创建一个对象时,该对象的保留计数器值为1。当不再使用该对象时,应该向该对象发送一条release或autorelease消息。...这样该对象在其使用寿命结束时被销毁; 2.当你获得一个对象时,假设该对象的保留计数器值为1,而且已经被设置为自动释放,那么你不需要执行任何操作来确保该对象得到清理。...必须保持retain方法和release方法的使用次数相等。 注:对象之间可能交叉引用,此时需要遵循一个法则:谁创建,谁释放。

    57410

    Python的内存管理机制

    任何编程语言都会有一个内存模型,以便管理为变量分配的内存空间。...不同的编程语言,如C、C++、Java、C#,Python,它们的内存模型都是不相同的,本文将以现在最流行的Python语言为例,来说明动态类型语言的内存管理方式。 1....(小柜子) 这种将相同,但不可变的值保存在同一个内存空间的方式也称为值的缓存,这样做非常节省内存空间,而且程序的执行效率更高。...引用计数器 在Python语言中是无法自己释放变量内存的,所以Python虚拟机提供了自动回收内存的机制,那么Python虚拟机是如何知道哪一个变量占用的内存可以被回收呢?...因为不管你的计算机有多少内存,只要不断创建新的变量,哪怕该变量只占用了1个字节的内存空间,内存也有用完的一天。所以虚拟机会在适当的时候释放掉不需要的内存块。 ?

    1.7K10
    领券