调用alloc_page计数进程?

时间:2013-06-21 21:12:45

标签: linux-device-driver

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

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

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

1 个答案:

答案 0 :(得分:1)

我猜alloc_pages()分配(1<<order)个连续的物理页面,因此它是属于内核空间的物理页面,因此属于驱动程序,它所在的区域依赖于区域修改器你通过了。这就是为什么我们必须小心只释放我们分配的页面。传递错误的结构页面或地址或错误的顺序可能会导致损坏。它更像内核信任自己。与用户空间不同,如果我们做一些可怕的事情,内核会自然地挂起来。