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

嵌入式操作系统

嵌入式系统有以下特点:

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

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

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

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

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

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

一般考在选择题。

机内自检

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

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

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

相关文章

软件全套资料整理包获取-软件各阶段支撑文档

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

动手写一个简单的Android 表格控件支持固定列

Android 动手写一个简洁版表格控件 简介 源码已放到 Github Gitee 作为在测绘地理信息行业中穿梭的打工人,遇到各种数据采集需求,既然有数据采集需求,那当然少不了数据展示功能,最常见的如表格方式展示。 当然,类似…

大模型时序预测初步调研20240506

AI预测相关目录 AI预测流程,包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

MySQL —— 表的基本操作

一、创建 1.语法 create table 表名称( 自定义变量1, 自定义变量2, 自定义变量3(最后一个变量末尾不需要加任何标点符号) )charset字符集 collate校验集 engine存储引擎; ps:若是不具体给字符集、校验集、储存引擎,则采用配置文件…

『跨端框架』Flutter环境搭建

『跨端框架』Flutter环境搭建 资源网站简介跨平台高性能发展历程跨平台框架的比较成功案例 环境搭建(windows)基础环境搭建Windows下的安卓环境搭建Mac下的安卓环境配置资源镜像JDKAndroid StudioFlutter SDK问题一问题二问题三修改项目中的Flutter版本 …

厂家自定义 Android Ant编译流程源码分析

0、Ant安装 Windows下安装Ant: ant 官网可下载 http://ant.apache.org ant 环境配置: 解压ant的包到本地目录。 在环境变量中设置ANT_HOME,值为你的安装目录。 把ANT_HOME/bin加到你系统环境的path。 Ubuntu下安装Ant: sudo apt…

visio studio 中.NET Core(.net8.0)框架和.net framewok 框架有什么区别?

更新vs到2022版本后,新建项目时就多出不少选项,这里来个大家分享下.NET Core(.net8.0)框架和.net framewok的区别 如下图,不带后缀的就是使用.NET Core框架,后续选项是.net8.0。 .net framewok框架选项&am…

从0到1:商场导览小程序开发笔记一

背景 购物中心与商场小程序:旨在提供便捷的购物、导航、活动报名、服务查询等功能,让用户更好地体验购物和享受服务。通过提供便捷的购物、信息查询和互动预约等功能,提升了商场的服务水平和用户体验,帮助商场与消费者建立更紧密…

YOLOv5入门(四)训练自己的目标检测模型

前言 通过前面几篇文章,已经完成数据集制作和环境配置(服务器),接下来将继续实践如何开始训练自己数据集~ 往期回顾 YOLOv5入门(一)利用Labelimg标注自己数据集 YOLOv5入门(二)处…

Android 14 init进程解析

前言 当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取init.rc中的相关配置,从而来启动其他相关进程以及其他操作。 init进程启动主要分为两个阶段&#xff1…

jsPDF + html2canvas + Vue3 + ts项目内,分页导出当前页面为PDF、A 页面内导出 B 页面的内容为PDF,隐藏导出按钮等多余元素

jsPDF html2canvas Vue3 ts Arco Design项目&#xff0c;分页导出当前页面为PDF、A 页面内导出 B 页面的内容为PDF&#xff0c;隐藏导出按钮等多余元素… 1.下载所需依赖 pnpm install --save html2canvaspnpm install --save jspdf引入依赖 <script setup lang"…

OpenCV 库来捕获和处理视频输入和相似度测量(73)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV的周期性噪声去除滤波器(70) 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; ​ 目标 如今&#xff0c;拥有数字视频录制系统供您使用是很常见的。因此&#xff0c;您…

FreeBSD RISCV 在QEME中实践-网络配置

在前一篇文章中&#xff0c;我们一起进行了FreeBSD RISCV 在QEME中实践 现在&#xff0c;让我们配置好网络吧&#xff01; 先上结论&#xff1a;用默认配置启动即可&#xff0c;网络就加载好了&#xff0c;只是不能ping罢了。因为不能ping&#xff0c;以为网络没通&#xff0…

opencv图片的平移-------c++

图片平移 cv::Mat opencvTool::translateImage(const cv::Mat& img, int dx, int dy) {// 获取图像尺寸int rows img.rows;int cols img.cols;// 定义仿射变换矩阵cv::Mat M (cv::Mat_<float>(2, 3) << 1, 0, dx, 0, 1, dy);// 进行仿射变换cv::Mat dst;cv…

[附源码+视频教程]暗黑纪元H5手游_架设搭建_畅玩三网全通西方3D世界_带GM

本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#xff0c;踩过的坑都给你们填上了 一. 演示视频 暗黑纪…

目标检测——水下垃圾数据集DeepTrash

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

[图解]不变式的构造和化简

1 00:00:02,420 --> 00:00:03,380 下面这个&#xff0c;我们来看 2 00:00:03,390 --> 00:00:09,940 X→select&#xff08;Y&#xff09;&#xff0c;用Y这个条件来筛选 3 00:00:09,950 --> 00:00:11,340 之后得到的集合 4 00:00:12,400 --> 00:00:14,390 forAl…

SD-WAN介绍,为何成为主推。

1、SD-WAN&#xff08;Software Defined Wide Area Network&#xff0c; 软件定义的广域网&#xff09; 将企业的分支、总部和多云之间互联起来&#xff0c;应用在不同混合链路&#xff08;MPLS&#xff0c;Internet&#xff0c;5G&#xff0c;LTE等&#xff09;之间选择最优的…

EmotionBench—— 基于 LLM 情绪的量化框架

介绍 大型语言模型&#xff08;LLM&#xff09;在近年来取得了显著的进展&#xff0c;这在计算机科学领域被视为一个重要的里程碑。像ChatGPT和Claude这样的综合性软件已经不再仅仅是用于句子校正、文本翻译和编程的工具&#xff0c;它们已经演进成为类似于人类的助手。因此&a…

Linux 操作系统IPC

目录 1、IPC简介 1.1、共享内存 1.1.1 创建/访问共享内存 1.1.2 映射 1.1.3 解除映射 1.1.4 删除/修改共享内存 1.2 信号量集 1.2.1 创建信号量集合 1.2.2 信号量的初始化 1.2.3 信号量的还原和消耗 1.3 消息队列 1.3.1 概念 1.3.3 添加消息队列 1.3.4 读取消息…