进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系

这篇具有很好参考价值的文章主要介绍了进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

进程:

进程是资源分配的最小单位,进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是系统进行资源分配和调度的基本单位。进程是一个动态的概念,是一个活动的实体。

“独立功能”表示进程是面向使用者的定义,它关心的是要做什么?比如,在电脑上我要写一篇文章,打开Word。那么计算机就会创建一个Microsoft Word的进程,如果我想同步写两篇文章,就要再打开一个Word,计算机就又创建一个Microsoft Word的进程。普通的计算机机可以同步做几件事情,比如“上网”,“看电影”,“打游戏”,就是说可以运行很多进程。但是嵌入式计算机通常设计成只做一件事情,比如在汽车领域,整车控制器VCU,发动机喷油点火控制器ECU,变速箱换挡控制器TCU,车身控制器BCM等。这样类比,传统的一个电子控制单元ECU相当于只运行一个进程。

线程:

线程是程序执行的最小单位,也是处理器调度的基本单位,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动态内存,映射文件,目标代码等等)

当我们提及多线程的时候会想到thread和threadpool,这都是异步操作,threadpool其实就是thread的集合,具有很多优势,不过在任务多的时候全局队列会存在竞争而消耗资源。thread默认为前台线程,主程序必须等线程跑完才会关闭,而threadpool相反。

小结:threadpool确实比thread性能优,但是两者都没有很好的api区控制,如果线程执行无响应就只能等待结束,从而诞生了task任务

对比进程与线程:

  1. 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据,使用相同的地址空间,因此,CPU切换一个线程的花费远比进程小很多,同时创建一个线程的开销也比进程小很多。
  2. 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式进行(如队列,信号,管道,接套字等)。不过如何处理好同步与互斥是编写多线程程序的难点。但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也跟着死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
  3. 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

Core:

可以理解为就是ECU,一个核就代表一个进程。多核就是多个ECU。也就是说在多核的情况下,可以执行多进程。

不论是进程还是线程,一个cpu核一个时刻就只能干一件事,所以一个cpu核处理多个线程或者进程的话,都是并发;

对于多核心的架构,由于共用一套MMU和cache,所以地址空间是一个,同一时刻只能运行一个进程,此时进程不能并行只能并发。同一个进程下的多线程可以并行执行,因为多线程共享同一套进程空间资源。

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

OS Application:

说明1:Task、Interrupt、Alarm、schedule Table、Resource、Event 我们称他们叫对象(Object)

说明2:【OS 包含1~N个Core】->【1个Core 包含1~N个Application,相当于一个core可以运行多个进程,一般AUTOSAR Aurix定义两个进程,一个trusted,一个nontrusted】->【1个Application 包含0~N个Object,也就是一个OS-Application包括多个任务Task】

不论是进程还是线程,一个cpu核一个时刻就只能干一件事,所以一个cpu核处理多个线程或者进程的话,都是并发;

AUTOSAR OS必须能够支持构成一个有多功能单元的Operating System objects (Tasks, ISRs, Alarms, Schedule tables, Counters)的集合。此对象集合称为 OS-Application

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

OS Application分为两类,一类是Trusted, 一类是Non-Trusted

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

对于Trusted OS Application,可以运行在监控或保护功能关闭的情况下,对于内存或者OS Api的访问没有限制;如果处理器支持,可以运行在特权模式,OS默认Trusted类型的OS Application不会引发内存相关故障,如果发生了内存故障,系统稳定性将不再保证,可能需要关闭OS。

对于Non-Trusted OS Application,不允许关闭监控或保护功能,对于内存或OS Api的访问也受权限控制,也不允许运行在特权模式。对于non-trusted OS Application,操作系统会保护MPU,timer,中断控制器等控制寄存器,不允许修改。如果需要修改这些寄存器,那么OS服务必须执行在特权模式。如果ISR Handler在non-trusted OS Application中,那么OS需要在ISR() wrapper中先切换到非特权模式,再执行ISR handler。

task:

在嵌入式操作系统里,任务就是线程的意思。
AUTOSAR OS中存在两种任务:基本任务(Basic Task)和扩展任务(Extended Task)。基本任务则存在以下三种状态:

运行状态(Running):

处于运行状态的任务可能被高优先级任务或者中断抢占从而进入就绪状态,且同一Core中任何时刻只会存在一个任务处于运行状态,任务运行结束后则将自己挂起进入阻塞状态;

就绪状态(Ready): 

处于就绪状态的任务由调度器决定是否启动进入运行状态,且该状态时任务切换至运行状态的前提;

阻塞状态(Suspend): 

处于阻塞状态的任务是被动的,可以由API函数或Alarm激活进入就绪状态;

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

扩展任务与之相比,则多了一个等待状态(Waiting),解释如下:

等待状态(Waiting):

当任务的运行需要等待某一或某些事件被置位时,任务进入就绪状态。

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

Task调度策略:

AUTOSAR OS是基于优先级进行任务吊物,所以每个任务必定有一个优先级,而每个任务都是根据其自身特点来定义一个优先级且需要配置其可抢占属性。

可抢占属性可分为不可抢占与全抢占,这里所说的抢占指的是内核抢占。AUTOSAR OS可根据各个任务的可抢占属性配置,来提供不同的调度策略,调度策略可分为以下三种:

  1. 完全抢占式:OS所有任务均是可抢占类型;
  2. 非抢占式:OS中所有任务均是不可抢占的;
  3. 混合抢占式:OS部分任务是可抢占类型,部分任务是不可抢占类型;

event:

OS中的Event 主要用于为Extended Task 提供多个同步点,每个Event 可以关联多个Task

自由调度:

自由调度一般task的类型配置为EXTENDED,这种调度方式主要跟runnable绑定alarm,通过alarm触发event,event触发pending的task来执行task

如下实列代码可以展示自由调度中EXTENED类型的task的执行过程

Task(DIAG)
{
	while(1)
   {
	   waitevent(eventA);
	   if(eventA)
	   {
	       runnable();
	   }
	 }
}

WaitEvent:

只要表达式中任意一个EVENT 被收到,Task state则切换至Ready, 等待调度表按照优先级进行调度

SetEvent:

为指定的Task 设置Event

GetEvent:

获取指定Task当前接收到的所有EVENT

ClearEvent:

当Event被Task处理完成之后,需要进行Clear

Runnable & SWC & port:

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

Runnable就是一个函数,SWC是应用层单元模块.,例如上图SWC2是接收数据的功能模块,里面包含了三个函数,也就是3个runnable

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

一个TASK包含多个SWC

进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系,AUTOSAR,嵌入式硬件

Port是依附在SWC上的概念,比如配置工具配置SWC后,需要配置这个SWC的Port。其实也好理解,如果一个C文件孤零零的放在那里,与别的C文件没有任何数据交互,那么作为一套代码中的一个C文件,根本没法发挥作用,所以必然在SWC上需要配置上或者输入(R-Port)的或者输出(P-Port)的Port。文章来源地址https://www.toymoban.com/news/detail-694492.html

到了这里,关于进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot - Application Events 的发布顺序_ApplicationFailedEvent

    Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。

    2024年01月16日
    浏览(43)
  • Spring Boot - Application Events 的发布顺序_AvailabilityChangeEvent

    Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。

    2024年01月22日
    浏览(51)
  • Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent

    Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。 在 Spring Boot 中,事件发布和监听的机制是通过 ApplicationEvent 、

    2024年01月23日
    浏览(46)
  • Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent

    Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中的不同组件可以独立地改变和复用逻辑,而无需直接进行通信。

    2024年02月02日
    浏览(44)
  • Spring Boot - Application Events 同步 VS 异步 发布订阅事件实战

    Spring Boot - Application Events 的发布顺序_ApplicationStartingEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent Spring Boot - Application Events 的发布顺序_ApplicationContextInitializedEvent Spring Boot - Application Events 的发布顺序_ApplicationPreparedEvent Spring Boot - Application Events 的发布顺

    2024年01月17日
    浏览(80)
  • Spring Boot - Application Events 的发布顺序_ApplicationContextInitializedEvent

    Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent Spring Boot 的广播机制是基于观察者模式实现的,它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦,使得应用程序中

    2024年01月17日
    浏览(45)
  • 【Java练习题汇总】《第一行代码JAVA》多线程篇,汇总Java练习题——线程及多线程概念、Thread 类及 Runnable 接口、线程状态、synchronized同步操作...

    一、填空题 Java 多线程可以依靠________ 、________ 和________ 三种方式实现。 多个线程操作同一资源的时候需要注意________,依靠________ 实现,实现手段是:________ 和________,过多的使用,则会出现________ 问题。 Java 程序运行时,至少启动________ 个线程,分别是________ 和_

    2024年02月16日
    浏览(58)
  • Python 多线程 Event

    Event 是一个事务处理的机制,用于通知多个异步任务某个事件已经发生了。比如在交通红绿灯中多辆在行驶中的汽车可以表示成程序中的多个异步任务,红绿灯的亮起可以表示成一个通知,红灯通知这个汽车的行驶任务必须停止了,绿灯通知这个汽车的行驶任务可以继续驾驶

    2024年02月08日
    浏览(31)
  • 进程的概念 | PCB | Linux下的task_struct | 父子进程和子进程

     在讲进程之前首先就是需要去回顾一下我们之前学的操作系统是干嘛的,首先操作系统是一个软件,它是对上提供一个良好高效,稳定的环境的,这是相对于用户来说的,对下是为了进行更好的软硬件管理的,所以操作系统是一个进行软硬件管理的软件。 实际上我们的硬盘

    2024年03月20日
    浏览(47)
  • 如何让Task在非线程池线程中执行?

    Task承载的操作需要被调度才能被执行,由于.NET默认采用基于线程池的调度器,所以Task默认在线程池线程中执行。但是有的操作并不适合使用线程池,比如我们在一个ASP.NET Core应用中承载了一些需要长时间执行的后台操作,由于线程池被用来处理HTTP请求,如果这些后台操作也

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包