Linux0.11 源码趣读
闪客
低并发编程公号作者
18650 人已学习
赠一得一
课程目录
已完结/共 22 讲
Linux0.11 源码趣读
15
15
1.0x
00:00/00:00
登录|注册

17 | 进程调度初始化sched_init:多进程的基石

你好,我是闪客。
在上一讲中,我们讲到,time_init 方法通过与 CMOS 端口进行读写交互,获取到了年月日时分秒等数据,并通过这些计算出了开机时间 startup_time 变量,是从 1970 年 1 月 1 日 0 时起到开机当时经过的秒数。
我们继续往下看,大名鼎鼎的进程调度初始化,shed_init
// init/main.c
void main(void) {
...
sched_init();
...
}
这方法可了不起,因为它就是多进程的基石!
终于来到了兴奋的时刻,是不是很激动?不过先别激动,这里只是进程调度的初始化,也就是为进程调度所需要用到的数据结构做个准备,真正的进程调度还需要调度算法、时钟中断等机制的配合。
当然,对于理解操作系统,流程和数据结构最为重要了,而这一段作为整个流程的起点,以及建立数据结构的地方,就显得格外重要了。

TSS 和 LDT

我们进入这个方法,一点点往后看。
// kernel/sched.c
void sched_init(void) {
set_tss_desc(gdt+4, &(init_task.task.tss));
set_ldt_desc(gdt+5, &(init_task.task.ldt));
...
}
两行代码初始化了下 TSSLDT
先别急问这俩结构是啥。还记得之前讲的全局描述符表 gdt 么?它在内存的这个位置,并且被设置成了这个样子。
忘了的看一下第 8 讲 重新设置 idt 和 gdt,这就说明之前看似没用的细节有多重要了,你一定要有耐心。
说回这两行代码,其实就是往后又加了两项,分别是 TSS 和 LDT。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了进程调度初始化sched_init的重要性以及实现过程。文章首先通过与CMOS端口进行读写交互获取开机时间,然后重点讲解了sched_init方法的实现。该方法通过初始化TSS和LDT两个数据结构,为进程调度所需的数据结构做准备。TSS用于保存和恢复进程的上下文,而LDT则是用户进程的代码和数据段信息。此外,文章还介绍了初始化task_struct数组的过程,该数组用于存储每个进程的信息。最后,文章提到了使用ltr和lldt指令给tr和ldt寄存器赋值,以告知CPU任务状态段和局部描述符表的位置。此外,文章还介绍了设置时钟中断和系统调用中断的重要性。总的来说,本文通过深入浅出的方式介绍了进程调度初始化的重要性和实现过程,为读者快速了解该技术提供了有益的参考。整体而言,本文内容涉及的技术细节丰富,对于想要深入了解进程调度初始化的读者来说,是一篇不可多得的文章。

该试读文章来自《Linux0.11 源码趣读》,如需阅读全部文章,
请先通过赠一得一解锁课程
赠一得一
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • Camio1945
    闪客,你好。极客时间,你好。我最近在学习这个系列的文章,截止到目前(2023年7月24日)极客时间上只更新了22讲,因此需要结合公众号来看。 我一边学习一边录制了视频并发布在了 B 站上。我想把重点放在断点调试上,但是解释代码时不免要解释原理,因此会引用到你们文章中的图片,我保留了图片上的水印,也在视频简介上放了原文的链接,以表示图文的出处。本来是一个视频合集(该合集因为有人投诉侵权而被系统自动解散了),合集的最开始(Linux0.11源码:00 - 资料来源及调试工具说明 https://www.bilibili.com/video/BV1Su41187S3/)就注明了文章和资料的出处,因此后续的视频就没有每一个都再声明一遍。 但是最近有一个视频被投诉侵权了,我看了一下,可能是说图片侵权了,因为图片就是直接用的你画的图片,上面的水印是极客时间和低并发编程。 所以我想在这里请求你们授权我,在我的非商业用途的视频中使用你文章中的文字与图片,如果看到,还请给个答复,谢谢!

    编辑回复: 闪课老师已同意授权

    2023-07-24归属地:湖北
    2
    2
  • Jich
    老是,公众号我怎么搜不到。“低并发编程”

    编辑回复: 改名字了,改为无聊的闪客

    2023-11-02归属地:上海
  • 这章非常好啊
    2023-02-26归属地:吉林
    5
  • 科富
    这章扫除了我的两个知识盲区:一是通过时钟中断,强制收回cpu执行权,从而现实了多任务切换;二是,在内核中,注册了80号中断的处理方法,用户态通过80号中断进入内核态
    2023-05-06归属地:浙江
    2
  • maple-0406
    当初的内存非常珍贵,每一个字节的作用都非常重要,所有的操作地址都是基地址加位偏移而定,有非常严格的顺序。
    2023-04-16归属地:浙江
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部