进程是系统中程序执行和资源分配的基本单位。每个进程都有自己的数据段,代码段和堆栈段,这就导致了进程在进行切换等操作起到了现场保护作用。但是为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销,进程演化中出现了另外一个概念,这就是线程,也被人称为轻量级的进程。它是一个进程内的基本调度单位。线程是在共享的内存空间中并发的多道执行路径,它们共享一个进程的资源,比如文件描述符和信号处理等。因此,
大大减少了上下文切换的开销。
线程跟进程一样,都拥有一张控制表,线程将相关的变量值放在线程控制表中。一个进程可以拥有一个或者一个以上的线程,也就是有多个线程控制表和堆栈寄存器。但是它们是共享一个内存空间的,这就导致了每个线程的操作都会影响到其他线程。所以线程的同步是非常重要的。
线程可分为用户级线程和核心级线程。
(1)用户级线程主要是解决上下问切换的问题,它的调度算法和调度过程都是用户自己选择决定的,在运行时并不需要特定的内核支持,操作系统都会提供一个库函数,包括对线程的创建、调度、撤销的等功能。而内核仍然度进程进行管理。如果一个进程中的一个线程调用了阻塞的系统调用,那么该进程和该进程中的的其他线程都会被阻塞,这就无法发挥多处理器的优势。
(2)核心级线程是允许不同进程中的线程按照同一相对优先调度方法进行调度。这样就可以充分发挥多处理器的作用。
现在大多数系统都是采用用户级和核心级相结合的方法,一个用户级线程可以对应一个或者一个以上的核心级线程,这样既可以满足多处理机系统的需要,也可以最大限度的减少了调度开销。
在Linux的发展历程中,在方开始,并不真正意义上的支持线程,到出现一对一的线程模型(一个用户级线程对应一个内核级线程),再到如今的NPTL,有了很大的改进,但是仍然采用的是一对一的线程模型。
版权声明:本文为博主原创文章,未经博主允许不得转载。