我正在研究編寫userland threading library,因爲在這個區域似乎沒有活動的工作,我相信C++ 0x promises and futures可能會給這個模型一些權力。不幸的是,爲了使這個模型起作用,確保上下文切換阻塞調用是非常重要的。因此,我想攔截每個系統調用,以便用異步版本替換它。有一些注意事項:在Linux 2.6+中替換系統調用(syscalls)
- 我知道幾乎每個常規系統調用都有異步系統調用,但出於向後兼容性的原因,這不是一個可行的解決方案。
- 我知道,在Linux 2.4或更早版本中,可以直接更改sys_call_table,但這已經消失。
- 正如我希望我的庫是靜態鏈接,如果需要,LD_PRELOAD技巧是不可行的。
- 同樣,內核模塊不是一個選項,因爲這應該是一個用戶級庫。
- 最後,由於類似的原因,ptrace()也不是一個選項。我不能讓我的圖書館爲了使用而創建新的流程。
這可能嗎?
在我看來,這似乎與系統調用沒多大關係,但通常是鏈接機制。正如通常沒有人在彙編代碼中調用系統調用一樣,您只是想在鏈接時用自己的代替一些常規函數。 –
你知道嗎,我想知道一個過程是否有可能爲了做到這一點而「自行追蹤」?即使不是這樣,你也可以考慮如何攔截系統調用。 – Omnifarious