1

我正在尝试使用 linux 设备驱动程序来分配物理内存/页面。我有一个 ioctl,任何应用程序都可以调用它,它只是分配一个物理页面并使用 vm_insert_page 将其映射到进程内存。我正在使用 alloc_page() 来分配物理页面。我想知道的是,alloc_page() 分配的物理页面是否计入制作 IOCTL 的进程,或者它是否只是属于驱动程序的物理页面。

我指的计数是在 android 中的低内存杀手或内存不足杀手之类的东西。这些组件在决定在内存不足或内存不足的情况下终止哪个进程之前,会跟踪进程的物理内存使用情况。

另一个问题:GFP_HIGHUSER和GFP_HIGHUSER_MOVABLE有什么区别?我知道使用 alloc_page(GFP_HIGHUSER) 会给我一个不可分页(不交换到磁盘)页面。GFP_HIGHUSER_MOVABLE 会改变这个吗?请不要指出我的来源。我问这个问题是因为我看到的来源并且它没有足够的文档或者我无法从提供的文档中理解。

4

1 回答 1

1

我想alloc_pages()分配(1<<order)连续的物理页面,因此它是属于内核空间的物理页面,因此属于驱动程序,并且它所在的区域取决于您传递的区域修饰符。这就是为什么我们必须小心只释放我们分配的页面。传递错误的结构页面或地址,或不正确的顺序,可能会导致损坏。它更像是内核信任自己。与用户空间不同,如果我们做了一些可怕的事情,内核会很高兴地挂起自己。

于 2013-06-22T10:14:58.527 回答