1.3节已经介绍了线程有终止态、阻塞态、就绪态和激活态4种状态,实时操作系统会根据线程的不同状态使用不同的功能列表进行线程的管理与调度。
实时操作系统中要运行的线程大多先放入就绪列表中,即就绪列表中的线程是即将运行的线程,随时准备被调度运行,至于何时被允许运行,由内核调度策略决定。就绪列表中的线程,按照优先级的高低及先进先出原则进行排列。当内核调度器确认哪个线程运行时,将该线程的状态由就绪态改为激活态,线程就会从就绪列表中被取出执行。
延时列表是按线程的延时时间长短的顺序排列,线程进入延时列表后,存储的延时时间与调用延时函数的实参不同,存储的延时时间=(延时函数的实参-所有前面线程存储时间之和)。若线程调用延时函数,则该线程就会被放入延时列表中,其状态由激活态变为阻塞态。当延时时间到时,该线程的状态由阻塞态变为就绪态,线程将从延时列表中移出,并放入就绪列表中,线程状态被设置为就绪态,等待调度执行。
当线程进行永久等待状态或因等待事件位、消息、信号量、互斥量等,其状态由激活态变为阻塞态时,线程就会被放到等待列表和条件阻塞列表中。当等待的条件满足时,该线程的状态由阻塞态变为就绪态,线程会从等待列表和条件阻塞列表中移出,被放入就绪列表中,由Mbed OS进行调度执行。
当线程进行永久等待状态或因等待事件、消息、信号量、互斥量等,其状态由激活态变为阻塞态时,线程就会被放到相应的条件阻塞列表中。此外,Mbed OS还提供等待列表来管理这些线程。当等待的条件满足时,该线程状态由阻塞态变为就绪态,线程会从相应的条件阻塞列表中移出,放入就绪列表中,由实时操作系统进行调度执行。
为了方便对线程进行分类管理,在实时操作系统中会根据线程等待的事件、消息、信号量、互斥量等条件,将线程放入对应的条件阻塞列表中。根据线程等待的条件不同,这些阻塞列表在不同的实时操作系统中又可以分为事件阻塞列表、消息阻塞列表、信号量阻塞列表、互斥量阻塞列表。本节只给出这些列表的基本含义,其运行机理将在10.1节进行介绍。