在Linux 2.6+中替换系统调用(系统调用)

时间:2011-06-18 20:48:25

标签: multithreading c++11 future system-calls promise

我正在研究编写userland threading library,因为在这方面似乎没有积极的工作,我相信C ++ 0x promises and futures 可能会给这个模型带来一些力量。不幸的是,为了使这个模型工作,必须确保上下文切换阻塞调用。因此,我想拦截每个系统调用,以便用异步版本替换它。有一些警告:

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

这可能吗?

1 个答案:

答案 0 :(得分:1)

  

我正在考虑编写一个userland线程库,因为这个区域似乎没有活跃的工作

您可能需要查看实现混合的线程库Marcel(及其publications)和MPC(内核用户 - 级别)线程,主要是为了高性能计算的目的,所以他们不得不为这个阻塞系统调用找到一些解决方案。

  

以避免在应用程序时阻塞内核线程   阻止系统调用时,Marcel使用调度程序激活   它们是可用的,或者只是在动态时截取这样的阻塞调用   符号级别。