操作系统-4-进程管理(一) (6)

      (1)调度:传统OS中,拥有资源、独立调度的基本单位是进程;引入线程的系统中,线程是调度和分派的基本单位,而进程是拥有资源的基本单位。
        在同一个进程内线程切换不会产生进程切换,由一个进程内的线程切换到另一个进程内的线程时,将会引起进程切换。

      (2)并发性:在引入线程的系统中,进程之间可并发,同一进程内的各线程之间也能并发执行。因而系统具有更好的并发性。

      (3)拥有资源:无论是传统OS,还是引入线程的OS,进程都是拥有资源的独立单位,线程一般不拥有系统资源,但它可以访问隶属进程的资源。
        即一个进程的所有资源可供进程内的所有线程共享。

      (4)系统开销:进程创建和撤消的开销远大于线程创建和撤消的开销,进程切换时,当前进程的CPU环境要保存,新进程的CPU环境要设置,

        线程切换时只须保存和设置少量寄存器,并不涉及存储管理方面的操作,因此进程切换的开销远大于线程切换的开销。
            同一进程内的各线程由于它们拥有相同的地址空间,它们之间的同步和通信的实现也比较容易。

      进程与线程的关系:

          

操作系统-4-进程管理(一)

    3 用户级线程和内核级线程

      OS对线程的实现机制:从实现的角度看,线程可分为三种:用户级线程ULT(User Level Thread)如: JAVA,Informix
                                  核心级线程KLT (Kernal Level Thread)如:Win2k/XP、OS/2
                                  混合式线程  如:Solaris
      内核级线程KLT:依赖于内核,即无论是用户进程中的线程,还是系统进程中的线程,它们的创建、撤消、切换都由内核实现。Windows NT和OS/2支持内核线程;
               性质:所有线程管理由核心完成
                  核心维护进程和线程的上下文
                  线程之间的切换需要核心支持
                  以线程为基础进行调度
                  时间片分配给线程,所以多线程的进程获得更多CPU时间。
                  一个线程发起系统调用而阻塞,不会影响其他线程的运行。
              优点:对多处理器,核心可同时调度同一进程的多个线程;
                 阻塞是在线程一级完成。即进程中的一个线程被阻塞了,内核能调度同一进程的其它线程占有处理器运行。
              缺点:应用程序线程在用户态运行,线程管理与调度是在核心态,同一进程内的线程频繁切换时,调用内核,线程切换时要做模式切换,导致速度下降

      用户级线程ULT:这种线程的创建、撤消和切换,都不用系统调用来实现。ULT与内核无关。应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。

              性质:由应用程序完成所有线程的管理:通过线程库(用户空间):一组管理线程的函数
                                线程库提供一个线程运行管理系统(运行系统)
                 核心不知道线程的存在
                 线程切换不需要核心态特权
                 调度是应用程序特定的
                 用户线程调度算法可针对应用优化;
              线程库:线程包(库)提供一组API,支持应用程序创建、调度、撤销和管理线程的运行。
                  作用:创建、撤消线程
                     在线程之间传递消息和数据
                     调度线程执行
                     保护和恢复线程上下文
                  线程库可分成两种:用户空间中运行的线程包(库)
                           内核中运行的线程包(库)。
                  线程库实质上是多线程应用程序的开发和运行支撑环境。每个线程库应提供给用户级的API编程使用。
                  多线程的操作系统和语言都提供了线程库,支持应用程序创建、调度、和管理用户级线程的运行。
              优点:线程切换是线程库在用户态进行,不调用核心
                 调度是应用程序特定的:可以选择最好的算法
                 ULT可运行在任何操作系统上(只需要线程库),可在一个不支持线程的OS上实现
              缺点:线程执行系统调用时,不仅该线程被阻塞,且进程内的所有线程会被阻塞(KLT不会)。
                 纯ULT中,多线程应用不能利用多重处理的优点。内核给一个进程仅分配一个CPU(不知道进程中有线程),进程中仅有一个线程能执行。

                 (即同一进程中的两个线程不能同时运行于两个处理器上)
      用户级和核心级线程区别图:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjwpf.html