Thread的线程分类
管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。 系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤消线程。附:线程举例 1. SUN Solaris 2.3 Solaris支持内核线程、轻权进程和用户线程。一个进程可有大量用户线程;大量用户线程复用少量的轻权进程,轻权进程与内核线程一一对应。用户级线程在调用核心服务时(如文件读写),需要“捆绑(bound)”在一个LWP上。永久捆绑(一个LWP固定被一个用户级线程占用,该LWP移到LWP池之外)和临时捆绑(从LWP池中临时分配一个未被占用的LWP)。在调用系统服务时,如果所有LWP已被其他用户级线程所占用(捆绑),则该线程阻塞直到有可用的LWP。如果LWP执行系统线程时阻塞(如read()调用),则当前捆绑在LWP上的用户级线程也阻塞。图3 用户线程、轻权进程和核心线程的关系 ¨ 有关的C库函数 /* 创建用户级线程 */ int thr_create(void *stack_base,size_tstack_size,void *(*start_routine)(void *),void *arg,long flags,thread_t *new_thread_id); 其中flags包括:THR_BOUND(永久捆绑),THR_NEW_LWP(创建新LWP放入LWP池),若两者同时指定则创建两个新LWP,一个永久捆绑而另一个放入LWP池。² 有关的系统调用 /* 在当前进程中创建LWP */ int _lwp_create(ucontext_t *contextp,unsigned long flags,lwpid_t *new_lwp_id); /* 构造LWP上下文 */ void _lwp_makecontext(ucontext_t *ucp,void (*start_routine)(void *),void *arg,void *private,caddr_t stack_base,size_t stack_size); /* 注意:没有进行“捆绑”操作的系统调用 */ 2. Windows NT NT线程的上下文包括:寄存器、核心栈、线程环境块和用户栈。