趣谈 Linux 操作系统
刘超
前网易杭州研究院云计算技术部首席架构师
85458 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 72 讲
趣谈 Linux 操作系统
15
15
1.0x
00:00/00:00
登录|注册

08 | 内核初始化:生意做大了就得成立公司

VFS
内存管理模块
系统调用
中断门
进程列表
创始进程
任务管理
多线程
ramdisk
寄存器保存与恢复
ELF格式
init程序
进程管理数据结构
系统调用
分层权限机制
用户态与内核态
文件系统
调度模块
会议室管理系统
办事大厅
项目管理部门
创建2号进程
从内核态到用户态
1号进程
公司成立
内核初始化

该思维导图由 AI 生成,仅供参考

上一节,你获得了一本《企业经营宝典》,完成了一件大事,切换到了老板角色,从实模式切换到了保护模式。有了更强的寻址能力,接下来,我们就要按照宝典里面的指引,开始经营企业了。
内核的启动从入口函数 start_kernel() 开始。在 init/main.c 文件中,start_kernel 相当于内核的 main 函数。打开这个函数,你会发现,里面是各种各样初始化函数 XXXX_init。

初始化公司职能部门

于是,公司要开始建立各种职能部门了。
首先是项目管理部门。咱们将来肯定要接各种各样的项目,因此,项目管理体系和项目管理流程首先要建立起来。之前讲的创建项目都是复制老项目,现在咱们需要有第一个全新的项目。这个项目需要你这个老板来打个样。
在操作系统里面,先要有个创始进程,有一行指令 set_task_stack_end_magic(&init_task)。这里面有一个参数 init_task,它的定义是 struct task_struct init_task = INIT_TASK(init_task)。它是系统创建的第一个进程,我们称为 0 号进程。这是唯一一个没有通过 fork 或者 kernel_thread 产生的进程,是进程列表的第一个。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

文章通过生动的比喻将内核初始化的过程比作成立公司的各项准备工作,生动形象地介绍了内核初始化的过程和相关概念。首先介绍了内核启动的入口函数start_kernel(),相当于内核的main函数,然后详细介绍了各种初始化函数的作用,如项目管理部门、办事大厅、会议室管理系统等。接着讲解了1号进程的创建和用户态与内核态的权限机制。最后,阐述了用户态程序访问核心资源的方式,即通过系统调用实现暂停和恢复程序运行的过程。此外,还介绍了ramdisk的作用和创建2号进程的过程。整体来看,文章通过生动的比喻和详细的技术解释,为读者提供了深入理解操作系统内核启动过程的技术知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(120)

  • 最新
  • 精选
  • Virtue
    置顶
    感觉大家不用太纠结于代码细节了,知道内河初始化都干了啥就行了吧。。

    作者回复: 对的对的

    2019-04-16
    4
    70
  • 时间是最真的答案
    我做Java的,看的云里雾里,好慌啊

    作者回复: 学点c

    2019-04-12
    7
    68
  • ninuxer
    打卡day9 0生1,1生众生,2是内核态的办公室主任~

    作者回复: 赞

    2019-04-12
    4
    49
  • rocedu
    推荐一本入门书配套本课程学习,《庖丁解牛Linux内核分析》( https://j.youzan.com/BA2Fr9)

    作者回复: 赞

    2019-04-12
    38
  • Arthur.Li
    0号进程不属于内核态吗?属于的话为啥2号才是内核态祖先

    作者回复: 0号不运行

    2019-06-04
    7
    36
  • 安排
    ramdisk里面是不是也要提前放上存储设备的驱动,然后ramdisk里面的init起来之后,加载对应存储设备的驱动,为了适应各种存储设备,ramdisk里面需要放上市面上各种存储设备的驱动吗?如果是这样的话,那跟把这些驱动放到内核里有什么区别呢?反正也没有节省空间。 我的理解是这样的,ramdisk中只放要运行的电脑上的存储设备驱动,内核中不放存储设备驱动,这样的话如果每次存储设备不同,我们只需要做一个对应的ramdisk,每次更换存储设备只需要做ramdisk,而内核只需要编译一次就行了,这样效率会提高?如果驱动放到内核一起编译,每次换存储设备都要重新编译内核,效率低。编译内核比做一个新的ramdisk效率低。 不知道以上理解对不对,还请老师指点一二。

    作者回复: 是的

    2019-04-12
    27
  • 孜孜
    逐渐一篇文章要读很多遍,花很多时间。坚持,多看一点,多花点时间,总比啥都不干强。

    作者回复: 赞,加油

    2019-04-14
    26
  • sunsweet
    0号进程能详细说说嘛,它是干啥用的

    作者回复: 链表头

    2019-04-17
    12
  • 焰火
    超哥您好: 用户态 --> 内核态 --> 用户态 这点感觉很像进程间的切换啊 如果把 内核态 也当作 一个进程来看,这个一个内核态进程 是 服务于 多个用户进程的嘛? 多个用户进程对某一个硬件资源进行系统调用 应该也是有 阻塞排队等待的吧 ~~

    作者回复: 进程切换更复杂了。后面会讲。内核不要当成一个进程看,要不容易晕

    2019-04-14
    11
  • 登高
    不去看源码似乎跟不动了

    作者回复: 那就看,哈哈

    2019-04-12
    11
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部