面试中提问的专业问题时间约一个半小时多,我能想起来的被问到的问题:
page fault的过程,详细讲(主要是linux内核中do_page_fault和do_pte_fault两个函数的执行过程,基本希望你能完整地背一遍出来,重点是copy on write和paging on demand,这个比较汗,因为完整的过程太长了)
elf的section和segment
一个elf被loader加载时的过程(一个文件从你在命令行上打出来回车,到完全跑起来,都经历了哪些步骤)
一个elf文件刚加载完时地址空间里有什么
do_brk是干什么的,内核如何管理heap
dcache用来做什么
如何发起系统调用?或者说如何陷入内核(回答时得注意vdso机制)
linux用户态的memory layout(有两种方案)
关于kobject的建立
内核的各种同步机制,在什么情境下用,用spinlock的时候都可以用mutex替代么?
rcu锁机制的原理,什么情景下适合用。
linux里,一个elf文件被加载到虚拟地址空间后起始地址是什么(0x8048000),选这个地址有什么原因么,这个地址能不能改(先导出 link script后改link script或者linker的某个啥参数)
与elf文件内存映像有关的其他一些问题(总之在linker & loader那书里都有)
x86里指令和数据cache是分开的么
ilp和tlp相关的一些问题
vivt和vipt cache的特点,优缺点
什么场合下需要冲洗tlb,什么场合下需要冲洗cache
关于memory barrier的问题,内核中的各种屏障(这个我答得不好,因为我现在仍然不明白这些)
smp中的总线监听协议,保证同步的方法
numa是啥,
(以上的读《现代体系结构上的unix:内核程序员的smp和caching技术》就行,或者其他一些体系结构的书)
其他一些风格的os内核,比如什么是第二代微内核系统(l4::pistachio之流),有什么特点(一大堆,非常快速的ipc之类),为什么需要设计成这样做过的项目相关的问题,这个因人而异了
问题绝对不止以上这些,但过去的时间太长,多数我想不起来了。面试过程中不涉及任何对英语能力的考察。要求回答得非常非常详细,很注重细节。
面试感受:很好;面试难度:困难;面试来源:网络招聘
共1个问题,1条回答
Q:问的很多也很全,诸如
一个elf文件刚加载完时地址空间里有什么
do_brk是干什么的,内核如何管理heap
dcache用来做什么