美文网首页
iOS 内存监控与治理(一)-- 认识计算机中的内存

iOS 内存监控与治理(一)-- 认识计算机中的内存

作者: topws1 | 来源:发表于2021-10-20 14:48 被阅读0次

    概述

    内存(又称主存,内部存储器)和外部存储器构成计算机存储器。内存是CPU能直接寻址的储存空间,由半导体器件制成。内存的特点是访问速度快。举例来讲,我们平常使用的应用程序一般是安装在硬盘等外部存储器上,真正使用的时候需要把他们调入内存中运行。通常我们把要永久保存的、大量的数据存储在外部存储器上,而把临时的或少量的数据和程序放到内存上。

    此外,我们常说的RAM(随机存取存储器 - Random Access Memory)就是内存存储器,RAM 存储器可以进一步分为静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM)两大类。SRAM 具有快速访问的优点,但生产成本较为昂贵,一个典型的应用是缓存。而DRAM 由于具有较低的单位容量价格,所以被大量的采用作为系统的内存。

    存储层次

    我们已经对内存有了清晰的概念,下面我们来看计算机存储系统的存储层次,这样就可以对内存有一个更加清晰的认识。

    现代计算机的结构模型大多基于冯·诺伊曼结构,该结构是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构,依照该结构设计出的计算机又称为存储程序计算机。存储程序计算机主要为了区别于早期计算器仅内含固定用途的程序问题,通过创造一组指令集结构,并将所谓的运算转化成一串程序指令的运行细节,让机器更能有弹性。但是,该结构将CPU与存储器分开的设计,会导致所谓的的冯·诺伊曼瓶颈:在CPU与存储器之间的流量(资料传输率)与存储器的容量相比起来相当小,在现代电脑中,流量与CPU的工作效率相比之下非常小,在某些情况下(当CPU需要在巨大的资料上运行一些简单指令时),资料流量就成了整体效率非常严重的限制。CPU将会在资料输入或输出存储器时闲置。由于CPU速度远大于存储器读写速率,因此瓶颈问题越来越严重。

    为了舒缓冯·诺伊曼瓶颈带来的问题,计算机存储系统,在CPU与存储器间的加入了缓存存储器。存储层次是指在计算机体系结构下存储系统层次结构的排列顺序。每一层于下一层相比都拥有较高的速度和较低延迟性,以及较小的容量。

    一个典型的存储器层次结构:


    存储层次.png

    CPU内存寻址以及虚拟内存

    我们已经知道内存本质是储存空间,那么CPU是如何访问内存的呢?下面我们就来探讨下CPU内存寻址以及虚拟内存。

    CPU中是有专门用于内存访问请求的计算机硬件叫做MMU(内存管理单元),MMU有时也称为分页内存管理单元,它的功能包括虚拟地址和物理地址的转换、内存保护、CPU高速缓存的控制,在较为简单的计算题体系结构中,负责总线的仲裁以及存储体切换。

    这里引入了新的概念,虚拟地址物理地址。物理地址是指内存的某个可以让数据总线访问的特定存储单元的内存地址。简单的理解可以把存储空间看作一个数组,数组元素是一个字节大小的空间,数组索引就可以理解为物理地址。CPU 访问内存直接通过物理地址访问对应的内存,这种方式就是物理寻址。虚拟地址区分于物理地址,在使用MMU转换内存地址的计算机中,虚拟和物理地址分别指在经MMU转换之前和之后的地址。

    之所以引入虚拟地址也比较好理解,如果直接把物理地址暴露给程序,那么任意程序都有可能对其他程序造成不可预估的影响。此外,现代的MMU是以页的方式,分割虚拟地址空间(处理器使用的地址范围),页的大小是2的n次方。操作系统会为每个程序分配虚拟内存。这样的处理方式不仅有助于减少程序的内存碎片化现象,而且程序自身出现页错误时,MMU可以检测到页错误,通知操作系统终止出错的程序。

    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),实际上物理内存通常被分隔为多个内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行交换(iOS 不同于Mac OS,iOS不采用数据交换)。

    VirtualMemory.png
    那么MMU是如何进行虚拟地址和物理地址的转换呢?

    这里引入新的名词页表(page table),页表是一种数据结构,存储了虚拟地址到物理地址的映射。每个映射被称为PTE(page table entry)。此外,MMU会存储最近使用过的页表映射缓存,这个索引缓存被称为TLB(translation lookaside buffer)。虚拟地址和物理地址的转换流程就是MMU先去TLB中查询是否有缓存,如果未找到则去页表中查看是否存在映射(页面遍历),如果存在映射,则将其写回TLB中,重新再从TLB读取。如果页表中也未能查找到,则有两种情况,一种是传入的虚拟地址是无效的,一般是程序错误导致。还有一种情况则是由于请求的页面被调出物理内存,此时就需要先把这些页面换回到物理内存,再执行查询流程。

    完整的查询流程如下:


    queryVirtualAddr.png

    本章内容对计算机系统中的内存相关知识进行了梳理,相关词条来源于wiki,下一章我们梳理下iOS中的内存知识

    相关文章

      网友评论

          本文标题:iOS 内存监控与治理(一)-- 认识计算机中的内存

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