进程管理API之get_task_mm
2017-11-29 08:54
627 查看
struct mm_struct *get_task_mm(struct task_struct *task) 其作用是得到task_struct *task的 成员变量mm,如果是user space的task的话,通过将得到mm_struct *mm 结构体的mm_users成员变量加1 如果是kernel space的task的话,其mm为null 其使用的例子如下: int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags) { struct mm_struct *mm; mm = get_task_mm(tsk); if (!mm) return 0; } 其源码分析如下: struct mm_struct *get_task_mm(struct task_struct *task) { struct mm_struct *mm; #访问task 时需要通过task_lock/task_unlock 保护起来. task_lock(task); #得到task_struct *task的成员变量mm mm = task->mm; if (mm) { #如果是kernel thread的话,将mm置位null if (task->flags & PF_KTHREAD) mm = NULL; else #是user space的thread的话,通过mmget让mm的成员变量mm_users 加1 mmget(mm); } task_unlock(task); return mm; } mmget的定义如下,可见是通过atomic_inc,让mm->mm_users 来加1 static inline void mmget(struct mm_struct *mm) { atomic_inc(&mm->mm_users); }
相关文章推荐
- 进程管理API之get_pid_task
- 进程管理API之get_task_pid
- 进程管理API之find_task_by_pid_ns
- 进程管理API之__task_pid_nr_ns
- 进程管理API之find_get_pid
- 进程管理API之pid_task
- 进程管理API之get_pid/ put_pid
- 进程管理API之task_active_pid_ns
- 进程管理API之task_tgid_nr_ns
- 进程管理API之find_task_by_vpid
- Linux进程地址管理之mm_struct
- getRunningTask API
- 进程管理API之ns_of_pid
- cmd Tasklist与Tskill管理Windows系统进程
- Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)
- 进程管理的常用api的分类
- Linux进程管理下的PCB(task_struct)
- 进程管理—进程描述符(task_struct)
- Linux进程管理之task_struct结构体(上)
- Atitit.进程管理常用api