第三套嵌入式软件工程师考试试题B卷
Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#
嵌入式Linux软件工程师认证考试 B卷
20个小题,每小题1分,共20分)
1、在下列ARM处理器的各种模式中,()模式有自己独立的R8-R14寄存器。
A、系统模式(System)、
B、终止模式(Abort)
C、中断模式(IRQ)
D、快中断模式(FIQ)
2、按照ARM过程调用标准(APCS),栈指针使用()寄存器,
A、R0
B、R13
C、R14
D、R15
3、在ARM体系结构中,()寄存器作为连接寄存器,当进入子程序时或者处理器响应异常的时候,用来保存PC的返回值;()寄存器作为处理器的程序计数器指针。
A、R0,R14
B、R13,R15
C、R14,R15
D、R14,R0
4、在ARM体系结构中,要从主动用户模式(User)切换到超级用户模式(Supervisor),应采用何种方法()
A、直接修改CPU状态寄存器(CPSR)对应的模式
B、先修改程序状态备份寄存器(SPSR)到对应的模式,再更新CPU状态
C、使用软件中断指令(SWI)
D、让处理器执行未定义指令
5、下面关于MMU和Linux描述错误的是:()
A、MMU是内存管理单元Memory Management Unit的缩写
B、uClinux可以运行在有MMU的处理器上
C、Linux内核功能强大,内存管理功能丰富,即使在没有MMU的处理器上,也可
以通过软件实现地址映射。
D、Linux系统正是利用MMU,才能使得各个进程有独立的寻址空间
6、DNS域名系统主要负责主机名和()之间的解析。
A、IP地址
B、MAC地址
C、网络地址
D、主机别名
7、在vi编辑器中的命令模式下,重复上一次对编辑的文本进行的操作,可使用()命令。
A、上箭头
B、下箭头
C、<.>
D、<*>
8、进程有三种状态:()。
A 、准备态、执行态和退出态
B 、精确态、模糊态和随机态
C 、运行态、就绪态和等待态
D 、手工态、自动态和自由态
9、下列变量名中有效的shell变量名是()。
A、-1-time
B、_2$3
C、bo_chuang_1
D、2009file
10、文件系统的主要功能是()。
A、实现对文件的按名存取
B、实现虚拟存储
C、提高外存的读写速度
D、用于保存系统文档
11、在ARM Linux体系中,用来处理外设中断的异常模式是()
A、软件中断(SWI)
B、未定义的指令异常
C、中断请求(IRQ)
D、快速中断请求(FIQ)
12、在ARM Linux系统中,中断处理程序进入C代码以后,ARM的处于()工作模式
A、超级用户(SVC)
B、中断(IRQ)
C、快速中断(IRQ)
D、和进入中断之前的状态有关系
13、在ARM体系构建的嵌入式系统中,由电平模式触发的中断,其对应的中断标准应该在何时被清除()
A、当中断处理程序结束以后,才可以清除
B、进入相应的中断处理程序,即可以清除
C、产生IRQ中断的时候,处理器自动清除
D、任何时候都可以清除
14、在操作系统中,Spooling技术是用一类物理设备模拟另一类物理设备的技术,实现这种技术的功能模块称做()。
A、可林斯系统
B、斯普林系统
C、图灵机系统
D、虚拟存储系统
15、通过修改下面文件哪个文件,可以设定开机时候自动安装的文件系统()
A. /etc/mta
B. /etc/fastboot
C. /etc/fstab
D. /etc/
16、下面关于Shell的说法,不正确的是:()
A. 操作系统的外壳
B. 用户与Linux内核之间的接口程序
C. 一个命令语言解释器
D. 一种和C类似的程序语言
17、假设root用户执行“init 0”命令,系统将会()。
A.暂停B.关机C.重新启动
D.初始化
18、嵌入式系统应用软件一般在宿主机上开发,在目标机上运行,因此需要一个()环境。
A、交互操作系统
B、交叉编译
C、交互平台
D、分布式计算
19、已知有变量data1定义如下:
union data
{ int i;
char ch;
float f;
} data1;
则变量data1所占的内存存储空间可表示为()。
A、sizeof(int)
B、sizeof(char)
C、sizeof(float)
D、
sizeof(int)+sizeof(char)+sizeof(float)
20、软件开发模型给出了软件开发活动各阶段之间的关系,()不是软件开发
模型。
A、瀑布模型
B、螺旋模型
C、原型模型
D、程序模型
二、填空(本大题共7个小题,每空1分,共20分)
1. 嵌入式操作系统不同于通用操作系统的功能是:_____、______
2. 片内总线是大规模集成电路(Large Scale Integrated Circuit:LSI)和超
大规模集成电路(VLSI)内部各寄存器或功能单元之间的信息交换通道,它由生产厂
家决定,下列属于片内总线的有 _____、______、_______
3. 常用的软件开发模型有 ______、_____、_______
4. ARM处理器的工作模式中属于异常模式的有 ________、________、________
5. 芯片总线又称元件级总线,它是指系统内或插件板内各元件之间所使用的总线,下列属于芯片总线的有_______ 、_________、________
6. 在ARM汇编语言程序设计中主程序和子程序参数的传递需要满足ATPCS规则,ATPCS规则中用来传递参数的寄存器是_____、______、______、________ 编辑器具有两种工作模式: ________和 ________ 。
三、判断题(本大题共12个小题,每题1分,共12分)
1、()在vi编辑器中的命令模式下,删除当前光标处的字符使用d命令。
2、()在单机系统中可采用关中断的方式保证操作的原子性。
3、()根文件系统是系统启动时首先加载的文件系统,因此需要快速加载的内容
应放置于其中,以加快系统的运行速度。
4、()线程切换成本小于进程,因此Linux系统中的多线程程序的调度开销要小
于多进程程序。
5、( )写回Cache是指CPU在执行写操作时,必须把数据同时写入Cache和主存。
6、()在vi编辑器中的命令模式下,重复上一次对编辑的文本进行的操作,可
使用下箭头命令。
7、()文件系统的主要功能是实现虚拟存储。
8、()进程有三种状态是准备态、执行态和退出态。
9、()目前Linux平台上的各种线程库使得Linux能够在内核空间能够支持多线
程。
10、()Linux允许内核以NFS的形式连接根文件系统
11、()EXT3文件系统是一种日志型的文件系统。
12、()BootLoader是嵌入式系统运行的第一个程序。
四、简答题(本大题共2小题,共8分)
1、简述Bootloader有何作用(5分)
2、程序、进程、线程有何区别(3分)
五、编程题(本大题共4个小题,共40分)
1、编写程序,在一个字符串中找到可能的最长的子字符串(10分)
2、编写程序,定义一函数char *strscony(char *p),该字符串用于将指定字符串逆序(10分)
3、仔细阅读下面代码,并填空(10分)
#include ""
#include ""
typedef struct tree{
char data;
struct ___________;
struct tree *rchild;
}*Ptree,Dtree;
void postOrder(Ptree t)
{
if(t)
{
___________________;
___________________;
printf("%c",t->data);
}
}
int main()
{
int num[10]={0};
int height;
int i;
Ptree t;
t=createTree();
postOrder(t);
return 0;
}
4、仔细阅读下面的代码,然后填空,该问题解决N个鸡蛋放到M个篮子里(10分)
说明:
+ (M-m)*Min > N 剪枝条件:放n个鸡蛋后,后面的篮子里即使都放Min个,总鸡蛋数都超过了N个。说明鸡蛋太少了
2.当前篮子放n个鸡蛋,下一个篮子放鸡蛋的个数为Min~n+1,也就是最多放n+1个,再下一个篮子最多放2n+2,4n+4...(n+1)*2^(M-m-1)
当前篮子放n个,如果以后按最多的放,所有篮子的鸡蛋总和如果小于N,说明鸡蛋太多,放不完,要剪枝。即
n+(n+1)(2^0+2^1+2^2+2^3+...+2^(M-m-1))化简得:
N > pow2[M-m]*n + pow2[M-m]-1
#include
using namespace std;
long pow2[20];
int N,M;
int ans[1000];
void solve( int n , int m , int Min )
{
if(n == N && m == M)
{
for(int i=0;i{
cout<
}
cout<return ;
}
else if( _________________________________) return ;
else
{
for(int i = Min; i <= n+1; i++)
{
ans[m] = i;
_________________________;
}
}
}
int main()
{
pow2[0] = 1;
for(int i=1;i<20;i++)
{
pow2[i] =__________________;
}
cin>>N>>M;
if( M > N || ___________________)
{
cout<<"没有有效解"<}
solve( 0 , 0 , 1 );
system("pause");
return 0;
}