ios啟動(dòng)優(yōu)化:虛擬內(nèi)存和物理內(nèi)存

為了解決內(nèi)存安全和效率問(wèn)題,現(xiàn)在的計(jì)算機(jī)和操作系統(tǒng)引入了虛擬內(nèi)存和物理內(nèi)存,這里不做詳述。我們主要探討古毛,通過(guò)原理钦购,找到優(yōu)化App的方案檐盟。

虛擬內(nèi)存的工作原理:引用了虛擬內(nèi)存后 , 在我們認(rèn)為進(jìn)程中有一大片連續(xù)的內(nèi)存空間,也就是說(shuō)從 0x000000 ~ 0xffffff 我們是都可以訪問(wèn)的押桃。但是實(shí)際上這個(gè)內(nèi)存地址只是一個(gè)虛擬地址葵萎,而這個(gè)虛擬地址通過(guò)一張映射表映射后才可以獲取到真實(shí)的物理地址。

也就是說(shuō)唱凯,系統(tǒng)對(duì)真實(shí)物理內(nèi)存訪問(wèn)做了一層限制羡忘,只有被寫(xiě)到映射表中的地址才是被認(rèn)可可以訪問(wèn)的。虛擬地址 0x000000 ~ 0xffffff 這個(gè)范圍內(nèi)的任意地址我們都可以訪問(wèn)磕昼,但是這個(gè)虛擬地址對(duì)應(yīng)的實(shí)際物理地址是計(jì)算機(jī)來(lái)隨機(jī)分配到內(nèi)存頁(yè)上的卷雕。

工作原理如下:

虛擬內(nèi)存.png

顯然 , 引用虛擬內(nèi)存后就不存在通過(guò)偏移可以訪問(wèn)到其他進(jìn)程的地址空間的問(wèn)題了 。
因?yàn)槊總€(gè)進(jìn)程的映射表是單獨(dú)的票从,在你的進(jìn)程中隨便你怎么訪問(wèn)漫雕,這些地址都是受映射表限制的,其真實(shí)物理地址永遠(yuǎn)在規(guī)定范圍內(nèi)峰鄙,也就不存在通過(guò)偏移獲取到其他進(jìn)程的內(nèi)存空間的問(wèn)題了浸间。
而且 , 應(yīng)用每次被加載到內(nèi)存中 , 實(shí)際分配的物理內(nèi)存并不一定是固定或者連續(xù)的,這是因?yàn)閮?nèi)存分頁(yè)以及懶加載以及 ASLR 先馆。

Android 4.0发框、Apple iOS4.3OS X Mountain Lion10.8 開(kāi)始全民引入 ASLR 技術(shù)煤墙,而實(shí)際上自從引入 ASLR 后梅惯,黑客的門(mén)檻也自此被拉高,不再是人人都可做黑客的年代了仿野。

cpu 尋址過(guò)程:通過(guò)虛擬內(nèi)存地址铣减,找到對(duì)應(yīng)進(jìn)程的映射表;通過(guò)映射表找到其對(duì)應(yīng)的真實(shí)物理地址脚作,進(jìn)而找到數(shù)據(jù)葫哗。這個(gè)過(guò)程被稱(chēng)為 地址翻譯缔刹,這個(gè)過(guò)程是由操作系統(tǒng)以及 cpu 上集成的一個(gè) 硬件單元 MMU 協(xié)同來(lái)完成的 。

虛擬內(nèi)存分頁(yè)

剛剛提到虛擬內(nèi)存和物理內(nèi)存通過(guò)映射表進(jìn)行映射劣针,但是這個(gè)映射并不可能是一一對(duì)應(yīng)的校镐,那樣就太過(guò)浪費(fèi)內(nèi)存了。為了解決效率問(wèn)題捺典,實(shí)際上真實(shí)物理內(nèi)存是分頁(yè)的鸟廓。而映射表同樣是以頁(yè)為單位的。換句話(huà)說(shuō)襟己,映射表只會(huì)映射到某一頁(yè)引谜,并不會(huì)映射到具體每一個(gè)地址。

Mac OS 擎浴、linux內(nèi)存 4kb一頁(yè)员咽,iOS16kb一頁(yè)≈ぃ可以使用PAGESIZE命令贝室,在終端直接查看。

Page Fault.png

0 和 1 代表當(dāng)前地址有沒(méi)有在物理內(nèi)存中仿吞。
從上圖我們也可以看出档玻,進(jìn)程的實(shí)際物理內(nèi)存地址并不是連續(xù)的,而是由若干完整的內(nèi)存分頁(yè)組成茫藏。

  1. 當(dāng)應(yīng)用被加載到內(nèi)存中時(shí) ,并不會(huì)將整個(gè)應(yīng)用加載到內(nèi)存中霹琼。只會(huì)放用到的那一部分务傲。也就是 懶加載 , 換句話(huà)說(shuō)就是應(yīng)用使用多少 , 實(shí)際物理內(nèi)存就分配多少枣申。
  2. 當(dāng)應(yīng)用訪問(wèn)到某個(gè)地址售葡,映射表中為 0 ,也就是說(shuō)它并沒(méi)有被加載到物理內(nèi)存中時(shí) , 系統(tǒng)就會(huì)立刻阻塞整個(gè)進(jìn)程 , 觸發(fā)一個(gè)缺頁(yè)中斷 忠藤,即 Page Fault挟伙。
  3. 當(dāng)一個(gè)缺頁(yè)中斷被觸發(fā),操作系統(tǒng)會(huì)從磁盤(pán)中重新讀取這頁(yè)數(shù)據(jù)到物理內(nèi)存上模孩,然后將映射表中虛擬內(nèi)存指向?qū)?yīng)物理內(nèi)存尖阔。 如果當(dāng)前內(nèi)存已滿(mǎn),操作系統(tǒng)會(huì)通過(guò)置換頁(yè)算法找一頁(yè)數(shù)據(jù)進(jìn)行覆蓋榨咐。這也是為什么開(kāi)再多的應(yīng)用也不會(huì)崩掉介却,但是之前開(kāi)的應(yīng)用再打開(kāi),就會(huì)重新啟動(dòng)的根本原因块茁。

思考:Page Fault 會(huì)阻塞進(jìn)程齿坷,那么肯定會(huì)對(duì)性能產(chǎn)生影響桂肌,那么我們是不是可以在這里做一些優(yōu)化呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末永淌,一起剝皮案震驚了整個(gè)濱河市崎场,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遂蛀,老刑警劉巖谭跨,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異答恶,居然都是意外死亡饺蚊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)悬嗓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)污呼,“玉大人,你說(shuō)我怎么就攤上這事包竹⊙嗫幔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵周瞎,是天一觀的道長(zhǎng)苗缩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)声诸,這世上最難降的妖魔是什么酱讶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮彼乌,結(jié)果婚禮上泻肯,老公的妹妹穿的比我還像新娘。我一直安慰自己慰照,他們只是感情好灶挟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著毒租,像睡著了一般稚铣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墅垮,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天惕医,我揣著相機(jī)與錄音,去河邊找鬼噩斟。 笑死曹锨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剃允。 我是一名探鬼主播沛简,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼齐鲤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了椒楣?” 一聲冷哼從身側(cè)響起给郊,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捧灰,沒(méi)想到半個(gè)月后淆九,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毛俏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年炭庙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煌寇。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡焕蹄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阀溶,到底是詐尸還是另有隱情腻脏,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布银锻,位于F島的核電站永品,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏击纬。R本人自食惡果不足惜鼎姐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望更振。 院中可真熱鬧症见,春花似錦、人聲如沸殃饿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乎芳。三九已至,卻和暖如春帖池,著一層夾襖步出監(jiān)牢的瞬間奈惑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工睡汹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肴甸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓囚巴,卻偏偏與公主長(zhǎng)得像原在,于是被迫代替她去往敵國(guó)和親友扰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348