EchisanBlog
操作系统-进程线程

线程与进程的比较

  1. 调度的基本单位

在传统的OS中,进程是作为独立调度和分派的基本单位,因而进程是能独立运行的基本单位。

引入线程的OS中,以把线程作为调度和分派的基本单位,因而线程是能独立运行的基本单位。当线程切换时,仅需保存和设置少量的寄存器内容,切换代价远低于进程。

  1. 并发性

引入线程的OS中,不仅进程之间可以并发执行,而且一个进程中的多个线程之间亦可并发执行。

  1. 拥有资源

进程可以拥有资源,并作为系统中拥有资源的一个基本单位。然而线程本身并不拥有系统资源,而是仅有一点必不可少的、能保证独立运行的资源。

线程除了拥有自己的少量资源外,还允许多个线程共享该进程所有的资源。

  1. 独立性

进程间的独立性比线程间的独立性高的多,这是因为,为了防止进程间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其它资源,除了共享变量外,不允许其它进程访问。

但是,同一个进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,他们共享进程的内存地址空间和资源。

  1. 系统开销

在创建或撤销进程时,系统都要为之分配和回收进程控制块、分配或回收其它资源,如内存空间和I/O设备等。类似地,进程切换时,涉及到进程的上下文切换,而线程的切换代价远低于进程。

  1. 支持多处理机系统

在多处理机系统中,对于传统的进程,即单线程进程,不管有多少个处理机,该进程只能运行在一个处理机上,但对于多线程进程,可以将一个进程中的多个线程分配到多个处理机上执行。

线程的状态和线程控制块

线程运行的三个状态

与进程一样,各个线程之间也存在共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。所以,线程在运行时具有如下三种基本状态:

  1. 执行状态
  2. 就绪状态
  3. 阻塞状态

线程状态之间的转换和进程之间的转换是一样的

线程控制块TCB

跟进程控制块(PCB)一样,线程也有这样一个线程控制块TCB。

如同每个进程有一个进程控制块一样,系统也为每个线程配置了一个线程控制块TCB,将所有用于控制和管理线程的信息记录在线程控制块中。线程控制块通常有这样几项:
①线程标识符,为每个线程赋予一个唯一的线程标识符;
②一组寄存器,包括程序计数器PC、状态寄存器和通用寄存器的内容;
③线程运行状态,用于描述线程正处于何种运行状态:
④优先级,描述线程执行的优先程度;
⑤线程专有存储区,用于线程切换时存放现场保护信息,和与该线程相关的统计信息等;
⑥信号屏蔽,即对某些信号加以屏蔽:
⑦堆栈指针,在线程运行时,经常会进行过程调用,而过程的调用通常会出现多重嵌套的情况,这样,就必须将每次过程调用中所使用的局部变量以及返回地址保存起来。

为此,应为每个线程设置一个堆栈,用它来保存局部变量和返回地址。相应地,在TCB中,也须设置两个指向堆栈的指针:指向用户自己堆栈的指针和指向核心栈的指针。前者是指当线程运行在用户态时,使用用户自己的用户栈来保存局部变量和返回地址,后者是指当线程运行在核心态时使用系统的核心栈。

线程的实现

  1. 内核支持线程KST(Kernel Supported Threads)
  2. 用户级线程ULT(User Level Threads)