嵌入式系统设计师考试笔记之操作系统基础复习笔记二
目录
3、任务管理
(1)嵌入式操作系统的任务管理可以分为
(2)进程
(3)线程
(4)任务
(5)任务的创建与中止
(6)任务的状态任务有三中基本状态:
(7)任务控制块 TCB
(8)任务的切换
(9)任务的调度
(10)实时系统调度
(11)任务互斥
(12)信号量
(13)任务同步
(14)死锁
(15)信号
(16)任务间通信
嵌入式系统设计师考试笔记之操作系统基础复习笔记一:
嵌入式系统设计师考试笔记之操作系统基础复习笔记一-CSDN博客
3、任务管理
(1)嵌入式操作系统的任务管理可以分为
A、单道程序技术:操作系统中,任何时候只能有一个程序在运行。
B、多道程序技术:操作系统中,允许多个程序同时存在并运行。
(2)进程
进程,简单的说,是一个正在运行的程序。
进程与程序既有联系又有区别,主要表现为下面结构方面:
A、程序由数据和代码两部分内容组成,它是一个静态的概念。而进程是正在执行的程序,它也两部分组成:程序和该程序的运行上下文。它是一个动态的概念。
B、程序和进程之间并不是一一对应的。一个进程在运行的时候可以启动一个或多个程序。反之同一个程序也可能由多进程同时执行。
C、程序可以作为一种软件资源长期保存,以文件的形式存放在光盘或硬盘上,而进程则是一次行的过程,它是暂时的,是动态的产生和终止。
一个进程至少应包括三个方面:相应的程序、CPU 上下文、一组系统资源。
进程有三个特性:
A、 动态性:进程是正在运行的程序,而程序的运行状态是不断变化的。
B、 独立性:进程是系统资源的使用单位,每个进行有自己的运行上下文和内部状态。
C、 并发性:宏观来看,系统中同时有多个进程存在,它们相互独立地运行。
注:对于并发的理解。
在单 CPU的情况下,所谓的并发性指的是宏观上的并发运行,而微观上还是顺序进行,各个进程轮流去使用CPU 资源。在单核CPU中,真正的、物理上的PC寄存器只有一个,进程在轮流执行的时候,物理PC的取值也在不断变化。而逻辑PC其实就是一个内存变量。每个进程都有一个逻辑PC,当一个进程要运行的时候,就把它的逻辑PC装载到物理 PC中去;反之,当一个进程暂不运行的时候,就把物理PC中的值保存在它的逻辑PC当中。
(3)线程
线程就是进程当中的一条执行流程。
进程其实包含两个部分:资源平台和执行流程(线程)。
在一个进程当中,或者说在一个资源平台上,可以同时存在多个线程;可以用线程作为 CPU的基本调度单位,使得各个线程之间可以并发执行;对于同一个进程当中的各个线程来说,他们可以共享该进程的大部分资源。每个线程都有自己独立的 CPU 运行上下文和栈,这是不能共享的。
(4)任务
在嵌入式系统中,任务其实就是线程,它是能够独立运行的一个实体。原因有二:
A、 任务具有独立的优先级和栈空间,CPU上下文一般存放在栈空间中。
B、 任务之间可以很方便地、直接地使用共享的内存单元,而不需要经过系统内核。
在多道程序的嵌入式系统中,同时存在着多个任务,这些任务之间的结构一般为层状结构,存在着父 子关系。当嵌入式内核刚刚启动的时候,只有一个任务存在,然后由该任务派生出所有其他任务。
(5)任务的创建与中止
任务的创建主要发生在以下三种情形:
A、 系统初始化。
B、 任务运行的过程中。
C、 用户提出请求。
从技术的角度来说,实际上新任务只有一种创建的方法,也就是在一个已经存在的任务中,通过调用相应的系统函数来创建一个新的任务。
任务的创建只要有两种可能的实现模型:fork/exec和 spawn。两种模型的差别主要在于内存的分配方式。
A、fork/exec模型下,首先调用fork函数为新任务创建一份与父任务完全相同的内存空间,然后再调用exec函数装入新任务的代码,并用它来覆盖原有的属于父任务的内容。嵌入式Linux操作系统是基于fork/exec模型的。
B、spawn模式下,在创建新任务的时候,直接为它分配一个全新的地址空间,然后将新任务的代码装入并运行。uCOS操作系统是基于 spawn模型的。
任务的中止可能有多种原因,主要有下面三种情况:
A、 正常退出。
B、 错误推出。
C、 被其他任务踢出。
在有些嵌入式系统中,尤其是一些控制系统中,它的某些任务被设计为“死循环”的模式,一直循环下去,不会中止。
(6)任务的状态任务有三中基本状态:
A、 运行状态:任务占有 CPU,并在CPU上运行。
B、 就绪状态:任务已经具备运行的条件,在等待 CPU空闲。
C、 阻塞状态:任务因为正在等待某种事件的发生而暂时不能运行。
对于就绪状态和阻塞状态,它们的相同之处在于,任务都是处于暂停状态,没有运行。不同之处在于,暂停的原因是不一样的,导致就绪状态的原因是外因,是操作系统的CPU正忙,而导致阻塞状态的原因是内因,是任务自身的问题。
任务状态的四种转换关系:
A、 运行à阻塞:任务由于等待某个时间被阻塞起来。
B、 运行à就绪:调度器由于某种原因(例如优先级)选择了另一个任务去运行。
C、 就绪à运行:CPU空闲了,处于就绪状态的任务被调度器选中去运行。
D、阻塞à就绪:任务的等待事件完成,具备了继续运行的条件。
(7)任务控制块 TCB
任务控制块 TCB,就是在操作系统中,用来描述和管理一个任务的数据结构。系统为每一个任务都维护了一个相应的TCB,用来保存该任务的各种相关信息。它的主要内容包括下面几项:
A、 任务的管理信息:任务的标识 ID、状态、优先级、调度信息、各种队列指针等。
B、 CPU 上下文信息:CPU各种寄存器当前的值以及逻辑寄存器。
C、 资源管理的信息:段表地址、页表地址、根目录、文件描述字等。
当需要创建一个任务的时候,就为它生成一个 TCB,并初始化这个 TCB的内容;当需要中止一个任务的时候,只要回收它的TCB就可以了。
(8)任务的切换
基本思想:把当前任务的运行上下文保存起来,并恢复新任务的上下文。
任务切换通常有下面的基本步骤:
A、 将处理器的运行上下文保存在当前任务的 TCB中。
B、 更新当前任务的状态,从运行状态变为就绪状态或阻塞状态。
C、 按照一定的策略,从所有处于就绪状态的任务中选择一个去运行。
D、修改新任务的状态,从就绪状态变成运行状态。
E、 根据新任务的 TCB的内容,恢复它的运行上下文环境。
在一个多任务的操作系统中,采用任务队列的方式来组织它的所有任务。由操作系统来维护一组队列,用来表示系统当中所有任务的当前状态,不同的状态用不同的队列来标志。
(9)任务的调度
调度器可以看作CPU 的资源管理者。
任务调度的首要问题是:何时进行调度,即调度发生的时机。一般有下面几种情形:
A、 一个新任务被创建时,需要决定运行新任务还是继续执行父任务。
B、 一个任务运行结束时,需要从就绪队列中选择某个任务去运行。
C、 一个任务运行阻塞时,需要选择另一个任务去运行。
D、一个I/O操作完成,任务阻塞结束,立即执行新就绪任务还是继续执行被中断任务。
E、 一个时钟节拍结束时,需要对就绪任务重新调度。
任务调度的第二个问题是:如何调度,即调度方式。主要有两种方式:
A、 不可抢占调度方式:例如时间片轮转。
B、 可抢占调度方式:例如优先级调度。
实时操作系统大都采用可抢占调度方式。
任务调度的第三个问题是:调度算法。
A、 先来先服务算法:按照任务到达的先后次序进行调度,是不可抢占的调度方式。
B、 短作业优先算法:各个任务开始执行之前,事先预计好它的执行时间,从中选择用时较短的任务优先执行。
C、 时间片轮转算法:所有的就绪任务按照先来先服务的原则排成一个队列。在每次调度的时候,把处理器分派给队列当中的第一个任务,让它去执行一小段时间。在这个时间段里任务被阻塞或由于其他原因暂停,或者任务的时间片用完了,它会被送到就绪队列的末尾,然后调度器再执行当前队列的第一个任务。这种算法的优点是各个就绪任务都平均地分配使用CPU的时间,每个就绪任务都能一直保持着活动性。时间片轮转法有一个默认前提,即位于就绪队列中的各个任务是同等重要的。
D、优先级算法:给每个任务都设置一个优先级。然后在任务调度的时候,在所有处于就绪状态的任务中选择优先级最高的那个任务去运行。采用优先级调度算法的一个问题是可能会发生优先 级反转(教程P285),出现任务“饥饿”现象。
(10)实时系统调度
对于RTOS调度器来说,任务之间的公平性并不是最重要的,它追求的是实时性。
A、单调速率调度算法(RMS):任务的优先级与它的周期表现为单调函数的关系,任务的周期越短,优先级越高,任务的周期越长,优先级越低。RMS假定任务是相同独立的、周期性的、任务在能够在任何位置被抢占,而实际中的系统,任务之间需要进行通信和同步,这是一种理想的调度方法,实际中并不一定存在。
B、最早期限优先法(EDF):根据任务的截止时间来确定其优先级,对于时间限期最近的任务,分配最高的优先级。当有一个新的任务处于就绪状态时,各个任务的优先级就有可能要进行调整,选择截止时间最近的任务去运行。
(11)任务互斥
A、任务之间的关系:相互独立、任务互斥、任务同步、任务通信。
B、任务间的互斥:当前已经有一个任务正在访问临界区共享数据,那么其他任务暂时不能访问。
C、提出互斥访问的四个条件:
a、在任何时候最多只能有一个任务位于它的临界区中。
b、不能事先假定 CPU的个数和系统的运行速度。
c、没有任务位于它的临界区中,它不妨碍其他任务去访问临界区资源。
d、任何一个任务进入临界区的请求必须在有限的时间内得到满足,不能无限期。
D、任务互斥的解决方案:
a、关闭中断法
b、繁忙等待法
c、信号量处理
(12)信号量
信号量记录当前可用资源的数量。
信号量由操作系统维护,任务不能直接去修改它的值,只能通过初始化和两个标准原语(PV原语)来对它进行访问。
注:关于原语。
原语通常由若干条语句组成,用来实现某个特点的操作,并通过一段不可分割或不可中断的程序来实现其功能。原语时操作系统内核的一个组成部分,必须在内核态下执行。原语的不可中断性是通过在其执行过程中关闭中断来实现的。关键要理解PV 原语的实现:
P(semaphores S)
{--S.count; //申请一个资源if(S.count < 0) //没有空闲资源{将当前任务阻塞起来,加到阻塞队列末尾,调度新的任务运行。}
}
V(semaphores S)
{++S.count; //释放一个资源if(S.count <= 0) //有任务被阻塞{从阻塞队列中取出一个任务,把该任务改为就绪状态,插入就绪队列。}
}
利用操作系统提供的信号量机制,可以方便、有效地实现对临界资源的互斥访问,优点有两个:
A、 可以设置信号量的计数值,从而允许多个任务同时进入临界区。
B、 当一个任务暂时无法进入临界区时,它会被阻塞起来,将 CPU让给其他任务。
(13)任务同步
任务之间的同步可以使用信号量机制,通过引入PV操作来设定两个任务在运行时的先后顺序。例如,可以把信号量视为某个共享资源的当前个数,然后由一个任务负责生成这种资源,而另一个任务则负责消费这种资源,这样可以构成两个任务之间的先后顺序。在具体实现上,一般把信号量的初始值设为 N,N大于或等于0。然后在一个任务内使用 V原语,把信号量加 1,而在另外一个任务内部使用P原语,将信号量减 1,从而实现这两个任务之间的同步关系。
(14)死锁
在一组任务中,每个任务都占用着若干资源,同时又在等待其他任务占用的资源,从而造成所有任务都无法进展下去的现象,这称为死锁现象。
除了资源的竞争之外,PV 操作使用不当也会引起死锁。
(15)信号
所谓信号,是系统给任务的一个指示,表明某个异步事件已经发生了。
该事件可能来自外部,也可能来自内部。
信号机制也可以称为软中断机制。
信号机制与中断处理机制非常相似,相同点:
A、 都具有中断性。
B、 都有相应的服务程序。
C、 都可以屏蔽响应。
不同点:
A、 中断由硬件或特定指令产生,而信号由系统调用产生。
B、 中断触发后,硬件会根据中断向量找到相应的处理程序执行;而信号则通过发送信号的系统调用来触发,系统不一定马上对它进行处理。
C、 中断处理程序在系统内核的上下文中运行,是全局的;而信号处理程序在相关任务的上下文中运行,是任务的一个组成部分。
(16)任务间通信
任务之间的通信可以分为两种类型:
A、 低级通信:只能传递状态和整数值等控制信息,例如信号量机制。
B、 高级通信:能够传输任意数量的数据,只要有三类:共享内存、消息传递和管道。
任务之间的通信方式有两种:
A、 直接通信:通信双方必须明确知道与之通信的对象。例如PV 原语。
B、 间接通信:通信双方不需指出消息的来源和去向,通过共享邮箱发送和接收消息。
邮箱只能存放单条消息,它提供一种低开销的消息传递机制,只有空和满两种状态。消息队列与邮箱类似,但是可以同时存放若干条消息,提供了一种任务间缓冲通信的方法。
管道由UNIX首创,以文件系统为基础,连接两个任务之间的一个打开的共享文件,专用于任务直接的数据通信。
相关文章:

嵌入式系统设计师考试笔记之操作系统基础复习笔记二
目录 3、任务管理 (1)嵌入式操作系统的任务管理可以分为 (2)进程 (3)线程 (4)任务 (5)任务的创建与中止 (6)任务的状态任务有三…...

读图数据库实战笔记01_初识图
1. 图论 1.1. 起源于莱昂哈德欧拉在1736年发表的一篇关于“哥尼斯堡七桥问题”的论文 1.2. 要解决这个问题,该图需要零个或两个具有奇数连接的节点 1.3. 任何满足这一条件的图都被称为欧拉图 1.4. 如果路径只访问每条边一次,则该图具有欧拉路径 1.5…...

K-Means和KNN
主要区别 从无序 —> 有序 从K-Means —> KNN KNN:监督学习,类别是已知的,对已知分类的数据进行训练和学习,找到不同类的特征,再对未分类的数据进行分类。K-Means:无监督学习,事先不知道…...

【Python】【Flask】flask_login的初始化
【背景】 想要更高效地用现有的Flask_login包来实现用户管理方面的常用功能会话管理等。不想再手搓了。 【要点】 首先引入flask_login from flask_login import LoginManager, login_user, login_required, logout_user,current_user然后进行app级别的设置和初始化 login…...

Spring Cloud之API网关(Gateway)
目录 API网关 好处 解决方案 Gateway 简介 特征 核心概念 Route(路由) Predicate(断言) Filter(过滤器) 工作流程 Route(路由) 路由配置方式 1.yml配置文件路由 2.bean进行配置 3.动态路由 动态路由 Predicate(断言) 特点 常见断言 示例 Filter(过滤器) …...

nodejs+vue 电子书阅读系统
本文首先介绍了电子书阅读系统的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,随着网络技术的不断发展,多媒体技术应用渐渐的出现在教育领域中,电子书阅读已经成为社会的一个热…...

百度文心一言4.0抢先体验教程!
🍁 展望:关注我, AI学习之旅上,我与您一同成长! 一、 引言 想快速体验文心一言4.0,但又觉得技术难度太高?别担心,我来手把手教你! 🚀 10月17日,文心一言4.0…...

单目3D目标检测 方法综述——直接回归方法、基于深度信息方法、基于点云信息方法
本文综合整理单目3D目标检测的方法模型,包括:基于几何约束的直接回归方法,基于深度信息的方法,基于点云信息的方法。万字长文,慢慢阅读~ 直接回归方法 涉及到模型包括:MonoCon、MonoDLE、MonoFlex、CUPNet…...

oracle,CLOB转XML内存不足,ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE“,
通过kettle采集数据时,表输入的组件,查询报错。 ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE”, line 272 ORA-06512: at line 1 通过 ALTER SESSION SET EVENTS ‘31156 trace name context forever, level 0x400’; 修改会话配置 或直接修改…...

PHP与mysql数据库交互
PHP与mysql数据库交互 文章目录 PHP与mysql数据库交互方法速查建立与Mysql链接捕获连接错误SQL语句的执行SQL 错误SQL语句执行结果集对象方法速查 案例 方法速查 函数名 作用 mysqli_connect() 与MySQL 数据库建立连接。 mysqli_close() 关闭与MYSQL 数据库建…...

【广州华锐视点】VR飞行员驾驶模拟实训系统
VR飞行员驾驶模拟实训系统是一种基于虚拟现实技术的航空装备仿真测试技术,可以用于飞行员、乘务员和机务人员的训练。该系统可以模拟真实的飞行环境,包括天气、地形、飞机性能等,使被试者能够在虚拟环境中进行飞行操作,从而提高其…...

太烂的牌也要打完只为自己也不是为了其他什么原因。
day17_io02 1.上课代码敲一遍 2.读取一个文件,这个文件中有随机的一些数字字符,统计这些数字有几个偶数,几个奇数,并且追加写入到该文件末尾。 例如: a.txt文件: 3241256364789629090126581212515 奇数&…...

SDL窗口创建以及简单显示(1)
项目创建步骤 1. 使用Qt Creator创建一个C项目 2. 将SDL库文件放到源文件目录下 在项目pro文件中添加库文件 win32{INCLUDEPATH $$PWD/SDL2-2.0.10/includeLIBS $$PWD/SDL2-2.0.10/lib/x86/SDL2.lib } 使用SDL创建一个窗口 #include <stdio.h>#include <SDL.h>…...

【Html】交通灯问题
效果 实现方式 计时器:setTimeout或setInterval来计时。setInterval和 setTimeout 在某些情况下可能会出现计时不准确的情况。这通常是由于JavaScript的事件循环机制和其他代码执行所需的时间造成的。 问询:通过getCurrentLight将每个状态的持续时间设置…...

用IntelliJ远程打断点调试
前提当然是本地和远程部署的代码一样。 记录下步骤: 1,用token登录kuboard,找到目标容器的IP: 2, 用上一步找到的IP等信息创建Remote JVM Debug: 3,打断点,wkb说要把断点此属性改为线程。我试了下似乎…...

Spring-Bean的生命周期概述
Bean的生命周期概述 入门使用的Spring代码: ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("spring.xml"); UserService userService (UserService) context.getBean("userService"); userService.test(); …...

SENet 学习
ILSVRC 是一个比赛,全称是ImageNet Large-Scale Visual Recognition Challenge,平常说的ImageNet比赛指的是这个比赛。 使用的数据集是ImageNet数据集的一个子集,一般说的ImageNet(数据集)实际上指的是ImageNet的这个子…...

目前和未来的缓存构建
说起来可能有点反直觉,有时候不运行反而可以帮助我们加快速度,这正是网络浏览器运行的指导原则。不必在页面上加载所有内容,缓存的元素已经存在,不需要每次访问网站或网页时都重新加载。页面加载速度越快,浏览器的工作…...

aws亚马逊云免费账号代充值!!!什么是 AWS Lambda?
AWS Lambda 是一项计算服务,可使您无需预配置或管理服务器即可运行代码。 Lambda 在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量调配和弹性伸缩和记录。使用 Lambda,您…...

《从零开始大模型开发与微调 :基于PyTorch与ChatGLM》简介
内 容 简 介 大模型是深度学习自然语言处理皇冠上的一颗明珠,也是当前AI和NLP研究与产业中最重要的方向之一。本书使用PyTorch 2.0作为学习大模型的基本框架,以ChatGLM为例详细讲解大模型的基本理论、算法、程序实现、应用实战以及微调技术,…...

【LeetCode】102. 二叉树的层序遍历
题目链接 文章目录 Python3方法一: 广度优先搜索 (BFS) ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法二: 深度优先搜索 (DFS) ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯ C方法一: 广度优先搜索 (BFS) ⟮ O ( n ) ⟯ \lgroup O(n…...

golang连接池检查连接失败时如何重试
在Go中,可以通过使用database/sql包的DB类型的Ping方法来检查数据库连接的可用性。如果连接检查失败,可以选择进行重试。以下是一个简单的示例代码,演示了如何在连接检查失败时进行重试: import ("database/sql""…...

从JavaScript到Rust的三年时间小结
Rust 是一种注重安全性、速度和并发性的系统编程语言。它能编译成高效的本地代码,无需垃圾回收即可访问内存等底层资源,同时还能防止分隔故障。 作者讨论了他们几年来用 Rust 构建大型应用程序和库的经验。他们发现 Rust 的借用检查器和类型系统有助于减…...

【Python机器学习】零基础掌握VotingRegressor集成学习
如何更准确地预测房价? 想象一下,你是一名房地产分析师,你的任务是预测一个小区的未来房价。这看似简单,但实际上,房价受到多种因素的影响,如地理位置、房屋面积、周围设施等。你可能会使用线性回归模型来进行预测,但是你会发现,尽管模型的准确性还可以,但还是存在一…...

云计算模式的区域LIS系统源码,基于ASP.NET+JQuery、EasyUI+MVC技术架构开发
云计算模式的区域LIS系统源码 云LIS系统源码,自主版权 LIS系统是专为医院检验科的仪器设备能与计算机连接。可通过LIS系统向仪器发送指令,让仪器自动操作和接收仪器数据。并快速的将检验仪器中的数据导入到医生工作站中进行管理,且可将检验结…...

面向对象设计原则之接口隔离原则
目录 定义接口隔离原则与单一职责原则示例 定义 接口隔离原则,全称为 Interface Segregation Principle,缩写ISP。 原始定义:Clients should not be forced to depend upon interfaces that they don’t use。 翻译: 不应该强行…...

haproxy 负载均衡
haproxy负载均衡 haproxy:基于C语言开发的开源软件 支持高性能的tcp和http负载均衡器,工作中用的版本1.5.9 haproxy功能:主要用于高并发的web站点,工作原理和nginx、lvs都一样 haproxy缺点: 单节点部署,单实例运行。代…...

在el-dialog中使用tinymce 点击工具栏下拉框被遮挡
在el-dialog中使用tinymce控件时,会出现点击工具栏下拉框出现在弹窗下一层,审查元素之后发现是tinymce的下拉框z-index优先级低于el-dialog的z-index导致的,所以需要增加tinymce的下拉框的z-index值。 通过审查元素得到,需要修改t…...

CloudQuery + StarRocks:打造高效、安全的数据库管控新模式
随着技术的迅速发展,各种多元化的数据库产品应运而生,它们不仅类型众多,而且形式各异,国产化数据库千余套,开源数据库百余套 OceanBase 、PolarDB 、StarRocks…还有一些像 Oracle、MySQL 这些传统数据库。这些数据库产…...

各类统计模型R语言的详细使用教程-R语言的线性回归使用教程
各类统计模型R语言的详细使用教程-R语言的线性回归使用教程 前言R语言的线性回归代码示例回归诊断误差项正态qq图内学生化残差外学生化残差线性关系异常值的发现、处理帽子矩阵的方法DFFITS 准则Cook统计量COVRATIO准则多重共线性summaryKlein判别法特征根法条件指数法方差膨胀…...