【备战软考(嵌入式系统设计师)】04-嵌入式软件架构

本文介绍了嵌入式操作系统的特性,包括其小型化、应用定制、特定领域的应用以及高可靠性和实时性。重点讲解了机内自检的几种类型,进程、线程和任务的概念,以及进程调度和死锁的原理与避免策略。
摘要由CSDN通过智能技术生成

嵌入式操作系统

嵌入式系统有以下特点:

要求编码体积小,能够在有限的存储空间内运行。

面向应用,可以进行裁剪和移植。

用于特定领域,可以支持多任务。

可靠性高,及时响应,无需人工干预独立运行。

实时性高,且要求固态存储。

要求在系统投入前就具有确定性和可预测性。

一般考在选择题。

机内自检

BIT(Built-In Test,机内自检),可以完成对故障的检测和定位。包括下面四种:

上电BIT:在系统上电的时候对所有硬件资源进行自检测,拥有100%的CPU控制权。

周期BIT:在系统运行的空闲时间里周期性地对硬件进行检测,由于系统正在运行,因此测试程序只能使用非破坏性的测试算法。

维护BIT:在维护状态下对所有硬件资源进行维护性测试,同样是拥有100%的CPU控制权。

启动BIT:这个启动的意思不是系统启动,而是维护人员手动启动BIT来检测硬件资源是否故障。

说实话,在考软考之前我都不知道这个BIT是做什么的,在软考通里刷到这题的时候人都傻了,我们下面一起来看看。

题目让我们选一个错误的选项。根据上面的定义,选项A和B是没问题的,选项D这种打太极的说法也不会错,因此正确答案是C。

采用非破坏性算法的是周期BIT,而不是维护BIT。维护BIT是在维护状态下进行的,那我都在维护了,自然就不需要保证系统正常运行了(就像咱打游戏,游戏在维护的时候我们是进不去游戏服务器的对叭)。

任务管理

进程

首先我们需要知道三个概念:进程,线程,任务。了解Linux系统编程的小伙伴应该不陌生且应该挺了解,真的零基础的小伙伴只需要记住下面几条即可。

进程是资源分配的基本单位,线程的独立调度的最小单位。

任务是运行在进程或者线程之上的,也就是说进程线程是任务的载体。

软考中主要考的还是进程的状态图,主流的有三态图和五态图,我们就看看三态图,三态搞清楚了五态也就能看懂,而且软考里考的主要也是三态图。

三态就是三个状态:运行,等待,就绪。

一个进程要运行就需要对应的资源,如果此时需要的资源正在被别人占着,那么这个进程就是在等待状态,进程可以是正在运行,然后需要某个资源了之后再调到等待状态,也就是从运行态到等待态。

当在等待资源的进程等待到了资源,那么会从等待态到就绪态。

处于就绪态的进程就具备了运行的条件,只需要等待到时间片轮到自己了就可以从就绪态转到运行态。同样的,如果正在运行的进程的时间片到期了,那么也会从运行态转到就绪态等待下一个时间片。

三个状态的转换参考上面图中的箭头,箭头是单向的,仔细想想应该不难理解。

我们来小练一道题。

首先不管是三态模型还是五态模型中都没有撤销状态,因为D可以排除。

分配到资源之后进程会进入就绪态,分配到了时间片也就是获得处理时机之后就到了执行状态,因此这题选B。

同步与互斥

先来看个前趋图。

首先是左边那个框,表示的意思是ABCD都完成了才可以进行E,而就算A运行的再快,还是要等剩下的BCD执行完才可以进行下一步,这个就叫同步。

右边那个框,意思是EFGH要按照顺序一个个来,原因可能是它们都需要用到同一个资源,那么这个资源不能给他们共享,必须轮流来,这个就叫互斥。

信号量

信号量是一种特殊的变量,我们可以进行PV操作,P操作可以看成是拿,就把信号量减一,如果信号量的值小于0,那么程序会阻塞,直到别的进程把信号量加一,也就是让信号量的值大于等于0了,程序才会接着运行。

V操作可以看成是给,就是把信号量加一。

根据PV操作的特性,我们可以先P操作再V操作,在这俩操作之间放一段代码,这段代码涉及到一些资源只能供一个进程或有限个进程使用,这样就完成了控制同一时间能够访问资源的进程数量。

这类题目一般会出现在下午的大题中,会将代码挖空让填。

进程调度

进程调度用在就绪态和运行态之间,我们需要通过进程调度算法来分配时间片给进程。

常见的调度算法有下面几种:

先来先服务:就是按照进程来的先后顺序执行。

时间片轮转:跟先来先服务一样给进程分配时间片,不一样的是,先来先服务是一个进程彻底执行完再执行下一个。而时间片轮转是将时间片分成统一的时间,进程按照顺序执行一个时间片,一个进程通常需要好几个时间片,就这样一轮接一轮知道进程全部执行完成。

短作业优先:不按顺序执行,哪个进程所需的时间更短就让谁先执行。

优先级调度:给不同的进程安排不同的优先级,根据优先级的大小安排执行的先后顺序,同样优先级的进程按照先来先服务的顺序执行。

死锁

死锁是进程A需要a和b的资源,现在有a资源然后再等b资源。而进程B也是需要a和b的资源,现在有b资源再等a资源。就是两个进程互相占着对方需要的资源,同时也在等待对方把资源让出,这样就会产生死锁——因为资源分配不合理导致了整个程序阻塞住了。

产生死锁有四个必要条件,只要破除其中一个就可以打破死锁:

资源互斥。

每个进程占有资源且等待其他资源。

系统不能剥夺进程资源。

进程资源图是一个环路,也就是说,存在一个进程资源的循环链,使得每个进程都在等待下一个进程所持有的资源。

避免死锁的方法一般采用银行家算法,其实也就是在分配资源之前计算一下能不能有一个方法可以避免死锁,银行家算法的具体内容可以自行去搜索,挺简单的。

一共有三个并发进程,也就是说三个进程是共同执行的。然后每个进程需要同一中资源4个。问我们一共有多少个资源才不会导致死锁。

这类题有个固定的模板套路,但我们先不说公式,我们稍微思考一下,什么情况下会导致死锁。

最坏的情况就是我每个资源都霸占着一堆资源但是又不够运行,那么最多是占着3个资源,也就是说3*3=9个资源都可能会导致死锁。

在这个情况下我再多一个资源,不管这个多出来的资源给谁,都满足运行的条件也就是拥有四个资源,拥有资源之后就可以运行,运行结束之后就会把资源释放(V操作),然后空闲的资源就够剩下两个进程去运行,这样就不会死锁了。

于是公式就是 进程数 * ( 最大所需资源数 - 1 )+ 1

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值