簡體   English   中英

在 vm_fault()、Linux 驅動程序中預取

[英]Prefetching in vm_fault(), Linux drivers

我正在實現一個簡單的設備驅動程序。 使用此驅動程序的程序從用戶那里獲取 arguments 是使用請求分頁還是預取(僅獲取下一頁)。 但是當用戶請求預取時,應該將此信息發送給驅動程序。 問題是 vm_fault 的標准結構如下:

int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);

那么如何將這些預取的附加信息合並到這些中,以便我可以使用它來編寫不同的預取例程呢? 或者有沒有其他方法可以實現這一目標?

[編輯]
為了提供更清晰的圖片:
這就是程序接受輸入的方式。

./user_prog [filename] --prefetch

user_prog 在其中設置了一些標志,現在如何將這些標志信息發送到 dev.c(驅動程序文件),因為 arguments 的所有功能都像上面的故障()一樣固定。 我希望這能提供更多的說明。

您也可以使用mmap()中的flags來傳遞您的自定義標志。

void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);

確保您的自定義標志值使用與mmap()使用的標志值不同的位。 manpage中,宏在sys/mman.h中定義。 使用echo '#include <sys/mman.h>' | gcc -E - -dM | grep MAP_* echo '#include <sys/mman.h>' | gcc -E - -dM | grep MAP_* echo '#include <sys/mman.h>' | gcc -E - -dM | grep MAP_* 我的系統有這個:

#define MAP_32BIT 0x40
#define MAP_TYPE 0x0f
#define MAP_EXECUTABLE 0x01000
#define MAP_FAILED ((void *) -1)
#define MAP_PRIVATE 0x02
#define MAP_ANON MAP_ANONYMOUS
#define MAP_LOCKED 0x02000
#define MAP_STACK 0x20000
#define MAP_NORESERVE 0x04000
#define MAP_HUGE_SHIFT 26
#define MAP_POPULATE 0x08000
#define MAP_DENYWRITE 0x00800
#define MAP_FILE 0
#define MAP_SHARED 0x01
#define MAP_GROWSDOWN 0x00100
#define MAP_HUGE_MASK 0x3f
#define MAP_HUGETLB 0x40000
#define MAP_FIXED 0x10
#define MAP_ANONYMOUS 0x20
#define MAP_NONBLOCK 0x10000

一些非沖突標志將是0x2000x400

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM