菜鸟笔记
提升您的技术认知

面试题

实现一个LRU Cache 算法LRU Cache C++三种解法java实现LRU算法及编码实现LRU策略缓存LRU算法常见缓存算法和LRU的c++实现设计循环双端队列(deque)LRU 缓存结构 (c++ 哈希双链表实现)LRU缓存机制删除单链表中的指定节点Linux 内核经典面试题拼多多社招面经:Redis是重点,讲一讲redis的内存模型线程、进程、协程的区别C++经典面试题面试官:我们只想要这样的C++工程师Linux C/C++ 学习路线链表操作汇总C++11的智能指针面试题浏览器中输入url后发生的事情常用的限流算法HTTP协议和HTTPS协议面试题网络编程面试题目总结c++后台面试题目如何实现LRU算法?如何寻找无序数组中的第K大元素?布隆过滤器 - 如何在100个亿URL中快速判断某URL是否存在?如何实现大整数相加?C++面试题及基本知识点总结C++给定出栈序列判定是否合法消息队列面试题要点redis缓存击穿,失效以及热点key解决方案网页在浏览器上的渲染过程几种限流算法lru算法例题C/C++常见面试知识点总结附面试真题----20210529更新引入MQ消息队列的作用及其优缺点MySQL面试篇社招三年后端面试题60道测开面试题,背完直接涨工资二叉树的层序遍历(两种方法实现)Bitmap 海量数据处理字符串倒序输出的五种方法C语言 输入10个数,统计出并输出正数、负数和0的个数字节三面:如何设计一个高并发系统架构,网络 面试36问,DDos攻击原理C++线程池使用 C++11 编写可复用多线程任务池

Linux 内核经典面试题

阅读 : 3913

0x00 题目总览
主要有哪几种内核锁?Linux 内核的同步机制是什么?
Linux 中的用户模式和内核模式是什么含义?
怎么申请大块内存?vmalloc 和 kmalloc 有什么区别?
进程间通信主要有哪几种方式?
伙伴系统申请内存的函数有哪些?
通过 slab 分配器申请内存的函数有哪些?
Linux 的内核空间和用户空间如何划分的?进程地址空间布局图?
vmalloc() 申请内存有什么特点?
用户程序使用 malloc() 申请的内存空间在什么范围?
在支持并使能 MMU 的系统中,Linux 内核和用于程序分别运行在物理地址模式还是虚拟地址模式?
ARM 处理器是通过几级页表进行存储空间映射的?
Linux 是通过什么组件来实现支持多种文件系统的?
Linux虚拟文件系统的关键数据结构有哪些?(至少写出4个)
对文件系统的操作函数保存在哪个数据结构中?
Linux 中的文件包括哪些?
创建进程的系统调用有哪些?
调用 schedule() 进行进程切换的方式有几种?
Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
进程调度的核心数据结构是哪个?
如何加载、卸载一个模块?
模块和应用程序分别运行在什么空间?
Linux 中的浮点运算由应用程序实现还是内核实现?
模块程序能否使用可链接的库函数?
TLB 中缓存的是什么内容
Linux 中有哪几种设备?
字符设备驱动程序的关键数据结构是哪个?
设备驱动程序包括哪些功能函数?
如何唯一标识一个设备?
Linux 通过什么方式实现系统调用?
Linux 软中断和工作队列的作用是什么?
0x01 答案
1. 主要有哪几种内核锁?Linux 内核的同步机制是什么?
自旋锁:spin_lock 忙等,中断中使用

信号量:semxxx down/up write/read

mutex:初始化为1的信号量

读写锁,RCU(read-copy update)

  1. Linux 中的用户模式和内核模式是什么含义?
    cpu mode,用户模式只能通过系统调用操作硬件资源,内核模式可以直接操作硬件资源

  2. 怎么申请大块内存?vmalloc 和 kmalloc 有什么区别?
    vmalloc 用于申请大块内存,虚拟地址连续,物理地址不一定连续,不能直接用于DMA,在进程地址空间有专门的一块。

kmalloc 用于申请小内存,由 slab 管理实现,一般至少小于4KB(page)。不能申请大于128K的数据。物理地址和虚拟地址都连续,可用于DMA操作。

  1. 进程间通信主要有哪几种方式?
    管道:两个进程需要有共同的祖先,pipe/popen

命名管道:两个进程可以无关

信号

消息队列

共享内存

信号量

套接字

Android:binder/ashmem

  1. 伙伴系统申请内存的函数有哪些?
    alloc_page(gfp_mask, order)

__get_free_pages(gfp_mask, order)

  1. 通过 slab 分配器申请内存的函数有哪些?
    自己构造对象:kmem_cache_create/kmem_cache_alloc

普通匿名内存申请:kmalloc

  1. Linux 的内核空间和用户空间如何划分的?进程地址空间布局图?
    32位可配置3G/1G, 2G/2G,一般是两级页表

64位可配置几级页表,一般可选3级/4级页表,256G/256G,或512T/512T

  1. vmalloc() 申请内存有什么特点?
    申请大块内存,虚拟地址连续,物理地址不一定连续,不能直接用于DMA。对于释放函数 vfree()。

  2. 用户程序使用 malloc() 申请的内存空间在什么范围?
    stack 和 heap 中间。小于128M的通过brk申请,大于的通过 mmap 申请。

  3. 在支持并使能 MMU 的系统中,Linux 内核和用于程序分别运行在物理地址模式还是虚拟地址模式?
    都运行在虚拟地址模式,页表转换对应由硬件单元MMU完成。

  4. ARM 处理器是通过几级页表进行存储空间映射的?
    两级页表,PGD和PTE

  5. Linux 是通过什么组件来实现支持多种文件系统的?
    VFS(virtual file system)

  6. Linux虚拟文件系统的关键数据结构有哪些?(至少写出4个)
    super_block超级块

inode索引节点

dentry目录项

file文件

  1. 对文件系统的操作函数保存在哪个数据结构中?
    struct file_operations

  2. Linux 中的文件包括哪些?
    可执行文件,普通文件,目录文件,链接文件,设备文件,管道文件

  3. 创建进程的系统调用有哪些?
    clone, fork, vfork

  4. 调用 schedule() 进行进程切换的方式有几种?
    do_fork/do_timer/wake_up_process/setscheduler/sys_sched_yield

  5. Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
    cfs 会计算虚拟时间,还有一个计算出来的优先级。

实时进程根据xx

  1. 进程调度的核心数据结构是哪个?
    struct runqueue

  2. 如何加载、卸载一个模块?
    ismod, rmmod

  3. 模块和应用程序分别运行在什么空间?
    模块运行在内核空间,应用程序运行在用户空间

  4. Linux 中的浮点运算由应用程序实现还是内核实现?
    由应用程序实现,对应的数学库函数。

  5. 模块程序能否使用可链接的库函数?
    module 运行在内核空间,不能链接库函数。

  6. TLB 中缓存的是什么内容
    translation lookaside buffer, 也叫快表,用作页表缓冲。记录虚拟地址和物理地址的对应关系,用于加快地址转换。

  7. Linux 中有哪几种设备?
    字符设备和块设备

  8. 字符设备驱动程序的关键数据结构是哪个?
    struct cdev: kobject

cdev_alloc()

cdev_add()

  1. 设备驱动程序包括哪些功能函数?
    open/read/write/ioctl/release/llseek

  2. 如何唯一标识一个设备?
    主设备号和次设备号。dev_t,12位表示主设备号,20位表示次设备号。

MKDEV(int major, int minor)用于生产一个 dev_t 类型的对象。

  1. Linux 通过什么方式实现系统调用?
    软件中断。系统调用编号,异常处理程序

  2. Linux 软中断和工作队列的作用是什么?
    软中断:不可睡眠阻塞,处于中断上下文,不能进程切换,不能被自己打断。

工作队列:处理进程上下文中,可以睡眠阻塞。