内核和进程调度
发布时间:2012/4/3 0:31:30 访问次数:1264
MantisOS使用了类似于UNIX的进程调度模式,提供基于NJM2902V(TE1)优先级的多线程调度和同一优先级中进行轮转调度服务。它的运行时间片是可配置的,目前设置为lOms。MantisOS也支持互斥信号量和计数信号量。MantisOS在逻辑上把RAM分配成两部分:一部分是在编译时分配给全局变量的,另一部分以堆的形式管理。当系统创建一个新的线程时,内核就从堆中分配堆栈空间,当线程结束喇,空间又被归还给堆。
内核主要的全局数据结构是线程表,每个线程有一个条目。当线程表静态分配后,拥有指定的最大线程数和指定大小的存储单元。在编译时,最大线程数是可以动态调整的(默认是12)。每个线程表条目是10B(包含一个当前栈指针、栈边界信息(基本指针和大小)、指向线程开始函数的指针、目前线程状态、当前线程的挂起状态、线程优先级、线程的休眠时间、端口号(只用于网络接收)和指向下一线程的指针)。线程有5种状态:空闲、运行、就绪、阻塞、休眠。线程的阻塞状态有两种:阻塞空闲状态和阻塞休眠状态。MOS为线程设置了5种不同的优先级:内核级优先级、休眠级优先级、高优先级、正常级优先级、空闲优先级。当线程挂起时,线程的上下文环境(包括保存的寄存器值)存储在它的栈中(这非常重要)因为线程的上下文环境比线程表条目要大得多,当线程分配时,它只需要存储起来即可,所示线程表的静态开销炅有120B。
内核还为每一个优先级别的线程保存表头和表尾指针(默认为SB大小,总共20B),可方便快速增加和删除。这样一来,当操作线程链表时,可提高性能,因为这些操作很频繁,并且时常与中断一起发生。内核还包括一个2B大小的当前线程指针、1B大小的中断状态,1B大小的标志位。这样,进程调度表总的静态开销大小是144B。
MOS也可以使用信号量机制,应用程序可以根据自己的需要在程序中声明。信号量是一个5B的结构,包含计数器字节(或称为“锁”)、头指针、尾指针。在任何特定的时间中,任何一个线程要么属于一个就绪列表,要么属于信号量列表的。
系统在以下情况会引发上下文环境的切换:调度器接收到一个来自硬件的定时器中断、系统调用、信号量的操作。定时器中断是唯一由内核处理的中断——其他硬件中断被直接发送到相关设备驱动中进行处理。设备驱动在接收到中断后抛出一个信号量,用以激活一个等待线程,该线程处理导致该事件产生的中断。
除了驱动线程和用户线程外,还有一个由内核在启动时创建的idle线程,idle线程的优先级很低(只有其他线程阻塞时才运行)。idle线程可以检测CPU的利用情形,并且调整内核参数以节约能量。
内核主要的全局数据结构是线程表,每个线程有一个条目。当线程表静态分配后,拥有指定的最大线程数和指定大小的存储单元。在编译时,最大线程数是可以动态调整的(默认是12)。每个线程表条目是10B(包含一个当前栈指针、栈边界信息(基本指针和大小)、指向线程开始函数的指针、目前线程状态、当前线程的挂起状态、线程优先级、线程的休眠时间、端口号(只用于网络接收)和指向下一线程的指针)。线程有5种状态:空闲、运行、就绪、阻塞、休眠。线程的阻塞状态有两种:阻塞空闲状态和阻塞休眠状态。MOS为线程设置了5种不同的优先级:内核级优先级、休眠级优先级、高优先级、正常级优先级、空闲优先级。当线程挂起时,线程的上下文环境(包括保存的寄存器值)存储在它的栈中(这非常重要)因为线程的上下文环境比线程表条目要大得多,当线程分配时,它只需要存储起来即可,所示线程表的静态开销炅有120B。
内核还为每一个优先级别的线程保存表头和表尾指针(默认为SB大小,总共20B),可方便快速增加和删除。这样一来,当操作线程链表时,可提高性能,因为这些操作很频繁,并且时常与中断一起发生。内核还包括一个2B大小的当前线程指针、1B大小的中断状态,1B大小的标志位。这样,进程调度表总的静态开销大小是144B。
MOS也可以使用信号量机制,应用程序可以根据自己的需要在程序中声明。信号量是一个5B的结构,包含计数器字节(或称为“锁”)、头指针、尾指针。在任何特定的时间中,任何一个线程要么属于一个就绪列表,要么属于信号量列表的。
系统在以下情况会引发上下文环境的切换:调度器接收到一个来自硬件的定时器中断、系统调用、信号量的操作。定时器中断是唯一由内核处理的中断——其他硬件中断被直接发送到相关设备驱动中进行处理。设备驱动在接收到中断后抛出一个信号量,用以激活一个等待线程,该线程处理导致该事件产生的中断。
除了驱动线程和用户线程外,还有一个由内核在启动时创建的idle线程,idle线程的优先级很低(只有其他线程阻塞时才运行)。idle线程可以检测CPU的利用情形,并且调整内核参数以节约能量。
MantisOS使用了类似于UNIX的进程调度模式,提供基于NJM2902V(TE1)优先级的多线程调度和同一优先级中进行轮转调度服务。它的运行时间片是可配置的,目前设置为lOms。MantisOS也支持互斥信号量和计数信号量。MantisOS在逻辑上把RAM分配成两部分:一部分是在编译时分配给全局变量的,另一部分以堆的形式管理。当系统创建一个新的线程时,内核就从堆中分配堆栈空间,当线程结束喇,空间又被归还给堆。
内核主要的全局数据结构是线程表,每个线程有一个条目。当线程表静态分配后,拥有指定的最大线程数和指定大小的存储单元。在编译时,最大线程数是可以动态调整的(默认是12)。每个线程表条目是10B(包含一个当前栈指针、栈边界信息(基本指针和大小)、指向线程开始函数的指针、目前线程状态、当前线程的挂起状态、线程优先级、线程的休眠时间、端口号(只用于网络接收)和指向下一线程的指针)。线程有5种状态:空闲、运行、就绪、阻塞、休眠。线程的阻塞状态有两种:阻塞空闲状态和阻塞休眠状态。MOS为线程设置了5种不同的优先级:内核级优先级、休眠级优先级、高优先级、正常级优先级、空闲优先级。当线程挂起时,线程的上下文环境(包括保存的寄存器值)存储在它的栈中(这非常重要)因为线程的上下文环境比线程表条目要大得多,当线程分配时,它只需要存储起来即可,所示线程表的静态开销炅有120B。
内核还为每一个优先级别的线程保存表头和表尾指针(默认为SB大小,总共20B),可方便快速增加和删除。这样一来,当操作线程链表时,可提高性能,因为这些操作很频繁,并且时常与中断一起发生。内核还包括一个2B大小的当前线程指针、1B大小的中断状态,1B大小的标志位。这样,进程调度表总的静态开销大小是144B。
MOS也可以使用信号量机制,应用程序可以根据自己的需要在程序中声明。信号量是一个5B的结构,包含计数器字节(或称为“锁”)、头指针、尾指针。在任何特定的时间中,任何一个线程要么属于一个就绪列表,要么属于信号量列表的。
系统在以下情况会引发上下文环境的切换:调度器接收到一个来自硬件的定时器中断、系统调用、信号量的操作。定时器中断是唯一由内核处理的中断——其他硬件中断被直接发送到相关设备驱动中进行处理。设备驱动在接收到中断后抛出一个信号量,用以激活一个等待线程,该线程处理导致该事件产生的中断。
除了驱动线程和用户线程外,还有一个由内核在启动时创建的idle线程,idle线程的优先级很低(只有其他线程阻塞时才运行)。idle线程可以检测CPU的利用情形,并且调整内核参数以节约能量。
内核主要的全局数据结构是线程表,每个线程有一个条目。当线程表静态分配后,拥有指定的最大线程数和指定大小的存储单元。在编译时,最大线程数是可以动态调整的(默认是12)。每个线程表条目是10B(包含一个当前栈指针、栈边界信息(基本指针和大小)、指向线程开始函数的指针、目前线程状态、当前线程的挂起状态、线程优先级、线程的休眠时间、端口号(只用于网络接收)和指向下一线程的指针)。线程有5种状态:空闲、运行、就绪、阻塞、休眠。线程的阻塞状态有两种:阻塞空闲状态和阻塞休眠状态。MOS为线程设置了5种不同的优先级:内核级优先级、休眠级优先级、高优先级、正常级优先级、空闲优先级。当线程挂起时,线程的上下文环境(包括保存的寄存器值)存储在它的栈中(这非常重要)因为线程的上下文环境比线程表条目要大得多,当线程分配时,它只需要存储起来即可,所示线程表的静态开销炅有120B。
内核还为每一个优先级别的线程保存表头和表尾指针(默认为SB大小,总共20B),可方便快速增加和删除。这样一来,当操作线程链表时,可提高性能,因为这些操作很频繁,并且时常与中断一起发生。内核还包括一个2B大小的当前线程指针、1B大小的中断状态,1B大小的标志位。这样,进程调度表总的静态开销大小是144B。
MOS也可以使用信号量机制,应用程序可以根据自己的需要在程序中声明。信号量是一个5B的结构,包含计数器字节(或称为“锁”)、头指针、尾指针。在任何特定的时间中,任何一个线程要么属于一个就绪列表,要么属于信号量列表的。
系统在以下情况会引发上下文环境的切换:调度器接收到一个来自硬件的定时器中断、系统调用、信号量的操作。定时器中断是唯一由内核处理的中断——其他硬件中断被直接发送到相关设备驱动中进行处理。设备驱动在接收到中断后抛出一个信号量,用以激活一个等待线程,该线程处理导致该事件产生的中断。
除了驱动线程和用户线程外,还有一个由内核在启动时创建的idle线程,idle线程的优先级很低(只有其他线程阻塞时才运行)。idle线程可以检测CPU的利用情形,并且调整内核参数以节约能量。
上一篇:MantisOS操作系统
上一篇:网络栈和通信层(COMM)