订阅
佳的美电子科技有限公司
清远 · 电子/半导体/集成电路 · 100-499人

面试经历

1条面经
“有难度”
“体验一般”
匿名用户
soc研发
确定通过确定通过
1. linux内核里面,内存申请有哪几个函数,各自的区别? Kmalloc() __get_free_page() mempool_create() 2. IRQ和FIQ有什么区别,在CPU里面是是怎么做的? 3. int *a; char *b; a 和 b本身是什么类型? a、b里面本身存放的只是一个地址,难道是这两个地址有不同么? 4. 中断的上半部分和下半部分的问题: 讲下分成上半部分和下半部分的原因,为何要分?讲下如何实现? 上半部分执行与硬件相关的处理要求快, 而有些驱动在中断处理程序中又需要完成大量工作,这构成矛盾,所以Linux有所谓的bottom half机制,中断处理程序中所有不要求立即完成的,在开中断的环境下,由底半程序随后完成. Linux的底半处理实际上是建立在内核的软中断机制上的. Linux 的底半 机制主要有Tasklet 和 work queue 以及 softirq ( 2.4内核则有BH , Task queue , softirq , tasklet 没有work queue),其实底半可以理解成一种工作的延迟。所以实际使用时跟timer机制基本上一个意思。 5. 内核函数mmap的实现原理,机制? mmap函数实现把一个文件映射到一个内存区域,从而我们可以像读写内存一样读写文件,他比单纯调用read/write也要快上许多。在某些时候我们可以把内存的内容拷贝到一个文件中实现内存备份,当然,也可以把文件的内容映射到内存来恢复某些服务。另外,mmap实现共享内存也是其主要应用之一,mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。 6. 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子? 7. spinlock自旋锁是如何实现的? 自旋锁在同一时刻只能被最多一个内核任务持有,所以一个时刻只有一个线程允许存在于临界区中。这点可以应用在多处理机器、或运行在单处理器上的抢占式内核中需要的锁定服务。...查看更多
包含1个问题,0个回答
Q:1. linux内核里面,内存申请有哪几个函数,各自的区别? Kmalloc() __get_free_page() mempool_create() 2. IRQ和FIQ有什么区别,在CPU里面是是怎么做的? 3. int *a; char *b; a 和 b本身是什么类型? a、b里面本身存放的只是一个地址,难道是这两个地址有不同么? 4. 中断的上半部分和下半部分的问题: 讲下分成上半部分和下半部分的原因,为何要分?讲下如何实现? 上半部分执行与硬件相关的处理要求快, 而有些驱动在中断处理程序中又需要完成大量工作,这构成矛盾,所以Linux有所谓的bottom half机制,中断处理程序中所有不要求立即完成的,在开中断的环境下,由底半程序随后完成. Linux的底半处理实际上是建立在内核的软中断机制上的. Linux 的底半 机制主要有Tasklet 和 work queue 以及 softirq ( 2.4内核则有BH , Task queue , softirq , tasklet 没有work queue),其实底半可以理解成一种工作的延迟。所以实际使用时跟timer机制基本上一个意思。 5. 内核函数mmap的实现原理,