操作系统原理第4章 线程.pptVIP

  • 133
  • 0
  • 约9.33千字
  • 约 75页
  • 2020-01-29 发布于辽宁
  • 举报
4.1.4 线程和进程的区别 通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。 4.1.4 线程和进程的区别 线程与进程的区别可以归纳为以下几点: 1)地址空间和其他资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其他进程不可见。 2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。 3)调度和切换:线程上下文切换比进程上下文切换要快得多。 4)在多线程操作系统中,进程不是一个可执行的实体。 近年来推出的通用操作系统都引入了线程,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。 4.2 用户级和内核级线程 线程的实现可以分为两大类:用户级线程(User-Level Thread,ULT)和内核级线程(Kernel-Level Thread,KLT)。后者又称为内核支持的线程或轻量级进程。 用户级线程 在一个纯粹的用户级线程软件中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。图4-5 a)说明了纯粹的用户级线程方法。任何应用程序都可以通过使用线程库被设计成多线程程序。线程库是用于用户级线程管理的一个例程包,它包含用于创建和销毁线程的代码、在线程间传递消息和数据的代码、调度线程执行的代码,以及保存和恢复线程上下文的代码。 图4-5 用户级线程和内核级线程 4.2 用户级和内核级线程 在默认情况下,应用程序从单线程开始,并在该线程中开始运行。该应用程序及其线程被分配给一个由内核管理的进程。在应用程序运行(进程处于运行态)的任何时刻,都可以派生一个在相同进程中运行的新线程。派生线程是通过调用线程库中的派生例程完成的。通过过程调用,控制权被传递给派生例程。线程库为新线程创建一个数据结构,然后使用某种调度算法,把控制权传递给该进程中处于就绪态的一个线程。当控制权被传递给线程库时,需要保存当前线程的上下文,然后当控制权从线程库中传递给一个线程时,将恢复那个线程的上下文。上下文实际上包括用户寄存器的内容、程序计数器和栈指针。 4.2 用户级和内核级线程 上述的所有活动都发生在用户空间中,并且发生在一个进程内,而内核并不知道这些活动。内核继续以进程为单位进行调度,并且给该进程指定一个执行状态(就绪态、运行态、阻塞态等)。 4.2 用户级和内核级线程 假设进程B在它的线程2中执行,进程和作为进程一部分的两个用户级线程的状态如图4-6 a)所示,则可能发生以下任何一种情况: 1)线程2中执行的应用程序代码进行系统调用,阻塞了进程B。例如,进行一次I/O调用。这导致控制转移到内核,内核启动I/O操作,把进程B置于阻塞状态,并切换到另一个进程。在此期间,从在处理器上执行的角度看,线程2实际上并不处于运行态,但是根据线程库维护的数据结构(线程库),进程B的线程2仍处于运行状态,相应的状态图见图4-6 b)。 图4-6 用户级线程状态和进程状态之间关系的例子 4.2 用户级和内核级线程 2)时钟中断把控制传递给内核,内核确定当前正在运行的进程(B)已经用完了它的时间片。内核把进程B置于就绪态并切换到另一个进程。同时,根据线程库进程B的线程2仍处于运行态。相应的状态图如图4-6 c)所示。 3)线程2运行到需要进程B的线程1执行某些动作的一个点。此时,线程2进入阻塞态,而线程1从就绪态转换到运行态。进程自身保留在运行态。相应的状态图如图4-6 d)所示。 4.2 用户级和内核级线程 在第1种(图4-6 b))和第2种情况(图4-6 c))中,当内核把控制切换回进程B时,线程2会恢复执行。还需注意进程在执行线程库中的代码时可以被中断,或者是由于它的时间片用完了,或者是由于被一个更高优先级的进程所抢占。因此在中断时,进程有可能处于线程切换的中间时刻,即正在从一个线程切换到另一个线程。当该进程被恢复时,线程库得以继续运行,并完成线程切换和把控制转移给该进程中的另一个线程。 4.2 用户级和内核级线程 使用用户级线程而非内核级线程有很多优点,包括: 1)由于所有线程管理数据结构都在一个进程的用户地址空间中,线程切换不需要内核态特权,因此,进程不需要为了线程管理而切换到内核态,节省了用户态到内核态的两次状态转换的开销。 2)调度可以是应用程序相关的。一个应用程序可能更适合简单的轮转调度算法,而另一个应用程序可能更适合基于

文档评论(0)

1亿VIP精品文档

相关文档