0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析OS中的线程、进程和协程与RTOS任务属于那种

strongerHuang 来源:CSDN技术社区 作者:最后一个bug 2021-04-19 10:06 次阅读

今天为大家讲解讲解OS中的线程、进程和协程的这几个概念,同时一起看看RTOS中的任务到底属于哪一种。

1、三者整体关系图

很多小伙伴在学习OS的过程中会遇到各种程序形态,比如说进程、线程、协程、管程、纤程,oh my god!要是对他们不熟悉还真分辨不清楚,今天作者主要是把大家平时最常遇到的进程、线程和协程这三个概念讲一讲,其他形态作者后续再慢慢补充相关文章,下面我们简单看一下windows里面的进程(Linux也是类似的),如下图所示:

98d01e38-9ff4-11eb-8b86-12bb97331649.png

我们可以发现每行表示一个进程,同时一个进程包含多个线程,那么进程、线程和协程的关系到底是怎样的呢?作者这里画了个简图,供大家参考。

98dc8b14-9ff4-11eb-8b86-12bb97331649.png

2、详细分析一下

1)并发与并行

在讲解进程之前我们先看看并发与并行的概念,并发字面上的意思就是一起发生,在乎的是一种感觉,对于单核CPU而言其对指令的处理都是顺序执行,只是说类似于一种时间上分时交替处理,给用户的一同发生的表象,这就是并发。

并行是指令同一时刻一起运行,这种方式一般在多处理器系统中发生。

98e63f38-9ff4-11eb-8b86-12bb97331649.png

2) 进 程

进程是一种程序的动态执行过程,进程对CPU并不是独占连续执行的,OS管理着进程需要经常打断当前的进程,并对多个进程进行监控调度等,那么在内核中就有一个结构体叫做进程控制块PCB(学RTOS应该听过任务控制块TCB,后面会提到)-(Process Control Block),该结构体包含了该进程几乎所有的信息和资源,那么OS也就是通过这个控制块来获得进程信息并管理进程。

98eef6aa-9ff4-11eb-8b86-12bb97331649.png

进程的设计是为了让各个应用程序能够更好的进行隔离,比如在浏览网页突然浏览器奔溃了这不会影响到我的音乐播放器,前面作者发布的OS对内存的管理可以了解到每个进程都会有自己独立的内存空间,并且通过内存管理模块MMU和页表机制各个进程之间形成了隔离。

如果进行多进程的并发势必需要保存当前进程现场信息,比如寄存器,堆栈,更新页表,甚至还需要从外存(比如磁盘中)置换出进程进行运行,这样对于CPU的开销非常大,于是为了减少开销便有了进程内的并发线程。

3) 线 程

进程的目的是隔离并发,可以说线程是实现的共享并发,所有的线程都是共用属于进程的资源,线程是进程指令流的剥离,同样线程有对应的结构体信息管理TCB类似于RTOS中的TCB。

993e5c5e-9ff4-11eb-8b86-12bb97331649.png

由于线程资源共享,所以各个线程之间是会存在相互的影响,如果一个线程出现奔溃混乱,极大可能会影响到该进程中的其他线程;同时对于共享资源的读写也就会存在竞争问题,那么这样就产生了一系列的共享资源的处理办法,临界区,互斥信号等等。

同时现在目前大部分OS其线程的管理、调度和并发都是通过内核了完成的,这样就会存在较多系统调用以及从用户态到内核态的切换,都会消耗一些时间,为了更进一步减少开销,直接在用户态实现更好的并发就出现了协程概念。

4) 协 程

之前的总览关系图我们也知道一个线程里面可以运行多个协程,其实函数调用就是一种状态为初态的协程,A函数中调用B函数,可以认为是A任务切换到B任务来执行,然后执行完回到A任务,不过这样调用的任务始终是从初始状态开始,如果一个函数主动放弃CPU通过保存当前现场,比如寄存器值等,然后恢复到另外一个函数的寄存器状态,便实现了任意状态函数的并发执行,就实现了协程。好吧,解释得有点绕,画个图理解理解:

99601aec-9ff4-11eb-8b86-12bb97331649.png

协程的特点:

协程是用户态执行的并发,相对线程开销要小;

协程主动放弃占用,对相关资源不需要进行锁处理;

非常适合IO密集型任务,比如非常经典的生产者与消费者的双线程模式,如果用协程,生产出来以后立马让步给消费者进行处理,效率非常高。

3、RTOS任务属于多线程

对于目前主流的RTOS,比如ucosfreeRTOSRT-thread等等,都是属于并发的线程,其实从RT-thread名字上看,其表示的就是实时的线程。

首先对于MCU上的资源每个任务都是共享的,可以认为是单进程多线程模型。

MCU一般没有内存管理模块MMU等等,这样无法很好的实现进程的安全,如果用软件实现,开销太大,对于MCU没有太多的必要,这也是为什么我们当个任务程序跑飞会导致整个程序无法运行的原因。

4、最后小节

可能部分小伙伴对于这几个概念还有诸多疑惑,其并不是对这几个概念不理解而是对OS的运行原理有些迷惑,所以大家对这部分感兴趣也可以查找相关书籍进行系统的学习,加油!
编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RTOS
    +关注

    关注

    20

    文章

    782

    浏览量

    118915
  • 线程
    +关注

    关注

    0

    文章

    497

    浏览量

    19545
  • 进程
    +关注

    关注

    0

    文章

    196

    浏览量

    13908

原文标题:RTOS中的任务是线程、进程、还是协程?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一句话让你理解线程进程

    ,比如QQ、微信、浏览器等;⼀个应⽤程序也可以同时运⾏多个进程,比如同时打开两个QQ、浏览器。线程:1个进程(应用程序)可能需要同时执行几个任务,比如QQ可以同时视频
    的头像 发表于 06-04 08:04 508次阅读
    一句话让你理解<b class='flag-5'>线程</b>和<b class='flag-5'>进程</b>

    基于RTOS的应用进程中的典型线程

    RTOS中的关键因素是最小的中断延迟和最小的线程切换延迟。RTOS的价值在于它的响应速度或可预测性,而不是它在给定时间段内可以执行的工作量。
    发表于 03-05 09:32 251次阅读
    基于<b class='flag-5'>RTOS</b>的应用<b class='flag-5'>进程</b>中的典型<b class='flag-5'>线程</b>

    线程是什么的基本单位 进程线程的本质区别

    的代码、数据以及用于执行这些代码的上下文信息。一个进程可以由一个或多个线程组成,从而并发执行多个任务。 本质区别: 资源拥有方式:进程是资源分配的基本单位,每个
    的头像 发表于 02-02 16:30 484次阅读

    鸿蒙OS 线程管理开发指导

    场景介绍 如果应用的业务逻辑比较复杂,可能需要创建多个线程来执行多个任务。这种情况下,代码复杂难以维护,任务线程的交互也会更加繁杂。要解决此问题,开发者可以使用“TaskDispat
    的头像 发表于 01-29 16:22 615次阅读

    mcu线程进程的区别是什么

    MCU线程进程是嵌入式系统中常见的并行执行的概念,它们之间有许多区别,包括线程进程的定义、资源管理、通信机制、执行方式等等。下面将详细介绍MCU
    的头像 发表于 01-04 10:45 378次阅读

    Linux中进程线程和协程的基础概念

    进程是计算机中运行的程序的实例,它是操作系统中最基本的执行单元之一。每个进程都有自己的独立内存空间、系统资源和代码执行流。这意味着一个进程的崩溃通常不会影响其他进程
    的头像 发表于 12-06 09:22 362次阅读

    如何设定RTOS中的任务栈(线程栈)大小呢?

    首先说明的是,在 `RT-Thread` 中,将本文提及的 `任务` 称之为 `线程`。
    的头像 发表于 12-01 16:40 949次阅读

    RTOS内功修炼记(一)— 任务到底应该怎么写?

    本篇文章讲述了任务的三大元素:任务控制块、任务栈、任务入口函数,并讲述了编写RTOS任务入口函数
    的头像 发表于 12-01 16:36 424次阅读
    <b class='flag-5'>RTOS</b>内功修炼记(一)— <b class='flag-5'>任务</b>到底应该怎么写?

    进程线程的概念及其区别

    今天浩道跟大家分享一篇关于进程线程之间关联的硬核干货,看看大神如何通过通俗易懂的图文,让大家更加深刻理解进程线程的区别!
    的头像 发表于 11-21 10:50 650次阅读
    <b class='flag-5'>进程</b>和<b class='flag-5'>线程</b>的概念及其区别

    JDK如何优雅退出一个线程

    需要线程退出的常见场景 任务执行完成,或异常终止,任务认为无需再占用线程线程池根据当前任务
    的头像 发表于 11-17 10:02 288次阅读
    JDK如何优雅退出一个<b class='flag-5'>线程</b>?

    RTOS中的线程进程和协程详解

    看到有小伙伴在讨论【RTOS任务属于线程还是进程】的话题,这里就来分析一下OS中的
    的头像 发表于 11-09 12:36 1184次阅读
    <b class='flag-5'>RTOS</b>中的<b class='flag-5'>线程</b>、<b class='flag-5'>进程</b><b class='flag-5'>和协</b>程详解

    关于Python多进程和多线程详解

    进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。关于多进程和多线程,教科书上最经典的一句话是“进程
    的头像 发表于 11-06 14:46 406次阅读
    关于Python多<b class='flag-5'>进程</b>和多<b class='flag-5'>线程</b>详解

    STM32 RTOS介绍

    R(real) T(time) OS 实时多任务操作系统、RTOS是一种操作系统,属于嵌入式操作系统,RTOS种类很多:有商业的、DIY和开
    发表于 09-07 08:08

    RealView调试器4.1版RTOS指南

    包含有关程序资源和执行状态的信息,例如程序指令、堆栈和堆。 进程使用共享内存或工具(如队列、信号量或管道)进行通信。 独立运行的线程可能是进程的一部分,这些线程共享资源,但可以由操作系
    发表于 08-12 07:16

    进程线程的区别以及优缺点

    进程线程 1、什么是进程线程,有什么区别? 进程是资源(CPU、内存等)分配的基本单位,线程
    的头像 发表于 07-21 11:02 1033次阅读