【面试】【android驱动开发】

一、字符设备和块设备的区别html

字符设备是以字节为单位进行数据读写,只支持顺序读写,不支持随机读写。linux

块设备是以块为单位进行数据读写,支持随机读写。shell

还有他们的结构体、接口和注册方式都有所不一样。.net

具体详见:https://blog.csdn.net/bonnshore/article/details/7860997线程

 

二、内核空间和用户空间的区别、他们的通讯方式有哪些?3d

2.1区别htm

优先级:内核空间的优先级高于用户空间blog

效率:内核空间运行效率高于用户空间接口

内存分区:内核空间在内存上的分区属因而高端内核,用户空间属于普通内存。内核空间供全部运行在内核上的进程所共享,因此才有内核调用其实是直接调用相关接口完成进程

存储内容:内核空间存储的是内核相关进程和数据,用户空间存储的是用户程序,好比shell脚本

2.2通讯方式

系统接口,copy_to_user\copy_from_user

proc文件系统

sysfs文件系统

mmap将内核空间映射到用户空间

信号

具体详见:http://www.noobyard.com/article/p-rbpazhwk-bo.html

三、linux内存如何划分以及如何使用?虚拟地址及物理地址的概念以及转换,高端内存的概念。

内存物理上分段能够分为DMA、NORMAL、HIGH三段,内存在linux中划分为物理空间和内核空间

物理地址:在内存芯片引脚的地址

虚拟地址:CPU到MMU的地址,即虚拟地址。虚拟地址通过MMU转换成物理地址,而后访问具体的内存。

物理地址和虚拟地址的关系:虚拟地址 =  物理地址+偏移量

高端内存主要是用于在32位系统上分配较大的空间,地址映射不能访问所有的物理内存,因此提出了高端内存的概念,即借用高端内存进行映射,用完以后释放掉,而后能够循环使用。

具体详见:http://ilinuxkernel.com/?p=1013

四、linux中断实现机制、tasklet和workqueue的区别和底层实现的区别,为何要区分中断上半部和中断下半部。

linux内核中断分为上下两个部分,目的是为了在快速响应和处理大量任务之间得到平衡,中断的上半部是不可中断的,可是下半部是可中断的。

中断下半部主要实现方式包含tasklet和workqueue

tasklet通常用于中断上下文被调用运行,可是tasklet不会累积,也就是说屡次调用只会执行一次,通常用于较短期内的中断下半部。

workqueue通常用于进程上下文被调用,能够休眠,通常能够用于执行较长时间的中断下半部。

五、linux中断响应的执行流程

通常总结就是关中断保护线程进入中断处理程序------》处理中断服务程序------》恢复线程继续执行下一个指令

六、linux的同步机制,spinlock和信号量的区别

同步机制包含原子操做、自旋锁、信号量

自旋锁同时只容许一个任务来访问临界区,经过自旋来代替休眠,通常用于较短的临界区

信号量容许多个任务访问临界区,适用于较长的共享区,容许睡眠,将信号量设置为1则为互斥锁。