线程的描述

 

 

线程

 

进程和线程

到目前为止提出的进程的概念包含两个特点:

1:资源所有权:一个进程包括一个存放进程映像的虚拟地址空间;进程映像是程序、数据、栈和进程控制块中定义的属性的集合。一个进程总是拥有对资源的控制或所有权,这些资源包括内存、IO通道、IO设备和文件等。操作系统提供保护功能,以防止进程之间在发生不必要的与资源相关的冲突。

2:调度/执行:一个进程沿着可以通过一个或多个程序的执行路径(轨迹)执行。其执行过程可能与其他进程的执行过程交替进程 。因此,一个进程具有一个执行状态(运行、就绪等)和一个被分配的优先级,它是一个可被操作系统调度和分派的实体。

 

既然上述两个特点是独立的,那么操作系统应该能够独立地处理它们。很多操作系统,特别是近期开发的操作系统已经这样做了。为区分这两个特点,分派的单位通常称为线程或轻量级进程,而拥有资源所有权的单位通常称为进程 或任务。

 

 

多线程

多线程是指操作系统在单个进程内支持多个并发执行路径的能力

在多线程环境中,进程被定义成资源分配的单位和一个被保护的单位。与进程相联的有:

1:存放进程映像的虚拟地址空间。

2:受保护地对处理器、其他进程(用于进程间通信)、文件和IO资源(设备和通道)的访问。

在一个进程中,可能有一个或多个线程,每个线程有:

1:线程执行状态(运行、就绪等)。

2:在未运行时保存的线程上下文;从某种意义上看,线程可被视为进程内的一个独立操作的程序计数器。

3:一个执行栈。

4:用于每个线程局部变量的静态存储空间。

5:与进程内的其他线程共享的对进程的内存和资源的访问。

 

从进程管理的角度说明线程和进程的区别:在单线程进程模型中(也就是说,并没有明确的线程概念),进程的表示包括它的进程控制块和用户地址空间,以及在进程执行中管理调用/返回行为的用户栈和内核栈。当进程正在运行时,处理器寄存器将被该进程所控制;当进程不运行时,这些处理器寄存器中的内容将被保存。在多线程环境中,进程仍然只有一个与之关联的进程控制块和用户地址空间。但是每个线程都有一个独立的栈,还有独立的控制块用于包含寄存器值、优先级和其他与线程相关的状态信息。

因此,进程中的所有线程共享该进程的状态和资源,它们驻留在同一块地址空间中,并且可以访问到相同的数据。当一个线程改变了内存中的一个数据项时,其他线程在访问这一能够看到变化后的结果。如果一个线程以读权限打开一个文件,那么同一进程中的其他线程也能够从这个文件中读取数据。

 

 

线程功能特性

和进程一样,线程具有执行状态,且可以相互之间进行同步。

线程状态 

和进程一样,线程的关键状态有运行态、就绪态和阻塞态。一般来说,挂起态对线程没有什么意义,这是由于此类状态是一个进程级的概念。

1:派生:在典型情况下,当派生一个新进程时,同时也为该进程派生了一个线程。随后,进程 中的线程可以在同一个进程中派生另一个线程,并为新线程提供指令指针和参数;新线程拥有自己的寄存器上下文和栈空间,且被放置在就绪队列中。

2:阻塞:当线程需要等待一个事件时,它将被阻塞(保存它的用户寄存器、程序计数器和栈指针),此时处理器转而执行另一个就绪线程。

3:解除阻塞:当解除阻塞一个线程的事件发生时,该线程被移到就绪队列中。

4:结束:当一个线程完成时,其寄存器上下文和栈都被释放。

 

 

线程同步

一个进程中的所有线程共享同一个地址空间和诸如打开的文件之类的其他资源。一个线程对资源的任何修改都会影响同一个进程中其他线程的环境。因此,需要同步各种线程的活动,以便它们互不干涉且不破坏数据结构。例如,如果两个线程都试图同时往一个双向链表中增加一个元素,则可能会丢失一个元素或者破坏链表结构。

线程同步带来的问题和使用的技术通常与进程同步相同。

猜你喜欢

转载自xieyaxiong.iteye.com/blog/1820559