美文网首页
Linux 基础之内存管理

Linux 基础之内存管理

作者: Robin92 | 来源:发表于2020-04-04 20:06 被阅读0次

早期

早期系统:多个进程全部载入内存
问题:

  • 内存撑爆(内存不够用)
  • 互相打扰

由此诞生了现在的内存管理系统:虚拟地址,分页装入,软硬件结合寻址。

内存管理

  • 内存撑满 的问题,用 交换分区 可以解决
  • 互相打扰 的问题,用 虚拟内存 可以解决

交换分区

先要知道 的概念,将数据分页,在内存中有页框。

页框(page frame),用到哪一块页,这个框里装哪一页。

将程序分块,将内存分块,对应起来(最基本的分页是 4k)。

内存撑满时,将最不常用的部分放入 交换分区(swap)。

这就是著名的 LRU 算法。LRU,Least Recently Used。是指找到最不常用的一块(然后就它替换掉)。(用哈希表+双向链表)(leetCode 146 题)

虚拟内存

为了保证互不影响,让进程工作在虚拟空间。在进程中用的地址,都是虚拟地址,而不是物理地址。所以进程大家,都在用虚拟地址,就不会相互干扰了。

在虚拟空间的角度,每个进程独享自己的空间(爽)。

虚拟空间,如果是 64 位,虚拟空间就可以是 2^64 bit,因为 64 位可以寻址这么多。

内存映射

在虚拟的空间,内部格式也是固定的,如下图的格式。

在进程的角度,它占有独一无二的内存空间,这就是它的虚拟内存。
进程内部分了很多段,而段内分了许多页。比如某页放在 “只读的代码和数据”中。
当需要执行时,将页加载到真正的 物理内存

那如何做到从 虚拟地址到物理地址 的映射,这就是 内存映射

虚拟地址.png

逻辑地址和线性地址

  • 逻辑地址,就是物理磁盘上地址的一个偏移量。
  • 线性地址,就是地址在自己内存空间的一个地址。

它们两个加一下,就是找到了此页的地址。此地址再与内存的物理地址映射。

MMU 就来做这件事。

内存映射.png

相关文章

  • 探讨Android内存管理

    前言 在看这篇文章之前,需要Linux内存管理基础,推荐先学习一些Linux内存管理基础知识点,这里我们在做一些应...

  • Linux 内核学习(1)---- Linux 内核基础和编译方

    Linux 内核基础知识 Linux 内核主要由调度(SCHED),内存管理(MM),虚拟文件系统(VFS),网络...

  • Android 内存管理机制

    本文主要包括三大部分内容:内存管理基础:从整个计算机领域简述主要的内存管理技术。Linux的内存管理机制:Andr...

  • Binder IPC - 基础知识

    基础知识 Linux 内存模型 MMU MMU即内存管理单元,其主要作用是实现虚拟内存到物理内存的映射,其工作原理...

  • 内存问题分析(二)-内存管理基础(下)

    接上篇继续总结内存管理基础。 五、内存回收 无论计算机上有多少内存都是不够的,因而linux kernel需要通过...

  • Linux命令优先级

    基础概念 linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动...

  • Linux内存管理基础初步

    一、x86 Linux 32位系统虚拟地址空间布局: 这里的段基址从0开始,可以访问管理的内存是4G;如果是段基址...

  • Linux 基础之内存管理

    早期 早期系统:多个进程全部载入内存问题: 内存撑爆(内存不够用) 互相打扰 由此诞生了现在的内存管理系统:虚拟地...

  • 系统启动及故障排错和内核管理

    (一)Linux组成结构 Linux: kernel+rootfskernel: 进程管理、内存管理、网络管理、...

  • Android 内存优化

    Android 内存管理机制 内存管理 进程(由Application FrameWork和Linux内核管理) ...

网友评论

      本文标题:Linux 基础之内存管理

      本文链接:https://www.haomeiwen.com/subject/navjphtx.html