1. linux内核里面,内存申请有哪几个函数,各自的区别?
Kmalloc 连续物理内存
vmalloc 虚拟内存连续 物理上非连续
2. IRQ和FIQ有什么区别,在CPU里面是是怎么做的?
Irq 普通中断
FIQ 快速中断 有自己的寄存器,省去寄存器内容存储的时间。
3.
int *a;
char *b;
a 和 b本身是什么类型?
本身应该为无符号长整个型
a、b里面本身存放的只是一个地址,难道是这两个地址有不同么?
只是一个地址,只是指向的内容不同,一个指向整型,一个指令字符串
4. 中断的上半部分和下半部分的问题:
讲下分成上半部分和下半部分的原因,为何要分?讲下如何实现?
5. 内核函数mmap的实现原理,机制?
Mmap函数实现是把一个文件映射到一个内存区域,从而我们可以像读写内存一样读写文件,他比单纯调用read/write也要快上许多。在某些时候我们可以把内存的内容拷贝到一个文件中实现内存备份,当然,也可以把文件的内容映射到内存来恢复某些服务。另外,mmap实现共享内存也是其主要应用之一,mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。
6. 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?
并发(concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共 享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(race conditions)。
解决竞态问题的途径是保证对共享资源的互斥访问,所谓互斥访问就是指一个执行单元 在访问共享资源的时候,其他的执行单元都被禁止访问。
访问共享资源的代码区域被称为临界区,临界区需要以某种互斥机 制加以保护,中断屏蔽,原子操作,自旋锁,和信号量都是linux设备驱动中可采用的互斥途径。
7. spinlock自旋锁是如何实现的?
自旋锁在同一时刻只能被最多一个内核任务持有,所以一个时刻只有一个线程允许存在于临界区中。这点可以应用在多处理机器、或运行在单处理器上的抢占式内核中需要的锁定服务。
8. 任务调度的机制?
9 framebuffer机制?
Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,通过mmap将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节,这些都是由Framebuffer设备驱动来完成的。通过mmap调用把显卡的物理内存空间映射到用户空间