工作机会

本文档讨论了 Fuchsia 中作业的概念,特别是如何使用作业以及作业与流程的关系。

概览

在 Fuchsia 中,作业是组织、控制和调节进程的方式,这些进程是操作系统中资源的主要使用者。

在 Fuchsia 中,作业是内核对象,其中包含以下内容:

  • 对父作业的引用
  • 一组子作业(每个子作业都将此作业作为其父作业)
  • 一组成员进程
  • 一组政策

作业是进程和其他“子”作业的容器。作业用于跟踪权限以执行内核操作,如进行系统调用、跟踪和限制基本资源(例如内存和 CPU)消耗。在 Fuchsia 中,作业沿着作业树向上传播异常,但以自上而下的方式应用政策和配额。如需了解详情,请参阅异常处理

每个进程只能有一个作业。Fuchsia 系统上的所有作业构成一个树,每个作业都属于父作业,根作业除外,根作业没有父作业。

根作业在启动时由内核创建并传递给 userboot。这是第一个开始执行的用户空间进程。

作业和进程

从传统意义上来说,Zircon 进程是程序的一个实例,即由一个或多个线程执行的一组指令以及一组资源。zx_process_create() 可在作业内创建一个新进程。该线程要等到 zx_process_start() 被调用后才会执行。

作业可用于终止子进程、从子进程获取异常或调试子进程。如需创建进程,您必须将作业传递给 zx_process_create()。在 Fuchsia 中,如果没有明确授予进程分配内存或通信所需的资源,进程将无法分配内存或进行通信。

设置作业政策

可以对空作业设置安全政策和/或资源政策。作业的有效政策是父级的有效政策与作业政策中指定的政策的组合。

zx_job_set_policy() 系统调用会将作业安全政策和资源政策设置为空作业。此调用成功后,任何新的子进程或子作业都会应用新的有效政策。