在用户模式 linux (UML) 中,跟踪线程取消用户空间进程进行的系统调用,并将它们重定向到在用户空间中运行的内核。现在在某个时候,这个用户空间内核将需要主机操作系统的帮助。用户态内核如何调用底层主机内核,是否只是普通的系统调用?还是它使用某种 IOCTL 机制或其他什么?
问问题
309 次
1 回答
2
我在这里找到了一个非常简单的 UML 设计解释。它可能对你有用。
UML 使用 ptrace 系统调用跟踪机制构造它。
- 当一个进程在用户空间时,它的系统调用被ptrace拦截。
- 当它在内核中时,没有拦截。当进程执行系统调用或接收信号时,跟踪线程强制进程在内核中运行。
- 转换后,流程状态恢复并继续。
系统调用虚拟化
- 通过切换用户和内核以及系统调用拦截
- 注意:必须在主机内核中取消系统调用。
- 进程状态被保留。
- 当系统调用完成后,进程在其保存的寄存器中获取返回值并返回到用户态。
此外,本文还通过下图解释了使用 ptrace进行系统调用虚拟化。
http://www.csee.wvu.edu/~katta/uml/graphics/vsyscall.jpg。红线代表正常的系统调用过程。
于 2015-08-31T07:28:59.327 回答