Linux內核中的內存通常是不可擦除的(Do Kernel pages get swapped out?)。但是,有時候允許將內存換出。是否可以在Linux內核中明確分配可交換內存?我想到的一種方法是創建用戶空間進程並使用其內存。有更好的嗎?在Linux內核中分配可交換內存
0
A
回答
2
您可以在內部shm
共享內存文件系統中創建一個文件。
const char *name = "example";
loff_t size = PAGE_SIZE;
unsigned long flags = 0;
struct file *filp = shmem_file_setup(name, size, flags);
/* assert(!IS_ERR(filp)); */
該文件實際上並未鏈接,因此名稱不可見。這些標誌可以包括VM_NORESERVE
以預先跳過會計,而不是分配頁面時的會計。現在你有一個shmem
文件。您可以像這樣映射一個頁面:
struct address_space *mapping = filp->f_mapping;
pgoff_t index = 0;
struct page *p = shmem_read_mapping_page(mapping, index);
/* assert(!IS_ERR(filp)); */
void *data = page_to_virt(p);
memset(data, 0, PAGE_SIZE);
還有shmem_read_mapping_page_gfp(..., gfp_t)
指定如何分配頁面。當你完成它時,不要忘記把頁面放回去。
put_page(p);
同上的文件。
fput(filp);
+0
這看起來正是我想要的。謝謝! – qbt937
+0
在這裏使用page_to_virt恰好適用於帶有直接映射的拱形,但完全沒有道理。要做的事情是kmap_atomic。更重要的是,雖然真正的問題是OP想要這樣做的。 –
相關問題
- 1. 在linux內核中選擇內存分配api頻繁地分配大內存
- 2. 在Linux內核中分配兩個值
- 3. 爲linux內核配置物理內存
- 4. Linux內核空間中的動態內存分配
- 5. 內存分配和交換(在Windows下)
- 6. 答:交換的分頁(內存分配)
- 7. CUDA內核內部的內存分配
- 8. 在Linux中交換內存速度
- 9. 配置Linux內核
- 10. Linux內核內存障礙
- 11. 如何在Linux內核模塊中分配可執行頁面?
- 12. 內存交錯和內存在Linux內核中發生了什麼?
- 13. 在Linux中的內存分配
- 14. 在linux中分配內存的問題
- 15. 在linux中爲進程分配內存
- 16. 進程從內核分配內存塊
- 17. 如何在Linux內核中爲char *類型的字符串分配內存?
- 18. 將cpu內核分配給進程 - Linux
- 19. 在Linux內核中
- 20. 動態規劃:全球內存分配與孩子交換數據內核
- 21. Linux內核中的內存損壞
- 22. Linux內核中的堆棧內存
- 23. Linux內核中的內存保護
- 24. 如何在內核中分配不可緩存的物理內存?
- 25. 如何在Buildroot中配置Linux內核?
- 26. Linux內核模塊配置
- 27. 可以交換Linux內核或其數據結構嗎?
- 28. 在__device/global__ CUDA內核中動態分配內存
- 29. 可交換的內核頁面?
- 30. linux內核模塊內存檢查器
你必須解釋你的使用案例 –