【Binder 机制】进程通信 | 用户空间与内核空间 | MMU 与虚拟内存地址
文章目錄
- 一、進(jìn)程通信
- 二、用戶空間與內(nèi)核空間
- 三、MMU 與虛擬內(nèi)存地址
一、進(jìn)程通信
進(jìn)程隔離概念 : 系統(tǒng)中的進(jìn)程存在 " 進(jìn)程隔離 " , 出于對進(jìn)程運行的保護(hù) , 兩個進(jìn)程的內(nèi)存是隔離的 , 并且不允許進(jìn)行直接通信 ;
內(nèi)核自帶通信機(jī)制 : 內(nèi)核提供了 pipe 管道 , socket 等通信機(jī)制 , 可以進(jìn)行跨進(jìn)程通信 ;
Binder 機(jī)制 : Android 中的進(jìn)程間的通信 , 是通過 " Binder " 機(jī)制 完成的 ; Binder 機(jī)制不是內(nèi)核自帶的機(jī)制 , 而是 Android 可以動態(tài)進(jìn)行 Binder 注冊 , 然后進(jìn)程間通過 Binder 進(jìn)行通信 ;
二、用戶空間與內(nèi)核空間
系統(tǒng)中的內(nèi)存分為 222 部分 , 用戶空間 和 內(nèi)核空間 , 內(nèi)核空間一般是運行操作系統(tǒng) , 用戶空間一般運行應(yīng)用 ;
操作 內(nèi)核空間 時的狀態(tài)稱為 " 內(nèi)核態(tài) " ;
操作 用戶空間 時的狀態(tài)稱為 " 用戶態(tài) " ;
三、MMU 與虛擬內(nèi)存地址
每個 應(yīng)用進(jìn)程 的 內(nèi)存空間 使用的地址都是 獨立的 , 連續(xù)的 , 虛擬地址 ;
內(nèi)存管理單元 ( MMU - Memory Management Unit ) 的作用就是進(jìn)行 內(nèi)存映射的 ;
MMU 的作用是將真實的 內(nèi)存 物理地址 轉(zhuǎn)為 虛擬地址 , 虛擬地址 又稱為 邏輯地址 , 一般情況下虛擬地址大小遠(yuǎn)遠(yuǎn)大于物理地址 ;
MMU 可以讓每個進(jìn)程都擁有獨立的連續(xù)的內(nèi)存空間 ;
323232 位的操作系統(tǒng)的 尋址空間是 000 ~ 2322^{32}232 , 大小 444 GB ;
323232 位操作系統(tǒng) , 使用的是 二級分頁 ;
646464 位的操作系統(tǒng)的 尋址空間是 000 ~ 2642^{64}264 , 這個尋址空間很大 , 一般是使用前 404040 位 , 大概是 181818 TB ;
646464 位操作系統(tǒng) , 使用的是 四級分頁 ;
在 323232 位的系統(tǒng)中 , MMU 會讓每個應(yīng)用都有 111 個 444 GB 大小的空間 ,
Linux 系統(tǒng)內(nèi)核空間占 111 GB , 用戶空間 333 GB ; 000 ~ 333 GB 是用戶空間地址 , 333 ~ 444 是內(nèi)核空間地址 ;
Windows 系統(tǒng)內(nèi)核空間占 222 GB , 用戶空間 222 GB ;
虛擬地址的必要性 : 代碼編譯完成之后 , 地址是分配好的 , 都是從 000 地址開始計數(shù)的 , 因此如果要保證程序的運行 , 必須保證應(yīng)用進(jìn)程的內(nèi)存從 000 開始 ; 這里將實際的物理內(nèi)存地址映射為虛擬內(nèi)存地址 , 這個虛擬內(nèi)存地址可以保證每個程序都按照相同的初始地址運行 ;
匯編指令 需要直接操作 虛擬內(nèi)存地址 ;
總結(jié)
以上是生活随笔為你收集整理的【Binder 机制】进程通信 | 用户空间与内核空间 | MMU 与虚拟内存地址的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【字节码插桩】AOP 技术 ( “字节码
- 下一篇: 【Binder 机制】AIDL 分析 (