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內核配置物理內存
- 2. 內存分配和交換(在Windows下)
- 3. CUDA內核內部的內存分配
- 4. 配置Linux內核
- 5. 如何在Linux內核模塊中分配可執行頁面?
- 6. 在linux中分配內存的問題
- 7. 在linux中爲進程分配內存
- 8. 在Linux中的內存分配
- 9. 如何在Linux內核中爲char *類型的字符串分配內存?
- 10. 動態規劃:全球內存分配與孩子交換數據內核
- 11. Linux內核中的內存損壞
- 12. 如何在內核中分配不可緩存的物理內存?
- 13. 如何在Buildroot中配置Linux內核?
- 14. 可以交換Linux內核或其數據結構嗎?
- 15. 可交換的內核頁面?
- 16. 剖析Linux內核使用的內存
- 17. 內核內存轉儲大小Linux
- 18. asm__volatile()在Linux內核
- 19. setscheduler()在Linux內核
- 20. 在Linux內核中搶佔
- 21. C++可變內存分配
- 22. Linux共享內存分配行爲
- 23. 是否可以在Linux下分配某個扇區的內存?
- 24. 在內核啓動時分配(靜態地)內存
- 25. linux內核路徑走。 lookup_slow交代
- 26. linux內核中潛在的內存泄漏?
- 27. 內核能否使用虛擬內存在Linux中
- 28. 在Linux內核中平衡內存使用情況
- 29. 內存泄漏在C /內存分配++
- 30. 在Linux中如何處理內存分配小於PAGE_SIZE的內存?
你必須解釋你的使用案例 –