← 返回面试学习首页返回博客主页 →

Module 02 / system coordination

从任务调度到系统边界

FreeRTOS 处理资源受限 MCU 上的任务协作;Linux 通过用户态、系统调用和驱动管理更完整的系统资源。面试重点是明确两者的边界与取舍。

  • Task · Priority
  • Queue · Semaphore
  • ISR to Task
  • syscall · /dev · driver

任务与调度

先解释调度器选择谁运行,再讨论任务优先级、周期与实时性;不要将“高优先级”误解为永远占用 CPU。

SCHEDULER

优先级与阻塞

就绪态任务由调度器选择执行;延时、等待队列或信号量的任务处于阻塞态,不应持续轮询占用 CPU。

High
Control
Ready
Queue
  • 用任务周期和截止期解释优先级。
  • 区分抢占调度与时间片轮转。
MUTEX

优先级反转

低优先级任务持有锁时,高优先级任务会阻塞;中优先级任务若持续运行,会放大高优先级任务的等待。

Low
holds lock
High
blocked
  • 互斥锁可使用优先级继承。
  • 不要把所有同步都替换成 mutex。
TIMING

周期与抖动

控制任务关注实际唤醒时间、执行时间和最坏情况延迟。日志输出或复杂计算应避免阻塞关键闭环。

Tick / Timer
Control
Task
  • 通过 trace 或 GPIO 翻转测量抖动。
  • 关注优先级与临界区长度。

同步与数据通信

回答时先说明“传数据”还是“通知事件”,再选择队列、信号量、事件组或通知机制。

ISR采集外设事件,不做耗时处理。
QUEUE传递数据或数据指针,处理满队列策略。
TASK在任务上下文解析、计算或记录。
ACTUATOR输出控制结果并监测异常。

Linux 系统边界

Linux 用户态程序不是直接操作硬件,而是通过库、系统调用、设备文件或专用框架进入内核驱动。

USER SPACE

进程与接口

应用负责业务、数据处理和错误处理;调用 open/read/write/ioctl 或系统库接口请求内核提供服务。

  • 查看返回值、errno 和超时策略。
  • 用日志定位应用层状态机。
KERNEL

驱动与总线

驱动对接 I²C、SPI、UART、GPIO 或网络控制器,并向用户态暴露设备节点、sysfs 或专用 API。

  • 理解设备树、驱动匹配与 probe。
  • 区分内核日志和用户态日志。
DEBUG

分层排错

从应用参数、系统调用、驱动日志到电气波形逐层缩小范围,避免一开始把问题归因于“驱动坏了”。

  • 先确认设备是否枚举和节点权限。
  • 再检查总线地址、时序与供电。

Interview drills

高频追问

队列、信号量和事件组各适合什么?

队列主要传数据;信号量侧重同步或资源计数;事件组表达多个独立标志位。回答要补充任务/ISR 使用限制和超时处理。

Linux 应用读设备文件失败,如何定位?

依次确认设备枚举、节点与权限、应用参数和返回值、内核日志、驱动状态,最后再检查硬件连接与总线波形。