计算机操作系统笔记――线程及其实现

   在传统操作系统的单线程进程中,进程和线程概念可以不加区别。

   单线程进程的内存布局和结构,它由进程控制块和用户地址空间,以及管理进程执行的调用/返回行为的系统堆栈或用户堆栈构成。一个进程的结构可以划分成两个部分:对资源的管理和实际的指令执行序列。显然,采用并发多进程程序设计时,并发进程之间的切换和通信均要借助于操作系统的进程管理和进程通信机制,因而,实现代价较大,而较大的进程切换和进程通信代价,又进一步影响了并发的粒度。

   在多线程环境中,仍然有与进程相关的内容是PCB 和用户地址空间,而每个线程除了有独立堆栈,以及包含现场信息和其他状态信息外,也要设置线程控制块TCB(Thread Control Block)。线程间的关系较为密切,一个进程中的所有线程共享其所属进程拥有的资源,它们驻留在相同的地址空间,可以存取相同的数据。


   多线程环境中进程的定义:进程是操作系统中进行保护和资源分配的基本单位。它具有:

一个虚拟地址空间,用来容纳进程的映像;

对处理器、其他(通信的)进程、文件和 I/O 资源等的有控制有保护的访问。

而传统进程原先所承担的控制流执行任务交给称作线程的部分完成。

   线程是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。

线程的主要特性是:

(1)并发性:同一进程的多个线程可在一个/多个处理器上并发或并行地执行,而进程之间的并发执行演变为不同进程的线程之间的并发执行。

(2)共享性:同一个进程中的所有线程共享但不拥有进程的状态和资源,且驻留在进程的同一个主存地址空间中,可以访问相同的数据。所以,需要有线程之间的通信和同步机制,但通信和同步的实现十分方便。

(3)动态性:线程是程序在相应数据集上的一次执行过程,由创建而产生,至撤销而消亡,有其生命周期,经历各种状态的变化。每个进程被创建时,至少同时为其创建一个线程,需要时线程可以再创其他线程。

(4)结构性:线程是操作系统中的基本调度和分派单位,因此,它具有唯一的标识符和线程控制块,其中应包含调度所需的一切信息。

   线程的状态

   和进程类似,线程也有生命周期,因而,也存在各种状态。从调度需要来说,线程的关键状态有:运行、就绪和等待。另外,线程的状态转换也类似于进程。由于线程不是资源的拥有单位,挂起状态对线程是没有意义的,如果一个进程挂起后被对换出主存,则它的所有线程因共享了进程的地址空间,也必须全部对换出去。可见由挂起操作引起的状态是进程级状态,不作为线程级状态。类似地,进程的终止会导致进程中所有线程的终止。


本文出自 “SeaSky” 博客,谢绝转载!

你可能感兴趣的:(计算机理论)