Linux内存管理方式

 

目录

前言

内存管理方式

    分段式

    分页式

    段页式

虚拟地址如何映射到物理地址

缺页中断

内存交换

内存置换算法


前言

    之前说过linux中的程序地址空间是使用的虚拟地址,虚拟地址和真实的物理地址有着某种特殊的映射关系(MMU,全称Memory Manage Unit),使用虚拟地址可以提高内存利用率,实现离散式存储和内存访问控制。

    Linux中内存管理方式有三种:分段式、分页式、段页式。

内存管理方式

    分段式

        分段式内存管理是将整体虚拟地址空间划分为多个段(包括代码段、数据段、栈区、堆区等等)。这种内存管理方式的好处是有利于对地址空间进行管理。

    分页式

        这种内存管理方式是将整体虚拟地址空间划分为很多个小的分页(默认4096字节为一页,每页数据量越小,地址空间利用率越高),分页式的作用是实现离散式存储,提高内存利用率。

    段页式

        这种内存管理方式就是分段式和分页式的集合,即先将地址分段,然后对每段分页。

虚拟地址如何映射到物理地址

    分段式:在这种方式下虚拟地址的组成是段号和段内偏移量

    虚拟地址会通过段表来映射物理地址,段表是一种数据结构,其中描述了相关信息、段号和物理内存的起始地址。

    通过上图可知,实际地址=起始地址+偏移量。

   

    分页式:分页式的映射方式和分段式差不多,分页式的虚拟地址由页号和页内偏移量组成。

    虚拟地址通过页表来映射物理地址,页表主要包括页号、物理内存起始地址、缺页中断位、访问权限(当前地址能进行什么样的操作)组成。

    映射方式和分段式一样,是通过虚拟地址中的页号找到页表中物理内存起始地址,然后根据起始地址+页内偏移量得到物理地址。

    分段式和分页式的不同之处在于应用方向不同,分段式利于管理,分页式趋向于碎片化管理,提高内存利用率且便于控制内存的访问。

缺页中断

    当程序要访问一块内存时,经过页表映射时发现页表中的缺页中断位被置位(这个地址原先的数据现在不存在于内存中了),则会触发缺页中断。触发缺页中断后需要重新进行内存置换才能访问,置换后的地址不一定与原地址相同。

内存交换

    因为计算机内存是有限的,如果内存满了,那么再想加载一个新程序进来的话计算机是会直接崩溃的,为了避免内存满后无法运行新的内存,故设计计算机按某种规则将内存中的某些数据从内存中移到硬盘上(实际上是暂时移动到硬盘上的交换区也叫swap区,这个区大小通常是内存大小的两倍,而且不会被我们计算机用户所用,也就是说我们平常在计算机中看到的磁盘总大小是不包含交换区的),然后将腾出的空间供当前程序所用。

    这里注意一旦出现内存交换后,程序运行速率变慢,因为内存交换的效率低下,所以平常我们在计算机上开太多软件或游戏后,电脑会变卡。

内存置换算法

    内存置换算法主要有 LRU——最久未使用, 即会将最久未使用的数据移动到磁盘上

                                      LFU——最少未使用 ,即会将最少未使用的数据移动到磁盘上

                                      FIFO——先进先出(和队列相似),即最先进入内存的数据会被交换

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值