当前位置:首页计算机类软件水平考试高级系统分析师->某公司承担了一项宇航嵌入式设备的研制任务。本项目除对硬件设备

某公司承担了一项宇航嵌入式设备的研制任务。本项目除对硬件设备环境有很高的要求外,还要求支持以下功能:(1) 设备由多个处理机模块组成,需要时外场可快速更换(即LRM结构);(2) 应用软件应与硬件无关,便于软硬件的升级;(3) 由于宇航嵌入式设备中要支持不同功能,系统应支持完成不同功能任务间的数据隔离;(4) 宇航设备可靠性要求高,系统要有故障处理能力。公司在接到此项任务后,进行了反复论证,提出三层栈(TLS)软件总体架构,如下图所示,并将软件设计工作交给了李工,要求他在三周内完成软件总体设计工作,给出总体设计方案。

高级系统分析师,押题密卷,2021年《系统分析师》押题密卷3

用150字以内的文字,说明公司制定的TLS软件架构的层次特点,并针对上述功能需求(1)~(4),说明架构中各层内涵。[问题2]在TLS软件架构的基础上,关于选择哪种类型的嵌入式操作系统问题,李工与总工程师发生了严重分歧。李工认为,宇航系统是实时系统,操作系统的处理时间越快越好,隔离意味着以时间作代价,没有必要,建议选择类似于VxWorks5.5的操作系统;总工程师认为,应用软件间隔离是宇航系统安全性要求,宇航系统在选择操作系统时必须考虑这一点,建议选择类似于Linux的操作系统。请说明两种操作系统的主要差异,完成下表中的空白部分,并针对本任务要求,用200字以内的文字说明你选择操作系统的类型和理由。两种操作系统的主要差异

高级系统分析师,押题密卷,2021年《系统分析师》押题密卷3

[问题3]故障处理是宇航系统软件设计中极为重要的组成部分。故障处理主要包括故障监视、故障定位、故障隔离和系统容错(重组)。用150字以内的文字说明嵌入式系统中故障主要分哪几类?并分别给出两种常用的故障滤波算法和容错算法。

查看答案 纠错
答案:
本题解析:

[问题1]TLS结构框架的主要特点:(1) 应用软件仅与操作系统服务相关,不直接操作硬件。(2) 操作系统通过模块支持原软件访问硬件,可与具体硬件无关。(3) 模块支持层将硬件抽象成标准操作。(4) 通过三层栈的划分可实现硬件的快速更改与升级,应用软件的升级不会引起硬件的变更。TLS结构框架的各层内涵是:(1) 应用层主要完成宇航设备的具体工作,由多个功能任务组成,各功能任务间的隔离由操作系统层实现。(2) 操作系统层实现应用软件与硬件的隔离,为应用软件提供更加丰富的计算机资源服务。操作系统为应用软件提供标准的API接口(如POSIX),确保了应用软件的可升级性。(3) 模块支持层为操作系统管理硬件资源提供统一管理方法,用一种抽象的标准接口实现软件与硬件的无关性,达到硬件的升级要求,便于硬件的外场快速更换。[问题2]两种操作系统的差异见下表。

高级系统分析师,押题密卷,2021年《系统分析师》押题密卷3

选择类似于Linux的嵌入式操作系统。理由如下:(1) Linux操作系统是一种安全性较强的操作系统。内核工作在系统态,应用软件工作在用户态,可以有效防止应用软件对操作系统的破坏。(2) Linux操作系统调度的最小单位是线程,线程归属于进程,进程具有自己独立的资源。进程通过存储器管理部件(MMU)实现多功能应用间隔离。(3) 嵌入式Linux操作系统支持硬件抽象,可有效实现TLS结构,并将硬件抽象与操作系统分离,可方便实现硬件的外场快速更换。[问题3](1) 嵌入式系统中故障主要分为:①硬件故障:如CPU、存储器和定时器等;②应用软件故障:如数值越界、异常和超时等;③操作系统故障:如越权访问、死锁和资源枯竭等。(2) 滤波算法:①门限算法②递减算法③递增算法④周期滤波算法(3) 容错算法:①N+1备份②冷备③温备④热备

更新时间:2021-11-18 19:11

你可能感兴趣的试题

问答题

阅读下列说明和C++代码,将应填入( )处的字句写在答题纸的对应栏内。

【说明】

某图像预览程序要求能够查看BMP、JPEG和GIF三种格式的文件,且能够Windows和Linux两种操作系统上运行。程序需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,现采用桥接(Bridge)模式进行设计,得到如图5-1所示的类图。

初级程序员,押题密卷,2021年程序员押题密卷3

【C++代码】

#include<iostream>#include<:string>;Using namespace std;class Matrix{//各种格式的文件最终都被转化为像素矩阵//此处代码省略};class Implementor{public:( );显示像素矩阵 m};class WinImp:publicImplementor{public:Viod doPaint(Matrix m){/*调用 Windows 系统的绘制函数绘制像素矩阵*/};class LinuxImp:publicImplementor{/*调用 Linux 系统的绘制函数绘制像素矩阵*/}};class Image{public:viod setImp(Implement*imp) {this->imp=imp;}Virtual viod parseFile(string fileName)=0protected:Implementor*imp;};class BMPImage:publicImage{//此处省略代码};class GIFImage:publicImage{Public:viod parseFile(string fileName) {//此处解析 GIF 文件并获得一个像素矩阵对象 m( );显示像素矩阵 m}};class JPEGImage:publicImage{//此处代码省略};int main(){//在 linux 操作系统上查看 demo.gif 图像文件Image*image=( );Implementor*imageImp=( );( )Image->parseFile(〝demo.gif〝);return0;}

查看答案
问答题

阅读下列说明和C代码,回答问题1至问题2,将解答写在答题纸的对应栏内。

【说明】

一个无向连通图G点上的哈密尔顿(Hamiltion)回路是指从图G上的某个顶点出发,经过图上所有其他顶点一次且仅一次,最后回到该顶点的路径。哈密尔顿回路算法的基础如下:假设图G存在一个从顶点V0出发的哈密尔顿回路V1--V2--V3--...--Vn-1--V0。算法从顶点V0出发,访问该顶点的一个未被访问的邻接顶点V1,接着从顶点V1出发,访问V1一个未被访问的邻接顶点V2,..。;对顶点Vi,重复进行以下操作:访问Vi的一个未被访问的邻接接点Vi+1;若Vi的所有邻接顶点均已被访问,则返回到顶点Vi-1,考虑Vi-1的下一个未被访问的邻接顶点,仍记为Vi;直到找到一条哈密尔顿回路或者找不到哈密尔顿回路,算法结束。

【C代码】

下面是算法的C语言实现。

(1)常量和变量说明

n :图G中的顶点数

c[][]:图G的邻接矩阵

K:统计变量,当前已经访问的顶点数为k+1

x[k]:第k个访问的顶点编号,从0开始

Visited[x[k]]:第k个顶点的访问标志,0表示未访问,1表示已访问

(2)C程序

#include <stido.h>#include <stidb.h>#define MAX 100voidHamilton(intn,int x[MAX,intc[MAX][MAX]){int;int visited[MAX];int k;/*初始化 x 数组和 visited 数组*/for (i=0:i<n;i++){x[i]=0;visited [i]=0;}/*访问起始顶点*/k=0( );x[0]=0K=k+1/*访问其他顶点*/while(k>=0){x[k]=x[k]+1;while(x[k]<n){if ( )&&c[x[k-1]][x[k]==1){/*邻接顶点 x[k]未被访问过*/break;}else{x[k] = x[k] +1}}if(x[k] <n &&( ){ /*找到一条哈密尔顿回路*/for (k=0;k<n;k++){prinf(〝%d--〝,x[k] ; /*输出哈密尔顿回路*/}prinf(〝%d--〝,x[0] ;return;}elseif x[k]<n&&k<n-1){/*设置当前顶点的访问标志,继续下一个顶点*/( );k=k+1;}else{/*没有未被访问过的邻接顶点,回退到上一个顶点*/x[k]=0;visited x[k]=0;( );}}}

【问题1】(10分)

根据题干说明。填充C代码中的空(1)~(5)。

【问题2】(5分)

根据题干说明和C代码,算法采用的设计策略为( ),该方法在遍历图的顶点时,采用的

是( )方法(深度优先或广度优先)。

查看答案
问答题

阅读以下说明和C程序,将应填入 (n) 处的字句写在对应栏内。3、【说明】下面的程序用DoleRob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。 a.在第一行的正中插入1。 b.新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。 c.若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。 例如,3阶魔方阵如下所示: 8 1 6 3 5 7 4 9 2【C程序】 #include<stdio.h> #include<stdlib.h> #define SIZE 50 main( ) { int row, col, n,value; int a[SIZE+1][SIZE+1]; /*不使用下标为0的元素*/ printf("请输入要输出魔方阵的阶数n(奇数,<%d):n=",SIZE.; scanf("%d",&n); if (!(n % 2)||n < 1 || (1) ) { printf("输入数据有误!\n"); exit(0); } row=1; col = (n+1)/2; value=1; while(value< = (2) ) { a[row][col] = value; /*计算下一位置*/ if(value%n !=0){ row--; (3) ; if(row<1) row=n; if(col>n) (4) ; } else row++; value = (5) ; } printf("\n%d阶魔方阵如下所示:\n\n",n); for(row = 1;row <= n; row++){ for(col = 1; col <=n; col++) printf("%5d",a[row][col]); printf("\n"); } }

查看答案
问答题

阅读下列说明和Java代码,将应填入( )处的字句写在答题纸的对应栏内。

【说明】

某图像预览程序要求能够查看BMP、JPEG和GIF三种格式的文件,且能够在Windows和Linux两种操作系统上运行。程序需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,现采用桥接模式进行设计,得到如图6-1所示的类图。

初级程序员,押题密卷,2021年程序员押题密卷3

【Jave代码】

Import java.util.*;class Matrix{ //各种格式的文件最终都被转化为像素矩阵//此处代码省略};abstract class Implementor{Public( );//显示像素矩阵 m};class WinImp extends Implementor{public void doPaint(Matrix m){//调用Windows 系统的绘制函数绘制像素矩阵}};class LinuxImp extends Implementor{public void doPaint(Matrix m){//调用Linux 系统的绘制函数绘制像素矩阵}};abstract class Image{public void setImp(Implementor imp){this.imp= imp; }public abstract void parseFile(String fileName);protected Implementor imp;};class BMPImage extends Image{//此处代码省略};class GIFImage extends Image{public void parseFile(String fileName) {//此处解析BMP 文件并获得一个像素矩阵对象 m( );//显示像素矩阵 m}};Class Main{Public static viod main(String[]args){//在Linux 操作系统上查看 demo.gif 图像文件Image image=()Implementor imageImp=()( )Image.parseFile(〝demo.gif〝);}}

查看答案
问答题

阅读下列说明和Java代码,回答问题,将解答填入答题纸的对应栏内。

【说明】

某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如下图所示。

初级程序员,押题密卷,2021年程序员押题密卷2

【Java代码】

class Light { public Light() {} public Light(String name) { /* 代码省略 */ } public void on() { /* 代码省略 */ } // 开灯 public void off() { /* 代码省略 */ } // 关灯 // 其余代码省略} (1) { public void execute();} class LightOnCommandimplements Command { // 开灯命令 Light light; public LightOnCommand(Light light) {this.light=light; } public void execute() { (2) ; }}class LightOffCommandimplements Command { // 关灯命令 Light light; public LightOffCommand(Light light) {this.light=light; } public void execute(){ (3) ; }}class RemoteControl { //遥控器 Command[] onCommands=new Command[7]; Command[] offCommands=new Command[7]; public RemoteControl() { /* 代码省略 */ } public void setCommand(int slot, CommandonCommand, Command offCommand) { (4) =onCommand; (5) =offCommand; } public void onButtonWasPushed(int slot) { (6) ; } public void offlButtonWasPushed(int slot){ (7) ; }}class RemoteLoader { public static void main(String[] args) { RemoteControl remoteControl=newRemoteControl(); Light livingRoomLight=newLight("Living Room"); Light kitchenLight=newLight("kitchen"); LightOnCommand livingRoomLightOn=newLightOnCommand(livingRoomLight); LightOffCommand livingRoomLightOff=newLightOffCommand(livingRoomLight); LightOnCommand kitchenLightOn=newLightOnCommand(kitchenLight); LightOffCommand kitchenLightOff=newLightOffCommand(kitchenLight); remoteControl.setCommand(0,livingRoomLightOn, livingRoomLightOff); remoteControl.setCommand(1, kitchenLightOn,kitchenLightOff); remoteControl.onButtonWasPushed(0); remoteControl.offButtonWasPushed(0); remoteControl.onButtonWasPushed(1); remoteControl.offButtonWasPushed(1); }}

查看答案
问答题

阅读以下说明和C程序,将应填入 (n) 处的字句写在对应栏内。 2、【说明】下面的程序按照以下规则输出给定名词的复数形式。 a.若名词以“y”结尾,则删除y并添加“ies”; b.若名词以“s”、“ch”或“sh”结尾,则添加“es”; c.其他所有情况,直接添加“s”。【C程序】 #include <stdio.h> #include <string.h> char*plural(char *word) { int n; char *pstr; n=strlen(word); /*求给定单词的长度*/ pstr=(char*)malloc(n+3);/*申请给定单词的复数形式存储空间*/ if (!pstr||n<2) return NULL; strcpy(pstr,word); /*复制给定单词*/ if ( (1) ) { pstr[n-1]='i';pstr[n] ='e';pstr[n+1]='s'; (2) ; } else if(pstr[n-1]=='s'| |pstr[n-1]=='h'&&( (3) )) { pstr[n]='e';pstr[n+1]='s';pstr[n+2]='\0'; } else { pstr[n]='s';pstr[n+1]='\0';) (4) ; } main() { int i; char *ps; char wc[9][10]= {"chair","dairy","boss","circus","fly","dog","church","clue","dish"); for(i = 0;i<9; i++) { ps= (5) ; printf("%s: %s\n",wc[i],ps); /*输出单词及其复数形式*/ free(ps); /*释放空间*/ } system("pause"); }

查看答案
问答题

阅读下列说明和C代码,回答问题,将解答填入答题纸的对应栏内。

【说明】

计算一个整数数组a的最长递增子序列长度的方法描述如下:

假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度为 ;其中b[i]满足最优子结构,可递归定义为:

初级程序员,押题密卷,2021年程序员押题密卷2

【C代码】

下面是算法的C语言实现。

(1)常量和变量说明

a:长度为n的整数数组,待求其最长递增子序列

b:长度为n的数组,b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度,其中0≤i<n

len:最长递增子序列的长度

i, j:循环变量

temp:临时变量

(2)C程序

#include <stdio.h>int maxL(int*b, int n) {int i, temp=0;for(i=0; i<n; i++) { if(b[i]>temp) temp=b[i]; } return temp;}int main() { int n,a[100], b[100], i, j, len; scanf("%d", &n); for(i=0;i<n; i++) { scanf("%d", &a[i]); } (1) ; for(i=1;i<n; i++) { for(j=0,len=0; (2) ; j++) { if( (3) && len<b[j]) len=b[j]; } (4) ; } Printf("len:%d\n", maxL(b,n)); printf("\n");}

【问题1】(8分)

根据说明和C代码,填充C代码中的空(1)~(4)。

【问题2】(4分)

根据说明和C代码,算法采用了 (5) 设计策略,时间复杂度为 (6) (用O符号表示)。

【问题3】(5分)

已知数组a={3,10,5,15,6,8},据说明和C代码,给出数组b的元素值。

查看答案
问答题

阅读下列说明和C++代码,回答问题,将解答填入答题纸的对应栏内。

【说明】

某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如下图所示。

初级程序员,押题密卷,2021年程序员押题密卷2

【C++代码】

class Light {public: Light(stringname) { /* 代码省略 */ } void on() {/* 代码省略 */ } // 开灯 void off() {/* 代码省略 */ } // 关灯};class Command {public: (1) ;};class LightOnCommand:public Command { // 开灯命令private: Light* light;public: LightOnCommand(Light* light) { this->light=light; } voidexecute() { (2) ; }};class LightOffCommand:public Command { // 关灯命令private: Light *light;public: LightOffCommand(Light* light) { this->light=light; } voidexecute() { (3) ; }};class RemoteControl{ // 遥控器private: Command*onCommands[7]; Command*offCommands[7];public: RemoteControl() { /* 代码省略*/ } voidsetCommand(int slot, Command* onCommand, Command* offCommand) { (4) =onCommand; (5) =offCommand; } voidonButtonWasPushed(int slot) { (6) ; } voidoffButtonWasPushed(int slot) { (7) ; }};int main() { RemoteControl* remoteControl=new RemoteControl(); Light*livingRoomLight=new Light("Living Room"); Light*kitchenLight=new Light("kitchen"); LightOnCommand*livingRoomLightOn=newLightOnCommand(livingRoomLight); LightOffCommand* livingRoomLightOff=newLightOffCommand(livingRoomLight); LightOnCommand*kitchenLightOn=new LightOnCommand(kitchenLight); LightOffCommand* kitchenLightOff=new LightOffCommand(kitchenLight); remoteControl->setCommand(0, livingRoomLightOn, livingRoomLightOff); remoteControl->setCommand(1,kitchenLightOn, kitchenLightOff); remoteControl->onButtonWasPushed(0); remoteControl->offButtonWasPushed(0); remoteControl->onButtonWasPushed(1); remoteControl->offButtonWasPushed(1); /* 其余代码省略 */ return 0;}

查看答案
问答题

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。

【说明】

n-皇后问题是在n行n列的棋盘上放置n个皇后,使得皇后彼此之间不受攻击,其规则是任意两个皇后不在同一行、同一列和相同的对角线上。

拟采用以下思路解决n-皇后问题:第i个皇后放在第i行。从第一个皇后开始,对每个皇后,从其对应行(第i个皇后对应第i行)的第一列开始尝试放置,若可以放置,确定该位置,考虑下一个皇后;若与之前的皇后冲突,则考虑下一列;若超出最后一列,则重新确定上一个皇后的位置。重复该过程,直到找到所有的放置方案。

【C代码】

下面是算法的C语言实现。

(1)常量和变量说明

pos:一维数组,pos[i]表示第i个皇后放置在第i行的具体位置。

count:统计放置方案数。

i,j,k:变量。

N:皇后数。

(2)C程序

#include <stdio.h>#include <math.h>#define N4/*判断第k个皇后目前放置位置是否与前面的皇后冲突*/in isplace(int pos[],int k) {int i;for(i=1; i<k; i++) {if( (1) || fabs(i-k) ══fabs(pos[i] - pos[k])) {return();}}return 1;} int main() {int i,j,count=1;int pos[N+1];//初始化位置for(i=1; i<=N; i++) {pos[i]=0;}(2) ;while(j>=1) {pos[j]= pos[j]+1;/*尝试摆放第i个皇后*/while(pos[j]<=N&&(3)_) {pos[j]= pos[j]+1;}/*得到一个摆放方案*/if(pos[j]<=N&&j══ N) {printf("方案%d: ",count++);for(i=1; i<=N; i++){printf("%d",pos[i]);}printf("\n");}/*考虑下一个皇后*/if(pos[j]<=N&&(4) ) {j=j+1;} else{ //返回考虑上一个皇后pos[j]=0;(5) ;}}return 1;}。

【问题1】(10分)

根据以上说明和C代码,填充C代码中的空(1)~(5)。

【问题2】(2分)

根据以上说明和C代码,算法采用了(6)设计策略。

【问题3】(3分)

上述C代码的输出为:(7)。

查看答案
单选题

某公司开发一个文档编辑器,该编辑器允许在文档中直接嵌入图形对象,但开销很大。用户在系统设计之初提出编辑器在打开文档时必须十分迅速,可以暂时不显示当前页面以外的图形。针对这种需求,公司可以采用(54)避免同时创建这些图形对象。

  • A.代理模式
  • B.外观模式
  • C.桥接模式
  • D.组合模式
查看答案