实战:用 C 语言实现操作系统

一直以来,我们学习线程切换与调度,都是通过阅读操作系统书籍或 Linux 源码甚至反汇编 Window 内核代码。无论怎样,这些东西都很抽象,学习起来十分困难。

另外,随着现代化编程语言逐渐流行,C++20 的正式发布,都离不开用户态线程这些基础知识。再比如 Golang 的 Goroutine,腾讯公司的开源的 libco,百度的 BRPC 中的 bhtread,如果想深刻理解它们,都需要扎实的基本功。

本次 Chat 会带你循序渐近的掌握下面的知识点:

  • 控制流切换原理
  • 上下文切换
  • 线程设计
  • 调度函数的封装与代码模块化
  • 线程的主动切换
  • 时间片轮转调度

本文实验环境:
ubuntu 16.04 32 位操作系统(读者请务必提前安装好);
挑选一个你自己觉得好用的虚拟机软件,比如 VMWare;
请把你的虚拟机环境配置成单核 CPU。

学习时间:大于 5 小时

为什么使用 32 位系统?因为方便初学者学习,能更快速的掌握原理。
在这里插入图片描述
图1 用户态线程运行示例

需要注意的是,上面的代码,并没有使用操作系统为我们提供的 pthread 系列函数,thread_create 和 thread_join 函数都是自己纯手工实现的。唯一使用操作系统的函数就是设置时钟,因此会有时钟信号产生,这一步是为了模拟时间片轮转算法而做的。

本场 Chat 作者——Allen()
百度高级研发工程师,CSDN 博客专家。目前从事智能交互式对话系统云端开发。负责过大流量、高并发等业务场景。

扫码查看完整 Chat 原文,进入读者圈与作者深度交流

本场 Chat 关键点总结:
理解“栈切换”的本质
掌握指令执行与栈的关系
掌握上下文是如何切换的
理解主动切换,知道主动切换可能会发生在哪些地方
理解什么是时间片
对于不主动让出 cpu 的线程,是如何切换到其它进程的

这一整篇文章里,我们完成了线程切换与线程调度的框架,在此基础上,我们还可以做更多有关线程的东西,比如线程的同步与互斥,还有更多的线程状态。理解了本文之后,更深入的学习对你来说已经不是难事了!

点击链接 了解本场 Chat,开始实战操作系统!

展开阅读全文
博主设置当前文章不允许评论。

没有更多推荐了,返回首页