RTOS经典问题
- Fang XS.
- 1452512966@qq.com
- 如果有错误,希望被指出,学习技术的路难免会磕磕绊绊
- 量的积累引起质的变化
欢迎纠错,指正,增加,改进;互相学习;
问题汇总
- 以FreeRTOS为例
- 什么是优先级反转?
优先级反转是指一个低优先级的任务持有一个共享资源,导致高优先级任务被阻塞的现象。 - 优先级反转的解决方案是什么?
优先级反转的解决方案包括优先级继承、以及使用互斥锁等机制。 - 什么是优先级继承?
优先级继承是一种解决优先级反转问题的方法,通过将低优先级任务的优先级提升到高优先级任务的水平,以确保高优先级任务能够及时执行。 - 什么是优先级上限?
优先级上限是为了防止优先级反转,限制任务的优先级不能无限制地提升。 - 什么是死锁?
死锁是指两个或多个任务相互等待对方释放资源,从而导致所有任务都无法继续执行的状态。 - 什么是著名的食客的问题?
著名的餐宴者问题是一个经典的同步问题,描述多个进程在使用共享资源(如餐具)时可能发生死锁或饥饿的情况。 - 什么是互斥量?
互斥量是一种同步机制,用于确保在任意时刻只有一个任务可以访问共享资源。 - 什么是自旋锁?
自旋锁是一种通过持续检测锁是否可用的方式(非阻塞的死等),避免任务被阻塞的同步机制。 - 自旋锁在哪里使用?
自旋锁通常在临界区很短的情况下使用即短期持有,以避免任务在等待期间被切换出去。 - 原子操作是什么意思?
原子操作是一种不可中断的操作,要么完全执行,要么完全不执行,不会被其他任务中断。 - 什么是信号量?
信号量是一种用于控制对共享资源访问的同步机制,通常用于解决生产者-消费者问题等。 - 信号量有哪些类型?
信号量有计数信号量和二进制信号量两种类型。 - 什么是二进制信号量?
二进制信号量在只有两种状态(0和1)的情况下使用,类似于互斥锁。 - 什么是计数信号量?
计数信号量可以有多个状态,通常用于控制对多个相同资源的访问。 - 什么是消息队列?
消息队列是一种进程间通信的方式,通过将消息发送到队列中实现不同任务之间的通信。 - 调度程序的作用是什么?它是如何运作的?
调度程序的作用是决定哪个任务在某个时刻执行,它通过任务的优先级和调度算法来进行决策。 - 普通OS和RTOS有什么区别?
普通OS和RTOS的区别在于实时操作系统对任务响应时间有更严格的要求。 - 什么是抢占?
操作系统有权中断当前正在执行的任务,将CPU资源分配给具有更高优先级的任务。在抢占调度中,任务的执行可以在其时间片用尽之前被中断,而不必等待任务主动释放CPU控制权。 - 什么是抢占式多任务/分时?它与合作多任务/分时有什么区别?
抢占式多任务/分时允许任务在其时间片结束之前被其他任务抢占而中断,而合作多任务/分时则需要任务主动释放CPU。 - 线程被描述为轻量级的,因为线程之间的切换不涉及改变内存上下文?
对。 - 选择RTOS需要考虑哪些因素?
选择RTOS需要考虑任务的实时性要求、内存占用、支持的硬件平台等因素。 - 临时屏蔽/禁用中断的方法有什么用?什么时候用?做这种方法时应该注意什么?
临时屏蔽/禁用中断的方法可用于防止任务被其他任务抢占而中断。在需要较短较为快速的原子操作时使用。如果屏蔽时间过长会影响系统实时性,屏蔽时间内不会发生中断和任务切换。 - 当临界区仅为短时可以禁用/屏蔽中断,如果临界区较长或如果它涉及几个冗长的循环,可以使用什么方法?
可以挂起调度器或使用互斥信号量进行资源保护; - 信号量和中断禁用/屏蔽方法之间的区别?
信号量和中断禁用/屏蔽方法的区别在于信号量是一种高级同步机制,而中断禁用是通过硬件层面实现的。 - 二值信号量等价于Mutex - True/False?
错,二值信号量不具有优先级继承机制; - 在基于信号量的设计中,如何避免死锁?
在基于信号量的设计中,避免死锁的方法包括按顺序获取资源、使用超时机制等。 - 什么是消息传递方法? 它的优点是什么?
消息传递方法是通过发送和接收消息来实现任务之间通信的方式,其优点包括解耦和灵活性。 - RTOS中的嵌入式和异步操作系统的设计。
嵌入式操作系统设计:硬实时性,资源管理,轻量级,中断处理;
异步操作系统设计:事件驱动,非阻塞I/O,回调机制,协程或轻量级任务; - 什么是中断延迟?
中断延迟是指中断事件发生到中断处理程序开始执行之间的时间。 - 即使我们从不在代码中启用中断,处理器也会在硬件访问期间自动禁用它们-对/错?在这种情况下如何减少中断延迟?
对。即使在代码中没有显式启用中断,处理器在进行一些硬件访问(例如,对某些寄存器或设备的读写)期间会自动禁用中断。这是出于对操作的原子性的考虑,以防止在关键操作期间中断引起的干扰。 - 我们应该在什么时候重新启用ISR中的中断,为什么?
应该在中断服务程序完成其关键部分之后重新启用ISR中的中断,以确保系统的实时性。 - 如何测量系统的延迟?
测量系统的延迟可以通过记录事件发生的时间戳并计算时间差来实现。 - 什么是第一级缓存处理程序和第二级缓存处理程序?
第一级缓存处理程序和第二级缓存处理程序是用于处理缓存相关中断的程序。 - FLIH和SLIH的典型设计是什么?
FLIH和SLIH是用于处理快速和慢速中断的处理程序,它们具有不同的优先级和响应时间。 - 可重入中断处理程序可能会因同一中断向量的多次抢占而导致堆栈溢出-对/错?
可重入中断处理程序可能会因同一中断向量的多次抢占而导致堆栈溢出-对。 - 什么样的内存分配程序适合嵌入式系统?
轻量级且高效的。 - 是否有任何RTOS具有非抢占式调度?
有些RTOS具有非抢占式调度,允许任务在不被中断的情况下执行。 - 什么是可重入函数?
可重入函数是指可以安全地在多个任务或中断上下文中执行的函数,即函数内不操作全局变量,不使用局部静态变量,不调用标准库函数,不调用其他不可重入函数 的函数; - 什么是抢占式多任务处理?
任务可在其时间片结束之前被中断,以切换到其他任务。 - timeslice是什么意思
时间片是分时调度中每个任务被允许执行的时间段。 - 如果时间片太短,则调度程序将消耗太多的处理时间- True / False
如果时间片太短,频繁的上下文切换会导致系统花费更多的时间在切换任务上,而不是执行实际的任务工作。 - 什么是I/O绑定?什么是CPU绑定?
I/O绑定是指任务在等待I/O完成时浪费大量时间,而CPU绑定是指任务一直占用CPU而不释放。 - 什么是非抢占式多任务处理?
非抢占式多任务处理不允许任务在其时间片结束之前被中断,直到任务主动释放CPU。 - CFS使用“纳秒”,单个进程共享CPU的原子单位,而不是以前的“时间片”概念-真/假
真 - 什么时候使用二进制信号量?
需要临界区保护、资源互斥的情况。 - 什么时候你会选择busy-wait而不是context switch?
等待时间短,需要轮询外部事件,实时性要求高的情况; - 线程的上下文切换可能发生在什么情况下?
线程的上下文切换可能发生在任务被中断、任务主动释放CPU等情况下。 - 可以在ISR中使用互斥/信号量吗?
可以。 - 解释一个可能导致死锁的场景?解决僵局的最佳方案是什么?
Task A: 获得资源 X,等待资源 Y
Task B: 获得资源 Y,等待资源 X
可能导致死锁的场景包括循环等待、资源互斥等,解决死锁的最佳方案是破坏死锁的四个条件之一。 - 如果应用程序只有一个线程,并且在处理器的多个内核上运行,它的性能是否会提高?
如果应用程序只有一个线程,并且在处理器的多个内核上运行,性能可能不会显著提高。 - 如果有更多的线程请求CPU资源(如时间),会发生什么?
如果有更多的线程请求CPU资源,调度程序将根据其优先级和调度算法来决定哪个任务执行。 - 什么是团队调度,它是如何有用的?
团队调度是一种通过将一组相关任务分配给同一组调度算法来提高整体系统性能的方法。 - 你能在中断处理程序中睡觉吗?
在中断处理程序中睡觉是不推荐的,因为它可能影响系统的实时性。 - 不将Linux视为实时/实时操作系统的主要原因是什么?
不将Linux视为实时/实时操作系统的主要原因是其无法提供对任务响应时间的严格保证。 - 使用信号量进行同步的缺点是什么?自旋锁如何帮助克服它?
使用信号量进行同步的缺点包括复杂性和可能导致死锁,自旋锁可以帮助避免一些死锁情况。 - 信号量由什么组成?自旋锁由什么组成?
信号量由计数器和等待队列组成,而自旋锁由一个标志和持有者字段组成。 - 为什么自旋锁在单处理器系统中无用?
在单处理器系统中,自旋锁可能无用,因为任务在自旋期间无法执行其他任务,而在多处理器系统中,可以利用自旋锁。 - 什么是时间片?
时间片是分时调度中每个任务被允许执行的时间段。 - multiprogramming和multiprocessing有什么区别?
multiprogramming和multiprocessing的区别在于前者允许多个任务共享同一台计算机的资源,而后者涉及多个独立的计算机。 - 什么是并行编程?
并行编程是指同时执行多个计算任务,以提高整体系统性能。 - IPC机制有哪些类型?
IPC机制的类型包括消息队列,信号量,事件组,任务通知等。 - 同步问题的类型是什么?哪些资源会导致此类问题?
同步问题的类型包括互斥、死锁、饥饿,资源包括共享资源、独占资源等。 - 什么是数据竞赛?
数据竞赛是指多个任务同时访问共享数据,可能导致不确定的结果。 - 什么是无限期延迟/无限期阻塞或饥饿?
无限期延迟/无限期阻塞或饥饿是指某个任务永远无法获得所需的资源。 - 在多线程或多程序设计应用程序中存在哪些同步关系?
在多线程或多程序设计应用程序中存在同步关系,如互斥访问共享资源、任务间通信等。 - 一个应用程序有多少个进程或线程就足够了?
应用程序的进程或线程数量取决于应用的性质和需求。 - 告诉合作多任务处理的优点和缺点。
合作多任务处理的优点包括简单、低开销,缺点包括不适用于多核系统、任务之间无法充分利用空闲时间。 - 什么时候应该使用互斥量,什么时候应该使用信号量?
应该在需要临界区保护的情况下使用互斥量,而在需要控制资源访问数量的情况下使用信号量。 - 设计调度程序的方法有哪些类型?
设计调度程序的方法包括抢占式调度和非抢占式调度,选择取决于系统的实时性要求。