第十五讲 基础篇:Linux内存是怎么工作的(2020.6.8)

这一讲相关的内容正好之前看csapp的时候总结了一下,可以直接贴出来作为总结了。

Linux的内存工作原理,这又是一个特别大的话题。一切向着尽量利用物理资源的方向在发展,

在没有虚拟内存的世界里,所以的进程都能看到同一个物理内存在这种模式下如果有多个进程那么这个内存管理就很复杂了(在DSP,嵌入时系统中可能总共就一个程序这时候完全可以直接使用物理内存)。针对Unix这种多进程的系统后来就有了虚拟内存的概念。

虚拟内存 是硬件异常,硬件地址翻译,主存,磁盘和内核软件的完美交互,他为没有进程提供一个很大的,一致的地址空间。

它将内存看成一个存储在磁盘上很大的连续的空间,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传递数据,通过这种方式很好的使用了内存。

为每个进程提供了一致的地址空间,从而简化了内存管理

每个进程的地址空间是独立的,避免了进程之间在地址空间上的破坏

物理地址和虚拟地址

物理寻址(嵌入式设备/DSP设备):

虚拟寻址系统(现代处理器):

虚拟内存作为磁盘的高速缓存工具

DRAM 作为磁盘的缓存,通过虚拟内存来管理磁盘上的那个块缓存到内存中来。

VP(virtual page):将虚拟内存分割成大小固定的块

PP(physical page):物理页(叶帧)

VP---->PP 关系

通过页表(page table) 来判定一个虚拟页是否缓存在DRAM中。如果命中就指向一个物理页中, 如果不命中,系统必须判断这个虚拟页存放在磁盘的那个位置,在物理内存中选择牺牲一个页,将虚拟页从磁盘复制到DRAM中,替换掉牺牲页。

页命中:

缺页:

虚拟内存作为内存管理工具

虚拟内存除了作为磁盘的高速缓存之外,还作为Linux的内存管理工具,这样Linux中的每个进程都有相同的的地址空间格式,两个进程通过将虚拟页面映射到相同的物理页帧上是实现了共享内存。

虚拟内存作为内存保护的工具

地址翻译

多级页表:

linux 内存系统

内存分配与回收

标准库中的malloc有两种实现方式:

小块内存(小于128k) 使用sbrk分配(释放并不返还给系统,容易造成系统碎片(详细见参考2))

大块内存(大于128k) 使用mmap内存映射的方式分配(每次unmap之后都会返还给系统,所以每次mallo都会导致缺页异常,内核的管理负担增大)

系统回收内存三种方式

LRU

回收不常访问的内存,把不常访问的内存通过交换分区直接写入磁盘

OOM

参考资料

linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记相关推荐

  1. 十分良心!全网最详细的Java 自动内存管理机制及性能优化教程

    同样的,先来个思维导图预览一下本文结构. 一图带你看完本文 一.运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造.根据<Ja ...

  2. idl linux运行效率,Linux性能优化实战 CPU篇 阅读笔记

    第十一讲 如何快速分析出CPU的性能瓶颈(2020.6.3) 这一讲干活真是太多了,将之将使用的各种工具串联起来.其实系统出问题之后第一感觉就是感觉就是系统相应变慢了.我们可以使用<> 里 ...

  3. linux 内存管理 ppt,Linux内存管理 Memory Manager.ppt

    <Linux内存管理 Memory Manager.ppt>由会员分享,可在线阅读,更多相关<Linux内存管理 Memory Manager.ppt(24页珍藏版)>请在人人 ...

  4. WINDOWS中关于内存管理的注册表优化

    WINDOWS中关于内存管理的注册表优化 [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Memory Man ...

  5. linux进程管理机制,linux进程管理,linux进程管理机制

    linux进程管理,linux进程管理机制 一.基本介绍 1.在 LINUX 中,每个执行的程序(代码)都称为一个进程.每一个进程都分配一个 ID 号 2.每一个进程,都会对应一个父进程,而这个父进程 ...

  6. NEON优化:性能优化常见问题QA

    NEON优化:性能优化常见问题QA NEON优化系列文章: NEON优化1:软件性能优化.降功耗怎么搞?link NEON优化2:ARM优化高频指令总结, link NEON优化3:矩阵转置的指令优化 ...

  7. 前端优化-前端性能优化

    最近前端群里的小伙伴问我,老板喊我做前端优化我该怎么去优化呢?.我思考了了一下,提出了以下几点建议- 文章目录 一.思考 二.可读性优化(不细讲) 1.模块化 2.组件化 3.文件规范 4.commi ...

  8. 内存管理器(十)kernel内存管理----数据结构

    内存管理器(十) kernel内存管理----概况与数据结构 前言 正式开始学习内核的内存管理了,先学习下接口函数,每一个例字都必须写内核模块实验,然后深入到函数的内部研究源码,最后写写练习的小程序. ...

  9. Dreamwear如何创建javascript_内存管理+如何处理4种常见的内存泄漏

    JavaScript是如何工作的:内存管理+如何处理4种常见的内存泄漏 潮水自会来去,但心志得坚若磐石.即便成不了那根定海神针,也至少不是那随意被拍上岸的野鬼游魂.by 一枚热汤圆 几周前,我们开始了 ...

  10. java 内存管理_高性能Java代码之内存管理

    本文通过几个方面,来介绍Java代码的内存管理. 有的代码,GC根本就回收不了,直接系统挂掉.GC是一段程序,不是智能,他只回收他认为的垃圾,而不是回收你认为的垃圾. GC垃圾回收: Grabage ...

最新文章

  1. 美团实习面试:熟悉红黑树是吧?能不能写一下?
  2. 数据分析方法有哪些?
  3. 读债务危机0824:随笔
  4. linux 添加banner,OpenWrt:Linux下生成banner
  5. [iOS]iOS AudioSession详解 Category选择 听筒扬声器切换
  6. Istio流量管理实践之(5): 使用cert-manager部署Istio自定义入口网关及进行证书管理...
  7. 【BZOJ - 4754】独特的树叶(树哈希)
  8. ES6——generator与yield
  9. 设计模式学习笔记--Memento 备忘录模式
  10. mnist数据集读取并保存为Numpy数组
  11. postgres复制数据库
  12. [MyBatis]诡异的Invalid bound statement (not found)错误
  13. 个人信息保护与大数据应用如何共存
  14. Apache Lucene Java 全文检索引擎架构
  15. 端口映射--PortTunnel
  16. python读取音频文件的几种方式
  17. 软件测试面试技术方法(一)
  18. git 清除版本库中的忽略文件
  19. 知网html阅读需要花钱么,自己花钱怎么在知网上查重
  20. uniapp 多语言版本demo in18

热门文章

  1. 【公告】社区周刊即日起停刊
  2. sqlserver2005仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'SendMealAddress'中为标识列指定显式值。...
  3. Android布局属性详解之RelativeLayout
  4. mount NTFS FOR RHEL5
  5. 数据库不停机导数据方案_如何计算数据停机成本
  6. 计算机 编程 教程 pdf,计算机专业教程-第3章编程接口介绍.pdf
  7. 测试nignx php请求并发数,nginx 优化(突破十万并发)
  8. 8 一点就消失_消失的莉莉安(26)
  9. pd种知道每个数据的类型_每个数据科学家都应该知道的5个概念
  10. 5888. 网络空闲的时刻