嵌入式软件开发面试题(一)

1. gcc 的编译过程:
预处理:提前处理以“#”开头的语句,之后生成 .i文件;
编译:检查程序的语法错误,之后生成汇编文件,即.s文件;
汇编:将汇编文件转换成机器语言,二进制文件,生成.o文件;
链接:将所有目标文件打包链接成一个可执行文件;
2. Linux中的进程状态有哪些?
可执行状态,可中断状态,不可中断状态,停止状态,终止状态
3. 什么是死锁?产生死锁的原因?
死锁:它是指多个进程因争夺资源而造成的一种僵局状态,当进程处于这种状态时,若无外力作用,它们都将无法向前推进。
原因:(1)竞争资源(2)进程间推进顺序非法
4. 产生死锁的条件?
互斥条件,请求和保持条件,不剥夺条件,环路等待条件
(1)互斥条件:在一段时间内某资源仅为一进程所占用。
(2)请求和保持条件:进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:对于进程已获得的资源,在未使用完前不能剥夺,只能在使用完后由自己释放。
(4)环路等待条件:在发送死锁时,必然存在一个进程-资源环形链。
5.Linux驱动程序的功能?分类?
功能:主要完成设备的初始化和释放,进行外部数据和操作系统的通信和数据交互,控制硬件的行为,检查设备可能出现的故障并报错。
分类:字符设备(鼠标,键盘),块设备(磁盘),网络设备
6.什么是同步,什么是异步?同步I/O和异步I/O的区别?
同步:在发出一个功能调用时,但未得到结果之前,该调用就不返回。
异步:在过程调用发出后,调用者不能立刻得到结果,处理这个调用的部件在完成后,通过状态,通知和回调来通知调用者。
区别:同步和异步来自Linux内核态和用户态的切换,通常I/O来自网络(或文件,设备)。
完成I/O操作分两步,发起请求和执行。当请求被阻塞时,为同步I/O,否则为异步I/O。同步I/O进程需要等待I/O执行完毕,异步I/O在I/O执行时,进程可以继续执行,不陷入阻塞。
7.内核程序中申请内存使用什么函数?
使用kmalloc(),kzalloc(), vmalloc(), alloc_page()等函数。
8.什么是优先级翻转?如何避免优先级翻转?
(1)它是指中等优先级任务比高等优先级任务先执行。
(2)它的主要原因是对共享资源的访问产生了互斥,可采用带有优先级继承机制的互斥量来避免这种情况。
9.select和epoll的区别?
(1)select的时间复杂度为O(n),仅知道有I/O事件发生了,却不知道是哪几个流,所以需要无差别轮询所有流,找出能读出数据或写入数据的流,对其进行操作,处理的流越多,轮询时间就越长。
(2)epoll的时间复杂度为O(1),它会把哪个流发生了怎样的I/O事件通知我们,所以它实际上是事件驱动的,此时我们对这些流的操作都是有意义的。

你可能感兴趣的:(嵌入式硬件,linux,面试)