我剛剛開始學習 x86_64 asm,我想在不使用任何系統呼叫的情況下實作類似 usleep 的程序。
extern void my_usleep(int);
my_usleep:
; stuff
ret
uj5u.com熱心網友回復:
我剛剛開始學習 x86_64 asm,我想在不使用任何系統呼叫的情況下實作類似 usleep 的程序。
不使用任何系統呼叫;唯一可行的選擇是一個繁忙的回圈,它依賴于rdtscorrdtscp指令中的時間戳。
這涉及將延遲從微秒轉換為 CPU 的 TSC 頻率(需要以某種方式確定,可能通過使用其他時間源測量它),此外還要避免各種陷阱(例如,不同 CPU 上的時間戳不同);而這些事情讓它“不容易”。
另一個問題是,對于運行在幾 GHz 的 CPU,每微秒代表了數千個浪費的時鐘周期,CPU 本可以花費這些時鐘周期來做有用的作業/運行不同的任務,甚至只是高效地什么都不做(通過將 CPU 切換到電源保存狀態直到發生定時器 IRQ)。這就是系統呼叫更好的原因——內核是唯一擁有有效實作時間延遲所需的特權的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528228.html
標籤:Intel Collective C部件x86-64鼻涕虫延迟
