博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实战:用 C 语言实现操作系统
阅读量:4120 次
发布时间:2019-05-25

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

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

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

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

  • 控制流切换原理

  • 上下文切换

  • 线程设计

  • 调度函数的封装与代码模块化

  • 线程的主动切换

  • 时间片轮转调度

本文实验环境:

  • ubuntu 16.04 32 位操作系统(读者请务必提前安装好);

  • 挑选一个你自己觉得好用的虚拟机软件,比如 VMWare;

  • 请把你的虚拟机环境配置成单核 CPU。

学习时间:大于 5 小时

为什么使用 32 位系统?因为方便初学者学习,能更快速的掌握原理。

640?wx_fmt=gif

图1 用户态线程运行示例

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

本场 Chat 作者——Allen()

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

扫码查看完整 Chat 原文

进入读者圈与作者深度交流

640640

640?wx_fmt=jpeg

本场 Chat 关键点总结:

  • 理解“栈切换”的本质

  • 掌握指令执行与栈的关系

  • 掌握上下文是如何切换的

  • 理解主动切换,知道主动切换可能会发生在哪些地方

  • 理解什么是时间片

  • 对于不主动让出 cpu 的线程,是如何切换到其它进程的

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

点击阅读原文订阅本场 Chat,开始实战操作系统!

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

你可能感兴趣的文章
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第四章 - 程序计数器
查看>>
第七章 - 本地方法栈
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
JDBC核心技术 - 下篇
查看>>
一篇搞懂Java反射机制
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】树
查看>>
MySQL主从复制不一致的原因以及解决方法
查看>>
RedisTemplate的key默认序列化器问题
查看>>
序列化与自定义序列化
查看>>
ThreadLocal
查看>>
从Executor接口设计看设计模式之最少知识法则
查看>>
OKhttp之Call接口
查看>>
application/x-www-form-urlencoded、multipart/form-data、text/plain
查看>>
关于Content-Length
查看>>