ios启动优化:虚拟内存和物理内存

为了解决内存安全和效率问题,现在的计算机和操作系统引入了虚拟内存和物理内存,这里不做详述。我们主要探讨,通过原理,找到优化App的方案。

虚拟内存的工作原理:引用了虚拟内存后 , 在我们认为进程中有一大片连续的内存空间,也就是说从 0x000000 ~ 0xffffff 我们是都可以访问的。但是实际上这个内存地址只是一个虚拟地址,而这个虚拟地址通过一张映射表映射后才可以获取到真实的物理地址。

也就是说,系统对真实物理内存访问做了一层限制,只有被写到映射表中的地址才是被认可可以访问的。虚拟地址 0x000000 ~ 0xffffff 这个范围内的任意地址我们都可以访问,但是这个虚拟地址对应的实际物理地址是计算机来随机分配到内存页上的。

工作原理如下:

虚拟内存.png

显然 , 引用虚拟内存后就不存在通过偏移可以访问到其他进程的地址空间的问题了 。
因为每个进程的映射表是单独的,在你的进程中随便你怎么访问,这些地址都是受映射表限制的,其真实物理地址永远在规定范围内,也就不存在通过偏移获取到其他进程的内存空间的问题了。
而且 , 应用每次被加载到内存中 , 实际分配的物理内存并不一定是固定或者连续的,这是因为内存分页以及懒加载以及 ASLR

Android 4.0Apple iOS4.3OS X Mountain Lion10.8 开始全民引入 ASLR 技术,而实际上自从引入 ASLR 后,黑客的门槛也自此被拉高,不再是人人都可做黑客的年代了。

cpu 寻址过程:通过虚拟内存地址,找到对应进程的映射表;通过映射表找到其对应的真实物理地址,进而找到数据。这个过程被称为 地址翻译,这个过程是由操作系统以及 cpu 上集成的一个 硬件单元 MMU 协同来完成的 。

虚拟内存分页

刚刚提到虚拟内存和物理内存通过映射表进行映射,但是这个映射并不可能是一一对应的,那样就太过浪费内存了。为了解决效率问题,实际上真实物理内存是分页的。而映射表同样是以页为单位的。换句话说,映射表只会映射到某一页,并不会映射到具体每一个地址。

Mac OSlinux内存 4kb一页,iOS16kb一页。可以使用PAGESIZE命令,在终端直接查看。

Page Fault.png

0 和 1 代表当前地址有没有在物理内存中。
从上图我们也可以看出,进程的实际物理内存地址并不是连续的,而是由若干完整的内存分页组成。

  1. 当应用被加载到内存中时 ,并不会将整个应用加载到内存中。只会放用到的那一部分。也就是 懒加载 , 换句话说就是应用使用多少 , 实际物理内存就分配多少。
  2. 当应用访问到某个地址,映射表中为 0 ,也就是说它并没有被加载到物理内存中时 , 系统就会立刻阻塞整个进程 , 触发一个缺页中断 ,即 Page Fault
  3. 当一个缺页中断被触发,操作系统会从磁盘中重新读取这页数据到物理内存上,然后将映射表中虚拟内存指向对应物理内存。 如果当前内存已满,操作系统会通过置换页算法找一页数据进行覆盖。这也是为什么开再多的应用也不会崩掉,但是之前开的应用再打开,就会重新启动的根本原因。

思考:Page Fault 会阻塞进程,那么肯定会对性能产生影响,那么我们是不是可以在这里做一些优化呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,360评论 5 461
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,195评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,543评论 0 323
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,420评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,242评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,224评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,626评论 3 384
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,301评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,589评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,660评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,423评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,286评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,662评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,951评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,237评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,613评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,804评论 2 335