1

在用户模式 ​​linux (UML) 中,跟踪线程取消用户空间进程进行的系统调用,并将它们重定向到在用户空间中运行的内核。现在在某个时候,这个用户空间内核将需要主机操作系统的帮助。用户态内核如何调用底层主机内核,是否只是普通的系统调用?还是它使用某种 IOCTL 机制或其他什么?

4

1 回答 1

2

我在这里找到了一个非常简单的 UML 设计解释。它可能对你有用。

UML 使用 ptrace 系统调用跟踪机制构造它。

  1. 当一个进程在用户空间时,它的系统调用被ptrace拦截。
  2. 当它在内核中时,没有拦截。当进程执行系统调用或接收信号时,跟踪线程强制进程在内核中运行。
  3. 转换后,流程状态恢复并继续。

系统调用虚拟化

  1. 通过切换用户和内核以及系统调用拦截
  2. 注意:必须在主机内核中取消系统调用。
  3. 进程状态被保留。
  4. 当系统调用完成后,进程在其保存的寄存器中获取返回值并返回到用户态。

此外,本文还通过下图解释了使用 ptrace进行系统调用虚拟化。

http://www.csee.wvu.edu/~katta/uml/graphics/vsyscall.jpg。红线代表正常的系统调用过程。

于 2015-08-31T07:28:59.327 回答