Linux 内核核心知识热点题分析:10 个连环打通的难点

本文选取了最关键的 10 个 Linux 内核核心面试题,对其背后的原理和结构进行系统分析,帮助读者打通知识点,建立全局连绶。


1. 用户态和内核态如何切换?

  • 基础概念:Linux 分为用户态 (CPL=3)和内核态 (CPL=0)。
  • 切换时机:系统调用(如 read/write/syscall),或者中断触发。
  • 切换过程:CPU trap 进入内核,切换栈、保存环境,执行内核方法,再返回用户态。

2. 内核堆栈和用户堆栈有何区别?

  • 内核堆栈:内核中一个线程一个堆栈,大幅小为 8K/16K,仅用于内核态代码。
  • 用户堆栈:服务于函数归来、存放局部变量,可调整大小。
  • 区别:地址端是独立虚拟内存,作用范围、存储规则不同。

3. 为什么中断不能睡眠?

  • 原因:中断上下文下时不允许阻塞异步操作,如果睡眠会导致死锁或无限等待。
  • 解決:使用 workqueue/tasklet/irqwork 转移到进程上下文解决。

4. kmalloc 与 vmalloc 有何区别?

  • kmalloc 分配级联虚拟地址,并和物理地址对齐,适合 DMA;
  • vmalloc 分配链接虚拟地址,不对齐,用于大块内存。
  • 分别适用于高性能短时任务 vs 大量缓存组织。

5. 什么是内核上下文?

  • 包括 CPU 环境:属于哪个进程,用什么栈,是否加锁,打了什么日志。
  • 上下文是定位和切换问题的核心。

6. 系统调用时是否切换栈?

  • 是,从用户栈 (user stack) 切换到该进程对应的内核栈;
  • CPU 通过\u TSS 或 SP_ELx 直接切换栈指针,确保内核保护和安全。

7. 多线程调度体系如何保证整体性能?

  • 通过优先级,调度策略,如 CFS 等均分配 CPU 时间。
  • 多核下调度 domain 分配分组,保证 CPU 压力均衡。

8. 内核日志应用模型?

  • printk/dev_info/dev_dbg 分级输出,便于分维和分析。
  • 合理配合 loglevel,配合 dmesg/日志系统解析问题。

9. 实现一个 platform 驱动需要哪些环节?

  • 确定 compatible 标签,设计 of_match_table;
  • 定义 probe/remove 函数,在 probe 中定义 devm_xxx 访问资源;
  • 注册 platform_driver ,保证 module_init 被执行。

10. 如何调试 runtime_suspend 是否被调用?

  • 查 power/control = auto,允许自动 suspend;
  • dev_info 打印 runtime_suspend()被调用;
  • 用户可 echo suspend > power/runtime_status 手动触发。

相关推荐
DLYSB_8 小时前
《从零开始搭建机房轻量化“声光告警”系统:基于 HTTP API 与 TTS 的运维实践》
运维·网络协议·http·报警灯
阿成学长_Cain8 小时前
Linux talk 命令详解:经典终端实时聊天工具,无需图形界面即可对话
linux·运维·前端
一拳一个娘娘腔9 小时前
【后渗透-Linux篇】Linux 提权与逃逸:从 www-data到 root的蜕变
linux·运维·服务器
jieyucx9 小时前
零基础通关:Shell 编程核心语法全景详解
linux·运维·编程·shell
杨运交9 小时前
[045][Crypto模块]设计一个可扩展的加解密框架:策略模式与工厂模式实战
linux·运维·策略模式
shx_wei9 小时前
从函数调用到进程替换:使用 execl、CMake 与 PowerShell 构建一个多可执行程序
linux·c语言·windows·c
Dlrb12119 小时前
信息查询Web服务器-->电子商城信息查询项目
linux·服务器·数据库·html·嵌入式·epoll·数据查询
纳兰青华9 小时前
在 PVE 上通过 LXC 部署 Ubuntu 24.04:为 OpenClaw 打造轻量高效的 AI 环境
linux·ai编程
Auv开心10 小时前
Ubuntu 20.04 默认视频播放器(Totem)无法播放 MP4 文件,通常是因为缺少多媒体编解码器。以下是几种解决方法:
linux·ubuntu·音视频