Android内存管理(三)内存管理基础


因此咱们只须要了解上面主机部分的内容(上图主机部分)web

概述

CPU只能访问其寄存器(Register)和内存(Memory), 没法直接访问硬盘(Disk)。存储在硬盘上的数据必须首先传输到内存中才能被CPU访问。从访问速度来看,对寄存器的访问很是快,一般为1纳秒;对内存的访问相对较慢,一般为100纳秒(使用缓存加速的状况下);而对硬盘驱动器的访问速度最慢,一般为10毫秒。缓存

寄存器(Register):CPU内部的高速存储区域微信

当一个程序加载到内存中时,它由四个内存区域组成:app

堆栈(Stack):存储由该程序的每一个函数建立的临时变量 堆(Heap):该区域特别适用于动态内存分配 数据(Data):存储该程序的全局变量和静态变量 代码(Code):存储该程序的指令编辑器

主要的内存管理技术ide

  • Base and limit registers(基址寄存器和界限寄存器)函数

  • Virtual memory(虚拟内存)ui

  • Swapping(交换)spa

  • Segmentation(分段)操作系统

  • Paging(分页)

Base and limit registers(基址寄存器和界限寄存器)

必须限制进程,以便它们只能访问属于该特定进程的内存位置。

每一个进程都有一个基址寄存器和限制寄存器:

  • 基址寄存器保存最小的有效存储器地址

  • 限制寄存器指定范围的大小

例如,process 2的有效内存地址是300040到420940

那么每一个来自用户进程的内存访问都将首先针对这两个寄存器进行一次检查:

操做系统内核能够访问全部内存位置,由于它须要管理整个内存。

Virtual memory(虚拟内存)

虚拟内存(VM)是OS为内存管理提供的基本抽象。

  • 全部程序都使用虚拟内存地址

  • 虚拟地址会被转换为物理地址

  • 物理地址表示数据的实际物理位置

  • 物理位置能够是内存或磁盘

  

虚拟地址到物理地址的转换由存储器管理单元(MMU - Memory Management Unit)处理。MMU使用重定位寄存器(relocation register),其值在硬件级别上被添加到每一个内存请求中。

Swapping(交换)

交换是一种能够暂时将进程从内存交换到后备存储,而以后又能够将其返回内存以继续执行的技术。

后备存储一般是一个硬盘驱动器,其访问速度快,且大小足以存储内存映像的副本。

若是没有足够的可用内存来同时保留内存中的全部正在运行的进程,则某些当前未使用CPU的进程可能会被交换到后备存储中。

交换是一个很是缓慢的过程。主要耗时部分是数据传输。例如,若是进程占用10MB内存而且后备存储的传输速率为40MB/秒,则须要0.25秒来进行数据传输。再加上将数据交换回内存的时间,总传输时间多是半秒,这是一个巨大的延迟,所以,有些操做系统已经再也不使用交换了。

Segmentation(分段)

分段是一种将内存分解为逻辑片断的技术,其中每一个片断表明一组相关信息。例如,将每一个进程按照堆栈,堆,数据以及代码分为不一样的段,还有OS内核的数据段等。

将内存分解成较小的段会增长寻找空闲内存的机会。

每一个段都有一对寄存器:

  • 基址寄存器:包含段驻留在内存中的起始物理地址

  • 限制寄存器:指定段的长度

段表(Segment table) 存储每一个段的基址和限制寄存器信息。

使用分段时,虚拟内存地址是一对:<段号,偏移量>

段号(Segment Number):用做段表的索引以查找特定条目 偏移量(Offset):首先与限制寄存器进行比较,而后与基址结合以计算物理内存地址

Paging(分页)

有时可用内存被分红许多小块,其中没有一块足够大以知足下一个内存需求,然而他们的总和却能够。这个问题被称为碎片(Fragmentation) ,许多内存分配策略都会受其影响。

分页是一种内存管理技术,它容许进程的物理内存不连续。它经过在称为页面(Page)的相同大小的块中分配内存来消除碎片问题,是目前比较优秀的内存管理技术。

分页将物理内存划分为多个大小相等的块,称为帧(Frame) 。并将进程的逻辑内存空间也划分为大小相等的块,称为页面(Page)

任何进程中的任何页面均可以放入任何可用的帧中。

页表(Page Table) 用于查找此刻存储特定页面的帧。

使用分页时,虚拟内存地址是一对:<页码,偏移量>

  • 页码(Page Number):用做页表的索引,以查找此页面的条目

  • 偏移量(Offset):与基址相结合,以定义物理内存地址

举一个分页地址转换的例子:

虚拟内存地址为0x13325328,页表项0x13325包含的值是0x03004,那么物理地址是什么?

答案:物理地址是0x03004328 页码为0x13325,偏移量为0x328 相应的帧号是0x03004



夯实基础,关注前沿,娱乐生活

掌握更多前沿技术,获取更多笑点 

请关注--------喘口仙氣



本文分享自微信公众号 - 喘口仙氣(gh_db8538619cdd)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索