01-实现多线程切换和调度实验介绍

本系列文章旨在记录完毕一个小型用户级线程创建、切换与调度框架的过程。并不能取代操作系统为我们提供的线程框架。

为什么要写这种东西呢?目的非常easy,仅仅在于学习操作系统中的进程或线程切换与调度原理。所以。请不要把代码试图用到你的project或者项目中,出了问题也不要来找我啊。

假设你发现该项目中存在的问题或 bugs,请不要吝啬,及时联系我,由于我也仅仅是一个学习者,希望共同进步。

[注]

  • 阅读本系列文章须要的基础:简单的汇编语言基础,知道 call、ret 的工作原理。
  • 实验环境:32 位 linux 系统 + gcc 编译器。

  • QQ讨论群:610441700
  • 项目代码 gitos 托管地址(支持国产^_^):http://git.oschina.net/ivan_allen/Thread

重要提示:请不要忘记给项目点 star 啊!

!!另一点,代码中可能存在 bug,请不要忘记在博客后面评论。


应该说一直以来,我们学习线程切换与调度,都是通过阅读操作系统书籍或 Linux 源代码甚至反汇编 Window 内核代码。

不管如何,这些东西都非常抽象,学习起来十分困难。

本系列文章。准确的说是实验指导书吧。会带你循序渐近的掌握以下的知识点:

  • 控制流如何切换
  • 完毕一个简单的暴力跳转
  • 封装 create_thread 函数
  • 抽取调度函数
  • 模块化项目
  • 封装堵塞类函数,以 sleep 函数为代表
  • 时钟与时间片概念
  • 为线程加入时间片
  • 时间片轮转+优先级调度

注意上面不是文件夹,仅仅是我们将要遇到的一些关键节点。最后,我们实现的效果应该是以下这个样子:


这里写图片描写叙述
图1 终于的效果

client完整代码见图 2.

须要注意的是,上面的代码,并没有使用操作系统为我们提供的 pthread 系列函数,thread_create 和 thread_join 函数都是自己纯手工实现的。

唯一使用操作系统的函数就是设置时钟,因此会有时钟信号产生,这一步是为了模拟时间片轮转算法而做的。

接下来,废话不多说了,开启新篇章吧《控制流切换原理》;


这里写图片描写叙述
图 2 使用自己的编写的多线程框架创建线程

【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/llguanli/p/8372472.html