深入揭秘OpenHarmony核心:SAMGR掌控系统服务全生命周期

模块概述

SAMGR(System Ability Manager)是OpenHarmony系统服务管理的核心组件,负责系统服务的注册、查询、启动、停止等生命周期管理。该模块位于foundation/systemabilitymgr/samgr目录下,是系统服务框架的基础支撑模块。

核心特性

  • 统一服务管理: 集中管理所有系统服务(SystemAbility)
  • 动态加载: 支持按需启动系统服务进程
  • 分布式支持: 支持跨设备服务发现和调用
  • 权限控制: 基于能力模型的权限验证机制
  • 故障恢复: 服务死亡通知和自动重启机制
  • 性能监控: 内置DFX(Design for X)监控能力

系统定位

在OpenHarmony架构中,SAMGR作为系统服务的中枢神经,连接着:

  • 上层应用: 通过SystemAbilityManagerClient访问系统服务
  • 系统服务: 各类SystemAbility的宿主进程
  • 内核服务: 通过IPC与底层驱动交互
  • 分布式能力: 通过dBinder实现跨设备服务调用

架构设计

核心组件架构

/foundation/systemabilitymgr/samgr/
├── interfaces/                    # 接口定义层
│   └── innerkits/samgr_proxy/include/
│       ├── if_system_ability_manager.h    # 系统能力管理器接口定义
│       └── iservice_registry.h            # 服务注册接口定义
├── services/                      # 服务实现层
│   └── samgr/native/
│       ├── source/
│       │   ├── system_ability_manager.cpp  # 系统能力管理器核心实现
│       │   ├── service_registry.cpp        # 服务注册实现
│       │   ├── main.cpp                    # 服务启动入口
│       │   └── ability_death_recipient.cpp # 能力死亡通知处理
│       └── include/              # 头文件
├── test/                        # 测试代码
├── utils/                       # 工具类
└── README_zh.md                 # 中文说明文档

核心类关系图

┌─────────────────────┐    ┌─────────────────────┐
│ SystemAbilityManager │    │ SystemAbilityManagerClient │
│  (服务端实现)        │    │  (客户端代理)        │
├─────────────────────┤    ├─────────────────────┤
│ - AddSystemAbility() │    │ - GetInstance()      │
│ - CheckSystemAbility()│    │ - GetSystemAbilityManager()│
│ - RemoveSystemAbility()│   │ - DestroySystemAbilityManagerObject()│
│ - SubscribeSystemAbility()│ └─────────────────────┘
│ - LoadSystemAbility()   │
└─────────────────────┘
            │
            │ IPC通信
            │
┌─────────────────────┐
│ ISystemAbilityManager │
│  (接口定义)          │
└─────────────────────┘

进程间通信架构

SAMGR通过Binder机制实现进程间通信,架构如下:

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   客户端进程     │    │   SAMGR进程     │    │   服务进程      │
│                 │    │                 │    │                 │
│ ┌─────────────┐ │    │ ┌─────────────┐ │    │ ┌─────────────┐ │
│ │SystemAbility│ │    │ │SystemAbility│ │    │ │SystemAbility│ │
│ │ManagerClient│ │◄──►│ │   Manager   │ │◄──►│ │ 实现类       │ │
│ └─────────────┘ │    │ └─────────────┘ │    │ └─────────────┘ │
│                 │    │                 │    │                 │
│    BinderProxy   │    │   BinderStub    │    │   BinderNative  │
└─────────────────┘    └─────────────────┘    └─────────────────┘

分层架构详解

1. 应用层(Application Layer)
  • SystemAbilityManagerClient: 单例模式,提供静态访问接口
  • API接口: 封装底层IPC调用,提供简洁的API
2. 框架层(Framework Layer)
  • SystemAbilityManager: 核心服务管理器实现
  • ServiceRegistry: 服务注册中心
  • OnDemandPolicy: 按需加载策略管理
3. IPC层(IPC Layer)
  • IServiceRegistry: 服务注册接口
  • ISystemAbilityManager: 系统能力管理接口
  • Binder机制: 跨进程通信实现
4. 系统服务层(System Service Layer)
  • 各类SystemAbility: 具体系统服务实现
  • 死亡通知机制: 服务状态监控
  • 权限验证: 基于能力模型的安全检查

核心功能实现

1. 系统服务注册机制

源码位置
  • 实现文件: foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp
  • 接口定义: foundation/systemabilitymgr/interfaces/innerkits/samgr_proxy/include/if_system_ability_manager.h
注册流程详解
// 系统服务注册核心方法
int32_t SystemAbilityManager::AddSystemAbility(
    int32_t systemAbilityId, 
    const sptr<IRemoteObject>& ability,
    const SAExtraProp& extraProp)
{
   
   
    // 1. 参数校验
    if (!CheckInputSysAbilityId(systemAbilityId) || ability == nullptr) {
   
   
        HILOGW("AddSystemAbility saId %{public}d failed, invalid input", systemAbilityId);
        return ERR_INVALID_VALUE;
    }

    // 2. 容量检查
    {
   
   
        unique_lock<shared_mutex> writeLock(abilityMapLock_);
        if (abilityMap_.size() >= MAX_SERVICES) {
   
   
            HILOGE("AddSystemAbility failed, reach max capacity");
            return ERR_INVALID_VALUE;
        }
        
        // 3. 构建SA信息
        SAInfo saInfo;
        saInfo.remoteObj = ability;
        saInfo.isDistributed = extraProp.isDistributed;
        saInfo.capability = Str16ToStr8(extraProp.capability);
        saInfo.permission = Str16ToStr8(extraProp.permission);
        
        // 4. 添加到能力映射表
        abilityMap_[systemAbilityId] = std::move(saInfo);
    }

    // 5. 死亡通知注册
    if (abilityDeath_ != nullptr) {
   
   
        ability->AddDeathRecipient(abilityDeath_);
    }

    // 6. 分布式注册
    if (extraProp.isDistributed && dBinderService_ != nullptr) {
   
   
        std::string strName = std::to_string(systemAbilityId);
        dBinderService_->RegisterRemoteProxy(strName, systemAbilityId);
    }

    // 7. 发送添加通知
    SendSystemAbilityAddedMsg(systemAbilityId, ability);
    
    // 8. 触发DFX监控
    DfxAddSystemAbility(systemAbilityId);
    
    return ERR_OK;
}
参数验证机制
bool SystemAbilityManager::CheckInputSysAbilityId(int32_t systemAbilityId)
{
   
   
    // 有效SAID范围检查
    if (systemAbilityId < FIRST_SYS_ABILITY_ID || 
        systemAbilityId >= MAX_SYS_ABILITY_ID) {
   
   
        return false;
    }
    
    // 保留SAID检查
    if (IsReservedSystemAbilityId(systemAbilityId)) {
   
   
        return false;
    }
    
    return true;
}
注册流程时序图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值