经典面试题-Linux Kernel面试题

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈

目录

一、经典题目

1、主要有哪几种内核锁?Linux 内核的同步机制是什么?

原子变量
spinlock 自旋锁

信号量semaphore、二值信号量
互斥体mutex

禁止强制、禁止软中断、禁止硬中断
每处理器变量、每处理器计数器、内存屏障

RCU

2、Linux 中的用户模式和内核模式是什么含义?

执行在EL0的用户程序,每个用户程序都有自己的虚拟地址空间
执行在EL1的kernel程序,整个kernel程序使用一个虚拟地址空间

3、怎么申请大块内存?vmalloc 和 kmalloc 有什么区别?
  • vmalloc 用于申请大块内存,虚拟地址连续,物理地址不一定连续,不能直接用于DMA,在进程地址空间有专门的一块。
  • kmalloc 用于申请小内存,由 slab 管理实现,一般至少小于4KB(page)。不能申请大于128K的数据。物理地址和虚拟地址都连续,可用于DMA操作。
4、进程间通信主要有哪几种方式?
  • 管道(Pipe)
  • 命名管道(named pipe)
  • 信号(Signal)
  • 消息(Message)队列
  • 共享内存
  • 信号量(semaphore)
  • 套接字(Socket)
5、伙伴系统申请内存的函数有哪些?
  • alloc_page(gfp_mask, order)
  • __get_free_pages(gfp_mask, order)
6、通过 slab 分配器申请内存的函数有哪些?
  • 自己构造对象:kmem_cache_create/kmem_cache_alloc
  • 普通匿名内存申请:kmalloc
7、Linux 的内核空间和用户空间如何划分的?进程地址空间布局图?
8、vmalloc() 申请内存有什么特点?

申请大块内存,虚拟地址连续,物理地址不一定连续,不能直接用于DMA。对于释放函数 vfree()。

9、用户程序使用 malloc() 申请的内存空间在什么范围?

stack 和 heap 中间。小于128M的通过brk申请,大于的通过 mmap 申请

10、在支持并使能 MMU 的系统中,Linux 内核和用户程序分别运行在物理地址模式还是虚拟地址模式?

在开启MMU之后,用户程序和内核程序,都是使用的虚拟地址

11、ARM 处理器是通过几级页表进行存储空间映射的?

L3 L2 L1 L0 L-1
要看你的系统的granue size和虚拟地址有效位的配置

12、Linux 是通过什么组件来实现支持多种文件系统的?

VFS(virtual file system)

13、Linux虚拟文件系统的关键数据结构有哪些?(至少写出4个)

struct super_blockstruct inodestruct filestruct dentry

14、对文件系统的操作函数保存在哪个数据结构中?

struct file_operations

15、Linux 中的文件包括哪些?
  • 执行文
  • 普通文
  • 目录文
  • 链接文件
  • 设备文件
  • 管道文件
16、创建进程的系统调用有哪些?
  • clone()
  • fork()
  • vfork();

系统调用服务例程:

  • sys_clone
  • sys_fork
  • sys_vfork;
17、调用 schedule() 进行进程切换的方式有几种?
  • 系统调用 do_fork();
  • 定时中断 do_timer();
  • 唤醒进程 wake_up_process
  • 改变进程的调度策略 setscheduler();
  • 系统调用礼让 sys_sched_yield();
18、Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?

Liunx调度程序是根据根据进程的动态优先级来调度进程的,但是动态优先级又是根据静态优先级根据算法计算出来的,两者是两个相关联的值。因为高优先级的进程总是比低优先级的进程先被调度,为防止多个高优先级的进程占用CPU资源,导致其他进程不能占有CPU,所以引用动态优先级概念

19、进程调度的核心数据结构是哪个?

TODO

20、如何加载、卸载一个模块?

insmod xxx.ko
rmmod xxx

21、模块和应用程序分别运行在什么空间?

模块: 内核空间
应用程序: 用户空间

22、Linux 中的浮点运算由应用程序实现还是内核实现?

内核也可以实现,VFPV4架构的,V0-V31寄存器

23、模块程序能否使用可链接的库函数?

模块程序运行在内核空间,不能链接库函数。

24、TLB 中缓存的是什么内容

ASID,物理地址,虚拟地址,NS比特位,MESI位等

25、Linux 中有哪几种设备?
  • 字符设备
  • 块设备
  • 网络设备
26、字符设备驱动程序的关键数据结构是哪个?

字符设备描述符struct cdevcdev_alloc()用于动态的分配cdev描述符,cdev_add()用于注册一个cdev描述符,cdev包含一个struct kobject类型的数据结构它是核心的数据结构

27、设备驱动程序包括哪些功能函数?

open(),read()write()llseek()realse()

28、如何唯一标识一个设备?

Linux使用一个设备编号来唯一的标示一个设备,设备编号分为:主设备号和次设备号,一般主设备号标示设备对应的驱动程序,次设备号对应设备文件指向的设备,在内核中使用dev_t来表示设备编号,一般它是32位长度,其中12位用于表示主设备号,20位用于表示次设备号,利用MKDEV(int major,int minor);用于生成一个dev_t类型的对象。

29、Linux 通过什么方式实现系统调用?

syscall,底层调用到svc同步异常指令

30、Linux 软中断和工作队列的作用是什么?

实现中断下半部分

二、带补充

volilate 作用
信号量和互斥体的区别

三、灵魂的一问

linux kernel你都熟悉什么?
讲一讲中断机制?
讲一讲同步机制?
讲一讲MMU/CACHE?

三、安全相关

optee os你知道什么?
讲一讲sharememrory
讲一讲secureboot
安全算法都有哪些?
Linux Kernel掌握怎样
微内核的 IPC通信怎么实现的
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值