2

我正在考虑编写一个用户态线程库,因为在这个领域似乎没有积极的工作,我相信 C++0x 的承诺和未来可能会给这个模型一些力量。不幸的是,为了使这个模型工作,必须确保阻塞调用的上下文切换。因此,我想拦截每个系统调用,以便用异步版本替换它。有一些警告:

  • 我知道几乎每个常规系统调用都有异步系统调用,但出于向后兼容性的原因,这不是一个可行的解决方案。
  • 我知道在 Linux 2.4 或更早版本中可以直接更改 sys_call_table,但这已经消失了。
  • 因为我希望我的库在需要时被静态链接,所以 LD_PRELOAD 技巧是不可行的。
  • 同样,内核模块也不是一个选项,因为它应该是一个用户态库。
  • 最后,出于类似原因, ptrace() 也不是一个选项。我不能让我的图书馆为了使用而分叉一个新进程。

这可能吗?

4

1 回答 1

1

我正在考虑编写一个用户态线程库,因为这方面似乎没有积极的工作

您可能想看看线程库Marcel(及其出版物)和MPC,它们实现了混合(内核用户级)线程,主要是为了高性能计算,所以他们必须找到一些解决方案这个阻塞系统调用。

为了避免在应用程序进行阻塞系统调用时阻塞内核线程,Marcel在它们可用时使用调度程序激活,或者只是在动态符号级别拦截此类阻塞调用。

于 2011-09-23T18:23:23.353 回答