【面试】【android驱动开发】

2019-07-13 08:38发布

1、字符设备和块设备的区别 字符设备是以字节为单位进行数据读写,只支持顺序读写,不支持随机读写。 块设备是以块为单位进行数据读写,支持随机读写。 还有他们的结构体、接口和注册方式都有所不同。 具体详见:https://blog.csdn.net/bonnshore/article/details/7860997   2、内核空间和用户空间的区别、他们的通信方式有哪些? 2.1区别 优先级:内核空间的优先级高于用户空间 效率:内核空间运行效率高于用户空间 内存分区:内核空间在内存上的分区属于是高端内核,用户空间属于普通内存。内核空间供所有运行在内核上的进程所共享,所以才有内核调用实际上是直接调用相关接口完成 存储内容:内核空间存储的是内核相关进程和数据,用户空间存储的是用户程序,比如shell脚本 2.2通信方式 系统接口,copy_to_usercopy_from_user proc文件系统 sysfs文件系统 mmap将内核空间映射到用户空间 信号 具体详见:https://www.cnblogs.com/dchipnau/p/5043591.html 3、linux内存如何划分以及如何使用?虚拟地址及物理地址的概念以及转换,高端内存的概念。 内存物理上分段可以分为DMA、NORMAL、HIGH三段,内存在linux中划分为物理空间和内核空间 物理地址:在内存芯片引脚的地址 虚拟地址:CPU到MMU的地址,即虚拟地址。虚拟地址经过MMU转换成物理地址,然后访问具体的内存。 物理地址和虚拟地址的关系:虚拟地址 =  物理地址+偏移量 高端内存主要是用于在32位系统上分配较大的空间,地址映射不能访问全部的物理内存,所以提出了高端内存的概念,即借用高端内存进行映射,用完之后释放掉,然后可以循环使用。 具体详见:http://ilinuxkernel.com/?p=1013 4、linux中断实现机制、tasklet和workqueue的区别和底层实现的区别,为什么要区分中断上半部和中断下半部。 linux内核中断分为上下两个部分,目的是为了在快速响应和处理大量任务之间获得平衡,中断的上半部是不可中断的,但是下半部是可中断的。 中断下半部主要实现方式包含tasklet和workqueue tasklet一般用于中断上下文被调用运行,但是tasklet不会累积,也就是说多次调用只会执行一次,一般用于较短时间内的中断下半部。 workqueue一般用于进程上下文被调用,可以休眠,一般可以用于执行较长时间的中断下半部。 5、linux中断响应的执行流程 一般总结就是关中断保护线程进入中断处理程序------》处理中断服务程序------》恢复线程继续执行下一个指令 6、linux的同步机制,spinlock和信号量的区别 同步机制包含原子操作、自旋锁、信号量 自旋锁同时只允许一个任务来访问临界区,通过自旋来代替休眠,一般用于较短的临界区 信号量允许多个任务访问临界区,适用于较长的共享区,允许睡眠,将信号量设置为1则为互斥锁。