操作系统--第二章进程的描述与控制_4

线程

在OS中引入进程的目的是为了使多个进程能够并发执行以提高资源利用率和系统吞吐量,
而在操作系统中再次引入线程则是为了减少程序在并发执行时所付出的时空开销,使其具有更好的并发性.

程序并发执行的时空开销:

由以下三种操作组成:
①. 创建进程,为其分配所必需的除处理机以外的所有资源(PCB块,I/O设备等)
②. 撤销进程,回收其所有资源后再撤销其PCB
③. 进程切换,保留当前进程CPU现场及恢复切换的进程的现场.

由于进程是一个资源的拥有者,其在上述三种操作中,系统必须付出较大的时空开销,这样,进程并发数目就不宜过多,进程切换也不宜过于频繁,这就限制了并发程度的进一步提高.

以此为引,出现了线程的概念.

简单来说.线程就是轻量级的进程,它具有传统进程所具有的特征.下面从调度性,并发性,系统开销和拥有资源等方面对比二者.

一.调度的基本单位
在传统的OS中,进程是能独立运行的基本单位,每次被调度时都要进行上下文切换.
在引入线程的OS中,线程是能独立运行的基本单位,线程切换仅需要保存和设置少量寄存器的内容,代价远低于进程.

二.并发性.
在引入线程的OS中,不仅进程间可以并发,一个进程中的多个线程也能够并发执行,同样,不同进程中的不同线程也能够并发执行,这使得OS具有良好的并发性.如网络服务器接到多个用户请求,如果依然采用单线程的进程来执行该任务,则每次仅能够为一个客户服务,但若采用多线程,一个线程用于监听用户请求,每接到一个请求就创建一个线程为其服务,这样便能为多个用户服务了.

三.拥有资源.
进程依然作为系统中拥有资源的一个基本单位.
线程仅有一点必不可少的,供其独立运行的资源.如线程控制块TCB等等.
此外,线程还允许多个线程共享其所拥有的资源.

四.独立性.
同一进程中的不同线程的独立性要比不同进程之间的独立性低得多.
为了防止进程被破坏,每个进程都有独立的地址空间和其他资源,除共享空间外不允许其他进程访问.
而线程却不同,线程可以访问其所属进程中的所有地址,读写其他线程甚至清除.

五.系统开销.
在创建,撤销进程时,系统都要为之分配和回收进程控制块,分配回收其他资源(如I/O设备等)
切换时也要涉及到上下文的切换.这显然远远大于线程的创建撤销和切换.

六.支持多处理机系统
对于传统进程,其只能被分配到一个处理机上,但多线程进程却可以将多个线程分配到多个处理机上,这无疑将提速.

线程的状态及其控制块TCB

线程运行的三个状态:
1.执行状态 2.阻塞状态 3.就绪状态

TCB用于记录控制和管理线程的信息,其通常包含以下内容:

  1. 线程标识符
  2. 一组寄存器
  3. 线程运行状态
  4. 优先级
  5. 线程专有存储区
  6. 信号屏蔽
  7. 堆栈指针

线程的实现

分为两种:内核支持线程(KST)和用户级线程(ULT)

  1. KST:
    在操作系统内核支持下,线程的创建阻塞撤销和切换均在内核空间实现.
    这种具有以下优点:
    ①. 多处理器系统中,内核能够同时调度同一进程中的多个线程并执行
    ②. 进程中的一个线程被阻塞了,内核就可以调度该进程的其他线程或其他进程中的线程占用处理器
    ③. 内核支持线程具有很小的数据结构和堆栈,切换快,开销小
    ④.内核本身也可以采用多线程技术,可以提高系统的执行速度和效率.
    其缺点是:对用户的线程切换而言,其模式切换的开销较大

  2. ULT:
    用户级线程的创建撤销同步与通信均无需内核支持,其在用户空间中实现,即是与内核无关的.值得说明的,对于设置了用户级线程的系统,其调度依然是以进程为单位进行的.调度时各进程轮流执行一个时间片,这对线程较多的进程是不公平的:进程A(20线程)0.01s时间片,进程B(60线程)依然是分配到0.01s时间片.
    这种具有以下优点:
    ①.线程切换不需要转换到内核空间.进程不需要切换到内核方式即可做线程管理
    ②.调度算法是进程专用的,可以自行对自己的线程进行管理和调度.
    ③.其实现与OS平台无关,也就意味着所有程序都可与之共享,其甚至能在不支持线程机制的操作系统平台上实现.
    缺点:当线程执行一个系统调用时,不仅该线程会被阻塞,同进程的所有线程都会被阻塞
    同时,在多处理机时,内核每次仅对1个进程分配一个CPU,故同一进程只能有一个线程被执行.

猜你喜欢

转载自blog.csdn.net/qq_39560579/article/details/83003446