zoukankan      html  css  js  c++  java
  • 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 使用自己的编写的多线程框架创建线程

  • 相关阅读:
    Java_多线程入门
    JAVA多线程基础(一)
    多线程1
    1.优化MySQL数据库
    廖胤松
    Mybatais
    Spring Boot入门
    MySQL的安装步骤详解
    MySQL入门
    WEB测试方法
  • 原文地址:https://www.cnblogs.com/llguanli/p/8372472.html
Copyright © 2011-2022 走看看