第4章 操作系統(tǒng)

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ù)交換。

  1. 共享內(nèi)存(Shared Memeory)

兩個(gè)進(jìn)程共享訪問同一塊內(nèi)存區(qū)域,減少數(shù)據(jù)復(fù)制操作,速度上優(yōu)勢比較明顯。

  1. 管道(Pipe)
  • 進(jìn)程A與B分立管道兩邊,進(jìn)行單向數(shù)據(jù)傳輸通信。

  • 一根管道同事具有“讀取”端和“寫入”端。

  • 管道有容量限制。

  1. UNIX Domain Socket

UDS 專門針對單機(jī)內(nèi)進(jìn)程間通信,也稱為 IPC Socket。

  1. PRC(Remote Procedure Calls)

運(yùn)行于兩臺(tái)不同的機(jī)器中。

4.4 同步機(jī)制的經(jīng)典實(shí)現(xiàn)

  1. 信號(hào)量(Semaphore)
  2. 互斥體(Metex)
  3. 管程(Monitor)
  4. Linux Futex

4.5 Android中的同步機(jī)制

  1. 進(jìn)程間同步--Mutex
  2. 條件判斷--Condition

核心思想:判斷“條件是否已經(jīng)滿足”,如果滿足則馬上返回,繼續(xù)執(zhí)行未完成的動(dòng)作;否則進(jìn)入休眠等待,直到條件滿足有人喚醒它。

  1. “柵欄、障礙”--Barrier

Barrier是填充了“具體條件”的Condition,專門為SurfaceFlinger而設(shè)計(jì)。

  1. 加解鎖自動(dòng)化操作--Autolock
  2. 讀寫鎖--ReaderWriterMutex

4.6 操作系統(tǒng)的內(nèi)存管理基礎(chǔ)

  1. 虛擬內(nèi)存(Virtual Memory)

邏輯地址(Logical Address),也稱為“相對地址”,是程序編譯后所產(chǎn)生的地址。
線性地址(Linear Address),是邏輯地址經(jīng)過分段機(jī)制轉(zhuǎn)換后形成的。
物理地址(Physical Address),是機(jī)器真實(shí)物理內(nèi)存所能表示的地址空間范圍。

  1. 內(nèi)存保護(hù)(Memory Protection)
  2. 內(nèi)存分配與回收
  • 保證硬件無關(guān)性
  • 動(dòng)態(tài)分配內(nèi)存和回收
  • 內(nèi)存碎片
  1. 進(jìn)程間通信--mmap

mmap可以將某個(gè)設(shè)備或者文件映射到應(yīng)用進(jìn)程的內(nèi)存空間中,這樣訪問這塊內(nèi)存就相當(dāng)于對設(shè)備/文件進(jìn)行讀寫,而不需要通過read()、write()。

  1. 寫時(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,逐一解析各層框架中的重要元素。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容