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则为互斥锁。