Enclave ,线程和进程之间的关系是什么?
SGX 是否支持多线程或多进程?
如果我调用“fork”在飞地内创建新进程会发生什么?
Enclave ,线程和进程之间的关系是什么?
飞地可以被认为是进程的一部分。进程可以将飞地页面添加到其内存中。初始化飞地后,进程可以通过发出 EENTER [1] 来执行飞地代码。当 enclave 调用返回时,它通过 EEXIT 将执行返回到非 enclave(不受信任)内存。
线程是进程执行的可能多个线程之一。
SGX 是否支持多线程或多进程?
您不能在同一个 enclave 中运行多个进程,但您可以在同一个 enclave 中运行多个线程。每个线程都必须有自己的线程控制结构 (TCS),这是 SGX [2] 支持的。借助 SGX2 扩展(任何 CPU 尚不支持),还可以在 enclave 初始化后添加和删除 TCS 页面,从而允许 enclave 动态调整线程数量。
如果我调用“fork”在飞地内创建新进程会发生什么?
fork 是系统调用,是 enclave 中的非法指令,因此会导致异常 [3]。
资料来源: https://software.intel.com/sites/default/files/managed/7c/f1/332831-sdm-vol-3d.pdf中的以下章节:
[1] 36.3 飞地生命周期
[2] 38.8 TCS
[3] 38.6.1 非法指令