2022年linux内核面试题 .pdf
《2022年linux内核面试题 .pdf》由会员分享,可在线阅读,更多相关《2022年linux内核面试题 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、有关 linux内核面试题1. Linux中主要有哪几种内核锁?Linux 的同步机制从2.0 到 2.6 以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux 从单处理器到对称多处理器的过渡;伴随着从非抢占内核到抢占内核的过度。Linux 的锁机制越来越有效,也越来越复杂。Linux 的内核锁主要是自旋锁和信号量。自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环旋转等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时
2、刻防止多于一个的执行线程同时进入临界区。Linux 中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,另外一些同步机制,包括大内核锁、读写锁、大读者锁、RCU (Read-Copy
3、 Update,顾名思义就是读-拷贝修改 ) ,和顺序锁。2. Linux中的用户模式和内核模式是什么含意?MS-DOS 等操作系统在单一的CPU模式下运行,但是一些类Unix 的操作系统则使用了双模式,可以有效地实现时间共享。在Linux 机器上, CPU要么处于受信任的内核模式,要么处于受限制的用户模式。除了内核本身处于内核模式以外,所有的用户进程都运行在用户模式之中。内核模式的代码可以无限制地访问所有处理器指令集以及全部内存和I/O 空间。如果用户模式的进程要享有此特权,它必须通过系统调用向设备驱动程序或其他内核模式的代码发出请求。另外,用户模式的代码允许发生缺页,而内核模式的代码则不允
4、许。在 2.4 和更早的内核中,仅仅用户模式的进程可以被上下文切换出局,由其他进程抢占。除非发生以下两种情况,否则内核模式代码可以一直独占CPU :(1) 它自愿放弃CPU ;(2) 发生中断或异常。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 2.6 内核引入了内核抢占,大多数内核模式的代码也可以被抢占。3. 怎样申请大块内核内存?在 Linux 内核环境下,申请大块内存的成功率随着系统运行时间的增加而减少,虽然可以通过vm
5、alloc 系列调用申请物理不连续但虚拟地址连续的内存,但毕竟其使用效率不高且在32 位系统上 vmalloc的内存地址空间有限。所以,一般的建议是在系统启动阶段申请大块内存,但是其成功的概率也只是比较高而已,而不是100% 。如果程序真的比较在意这个申请的成功与否,只能退用“启动内存”(Boot Memory )。下面就是申请并导出启动内存的一段示例代码:void* x_bootmem= NULL; EXPORT_SYMBOL(x_bootmem); unsigned long x_bootmem_size= 0; EXPORT_SYMBOL(x_bootmem_size); static
6、int _init x_bootmem_setup(char *str) x_bootmem_size= memparse(str, &str); x_bootmem= alloc_bootmem(x_bootmem_size); printk(Reserved %lu bytes from %p for xn, x_bootmem_size, x_bootmem); return 1; _setup(x-bootmem=, x_bootmem_setup); 可见其应用还是比较简单的,不过利弊总是共生的,它不可避免也有其自身的限制:内存申请代码只能连接进内核,不能在模块中使用。被申请的内存不
7、会被页分配器和slab 分配器所使用和统计,也就是说它处于系统的可见内存之外,即使在将来的某个地方你释放了它。一般用户只会申请一大块内存,如果需要在其上实现复杂的内存管理则需要自己实现。在不允许内存分配失败的场合,通过启动内存预留内存空间将是我们唯一的选择。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 4. 用户进程间通信主要哪几种方式?(1)管道( Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共
8、同祖先的进程之间进行通信。(2)命名管道( named pipe ):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令 mkfifo或系统调用 mkfifo来创建。(3)信号( Signal ):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外, 进程还可以发送信号给进程本身;linux除了支持 Unix 早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一
9、对外接口,用sigaction函数重新实现了signal函数)。(4)消息(Message)队列: 消息队列是消息的链接表,包括 Posix 消息队列 system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺(5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC 形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。(6)信号量( semaphore):主要作为进程间以及同一进程不同线程之间的同步
10、手段。(7)套接字( Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由 Unix 系统的 BSD 分支开发出来的, 但现在一般可以移植到其它类Unix 系统上:Linux 和 System V的变种都支持套接字。5. 通过伙伴系统申请内核内存的函数有哪些?在物理页面管理上实现了基于区的伙伴系统(zone based buddy system )。对不同区的内存使用单独的伙伴系统 (buddy system)管理 , 而且独立地监控空闲页。相应接口alloc_pages(gfp_mask, order) ,_ _get_free_pages(gfp_mask,
11、order)等。补充知识:1. 原理说明名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - Linux 内核中采用了一种同时适用于32 位和 64 位系统的内存分页模型,对于32 位系统来说,两级页表足够用了,而在x86_64 系 统中,用到了四级页表。*页全局目录 (Page Global Directory) *页上级目录 (Page Upper Directory) *页中间目录 (Page Middle Directory)
12、 *页表 (Page Table) 页全局目录包含若干页上级目录的地址,页上级目录又依次包含若干页中间目录的地址,而页中间目录又包含若干页表的地址,每一个页表项指向一个页框。 Linux 中采用 4KB大小的页框作为标准的内存分配单元。多级分页目录结构1.1. 伙伴系统算法在实际应用中,经常需要分配一组连续的页框,而频繁地申请和释放不同大小的连续页框,必然导致在已分配页框的内存块中分散了许多小块的空闲页框。这样,即使这些页框是空闲的,其他需要分配连续页框的应用也很难得到满足。为了避免出现这种情况,Linux 内核中引入了伙伴系统算法(buddy system)。把所有的空闲页框分组为 11 个
13、 块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和 1024 个连续页框的页框块。最大可以申请1024 个连 续页框, 对应 4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。假设要申请一个256 个页框的块, 先从 256 个页框的链表中查找空闲块,如果没有, 就去 512个 页框的链表中找,找到了则将页框块分为2 个 256 个 页框的块,一个分配给应用,另外一个移到 256 个页框的链表中。如果512 个页框的链表中仍没有空闲块,继续向1024 个页框的链表查找,如果仍然没有,则返回错误。页框块在释放时,会主动将两个连续的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年linux内核面试题 2022 linux 内核 试题
限制150内