linux考试复测验文档格式.docx
《linux考试复测验文档格式.docx》由会员分享,可在线阅读,更多相关《linux考试复测验文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
硬件层与软件层之间为中间层,也称为BSP(BoardSupporPackage,板级支持包)。
作用:
将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。
功能:
一般应具有相关硬件的初始化、数据的输入/输出操作和硬件设备的配置等功能。
BSP是主板硬件环境和操作系统的中间接口,是软件平台中具有硬件依赖性的那一部分。
主要目的是为了支持操作系统,使之能够更好地运行于硬件主板上。
(3)软件层:
主要是操作系统,有的还包括文件系统、图形用户接口和网络系统等。
操
作系统是一个标准的内核
将中断、I/O、定时器等资源都封装起来,以方便用户使用。
(4)功能层:
由基于操作系统开发的应用程序组成,用来完成对被控对象的控制功能。
功能层是面向被控对象和用户的,为了方便用户操作,往往需要具有友好的人机界面。
5.简述嵌入式系统中非占先式与占先式调度法的区别。
非占先式调度法也称作合作型多任务(cooperativemultitasking),各个任务彼此合作共享一个CPU。
中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。
但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。
当系统响应时间很重要时,要使用占先式(preemptive)内核。
最高优先级的任务一旦就绪
总能得到CPU的控制权。
当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。
6.简述什么是硬实时操作系统、软实时操作系统以及两者的区别。
在实时系统中,如果系统在指定的时间内未能实现某个确定的任务,会导致系统的全面失败,这样的系统被称为强实时系统或硬实时系统。
强实时系统响应时间一般在毫秒或微秒级。
在弱实时系统中,虽然响应时间同样重要,但是超时却不会发生致命的错误。
其系统响应时间在毫秒至秒的数量级上,其实时性的要求比强实时系统要差一些。
7.嵌入式系统的设计步骤有哪些?
各部分主要工作是什么?
嵌入式系统的设计步骤及各部分的主要工作如下。
(1)需求分析阶段,罗列出用户的需求。
(2)体系结构设计阶段,描述系统的功能如何实现。
(3)详细设计阶段,进行硬件系统与软件系统的分类划分,以决定哪些功能用硬件实现,哪些用软件实现。
(4)系统集成
把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进在设计过程中的错误。
(5)系统测试
对设计好的系统进行测试
看其是否满足给定的要求。
8.Linux作为嵌入式操作系统的优势有哪些?
Linux作为嵌入式操作系统的优势主要有以下几点:
(1)可应用于多种硬件平台。
Linux已经被移植到多种硬件平台,这对于经费、时间受
限制的研究与开发工程是很有吸引力的。
原型可以在标准平台上开发后移植到具体的硬件
上,加快了软件与硬件的开发过程。
Linux采用一个统一的框架对硬件进行管理,从一个硬件平台到另一个硬件平台的改动与上层应用无关。
(2)Linux的高度模块化使添加部件非常容易。
本身内置网络支持,而目前嵌入式系统
对网络支持要求越来越高。
(3)Linux是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量
硬件(包括X86、Alpha、ARM和Motorola等现有的大部分芯片)等特性的一种通用操作系统。
(4)Linux可以随意地配置,不需要任何的许可证或商家的合作关系。
其程序源码全部
公开
任何人可以修改并在GUN通用公共许可证(GNUGeneralPublicLicense)下发行。
这样,开发人员可以对操作系统进行定制,适应其特殊需要。
(5)Linux带有Unix用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都
已移植到了Linux上。
其强大的语言编译器GCC、C++等也可以很容易得到,不但成熟完善,
而且使用方便。
9.简述Linux需要进行进程调度的时机。
Linux执行进程调度一般是在以下情况发生的:
(1)正在执行的进程运行完毕。
(2)正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态。
(3)正在执行的进程调用了P原语操作
从而因资源不足而被阻塞,或调用了V原语操作激活了等待资源的进程队列。
(4)执行中的进程提出I/O请求后被阻塞。
(5)系统分配的时间片已经用完。
以上都是CPU为不可剥夺方式下的引起进程调度的原因。
在CPU方式是可剥夺时
还有下面的原因:
(6)就绪队列中的某个进程的优先级变得高于当前运行进程的优先级,从而也将引起进程调度。
第二章
1、(man)命令可以知道Shell命令的用法。
2、Linux分区类型默认的是(Ext2/Ext3)。
3、(shutdown–rnow)命令行可用来马上关闭正在运行的Linux系统。
4、重定向的符号“>
”表示(输出重定向,原来的文件会被改写)。
5、下面(touchmyfile)命令可用来确保文件myfile存在。
6、要给文件file1加上其他人可执行属性的命令是(chmodo+x)。
7、用“useraddjerry”命令添加一个用户,这个用户的主目录是(/home/jerry)。
8、如果忘记了ls命令的用法,可以采用(manls)命令获得帮助。
9、某文件的组外成员的权限为只读;
所有者有全部权限,组内权限为读写,则该文件的权限为(764)。
10、删除当前目录abc以及下面的所有子目录和文件,并不要求提示任何确认信息的命令是(rm–rfabc)。
11、文件exer1的访问权限为rw-r—r--,现在要添加所有用户的执行权限和同组用户的写权限,命令是(chmoda+xg+wexer1)、(chmod0775exerl)
12、在/home/stud1/wang目录下有一个文件file,使用(catfile>
file.copy)可实现在后台执行命令,此命令将file文件中的内容输出到file.copy文件中。
13、删除文件命令为(rm)。
14、(chmod)命令可更改一个文件的权限设置。
15、系统中有用户user1和user2,同属于users组。
在user1用户目录下有一个文件file1,他拥有644的权限,如果user2用户想修改user1用户目录下的file1文件,file1应拥有(664)。
16、为查看linux启动信息,可以用(dmesg)命令。
17、可用(cat/proc/meminfo)命令查看linux使用了多少内存。
18、下列说法是正确的是(D)。
A.ln–sa.txtb.txt,作用是制作文件b.txt的符号链接,其名称为a.txt。
B.df命令可以查看当前目录占用磁盘空间的大小。
C.comm命令用来打印两个文本文件中的相同内容。
D.rm命令可以用来删除目录。
19、为了查找当前用户运行的所有进程的信息,可以使用(ps-u)命令。
20.为了保证在启动服务器时自动启动DHCP进程,应对(/etc/rc.d/inet1)文件进行编辑。
第三章
二、综合应用题
1、已知C语言程序有主要程序模块prog.c、proc.h,其中调用了另一模块subr.c、subr.h中的功能。
试写出一个可将这两个模块编译成可执行文件pr1的Makefile。
pr1:
prog.osubr.o
gcc–opr1prog.osubr.o
prog.o:
prog.cprog.h
gcc–c–oprog.oprog.c
subr.o:
subr.csubr.h
gcc–c–osubr.osubr.c
2、假定目录/home/arm下有一个C语言程序,它由几个单独的文件组成,而这几个文件又分别包含了其他文件,如下表所示。
文件
包含文件
main.c
stdio.h,table.h
list.c
list.h
symbol.c
symbol.h
table.c
table.h
symbol.h,list.h
完成下列任务
(1)编写Makefile文件,最终的目标文件为hello,交叉编译器为arm-linux-gcc。
hello:
main.olist.osymbol.otable.o
arm-linux-gcc–ohellomain.olist.osymbol.otable.o
main.o:
main.cstdio.htable.hsymbol.hlist.h
arm-linux-gcc-c–omain.omain.c
list.o:
list.clist.h
arm-linux-gcc–c–olist.olist.c
symbol.o:
symbol.csymbol.h
arm-linux-gcc–c–osymbol.osymbol.c
table.o:
table.ctable.hsymbol.hlist.h
arm-linux-gcc–c–otable.otable.c
clear:
rm–fhello*.o
(2)在目标机上通过网络文件系统挂载/mnt到宿主机上的/home/arm目录。
mount–tnfs–onolockIP地址:
/home/arm/mnt
3.在Linux操作系统下,编程实现以下功能。
(1)主程序hello.c(打印“helloworld!
”)。
(2)主程序通过头文件hello.h调用message函数。
(3)message函数有message.c定义(打印“Thisisamessage!
//hello.h
#ifndefHELLO_H
#defineHELLO_H
voidmessage()。
#endif
//message.c
#include<
stdio.h>
#include”hello.h”
voidmessage(){
printf(“thisisamessage!
}
//hello.c
stdlib.h>
String>
voidmain(intargc,char*argv[])
{
printf(“helloworld!
\n”)。
message()。
return0。
三、选择题
1、一般可以用(make)实现自动编译。
2假使当前目录下有文件Makefile,其内容如下。
gcc–opr1prog.osubr.o
prog.cprog.h
gcc–c–oprog.oprog.c
rm–fpr1*.o
现在执行命令makeclear,实际执行的命令是(rm–fpr1*.o)。
3、嵌入式系统应用软件一般在宿主机上开发,在目标机上运行,因此需要的一个(交叉编译)环境。
4、假设用vi编辑器编写了一个脚本文件shell.sh,现想将该文件名称修改为shell2.sh,(mvshell.shshell2.sh)命令可以实现。
5、在使用GCC编辑器的过程中,(-o)选项可用来指定生成的目标文件名。
6、假设当前目录下有文件Makefile,其内容如下。
gcc–c–osubr.osubr.c
现在执行命令makesubr.o,实际执行的命令是(gcc–c–osubr.osubr.c)。
7、为了使生成的目标文件能够用于GDB调试,在编译时GCC应使用(-g)选项。
8、存盘并退出vi的指令是(wq)。
9、在Linux下使用GCC编译器时,有命令gcc–gtest.c–otest,其中参数-g的作用是(生成文件包含调试信息)。
10、fstab文件存放在(/ect)目录中。
11、init启动进程需要读取(/etc/inittab)配置文件。
第四章
1.LINUX支持网络文件系统NFS,(mount-tnfs192.168.1.4:
/opt/sirnfs/mnt/sirnfs)命令实现了将位于192.168.1.4机器上的/opt/sirnfs目录挂载到本机/mnt/sirnfs下。
2、以下叙述中正确的是(C)
A、宿主机与目标机之间只需要建立逻辑连接即可。
B、在嵌入式系统中,调试器与被调试程序一般位于同一台机器上
C、在嵌入式系统开发中,通常采用的是交叉编译器。
D、宿主机与目标机之间的通信方式只有串口和并口两种
3、以下做法不利于嵌入式应用软件的移植的是D。
A)在软件设计上,采用层次化设计和模块化设计
B)在软件体系结构上,在操作系统和应用软件之间引入一个虚拟机层,把一些通用的、共性的操作系统API接口函数封装起来
C)将不可移植的部分局域化,集中在某几个特定的文件之中
D)在数据类型上,尽量直接使用C语言的数据类型
4.如果BootLoader、内核、启动参数以及其他的系统映像四部分在固态存储设备上分别独立存放,则其存储结构的分配顺序应当是(Bootloader、启动参数、内核、文件系统)。
5.BootLoader的stage2通常使用C语言实现,以完成复杂的功能,并增加可读性和可移植性,以下哪一步骤属于stage2的内容:
(D)
A.为加载BootLoader的stage2准备RAM空间
B.设置好堆栈
C.硬件设备初始化
D.将kernel映像和根文件系统映像从flash上读到RAM空间中
6、在Linux2.4或者2.6内核中,和ARM体系结构相关的中断处理程序的C代码在源码树的(arch/arm/kernel/irq.c)文件中
7、下面对于BootLoader的描述不正确的是(C)
A、上电后运行的第一个程序
B、改变系统时钟
C、BootLoader的两种模式对开发人员没有意义
D、向内核传递启动参数
8、(makemenuconfig)命令以文本菜单方式界面配置内核选项。
9、在ARMLinux启动的过程中,开启MMU的时候,如何实现从实地址空间到虚拟地址空间的过度?
D
A、开启MMU,在内存中创建页表(映射内核到3G以上的虚拟地址空间)并继续运行。
B、开启MMU,在内存中创建页表(映射内核到3G以上的虚拟地址空间),跳转到虚拟地址空间继续运行。
C、在内存中创建页表(映射内核到3G以上的虚拟地址空间),开启MMU,跳转到虚拟地址空间继续运行。
D、在内存中创建页表(映射内核到3G以上的虚拟地址空间,同时把内核所在的前1MB空间映射到和其实地址相同的虚拟地址空间),开启MMU,跳转到虚拟地址空间继续运行。
10、下面属于blob运行过程第一阶段的是(C)
A.外围的硬件初始化(串口,USB等);
B.根据用户选择,进入命令行模块或启动kernel。
C.寄存器的初始化
D.堆栈的初始化
11、能在Linux下,用mkfs.jffs2命令创建JFFS2文件系统(基本上是使用JFFS2的Ramdisk),关于mkfs.jffs2下列说法错误的是:
(C)
A.-e选项确定闪存的擦除扇区大小(通常是64千字节)
B.-p选项用来在映像的剩余空间用零填充。
C.-f选项用于输出文件,通常是JFFS2文件系统映像
D.一旦创建了JFFS2文件系统,它就被装入闪存中适当的位置(引导装载程序告知内核查找文件系统的地址)以便内核能挂装它。
12、在ARM系统结构中,MMU映射最大的单元空间是(1M)
13、通过修改下面文件哪个文件,可以设定开机时候自动安装的文件系统(/etc/fstab)
14、嵌入式系统由硬件部分和软件部分构成,以下不属于嵌入式系统软件的是(C)
A、系统内核B、驱动程序C、FPGA编程软件D、嵌入式中间件
15、通过修改文件(/etc/fstab),可以设定开机时候自动安装的文件系统。
第六章
一简答题
1、何为虚拟内存?
虚拟内存的管理有何作用?
使用虚拟地址寻址整个系统的主存和辅存的方式在现代操作系统中被称为虚拟内存。
MMU便是实现虚拟内存的必要条件。
嵌入式处理器如果存在MMU,由于在MMU具备内存地址映射和寻址功能,操作系统会使用它完成从虚拟地址到物理地址的转换,所有的应用程序只需要使用虚拟地址寻址数据。
虚拟内存的管理方法使系统既可以运行体积比物理内存还要大的应用程序,也可以实现“按需调页”策略,既满足了程序的运行速度,又节约了物理内存空间。
2、进程内存区域涉及哪几种数据段?
进程内存区域涉及到5种数据段,即:
1码段:
代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。
②数据段:
数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。
③BSS段:
BSS段包含了程序中未初始化的全局变量,在内存中BSS段全部置零。
④堆:
堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。
当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);
当利用free等函数释放内存时,被释放的内存从堆中被剔除,堆被缩减。
⑤栈:
栈是用户存放程序临时创建的局部变量,也就是说函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。
除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。
3、简述内核空间和用户空间的区别。
在Linux系统中,内核在最高级执行,也称为“系统态”,在这一级任何操作都可以执行。
而应用程序则执行在最低级,即所谓的“用户态”。
在这一级处理器禁止对硬件的直接访问和对内存的未授权访问。
模块是在所谓的“内核空间”中运行的,而应用程序则是在“用户空间”中运行的。
它们分别引用不同的内存映射,也就是程序代码使用不同的“地址空间”。
4、简述共享内存的作用?
共享内存区域是被多个进程共享的一部分物理内存。
如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。
共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。
这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。
但是它不需要在所有进程的虚拟内存中都有相同的虚拟地址。
5、简述内存管理与虚拟文件系统之间的关系。
内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。
当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时挂起当前正在运行的进程。
第七章
1、Linux文件权限一共10位长度,分成四段,第三段表示的内容是(文件所有者所在组的权限)。
2、文件系统的主要功能是A。
A)实现对文件的按名存取 B)实现虚拟存储
C)提高外存的读写速度 D)用于保存系统文档
3、下列文件系统中,采用了inode来标识文件的是(C)
A、NTFSB、FAT16C、FAT32D、Ext3
4、通过文件名存取文件时,文件系统内部的操作过程是通过(D)。
A.文件在目录中查找文件数据存取位置
B.文件名直接找到文件的数据,进行存取操作
C.文件名在目录中查找对应的I节点,通过I节点存取文件数据
D.文件名在中查找对应的超级块,在超级块查找对应i节点,通过i节点存取文件数据
5、Linux将存储设备和输入/输出设备均看做文件来操作,下列选项(C)不是以文件的形式出现。
A.目录B.软链接
C.i节点表D.硬链接
二、编程题
1、用C语言编写一个源程序main.c,实现以下功能。
(1)打开当前目录下的文件“test.txt”,如果没有则创建该文件,并使其具体读写属性。
Voidmain(void)
intfid。
fid=open(“./test.txt”,O_RDWR|O_CREAT)。
if(fid==-1)
Printf(“openorcreateerror\n”)。
exit(0)。
Close(fid)。
(2)编写一个makefile实现自动编译,生成可执行文件main。
objects=main.o
exec=main
all:
$(objects)
gcc–o$(exec)$(objects)
gcc–cmain.c
clean:
rm–r$(e