Android内存管理(二)操做系统基础


亲爱的,关注我吧


这里不在详细的讲解操做系统,只是介绍关于内存的几个关键名词及相关概念:linux

  • 物理内存web

  • 虚拟内存编程

  • 逻辑地址windows

  • 交换空间数组


熟悉以上操做系统名词对于的后续介绍Android内存管理比较重要,请你们认真阅读.若是的比较熟悉上述几个关键名词,此章节能够跳过微信

物理内存(RAM):

加载到内存地址寄存器中的内存又叫“硬件内存”,是内存单元真正的地址(也叫物理地址)。RAM做为进程运行不可或缺的资源,对系统和稳定性有着决定性的影响。另外,RAM的一部分被操做系统留做他用,好比显存等。

逻辑地址:

由CPU控制生成的地址,是一个程序级别的概念。这里引用一个浅显的例子——咱们在C语言指针编程中,能够读取指针变量自己的值(&操做),这里取得的值就是逻辑地址——也就是说,这个(&操做)取得的值是CPU控制生成的一个逻辑地址,并非这个指针变量在RAM中的真正地址。  


那么,咱们为何要这么一个并非真正地址的逻辑地址呢?深层次的缘由这里不予以探究,可是一个比较浅显的缘由就是,逻辑地址的分配很是灵活——在一个数组中,咱们经过逻辑地址能够保证数组中元素地址的连续性。固然这个逻辑地址最终仍是要经过必定的方式映射到RAM中的物理地址上,这个物理地址才是元素存储的真正地址,而这个物理地址,不必定是连续的。

虚拟内存:

是操做系统级别的概念,指计算机呈现出要比实际拥有的内存大得多的内存量。它使得每一个应用程序都认为本身拥有独立且连续的可用的内存空间(一段连续完整的地址空间),这个内存大小跟操做系统的位数有关。好比32位系统,逻辑内存的最大为2^32。而实际上,它一般是被映射到多个物理内存段(在真正的物理地址上不必定是连续的),还有部分暂时存储在外部磁盘存储器上,在须要时再加载到内存中来。  


上一段咱们咱们说了半天的逻辑地址,理解就是虚拟内存中的地址。OK,如今咱们知道了虚拟内存有两个特色——app

  • 一个是在虚拟内存中虚拟地址/逻辑地址是连续的,便于灵活分配;

  • 二是虚拟内存能够是计算机呈现出比实际内存大的多的内存。那么为何虚拟内存会呈现出这么大的内存的神奇功能呢?或者说这多出来的额内存是哪来的?这就要用到咱们接下来说的交换(Swap)空间。

交换(Swap)空间:

在系统中运行的每一个进程都须要使用到内存,但不是每一个进程都须要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或全部物理内存,将这部分释放的数据存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有须要的进程使用。  
引用一个容易理解但不是很恰当的比喻:你不须要很长的轨道就可让一列火车从上海开到北京。你只须要足够长的铁轨(好比说3千米)就能够完成这个任务。采起的方法是把后面的铁轨马上铺到火车的前面,只要你的操做足够快并能知足要求,列车就能像在一条完整的轨道上运行。  
swap和虚拟内存结伴而来的。若是系统是64位,最大虚拟内存能够是2的64次方,没有计算机会有这么大的内存。当内存不够用的时候只能映射到磁盘。linux专门开辟了一个swap磁盘分区,当物理内存不够用的时候(程序并不知道),将内存中好久不使用的内存区域交换到swap区。也便是说:用做虚拟内存的磁盘空间称为交换空间(swap空间)。

分析:32位系统最大只能支持4GB内存缘由

你们确定都看过本身系统的内存,估计你们都遇到过下面的状况(都是32位系统):编辑器

  • 本身装的是4G内存条,但是操做系统显示的内存倒是3.75Gide

  • 本身装的是8G内存条,但是操做系统显示的内存也是3.75G大数据


上面这两种状况为何呢,下面分析其中的原因,在分析原因以前,先了解下计算机系统结构方面的知识。

1.认识计算机总线

其实你们在生活中常常用到总线,就是USB接口,其实就是一种总线,叫作USB总线。

1.1 为何须要总线

上图是冯诺依曼计算机结构图,由五大部分组成: 逻辑运算器、控制器、存储器、输入设备、输出设备

若是输入或者输出设备想把数据存储到存储器或者从存储器取数据,则须要经过逻辑运算器(CPU中),则CPU会中止工做,影响CPU的效率,为了提升CPU工做效率,出现了总线的概念。

上图是计算机中的一种总线结构,若是想了解更多的总线设计结构,能够查看计算机组成原理相关书籍,这里主要是为了说明为何须要总线。

总线是链接多个部件的信息传输线,是各部件共享的传输介质。输入输出设备能够和主存通讯而不用影响CPU的工做,这样CPU的工做效率获得了很大的提高。

  • 系统总线: 用于IO接口、主存、CPU之间的信息传输,IO和CPU之间只传输指令信息。

  • 主存总线: 专门用于主存和CPU之间的信息传输

1.2 系统总线的分类

  • 数据总线:

数据总线用来传输各功能部件之间的数据信息,它是双向传输总线,其位数就是数据总线的宽度。总之是用来传输数据的。
  • 地址总线:

地址总线主要用来指出数据总线上的源数据或目的数据在主存单元的地址或者I/O设备的地址。总之就是传输数据所在地址。
  • 控制总线:

因为数据总线、地址总线都是被挂在总线上的全部部件共享的,如何使各部件能在不一样时刻占有总线使用权,需依靠控制总线来完成,所以控制总线是用来发出各类控制信号的传输线。总之是用来传输控制指令的。

2.分析问题原因

问题:

  • 本身装的是4G内存条,但是操做系统显示的内存倒是3.75G

  • 本身装的是8G内存条,但是操做系统显示的内存也是3.75G

在使用计算机时,其支持的最大内存是由操做系统和硬件两方面决定的。

硬件方面

上面介绍总线的时候已经介绍了地址总线,是用来传输数据所在地址的,而32位系统通常有32根地址总线,那么所能传输的最大数据地址就是2^32,这里所指的地址是真实的数据地址,即物理地址,CPU在执行指令时须要先将指令的逻辑地址变换为物理地址才能执行。

地址总线数目 最大支持内存
32位系统 32 2的32次方 = 4G
64位系统 36或40 2的36次方 = 64G 或 2的40次方= 1024G = 1T

系统方面

用户在使用计算机时可以访问的最大内存不单是由CPU地址总线的位数决定的,还须要考虑操做系统的实现。实际上用户在使用计算机时,进程访问到的地址都是逻辑地址,并非真实的物理地址,逻辑地址是由操做系统提供的,并维护了逻辑地址和物理地址的映射。
对于32位的windows操做系统,提供的逻辑地址寻址范围是4G,可是对于这4G的逻辑地址,又要划分出来一份给CPU寄存器、ROM的这些物理地址进行映射,那么剩下和内存条的物理地址进行映射的空间确定没有4G了,以下图所示:

其实操做系统显示的内存3.75G,是逻辑地址。



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

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

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

免费小说APP 漫品客户端欢迎下载



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