嵌入式常见面试题——操作系统与RTOS篇

张开发
2026/4/16 0:06:02 15 分钟阅读

分享文章

嵌入式常见面试题——操作系统与RTOS篇
1、进程和线程的区别进程是程序的一次执行实例拥有独立的地址空间和系统资源进程间隔离性强、开销大。线程是进程内的执行单元多个线程共享所属进程的资源但各自拥有独立的栈和寄存器状态。线程轻量、通信高效但需同步机制保障安全。2、RTOS与一般操作系统的区别RTOS强调确定性的响应时间确保任务在规定时间内完成实时性而一般操作系统更关注吞吐量和多任务处理。硬实时系统任务必须在严格时间限制内完成任何延迟都不可接受如汽车安全气囊、工业控制。软实时系统任务应尽量在时间限制内完成偶尔延迟可容忍如多媒体播放。3、FreeRTOS是什么有什么特点FreeRTOS是一个开源、轻量级、可裁剪的实时操作系统内核专为资源受限的微控制器设计支持任务管理、调度、同步、通信、内存管理等核心功能。特点开源免费MIT协议社区活跃文档丰富。轻量级最小可裁剪至几KB的RAM和ROM。支持抢占式调度、时间片轮转、协作式调度。提供丰富的任务间通信机制队列、信号量、互斥量、事件组等。支持任务通知Task Notifications等高效通信方式。4、FreeRTOS中任务有哪几种状态任务有4种状态运行态Running当前正在执行的任务。就绪态Ready已准备就绪等待CPU执行。阻塞态Blocked等待某个事件延时、信号量、队列等不占用CPU。挂起态Suspended被挂起的任务不参与调度需显式恢复。5、FreeRTOS支持哪些调度策略FreeRTOS默认支持抢占式调度高优先级任务可随时打断低优先级任务。协作式调度任务主动让出CPU如调用taskYIELD()不支持抢占。时间片轮转相同优先级任务按时间片轮流执行。调度器触发时机系统节拍中断SysTick发生时、任务主动阻塞时、中断中唤醒高优先级任务时、任务删除或优先级变更时。6、什么是死锁如何预防死锁是多个进程/线程互相等待对方释放资源形成循环依赖导致所有任务都无法继续执行。死锁的四个必要条件互斥、持有并等待、不可剥夺、循环等待破坏任一即可预防死锁。预防方法按固定顺序加锁所有任务以相同顺序请求资源。一次性请求所有需要的资源资源一次性分配。使用超时机制在请求锁时设置超时超时则放弃并处理错误。使用银行家算法等动态分配算法。7、信号量Semaphore和互斥锁Mutex的区别互斥锁用于保护共享资源确保一次只有一个任务访问避免数据竞争。具有优先级继承机制防止优先级反转。信号量用于任务间同步和资源管理。分为计数信号量管理多个资源实例和二进制信号量功能类似互斥锁但无优先级继承。核心区别互斥锁用于资源互斥访问有优先级继承机制信号量用于同步和资源计数更灵活。8、什么是优先级反转如何解决优先级反转是指低优先级任务持有资源时阻塞了高优先级任务而中等优先级任务抢占CPU使低优先级任务无法释放资源导致高优先级任务被间接阻塞。解决方案优先级继承持有资源的低优先级任务暂时继承等待它的最高优先级任务的优先级直到释放资源。优先级天花板协议将共享资源的优先级设为系统中可能访问该资源的最高优先级。9、什么是任务切换任务切换时发生了什么任务切换是操作系统将处理器从一个任务切换到另一个任务的过程保存当前任务上下文寄存器、PC、栈指针等到任务栈中。选择下一个要运行的任务按优先级调度算法。从新任务栈中恢复其上下文。执行新任务。10、Linux内核空间和用户空间的通信方式有哪些系统调用、ioctl、netlink、mmap共享内存、管道/命名管道、消息队列、信号、socket。11、Linux内核的内存分配方式有哪些伙伴系统管理物理页框分配大内存通过合并相邻空闲块解决外部碎片。slab/slub/slob基于伙伴系统分配小内存缓存常用内核对象。vmalloc分配虚拟地址连续但物理地址可能不连续的内存。kmem_cacheslab的专用对象缓存池。12、FreeRTOS中任务间通信有哪些方式队列Queue任务间传递数据支持FIFO可阻塞等待。信号量Semaphore任务同步和资源管理二进制信号量、计数信号量、互斥量。事件组Event Groups一个任务等待多个事件支持“与/或”条件。任务通知Task Notifications轻量级、高效的同步方式每个任务自带通知值。消息缓冲区Message Buffer/流缓冲区Stream Buffer用于变长数据传输。

更多文章