写点什么

为您收录的操作系统系列 - 线程小常识

用户头像
Arvin
关注
发布于: 2021 年 02 月 26 日
为您收录的操作系统系列 - 线程小常识

线程的概念

线程是进程的一个实体,是被系统独立调用和分派的基本单位。线程只拥有在运行中必须的资源如:程序计数器,一组寄存器和栈,但是它可以与同一进程中的其他线程共享进程说拥有的全部资源,一个线程可以创建和撤销另位一个线程。同一进程中的线程可以并发执行。线程在运行过程中呈现间断性,也有就绪,阻塞,执行三种状态。

线程的分类

内核级别线程

  • 依赖于内核,用户进程,系统进程中线程,他们的创建,撤销和切换都由内核实现。

  • 在内核中为线程创建线程控制块,内核根据线程控制块感知线程的存在并对线程进程控制。

用户级别线程

  • 用户线程不依赖与内核,线程的创建,撤销,切换与内核无关。

两者对比

线程调度 & 切换速度

  • 内核线程的调度有内核线程调度程序完成,并运行在系统态。其调度规则与进程相似,切换速度较慢。

  • 用户线程的调度有用户线程包中的一个过程来完成,并运行在用户态。其调度规则现对简单,切换速度快。

线程执行时间分配

  • 内核及线程的 CPU 分配以线程为单位,每一个线程独享一个 CPU 时间片。

  • 用户级别的线程以进程为单位,同一个进程中多个线程共享一个 CPU 时间片。

系统调用

  • 内核级线程进行系统调用,只阻塞该线程。

  • 用户级别的系统调用,要阻塞所属进程。

线程控制块

  • 每一个线程都由一个数据结构表示,它包括:基本状态,标示,记账信息。

  • 包含的信息有线程标识符信息,处理机状态信息,线程调度和线程控制信息。

  • 线程控制块通常采用链接方式来组织,把同一进程具有相同状态的 TCB 用指针连接成队列。

线程与进程的关系

资源和调度

线程是程序执行的基本单位,进程是拥有资源的基本单位。

地址空间资源

不同进程的地址空间相互独立,而同一进程中的各个线程共享地址空间。

通信关系

进程之间的通信必须使用操作系统提供的进程通信机制,而同一进程中的线程可以直接读,写全局变量,甚至无需操作系统参与。

并发性

多进程之间并发执行,多线程之间也可以并发执行。而同一个进程中的多个线程也可以并发执行。

系统开销

  • 进程的创建,撤销进程都由系统分配或回收,操作系统所付出的开销要远远大于创建或撤销线程的开销。

  • 进程的上下文切换,涉及当前整个进程的 CPU 环境的保存及新调度到进程的 CPU 环境的设置。

  • 线程上下文切换时候,只需保存和设置少量的寄存器内,因此开销很小。

  • 此外同一个进程中的多个线程共享进程的地址空间,因此同一个进程的线程的上下文切换更快。

线程控制

线程创建

用户线程创建

用户线程的创建是通过调用线程库中的人或使用程序来完成的。

  1. 申请空白线程的线程控制块。

  2. 初始化线程控制块。

  3. 进程线程插入所属的就绪队列。

内核线程创建

内存线程的的创建是有内核来完成的。

  1. 申请空白线程的线程控制块。

  2. 初始化线程控制块。

  3. 进程线程插入所属的就绪队列。

终止线程

引起终止原因

  • 正常结束。

  • 异常结束。

  • 外界干扰。

终止过程

  1. 根据被终止的线程标识符,从 tcb 集合中检索出该线程的 tcb,并读取线程的状态。

  2. 若被终止的线程正处于原型状态,应立即终止线程的执行,并置调度标记为真,用于指示该线程被终止后应重新执行线程的调度程序。

  3. 将终止线程的 tcb 从所在队列(或链表)中移除,等待其他程序来搜索信息。

线程调度与线程切换

用户线程

由于内核没有意识到用户线程的存在,所以内核以进程为单位进行调度,并且给该进程指定一个状态(就绪,阻塞,运行)。用户线程的调度是在应用程序内部进行的。通常采用非抢占式和更简单的规则,如时间片轮转忙,无需用户模式和内核模式之间切换,所以说速度特别快。调度算法可以是应用程序专用的,可以去适应应用程序而不会扰乱底层的系统调度程序。CPU 时间片分配给进程,进程中有多个线程时候,每个线程的执行时间相对较少。

一个多用户线程的应用程序不能利用多 CPU 技术。

所有线程管理数据机构都在一个进程的用户地址空间中,线程切换不需要用户模式和内核模式的切换,减少来切换的开销。

内核线程

内核线程是有内核来维护其上下文信息,调度有内以线程为单位进行的。内核线程的调度和切换都需要用户模式和内核模式之间的切换。

调度可以为一个进程中的多个内核线程分配多个 CPU,是多个内存线程达到并行。

线程的阻塞与唤醒

阻塞

  • 请求系统服务。

  • 启动某种操作。

  • 新数据尚未到达。

用户线程的阻塞过程

  1. 停止线程执行,该线程的状态改为阻塞态。

  2. 将该线程控制块插入相应的线程阻塞队列。

  3. 将该线程所属的进程状态改为阻塞态。

  4. 将该线程所属的进程的进程控制块插入相应的进程阻塞队列。

  5. 将控制传递给进程调度程序,重新进行进程调度。

用户线程的唤醒过程

  1. 阻塞态到就绪态转换。

  2. 该线程所属进程的状态由阻塞态改为就绪态。

  3. 将该线程所属进程的进程控制块信息从阻塞队列中移除。

  4. 将该线程所属进程的控制块插入就绪队列。

  5. 该线程有阻塞改为就绪。

  6. 将该线程的控制块信息从阻塞队列中移除。

  7. 将该线程的控制块信息插入就绪队列。

系统线程阻塞过程

  1. 停止该线程的执行,并将该线程的状态改为阻塞态。

  2. 将该线程控制块插入相应的线程阻塞队列中。

  3. 将控制传递给线程控制程序,重新进行线程调度。

系统线程唤醒过程

  1. 将该线程状态由阻塞态改为就绪态。

  2. 该线程的线程控制块从阻塞队列中移除。

  3. 将该线程的控制块信息插入就绪队列中。


欢迎大家的留言讨论。按惯例最后分享一首诗给大家。


一直认为,无限是一个

不期而至的访客,

但这惊人的一幕如何发生,

应为它从来不曾离开?


进程相关阅读

为您收录的操作系统系列 - 进程管理(上篇) (操作系统-简介)

为您收录的操作系统系列 - 进程管理(中篇) (操作系统-并发控制与同步)

为您收录的操作系统系列 - 进程管理(加餐) (操作系统-生产者和消费者问题)

为您收录的操作系统系列 - 进程管理(下篇) (操作系统-进程通信)


~~~欢迎,扫描关注 ~~~



发布于: 2021 年 02 月 26 日阅读数: 56
用户头像

Arvin

关注

生活黑客35 2019.06.11 加入

向自己发问:“当下我应该做那些事情来增加自己的决心,强化自己的人格,找到继续前行的勇气?”

评论

发布
暂无评论
为您收录的操作系统系列 - 线程小常识