为了笔试兴唐.docx
- 文档编号:10170816
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:20
- 大小:180.53KB
为了笔试兴唐.docx
《为了笔试兴唐.docx》由会员分享,可在线阅读,更多相关《为了笔试兴唐.docx(20页珍藏版)》请在冰豆网上搜索。
为了笔试兴唐
1)Linux中主要有哪几种内核锁?
自旋锁和信号量
自旋锁最多只能被一个执行线程持有,如一个执行线程试图请求一已被持有的自旋锁,则忙循环。
自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。
可用于中断服务程序。
信号量是一种睡眠锁。
…,信号量会将其推入等待队列,然后睡眠。
信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的。
Linux内核同步机制:
原子操作、信号量、读写信号量、自旋锁、读写锁、顺序锁。
——————/
2)Linux中用户模式和内核模式什么含意?
Linux机器上,CPU要么处于受信任内核模式,要么处于受限制用户模式。
除内核本身处于内核模式以外,所有的用户进程都运行在用户模式之中。
内核模式的代码可以无限制地访问所有处理器指令集以及全部内存和I/O空间。
如果用户模式的进程要享有此特权,它必须通过系统调用向设备驱动程序或其他内核模式的代码发出请求。
——————/
3)怎样申请大块内核内存?
vmalloc线性地址连续,物理地址不连续,不能直接用于dma
kmalloc申请小内存,基于slab实现,slab为分配小内存提供一高效机制
——————/
4)用户进程间通信主要哪几种方式?
管道(亲缘关系)、命名管道(可无亲缘关系进程间通信)、信号、消息队列、共享内存(最快)、信号量(进程间或同一进程不同线程间同步手段)、套接字(不同机器进程间通信)
——————/
5)通过伙伴系统申请内核内存的函数有哪些?
alloc_pages(gfp_mask,order)
__get_free_pages(gfp_mask,order)
——————/
6)通过slab分配器申请内核内存的函数有?
——————/
7)Linux的内核空间和用户空间是如何划分的(以32位系统为例)?
——————/
9)用户程序使用malloc()申请到的内存空间在什么范围?
——————/
10)在支持并使能MMU的系统中,Linux内核和用户程序分别运行在物理地址模式还是虚拟地址模式?
——————/
11)ARM处理器是通过几级页表进行存储空间映射的?
二级,一级页表存储二级页表的指针
——————/
13)Linux虚拟文件系统的关键数据结构有哪些?
(至少写出四个)
structsuper_block;存储一已安装文件系统控制信息
structinode;索引节点对象存储文件相关信息,代表一实际物理文件
structdentry;目录项对象方便查找文件,如/home/dir/中,/、home、dir均是一目录项对象
structfile;建立进程与磁盘文件对应关系,sys_open时创建,sys_close时销毁
——————/
15)Linux中的文件包括哪些?
——————/
16)创建进程的系统调用有那些?
clone()有选择的继承父进程资源
fork()子进程复制父进程资源,运行于独立空间,使用写时复制技术(物理页)
vfork()子进程运行于父进程空间,对任何数据修改父进程都可见,为防止父进程重写子进程,父进程会被阻塞,直到子进程exit()
内核态sys_clone,sys_fork,sys_vfork,三者最终do_fork
——————/
17)调用schedule()进行进程切换的方式有几种?
1.系统调用do_fork();
2.定时中断do_timer();
3.唤醒进程wake_up_process
4.改变进程的调度策略setscheduler();
5.系统调用礼让sys_sched_yield();
——————/
18)Linux调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
——————/
19)进程调度的核心数据结构是哪个?
structrunqueue;
——————/
22)Linux中的浮点运算由应用程序实现还是内核实现?
非在内核进行浮点运算需选上一配置项,严重降低效率
——————/
23)模块程序能否使用可链接的库函数?
模块运行于内核空间,不能链接库函数
——————/
24)TLB中缓存的是什么内容?
translationlookasidebuffer转换旁路缓冲,也称页表缓冲,存放虚拟地址与物理地址对应关系
——————/
26)字符设备驱动程序的关键数据结构是哪个?
——————/
28)如何唯一标识一个设备?
——————/
29)Linux通过什么方式实现系统调用?
x86软中断指令int
———————————————————————————————————/
字符设备块设备区别
字符设备是能够像字节流一样被访问的设备
块设备上能够容纳文件系统
区别仅在于内核及驱动程序之间的软件接口不同
——————/
什么是预编译,何时需要预编译:
预编译又称预处理,是作代码文本的替换工作,如文件包含#include、宏定义、条件编译指令
——————/
char*constp//常量指针
charconst*p;//指向常量的指针
——————/
IRQ和FIQ有什么区别,在CPU里面是是怎么做的?
FIQ:
INTMOD某位设为1,无需经过PRIORITY寄存器
——————/
中断分上半部和下半部分的原因?
如何实现?
中断服务例程一般是在中断请求关闭条件下执行,以避免嵌套而使中断控制复杂化。
但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。
因此,内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟。
因此,内核把中断处理分为两部分:
前半部分(tophalf)和后半部分(bottomhalf),前半部分内核立即执行,而后半部分留着稍后处理。
后半部分运行时是允许中断请求的,而前半部分运行时是关中断的,这是二者之间的主要区别
——————/
#defineSECONDS_PER_YEAR(60*60*24*365)UL
预处理器标识#error的目的是什么?
#error命令是C/C++语言预处理命令之一,当预处理器预处理到#error命令时将停止并输出用户自定义的消息,如#errorSorry,anerrorhasoccurred!
——————/
嵌入式系统中经常要用到无限循环
while
(1){}
for(;;){}
Loop:
...
gotoLoop;
——————/
一个指向有10个整型数数组的指针int(*a)[10]
一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
int(*a[10])(int)
——————/const关键字
只要一听到被面试者说:
“const意味着常数”,我就知道我正在和一个业余者打交道
——————/volatile
变量值可能被意想不到地改变
在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
例子:
1).并行设备的硬件寄存器(如:
状态寄存器)
2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables非自动变量指的是全局变量或声明为static的局部变量。
是存储在静态存储区中的)
3).多线程应用中被几个任务共享的变量
这是区分C程序员和嵌入式系统程序员的最基本的问题
一个指针可以是volatile吗?
为什么?
可以,如多线程中
下面的函数有什么错误:
intsquare(volatileint*ptr)
{
return*ptr**ptr;
}
等价于
intsquare(volatileint*ptr)
{
inta,b;
a=*ptr;
b=*ptr;
returna*b;
}
由于ptr值可能被意想不到地该变,因此a和b可能是不同的,结果,事与愿违
longsquare(volatileint*ptr)
{
inta;
a=*ptr;
returna*a;
}
——————/
位操作使用宏,|=和&=~操作
裸机中断服务程序中:
doublearea=PI*radius*radius;
printf("Area=%f",area);错误,因
浮点一般都是不可重入的,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。
printf()经常有重入和性能上的问题
可重入代码指可被多个函数或程序凋用的一段代码(通常是一个函数),且保证被任何一函数调用时都以同样方式运行
voidtest()可重入
{
inti;static不可重入
i=2;
printf("%d\n",i);
i++;
printf("%d\n",i);
}
——————/
unsignedinta=6;
intb=-20;
(a+b>6)?
puts(">6"):
puts("<=6");//输出>6
当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型,因此-20变成一个非常大正整
——————/
评价代码片断:
unsignedintzero=0;
unsignedintcompzero=0xFFFF;
对于一int型不是16位的处理器来说,上面的代码是不正确的,应:
unsignedintcompzero=~0;
——————/
嵌入式系统中,动态分配内存可能发生的问题是什么?
期望应试者能提到内存碎片,碎片收集的问题
char*ptr;
if((ptr=(char*)malloc(0))==NULL)
puts("null");
else
puts("valid");//valid
——————/
#definedPSstructs*
typedefstructs*tPS;//该法更好
因dPSp1,p2;
——————/
inta=5,b=7,c;
c=a+++b;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 为了 笔试