博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
start_kernel——mm_init_owner
阅读量:5925 次
发布时间:2019-06-19

本文共 4266 字,大约阅读时间需要 14 分钟。

全部任务都具有自己的内存,启动阶段中的当前任务必须具备属于自己的内存。

mm_init_owner()函数传递init_mm和init_task參数
mm/init-mm.c

struct mm_struct init_mm = {    .mm_rb      = RB_ROOT,    .pgd        = swapper_pg_dir,    .mm_users   = ATOMIC_INIT(2),    .mm_count   = ATOMIC_INIT(1),    .mmap_sem   = __RWSEM_INITIALIZER(init_mm.mmap_sem),    .page_table_lock =  __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock),    .mmlist     = LIST_HEAD_INIT(init_mm.mmlist),    INIT_MM_CONTEXT(init_mm)};

init/init_task.c

/* Initial task structure */struct task_struct init_task = INIT_TASK(init_task);EXPORT_SYMBOL(init_task);

include/linux/init_task.h

/* *  INIT_TASK is used to set up the first task table, touch at * your own risk!. Base=0, limit=0x1fffff (=2MB) */#define INIT_TASK(tsk)  \{
\ .state = 0, \ .stack = &init_thread_info, \ .usage = ATOMIC_INIT(2), \ .flags = PF_KTHREAD, \ .prio = MAX_PRIO-20, \ .static_prio = MAX_PRIO-20, \ .normal_prio = MAX_PRIO-20, \ .policy = SCHED_NORMAL, \ .cpus_allowed = CPU_MASK_ALL, \ .nr_cpus_allowed= NR_CPUS, \ .mm = NULL, \ .active_mm = &init_mm, \ .se = {
\ .group_node = LIST_HEAD_INIT(tsk.se.group_node), \ }, \ .rt = {
\ .run_list = LIST_HEAD_INIT(tsk.rt.run_list), \ .time_slice = RR_TIMESLICE, \ }, \ .tasks = LIST_HEAD_INIT(tsk.tasks), \ INIT_PUSHABLE_TASKS(tsk) \ INIT_CGROUP_SCHED(tsk) \ .ptraced = LIST_HEAD_INIT(tsk.ptraced), \ .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \ .real_parent = &tsk, \ .parent = &tsk, \ .children = LIST_HEAD_INIT(tsk.children), \ .sibling = LIST_HEAD_INIT(tsk.sibling), \ .group_leader = &tsk, \ RCU_POINTER_INITIALIZER(real_cred, &init_cred), \ RCU_POINTER_INITIALIZER(cred, &init_cred), \ .comm = INIT_TASK_COMM, \ .thread = INIT_THREAD, \ .fs = &init_fs, \ .files = &init_files, \ .signal = &init_signals, \ .sighand = &init_sighand, \ .nsproxy = &init_nsproxy, \ .pending = {
\ .list = LIST_HEAD_INIT(tsk.pending.list), \ .signal = {
{
0}}}, \ .blocked = {
{
0}}, \ .alloc_lock = __SPIN_LOCK_UNLOCKED(tsk.alloc_lock), \ .journal_info = NULL, \ .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ .pi_lock = __RAW_SPIN_LOCK_UNLOCKED(tsk.pi_lock), \ .timer_slack_ns = 50000, /* 50 usec default slack */ \ .pids = {
\ [PIDTYPE_PID] = INIT_PID_LINK(PIDTYPE_PID), \ [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID), \ }, \ .thread_group = LIST_HEAD_INIT(tsk.thread_group), \ .thread_node = LIST_HEAD_INIT(init_signals.thread_head), \ INIT_IDS \ INIT_PERF_EVENTS(tsk) \ INIT_TRACE_IRQFLAGS \ INIT_LOCKDEP \ INIT_FTRACE_GRAPH \ INIT_TRACE_RECURSION \ INIT_TASK_RCU_PREEMPT(tsk) \ INIT_CPUSET_SEQ(tsk) \ INIT_RT_MUTEXES(tsk) \ INIT_VTIME(tsk) \}

kernel/fork.c

#ifdef CONFIG_MM_OWNERvoid mm_init_owner(struct mm_struct *mm, struct task_struct *p){    mm->owner = p;}#endif /* CONFIG_MM_OWNER */

仅仅是把init_mm的owner成员指定为init_task,表示init_task是init_mm的拥有者。


转载地址:http://ixavx.baihongyu.com/

你可能感兴趣的文章
阿里云如何实现海量短视频的极速分发?答案在这里!
查看>>
Ubuntu系统备份工具大全(官方整理推荐)
查看>>
海尔联手软银机器人,进军服务机器人领域
查看>>
基于scikit-learn机器学习库的分类预测
查看>>
Ubuntu 16.04安装Chrome浏览器
查看>>
bugly中批量隐藏版本
查看>>
如何管理跨部门的沟通与协作?
查看>>
亿方云CEO程远:转型第一式:链接企业人与数据
查看>>
基于Redis的MQ中间件实现-目录
查看>>
手写数字识别
查看>>
SpringBoot整合RabbitMQ
查看>>
「深度」无人机实名制政策特稿|市场看好、资本关注,“反黑飞”正在崛起
查看>>
2018年SIAF 广州国际工业自动化技术及装备展览会下周隆重开幕
查看>>
协鑫集成“熄灯工厂”装上ET工业大脑,验证订单命中率可提高3.99%
查看>>
旧金山参议员提议发布“封杀令”,理由是马路不为机器人所服务
查看>>
xtrabackup对MySQL数据库的备份及恢复教程
查看>>
Spark官方调优文档翻译(转载)
查看>>
走出宣传,国产VR手机盒子到底哪家强?
查看>>
Android SQLite (一) 数据库简介
查看>>
能上架App的GooglePlay开发者账号获取流程
查看>>