OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【扩展组件】下

轻量级进程间通信

基本概念

LiteIPC是OpenHarmony LiteOS-A内核提供的一种新型IPC(Inter-Process Communication,即进程间通信)机制,不同于传统的System V IPC机制,LiteIPC主要是为RPC(Remote Procedure Call,即远程过程调用)而设计的,而且是通过设备文件的方式对上层提供接口的,而非传统的API函数方式。

LiteIPC中有两个主要概念,一个是ServiceManager,另一个是Service。整个系统只能有一个ServiceManager,而Service可以有多个。

ServiceManager有两个主要功能:

  • 一是负责Service的注册和注销,

  • 二是负责管理Service的访问权限(只有有权限的任务(Task)可以向对应的Service发送IPC消息)。

运行机制

首先将需要接收IPC消息的任务通过ServiceManager注册成为一个Service,然后通过ServiceManager为该Service任务配置访问权限,即指定哪些任务可以向该Service任务发送IPC消息。

LiteIPC的核心思想就是在内核态为每个Service任务维护一个IPC消息队列,该消息队列通过LiteIPC设备文件向上层用户态程序分别提供代表收取IPC消息的读操作和代表发送IPC消息的写操作。

开发指导

接口说明

表1 LiteIPC模块接口(仅LiteOS-A内部使用)

功能分类 接口描述
模块初始化 OsLiteIpcInit:初始化LiteIPC模块
IPC消息内存池 - LiteIpcPoolInit:初始化进程的IPC消息内存池
- LiteIpcPoolReInit:重新初始化进程的IPC消息内存池
- LiteIpcPoolDelete:释放进程的IPC消息内存池
Service管理 LiteIpcRemoveServiceHandle:删除指定的Service

说明: LiteIPC模块接口都只在LiteOS-A内部使用。

容器隔离

概述

容器(Container)提供了一种资源隔离的解决方案。系统中许多资源是全局管理的。例如进程PID、主机信息、用户信息等,容器机制是对这种全局资源的隔离,使得处于不同容器的进程拥有独立的全局系统资源,改变一个容器中的系统资源只会影响当前容器里的进程,对其他容器中的进程没有影响。

LiteOS-A内核容器隔离功能包含7个容器:UTS容器、PID容器、Mount容器、Network容器、TIME容器、IPC容器、User容器。通过所在进程ProcessCB的Container和Credentials保存。

隔离的容器如下表。

编号 名称 宏定义/flag 隔离资源 数据结构定义位置
1 UTS CLONE_NEWUTS 主机名,域名,版本信息 struct Container
2 PID CLONE_NEWPID 进程ID struct Container
3 Mount CLONE_NEWNS 文件系统挂载点 struct Container
4 Network CLONE_NEWNET 网络系统资源 struct Container
5 TIME CLONE_NEWTIME 时钟资源 struct Container
6 IPC CLONE_NEWIPC 进程间通信资源 struct Container
7 User CLONE_NEWUSER 用户和用户组 struct Credentials

容器之间的资源隔离,细分为两种:

  • 全局隔离:属于平行关系(无继承关系)的容器,所有容器之间的容器类资源彼此不可见。

  • 非全局隔离:属于有父子继承关系的容器,同一层的各容器之间资源不可见,但上层容器仍然可以访问下层容器资源。

PID容器通过 unshare/setns 切换时,切换子进程的容器,而本进程容器不变。

通过在进程ProcessCB中添加对应容器集合Container和用户容器,完成对容器功能的支持,并通过编译开关控制特性的开启和关闭。

  • 每个进程ProcessCB包含一个Container指针,该指针指向真正分配的Container结构。通过这种方式,进程可单独拥有一个Container结构,也可共享同一个Container结构。 进一步分解,在Container结构中,包含各容器指针,分别指向UTS容器、PID容器、Network容器、Mount容器、TIME容器、IPC容器。

  • 每个进程ProcessCB对应一个Credentials结构,单独管理User容器,便于模块化、单独处理User容器的特有逻辑。

各容器简介

UTS容器

UTS 容器用于对主机名和域名、版本等信息进行隔离,不同UTS容器内查看到的都是属于自己的信息,相互间不能查看。

Mount容器

用于隔离文件挂载点。在一个容器里挂载、卸载的动作不会影响到其他容器。

通过文件挂载容器,实现各进程间相互独立的使用文件挂载系统,子进程在独立的文件挂载容器里面进行挂载操作,可以建立自身的文件挂载结构:

  • 文件挂载容器的基础实现,创建进程时根据clone传入的参数flag在各自进程创建文件挂载容器,将挂载信息从全局更改为与文件挂载容器相关联。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值