国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

跟著小白一起學鴻蒙# Binder機制剖析和使用

系統 OpenHarmony
Binder最開始是IPC工具,起源于OpenBinder項目,發展于Android項目,現在已經和入LinuxKernel,目前演變成RPC工具,可以使當前進程調用另一個進程的函數向自身函數一樣簡單。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

原理

1. 物理內存中開辟4096字節內存(1m-8k)
2. 物理內存與磁盤內存對應
3. mmu將mmap開辟的物理內存地址轉換成虛擬地址

Binder概述

  • 什么是Binder
    Binder最開始是IPC工具,起源于OpenBinder項目,發展于Android項目,現在已經和入LinuxKernel,目前演變成RPC工具,可以使當前進程調用另一個進程的函數向自身函數一樣簡單。
OpenBinder is a system for inter-process communication. It was developed at Be Inc. and then Palm, Inc. and was the basis for the Binder framework now used in the Android operating system developed by Google.

OpenBinder allows processes to present interfaces which may be called by other threads. Each process maintains a thread pool which may be used to service such requests. OpenBinder takes care of reference counting, recursion back into the original thread, and the inter-process communication itself. On the Linux version of OpenBinder, the communication is achieved using ioctls on a given file descriptor, communicating with a kernel driver.

The kernel-side component of the Linux version of OpenBinder was merged into the Linux kernel mainline in kernel version 3.19, which was released on February 8, 2015.

Binder是解決進程間通訊問題的框架

  • Binder能干什么

    OpenHarmony里的對應層次就是:
  1. 驅動:kernel/linux/linux-xxx/drivers/android/binderXXX
  2. 服務:foundation/communication/ipc
  3. 框架:各種NAPI里面和對應的服務接口:如foundation/communication/xxx/frameworks/js/napi/xxx和foundation/communication/xxx/services/bluetooth/service/xxx

在OpenHarmony上表現的功能是:

  1. 提供客戶端-服務器(Client-Server)模型,服務請求方(Client)可獲取提供服務提供方(Server)的代理 (Proxy),并通過此代理讀寫數據來實現進程間的數據通信。通常,系統能力(System Ability)Server側會先注冊到系統能力管理者(System Ability Manager,縮寫SAMgr)中,SAMgr負責管理這些SA并向Client提供相關的接口。Client要和某個具體的SA通信,必須先從SAMgr中獲取該SA的代理,然后使用代理和SA通信。三方應用可以使用FA提供的接口綁定服務提供方的Ability,獲取代理,進行通信。

在OpenHarmony里的限制是:

  1. 單個設備上跨進程通信時,傳輸的數據量最大約為1MB,過大的數據量請使用匿名共享內存。
  2. 不支持把跨設備的Proxy對象傳遞回該Proxy對象所指向的Stub對象所在的設備。
  • Binder原理是什么

    Binder是C/S架構的進程間通訊機制。特點如下:
  1. 用戶空間運行:Client,Service和Service Manager;內核空間運行:Binder Driver
  2. Client,Server和Service Manager通過系統調用open,mmap和ioctl來訪問設備文件/dev/binder。從而實現進程間通信
  3. 功能詳細如下:
#define BINDER_WRITE_READ   _IOWR('b', 1, struct binder_write_read)
#define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, __s64)
#define BINDER_SET_MAX_THREADS _IOW('b', 5, __u32)
#define BINDER_SET_IDLE_PRIORITY _IOW('b', 6, __s32)
#define BINDER_SET_CONTEXT_MGR _IOW('b', 7, __s32)
#define BINDER_THREAD_EXIT _IOW('b', 8, __s32)
#define BINDER_VERSION _IOWR('b', 9, struct binder_version)
#define BINDER_GET_NODE_DEBUG_INFO _IOWR('b', 11, struct binder_node_debug_info)
#define BINDER_FEATURE_SET _IOWR('b', 30, struct binder_feature_set)
#define BINDER_GET_ACCESS_TOKEN _IOWR('b', 31, struct access_token)
  1. 對應文件如下
.
├── binder_alloc.c
├── binder_alloc.h
├── binder_alloc_selftest.c
├── binder.c
├── binder_trace.h
├── Kconfig
└── Makefile
  1. Binder通信過程介紹
  1. Service使用 BINDER_SET_CONTEXT_MGR命令通過Ioctl將自己注冊成為ServiceMannager
  2. Client向Binder驅動發起獲取服務的請求,Binder驅動通過Client需要獲取服務的名稱,從ServiceManager中獲取對Binder實體的引用,通過獲得到的引用就能實現和Server進程的通信
  1. IPC通信過程介紹
  1. 首先Binder驅動在內核空間創建一個數據接收緩存區
  2. 接著在內核空間開辟一塊內核緩存區,建立內核緩存區和內核中數據接收緩存區之間的映射關系,以及內核中數據接收緩存區和接收進程用戶空間地址的映射關系
  3. Client通過系統調用copy_from_user()將數據拷貝到內核中的內核緩存區,由于內核緩存區和Service的用戶空間存在內存映射,所以Service進程的用戶空間也有了此數據,這就完成一次跨進程通信

角色說明

  1. Client進程:使用服務的進程
  2. Server進程:提供服務的進程
  3. Service Manager進程:管理Service注冊與查詢(將字符形式的Binder名字轉化成Client中對該Binder的引用)
  4. Binder驅動:虛擬設備驅動,是連接Service進程,Client進程和Service Manager的橋梁,具體作用為:1.傳遞進程間的數據,通過內存映射。2.實現線程控制:采用Binder的線程池,并由Binder驅動自身進行管理。
  • Binder怎么用

    JS側依賴
import rpc from "@ohos.rpc"
import featureAbility from "@ohos.ability.featureAbility"

Native側編譯依賴

sdk依賴:

external_deps = [
"ipc:ipc_core",
]

此外, IPC/RPC依賴的refbase實現在公共基礎庫下,請增加對utils的依賴:

external_deps = [
"c_utils:utils",
]

JS側實現跨進程通信基本步驟:

  1. 獲取代理

    使用ohos.ability.featureAbility提供的connectAbility方法綁定Ability,在參數里指定要綁定的Ability所在應用的包名、組件名,如果是跨設備的情況,還需要指定所在設備的NetworkId。用戶需要在服務端的onConnect方法里返回一個繼承自ohos.rpc.RemoteObject的對象,此對象會在其onRemoteMessageRequest方法里接收到請求。

  2. 發送請求

    客戶端在connectAbility參數指定的回調函數接收到代理對象后,使用ohos.rpc模塊提供的方法完成RPC通信,其中MessageParcel提供了讀寫各種類型數據的方法,IRemoteObject提供了發送請求的方法,RemoteObject提供了處理請求的方法onRemoteRequest,用戶需要重寫。

Native側實現跨進程通信的基本步驟:

  1. 定義接口類

    接口類繼承IRemoteBroker,定義描述符、業務函數和消息碼。

  2. 實現服務提供端(Stub)

    Stub繼承IRemoteStub(Native),除了接口類中未實現方法外,還需要實現AsObject方法及OnRemoteRequest方法。

  3. 實現服務請求端(Proxy)

    Proxy繼承IRemoteProxy(Native),封裝業務函數,調用SendRequest將請求發送到Stub。

  4. 注冊SA

    服務提供方所在進程啟動后,申請SA的唯一標識,將Stub注冊到SAMgr。

  5. 通過SA的標識和設備NetworkId,從SAMgr獲取Proxy,通過Proxy實現與Stub的跨進程通信。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-12-02 14:20:09

Tetris鴻蒙

2022-11-29 16:35:02

Tetris鴻蒙

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發畫布功能

2023-02-24 16:02:45

WebSocket網絡通訊協議

2023-03-30 09:19:54

SELinux安全子系統

2023-02-27 16:30:32

鴻蒙開源協議分析

2022-08-19 19:02:20

開源鴻蒙操作系統

2022-10-10 14:47:04

藍牙應用鴻蒙

2023-04-04 09:24:11

鴻蒙HiDumper

2023-01-03 15:09:10

鴻蒙常用工具

2023-04-06 09:18:52

鴻蒙AVPlayerAVRecorder

2022-10-09 15:05:50

NAPI框架鴻蒙

2022-10-20 16:40:16

JS應用控制LED鴻蒙

2022-11-24 14:34:41

Hap程序鴻蒙

2022-12-06 15:39:16

鴻蒙主干代碼

2022-11-03 15:47:04

HTTP通信協議

2022-10-31 15:35:02

Wi-Fi藍牙子系統

2022-11-08 15:43:45

開源鴻蒙藍牙協議棧

2022-10-17 14:29:24

鴻蒙應用開發
點贊
收藏

51CTO技術棧公眾號

欧美精品 日韩| 久久噜噜噜精品国产亚洲综合| 成人久久18免费网站麻豆| 日韩精品一区二区三区四区视频 | 国产一区二区高清视频| 在线免费激情视频| 传媒在线观看| 999国产精品永久免费视频app| 亚洲一二三区在线观看| 91天堂在线观看| 国产美女视频一区二区三区 | 久久久久久美女| 一级特黄特色的免费大片| 久久在线免费| 国产精品免费久久久| 中文字幕视频在线免费| 国内精品美女在线观看| 日韩欧美精品三级| 免费超碰在线| 国产精品一区在线| 国内免费精品永久在线视频| 91精品入口| 国产乱码字幕精品高清av | 国产精品中文| 亚洲精品视频在线| 国产精品传媒毛片三区| a级大胆欧美人体大胆666| 高清av一区二区| 性色av一区二区三区红粉影视| 在线免费观看色| 亚洲素人一区二区| 欧美日韩精品免费观看视一区二区| 蜜桃视频在线观看播放| 欧美激情在线一区二区| 99热99热| 日韩成人在线电影| 色综合久久久久| 国产在线无码精品| 欧美艳星介绍134位艳星| 亚洲成色999久久网站| 欧美午夜小视频| 久久福利影院| 亚洲图片制服诱惑| 亚洲精选av在线| 午夜精品久久久久久久久久久 | 懂色av一区二区| 制服丝袜激情欧洲亚洲| 国产精品乱码久久久久| 国产精品久久久久久久久妇女| 91精品国产综合久久精品图片| 免费无码国产v片在线观看| 欧美激情视频一区二区三区在线播放 | www在线观看黄色| 亚洲免费在线看| 日本黄在线观看| 久久久久久电影| 精品无人区一区二区三区| 亚瑟国产精品| 国产精品久久久久久久久免费看| 欧美电影《睫毛膏》| 日韩欧美精品久久| 亚洲综合小说图片| 亚洲欧美一区二区激情| 黄色av网站在线免费观看| 99精品偷自拍| 日本一区二区在线视频| 欧美一区二区三| 任我爽在线视频精品一| 2021国产精品久久精品| 日韩中文一区二区三区| 久久久久观看| 在线精品国产欧美| 91丝袜在线| av在线电影院| 伊人影院蕉久影院在线播放| 玖玖玖国产精品| 4p变态网欧美系列| free性护士videos欧美| 欧美大奶子在线| 欧美xxxx少妇| 第一福利永久视频精品| 激情五月俺来也| 久久人人97超碰国产公开结果| 手机在线视频你懂的| 激情欧美一区| 国产噜噜噜噜久久久久久久久| 国色天香久久精品国产一区| 精品国产乱码久久久久久免费| 亚洲sss视频| 最近日韩中文字幕| 欧美乱大交xxxxx潮喷l头像| 天天操天天色综合| 香蕉521av成人网| 久久九九99视频| 五月婷婷在线视频| 欧美午夜精品久久久久久久| 亚洲jjzzjjzz在线观看| 337p亚洲精品色噜噜| 日韩免费一级| 色偷偷噜噜噜亚洲男人| 国产经典三级在线| 91精品在线一区二区| 91蜜桃臀久久一区二区| 欧美亚洲另类在线一区二区三区| 亚洲美女区一区| www.久久.com| 中文字幕亚洲自拍| 日本欧美韩国| 成人免费在线看片| 亚洲三级在线看| 美女视频一区| 精品国产视频在线| 在线观看爽视频| 欧美精品一区二区三区蜜桃视频| 欧美一级三级| 热re91久久精品国99热蜜臀| 久久综合给合| 黄色免费高清视频| 欧美久久久久久久久久| 日韩电影一区| 7878视频在线观看| 尤物在线观看一区| 福利资源在线久| 精品视频9999| 日韩av午夜| 国产精品精品久久久| 一区二区影视| 欧美极品色图| 欧美性色视频在线| 青青草成人影院| 97视频免费| 国语自产精品视频在线看抢先版图片| 成人免费视频视频| 三级a在线观看| 亚洲免费视频成人| 8x国产一区二区三区精品推荐| 九九热只有这里有精品| jlzzjlzz亚洲日本少妇| 看黄的a网站| 91麻豆精品国产91| 欧美天天在线| 一级日本在线| 欧美成人dvd在线视频| 国产在线一区观看| 日韩中文字幕免费在线| 久久精品成人欧美大片| 九九在线精品| 成人av资源网| 欧美日韩免费观看一区二区三区| 成人免费高清观看| 天堂√在线观看一区二区 | 亚洲啪啪av| 国产精品久久久久久久久免费丝袜 | 久久久久久久久免费视频| 日韩电视剧免费观看网站| 日韩精品久久久久久久软件91| 成人免费在线网| 欧美激情第1页| 99热免费精品在线观看| 欧美午夜小视频| 欧美成人国产va精品日本一级| 久久久蜜臀国产一区二区| 秋霞综合在线视频| 青青国产在线| 亚洲二区三区四区| 亚洲精品国产品国语在线app| 黑丝美女一区二区| 成年人黄色在线观看| 久久久99免费视频| 一区二区三区四区中文字幕| 国产精品啊啊啊| 欧美gv在线| 午夜在线观看av| 欧美成人精品高清在线播放| 亚洲人亚洲人色久| 青青草观看免费视频在线 | 日韩av大片| 国产黄色在线免费观看| 孩xxxx性bbbb欧美| 亚洲午夜激情av| 久久精品欧洲| 午夜黄色一级片| 精品免费二区三区三区高中清不卡| 日韩精品中文字幕有码专区| 999久久久国产精品| 亚洲成人三级| 国产在线播放观看| 国产精品久久久久久影视| 欧美一卡2卡3卡4卡| 久久久精品国产99久久精品芒果 | av成人国产| 成人免费91| 青春草在线观看| 日韩精品久久一区二区| 欧美日本国产视频| 久久青草欧美一区二区三区| 亚洲精华国产欧美| 毛片网站在线观看| 国产精品久久久久久影视| 亚洲国产成人精品久久|