本文档讨论了 Fuchsia 中作业的概念,特别是如何使用作业以及作业与流程的关系。
概览
在 Fuchsia 中,作业是组织、控制和调节进程的方式,这些进程是操作系统中资源的主要使用者。
- 对父作业的引用
- 一组子作业(每个子作业都将此作业作为其父作业)
- 一组成员进程
- 一组政策
作业是进程和其他“子”作业的容器。作业用于跟踪权限以执行内核操作,如进行系统调用、跟踪和限制基本资源(例如内存和 CPU)消耗。在 Fuchsia 中,作业沿着作业树向上传播异常,但以自上而下的方式应用政策和配额。如需了解详情,请参阅异常处理。
每个进程只能有一个作业。Fuchsia 系统上的所有作业构成一个树,每个作业都属于父作业,根作业除外,根作业没有父作业。
根作业在启动时由内核创建并传递给 userboot
。这是第一个开始执行的用户空间进程。
作业和进程
从传统意义上来说,Zircon 进程是程序的一个实例,即由一个或多个线程执行的一组指令以及一组资源。zx_process_create()
可在作业内创建一个新进程。该线程要等到 zx_process_start()
被调用后才会执行。
作业可用于终止子进程、从子进程获取异常或调试子进程。如需创建进程,您必须将作业传递给 zx_process_create()
。在 Fuchsia 中,如果没有明确授予进程分配内存或通信所需的资源,进程将无法分配内存或进行通信。
设置作业政策
可以对空作业设置安全政策和/或资源政策。作业的有效政策是父级的有效政策与作业政策中指定的政策的组合。
zx_job_set_policy()
系统调用会将作业安全政策和资源政策设置为空作业。此调用成功后,任何新的子进程或子作业都会应用新的有效政策。
相关系统调用
zx_job_create()
用于在作业中创建新作业;根据某个父作业创建一个新的子作业对象。zx_job_set_critical()
将进程设置为对作业至关重要的进程。- 当给定进程终止时,相应的作业也会终止,就像对其调用
zx_task_kill()
一样。使用的返回代码为ZX_TASK_RETCODE_CRITICAL_PROCESS_KILL
。 zx_process_create()
可创建一个新进程。zx_thread_create()
会在指定的进程内创建线程。在调用zx_thread_start()
之前,线程不会开始执行。