4.1 計(jì)算機(jī)體系結(jié)構(gòu)(Computer Architecture)
馮·諾依曼結(jié)構(gòu)
內(nèi)存儲(chǔ)器,運(yùn)算器,控制器,輸入設(shè)備,輸出設(shè)備
采用二進(jìn)制,拋棄十進(jìn)制。
程序存儲(chǔ)(stored-program)
哈佛結(jié)構(gòu)
運(yùn)算器,控制器,數(shù)據(jù)存儲(chǔ)器,指令存儲(chǔ)器,輸入設(shè)備,輸出設(shè)備
- 指令與數(shù)據(jù)可以有不同的數(shù)據(jù)寬度;
- 執(zhí)行速度更快
4.2 操作系統(tǒng)
計(jì)算機(jī)操作系統(tǒng)是負(fù)責(zé)管理系統(tǒng)硬件,并為上層應(yīng)用提供穩(wěn)定編程接口和人機(jī)交互界面的軟件集合。
4.3 進(jìn)程間通信的經(jīng)典實(shí)現(xiàn)
進(jìn)程間通信(Inter-process communication,IPC)是指運(yùn)行在不同的進(jìn)程中的若干線程間的數(shù)據(jù)交換。
- 共享內(nèi)存(Shared Memeory)
兩個(gè)進(jìn)程共享訪問同一塊內(nèi)存區(qū)域,減少數(shù)據(jù)復(fù)制操作,速度上優(yōu)勢比較明顯。
- 管道(Pipe)
進(jìn)程A與B分立管道兩邊,進(jìn)行單向數(shù)據(jù)傳輸通信。
一根管道同事具有“讀取”端和“寫入”端。
管道有容量限制。
- UNIX Domain Socket
UDS 專門針對單機(jī)內(nèi)進(jìn)程間通信,也稱為 IPC Socket。
- PRC(Remote Procedure Calls)
運(yùn)行于兩臺(tái)不同的機(jī)器中。
4.4 同步機(jī)制的經(jīng)典實(shí)現(xiàn)
- 信號(hào)量(Semaphore)
- 互斥體(Metex)
- 管程(Monitor)
- Linux Futex
4.5 Android中的同步機(jī)制
- 進(jìn)程間同步--Mutex
- 條件判斷--Condition
核心思想:判斷“條件是否已經(jīng)滿足”,如果滿足則馬上返回,繼續(xù)執(zhí)行未完成的動(dòng)作;否則進(jìn)入休眠等待,直到條件滿足有人喚醒它。
- “柵欄、障礙”--Barrier
Barrier是填充了“具體條件”的Condition,專門為SurfaceFlinger而設(shè)計(jì)。
- 加解鎖自動(dòng)化操作--Autolock
- 讀寫鎖--ReaderWriterMutex
4.6 操作系統(tǒng)的內(nèi)存管理基礎(chǔ)
- 虛擬內(nèi)存(Virtual Memory)
邏輯地址(Logical Address),也稱為“相對地址”,是程序編譯后所產(chǎn)生的地址。
線性地址(Linear Address),是邏輯地址經(jīng)過分段機(jī)制轉(zhuǎn)換后形成的。
物理地址(Physical Address),是機(jī)器真實(shí)物理內(nèi)存所能表示的地址空間范圍。
- 內(nèi)存保護(hù)(Memory Protection)
- 內(nèi)存分配與回收
- 保證硬件無關(guān)性
- 動(dòng)態(tài)分配內(nèi)存和回收
- 內(nèi)存碎片
- 進(jìn)程間通信--mmap
mmap可以將某個(gè)設(shè)備或者文件映射到應(yīng)用進(jìn)程的內(nèi)存空間中,這樣訪問這塊內(nèi)存就相當(dāng)于對設(shè)備/文件進(jìn)行讀寫,而不需要通過read()、write()。
- 寫時(shí)拷貝技術(shù)(Copy on Wtire)
4.7 Android 中的 Low Memory Killer
按照優(yōu)先級(jí)順序,從低到高逐步殺掉進(jìn)程,回收內(nèi)存。
4.8 Android 匿名共享內(nèi)存(Anonymous Shared Memory)
Ashmem 是 Android 特有的內(nèi)存共享機(jī)制,可以將指定的物理內(nèi)存分別映射到各個(gè)進(jìn)程自己的虛擬地址空間中,從而便捷地實(shí)現(xiàn)進(jìn)程間的內(nèi)存共享。
4.9 JNI(Java Native Interface)
JNI是一種允許運(yùn)行于JVM的Java程序去調(diào)用(反向亦然)本地代碼的編程框架。
- 應(yīng)用程序需要一些平臺(tái)相關(guān)的feature的支持,而Java無法滿足。
- 兼容以前的用其他語言書寫的代碼庫。
- 應(yīng)用程序的某些關(guān)鍵操作對運(yùn)行速度要求較高。
4.10 Java 中的反射機(jī)制
在程序運(yùn)行過程中動(dòng)態(tài)地創(chuàng)建一個(gè)對象的機(jī)制。
4.11 學(xué)習(xí) Android 系統(tǒng)的兩條線索
主線:操作系統(tǒng)的體系結(jié)構(gòu)、硬件組成。
輔線:在主線的基礎(chǔ)上,以 Android 系統(tǒng)的5層框架(內(nèi)核層,硬件抽象層,系統(tǒng)運(yùn)行庫層,應(yīng)用程序框架層,應(yīng)用程序?qū)樱檩o,逐一解析各層框架中的重要元素。