Fuchsia进程创建

2023-12-19 10:32
文章标签 创建 进程 fuchsia

本文主要是介绍Fuchsia进程创建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


内核提供了底层设施以创建和启动进程。但是,由于包含为可执行文件、共享库和栈进行直接映射内存空间的工作,这些设施难以使用。替代的方法,应当使用如下的较高层机制创建进程。


fuchsia.process.Launcher

Fuchsia提供的进程fuchsia.process.Launcher,实现了创立进程所需的底层工作。你只需为此服务提供创建进程所需的内核对象(例如,将在其中创建进程的job对象;可执行镜像;以及标准输入和输出句柄),服务本身完成解析ELF格式可执行文件的工作,配置进程地址空间,和发送启动消息到进程。


大多数客户不需要直接使用此服务。相反,可使用FDIO库(Zircon IO库)中的简单C语言前端函数fdio_spawn。此函数与更高级别的fdio_spawn_etc和fdio_spawn_vmo函数,连接到fuchsia.process.Launcher服务,发送适当的消息到服务去创建进程。传递到函数fdio_spawn_etc中的fdio_spawn_action_t结构体数组可定制化新建的进程。


不管是直接使用fuchsia.process.Launcher服务,还是通过fdio_spawn前端,此创建进程的方式是在你自身命名空间中最合适的,因为你需要为新进程提供所需的内核对象。


fuchsia.sys.Launcher

为实现在其自身命名空间中创建进程,Fuchsia提供了fuchsia.sys.Launcher服务。不同于为需要创建的新进程提供所有需要的内核对象,你仅需为此服务提供一个高级别的要创建进程的描述,fuchsia.sys.Launcher服务为新进程提供合适的内核对象。例如,提供一个软件包中组件的URL地址,fuchsia.sys.Launcher服务将在合适的命名空间中为此组件创建一个新进程,此命名空间有组件访问其自身包的权限,并且分配其manifest文件中sandbox一节声明的其它资源。


不同于直接返回一个zx::process句柄,fuchsia.sys.Launcher返回一个fuchsia.sys.ComponentController接口。这一级抽象使得fuchsia.sys.Launcher可创建非单进程支持的组件。例如,加载一个使用Dart编写的组件,此组件可能运行与Dart VM实例中,而此实例又根据兼容的安全约束由多个组件共享。


Early boot

在启动过程的早期阶段,系统确实收到创建了一些进程。例如,内核手动创建了第一个用户进程 userboot,其接下来又创建了devmgr进程。这些底层机制使用了liblaunchpad.so共享库,其中包含解析ELF文件的逻辑。在Fuchsia的job树中直接的创建进程是被job策略禁止的。


共享库liblaunchpad.so在Zircon中可用,并且应当仅在早期启动阶段使用,或者作为进程创建的底层测试使用。可能被Fuchsia的job树使用的库和程序应当使用fdio_spawn函数(或者其变种),以遵循安全策略。

 

END

 

这篇关于Fuchsia进程创建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511856

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析