17 | 进程调度初始化sched_init:多进程的基石
闪客
你好,我是闪客。
在上一讲中,我们讲到,time_init 方法通过与 CMOS 端口进行读写交互,获取到了年月日时分秒等数据,并通过这些计算出了开机时间 startup_time 变量,是从 1970 年 1 月 1 日 0 时起到开机当时经过的秒数。
我们继续往下看,大名鼎鼎的进程调度初始化,shed_init。
这方法可了不起,因为它就是多进程的基石!
终于来到了兴奋的时刻,是不是很激动?不过先别激动,这里只是进程调度的初始化,也就是为进程调度所需要用到的数据结构做个准备,真正的进程调度还需要调度算法、时钟中断等机制的配合。
当然,对于理解操作系统,流程和数据结构最为重要了,而这一段作为整个流程的起点,以及建立数据结构的地方,就显得格外重要了。
TSS 和 LDT
我们进入这个方法,一点点往后看。
两行代码初始化了下 TSS 和 LDT。
先别急问这俩结构是啥。还记得之前讲的全局描述符表 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归属地:湖北22 - Jich老是,公众号我怎么搜不到。“低并发编程”
编辑回复: 改名字了,改为无聊的闪客
2023-11-02归属地:上海 - 。这章非常好啊2023-02-26归属地:吉林5
- 科富这章扫除了我的两个知识盲区:一是通过时钟中断,强制收回cpu执行权,从而现实了多任务切换;二是,在内核中,注册了80号中断的处理方法,用户态通过80号中断进入内核态2023-05-06归属地:浙江2
- maple-0406当初的内存非常珍贵,每一个字节的作用都非常重要,所有的操作地址都是基地址加位偏移而定,有非常严格的顺序。2023-04-16归属地:浙江
收起评论