一. Android下用户态swap的意义
二. Android下用户态swap的实现方法
1. 首先实现系统调用swap_process
(在Andriod的内核层实现系统调用,可以参考我前面的文章。)
2. $kernel/mm/swap_state.c
定义系统调用函数swap_process,参数为pid(用户层传过来的进程id)
/**
* swap inactive pages of process with pid
*/
SYSCALL_DEFINE1(swap_process, pid_t, pid)
{
struct task_struct* p = NULL;
LIST_HEAD(pagelist);
unsigned long nr_reclaimed_pages = 0;
//1. find the process ds() through pid
printk(KERN_INFO "user pid: %d\n", pid);
p = find_task_by_pid_ns(pid, current->nsproxy->pid_ns);
if(NULL == p)
{
printk(KERN_ERR "+++could not find task_struct with the pid+++\n");
return 0;
}
//2. filter the inactive pages and add them to swap cache
traverse_pages(p, &page