2
我試圖實現tlb刷新功能。對於沖洗我使用INVLPG
指令,但不幸的是,它總是會導致分段錯誤。你能幫我解決這個問題嗎?當調用invlpg指令時出現Segfault
下面是代碼:
#include "stdlib.h"
inline void tlb_flush_entry(int *m)
{
asm volatile ("invlpg %0"::"m"(*m):"memory");
}
int main(int argc, char **argv)
{
int *memory = (int *)malloc(100);
tlb_flush_entry(memory);
}
'invlpg'是一條特權指令。它只能從內核端代碼執行。 – James
謝謝,我錯過了這個規範。那麼什麼是從用戶空間刷新tlb的最自然的方式(我需要它來進行基準測試)?開發內核模塊? – Alexander
@Alexander AFAIK您需要爲此開發一個內核模塊。 – Powerslave