嵌入式系统设计师考试笔记之操作系统基础复习笔记二

news2024/11/19 4:46:52

目录

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首创,以文件系统为基础,连接两个任务之间的一个打开的共享文件,专用于任务直接的数据通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1138340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 使用 Disruptor 做内部高性能消息队列

这里写自定义目录标题 一 、背景二 、Disruptor介绍三 、Disruptor 的核心概念3.1 Ring Buffer3.2 Sequence Disruptor3.3 Sequencer3.4 Sequence Barrier3.5 Wait Strategy3.6 Event3.7 EventProcessor3.8 EventHandler3.9 Producer 四、案例-demo五、总结 一 、背景 工作中遇…

rust入门

一&#xff0c;输入输出 println!("Hello, World"); 二&#xff0c;函数 1&#xff0c;main函数 fn main() {println!("Hello, World"); }2&#xff0c;普通函数 fn myPrint(){println!("{}", 1234); } fn main() {myPrint(); }3&#xff0…

AI新能量!FortiGate NGFW面向数据中心全面集成FortiGuard AI 安全服务

企业IT技术正在以惊人的速度发展&#xff0c;转型最大的领域之一是下一代防火墙&#xff08;NGFW&#xff09;市场。如今&#xff0c;混合云、多云、边缘等多种基础设施形态共存&#xff0c;已经成为大部分企业的常态&#xff0c;不断扩张的攻击面需要不同形态防火墙的安全防护…

一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel

前言 日常工作中经常与数据打交道的同学肯定会难以避免对Excel的一些数据操作如导入、导出等&#xff0c;但是当对一些大数据量操作Excel时经常会遇到一个常见的问题内存溢出。今天给大家推荐一个简单、高效、低内存避免OOM&#xff08;内存溢出&#xff09;的.NET操作Excel开…

PDF 文档处理:使用 Java 对比 PDF 找出内容差异

不论是在团队写作还是在个人工作中&#xff0c;PDF 文档往往会经过多次修订和更新。掌握 PDF 文档内容的变化对于管理文档有极大的帮助。通过对比 PDF 文档&#xff0c;用户可以快速找出文档增加、删除和修改的内容&#xff0c;更好地了解文档的演变过程&#xff0c;轻松地管理…

FL Studio21.2官方重磅更新及新功能一分钟介绍

好消息&#xff01;FL Studio21.2 在 10 月 26 日正式发布啦&#xff0c;它新增了 FL Cloud 在线采样库和 AI 音乐制作功能&#xff0c;还提供音乐分发到 Spotify、Apple Music 等主要音乐平台的服务。此外&#xff0c;还有新的音频分离功能、自定义波形颜色和新的合成器 Keple…

Go 开发IDE全览:GoLand VS VSCode全面解析

一、引言 在软件开发的世界里&#xff0c;开发环境的选择与配置是成功项目的基础之一。特别是在Go&#xff08;又名Golang&#xff09;这样一个逐渐获得主流认同、在微服务和云计算领域有着广泛应用的编程语言中&#xff0c;选择合适的开发工具就显得尤为重要。虽然Go语言自身…

在Eclipse中使用Junit

1、准备测试类 public class Calculator {private static int result;public void add(int n) {result result n;} public void substract(int n) {result result -1; //Bug:正确的应该是resultresult-n}public void multiply(int n) {// result result*n;方法未写好}publi…

Jenkins+Python自动化测试持续集成详细教程

Jenkins安装 Jenkins安装 ​ Jenkins是一个开源的软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。由于是基于java开发因此它也依赖java环境&…

多线程的学习01

什么是线程 线程是为了解决并发编程引入的机制&#xff0c;线程相比进程来说更轻量。 创建线程比创建进程——开销更小 销毁线程比销毁进程——开销更小 调度线程比调度进程——开销更小 进程包含线程&#xff0c;同一进程里的若干线程之间&#xff0c;共享着内存资源和文件描…

VPS是什么?详解亚马逊云科技Amazon Lightsail(VPS)虚拟专用服务器

2006年&#xff0c;南非开普敦&#xff0c;亚马逊推出了WBS&#xff0c;以网络服务的形式向企业提供基础的IT服务。亚马逊云科技的一小步&#xff0c;在无数技术更迭&#xff0c;天才设计师和程序员的努力与基础设施建设的完善之下成为了人类科技进展的一大步。 亚马逊云科技可…

层次式架构的设计理论与实践

层次式架构的设计理论与实践 层次式架构概述 层次式架构的定义和特性 定义 特性 层次式架构的一般组成(表现层、中间层、数据访问层和数据层) 表现层框架设计 设计模式 MVC MVP MVVM XML技术 UIP设计思想 表现层动态生成设计思想(基于XML界面管理技术) 中间层架构设计 业务…

.NET开源、跨平台的本地日记APP - SwashbucklerDiary

前言 今天给大家推荐一个.NET开源、跨平台的本地日记APP&#xff1a;SwashbucklerDiary「 侠客日记 」。 项目开发背景 每个人的心底都有一个侠客&#xff0c;如影随风&#xff0c;陪你看过一路的风景&#xff0c;记得你所有的精彩。 使用技术栈 MAUI Blazor Hybrid Masa…

设计模式之中介模式

文章目录 一、介绍二、生活中的中介模式三、中介模式中的角色四、案例演示1. 角色分析 五、优缺点 一、介绍 中介模式(Mediator Pattern)&#xff0c;属于行为型设计模式。目的是把系统中对象之间的调用关系从一对多转变成一对一的调用关系&#xff0c;以此来降低多个对象和类…

【C++类的继承、父子类】牛顿插值公式求近似值

/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 通信与信息专业大二在读 * * brief Microsoft 源代码注释语言 SAL* * copyright 2023.10* COPYRIGHT 原创技术笔记&#xff1a;转载需获得博主本人同意&#xff0c;且需标明转载源*…

文章分类管理接口

目录 前言 新建表 获取文章分类列表接口 初始化路由模块 将路由对象导出并使用 初始化路由对象处理函数 修改路由代码 导入数据库 定义sql语句 调用db.query() 完整的获取文章分类列表处理函数 新增文章分类接口 定义路由和处理函数 验证表单数据 查询分类名称与…

智能问答技术在百度搜索中的应用

作者 | Xiaodong 导读 本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队&#xff0c;共同探索智能问答技术的发展方向&#xff0c;文末有简历投递方式。 全文6474字&#xff0c;预计阅读时…

更新电脑显卡驱动的操作方法有哪些?

更新显卡驱动可以有效的提升我们电脑的性能&#xff0c;可以通过设备管理器、显卡驱动软件等方式进行检查驱动是否需要更新&#xff0c;并修复一些电脑上已知的显卡问题。 然而&#xff0c;对于一些不是很懂电脑技术的人员来说&#xff0c;更新电脑显卡驱动是一件比较复杂和混乱…

C/C++字符三角形 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C字符三角形 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C字符三角形 2020年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定一个字符&#xff0c;用它构造一个底边长5个字…

本地websocket服务端暴露至公网访问【内网穿透】

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…