📜  操作系统中的线程及其类型

📅  最后修改于: 2021-09-27 14:55:06             🧑  作者: Mango

线程是进程内的单个序列流。线程具有与进程相同的属性,因此它们被称为轻量级进程。线程一个接一个地执行,但给人一种好像它们是并行执行的错觉。每个线程都有不同的状态。每个线程都有

  1. 程序计数器
  2. 寄存器组
  3. 一个堆栈空间

线程不是相互独立的,因为它们共享代码、数据、操作系统资源等。

线程和进程之间的相似性——

  • 一次只有一个线程或进程处于活动状态
  • 在进程内都执行顺序
  • 两者都可以创造孩子

线程和进程之间的差异 –

  • 线程不是独立的,进程是。
  • 线程旨在互相帮助,进程可能会也可能不会这样做

线程类型:

  1. 用户级线程 (ULT) –
    在用户级库中实现,它们不是使用系统调用创建的。线程切换不需要调用操作系统,也不需要对内核造成中断。内核不知道用户级线程并将它们作为单线程进程进行管理。

    ULT的优势——

    • 可以在不支持多线程的操作系统上实现。
    • 简单表示,因为线程只有程序计数器、寄存器集、堆栈空间。
    • 由于无需内核干预,因此易于创建。
    • 线程切换很快,因为不需要进行操作系统调用。

    ULT 的缺点 –

    • 线程和内核之间没有或很少协调。
    • 如果一个线程导致页面错误,整个进程就会阻塞。
  2. 内核级线程 (KLT) –
    内核知道并管理线程。内核本身具有线程表(主控表),而不是每个进程中的线程表,用于跟踪系统中的所有线程。此外内核还维护了传统的进程表来跟踪进程。操作系统内核提供系统调用来创建和管理线程。

    KLT的优势——

    • 由于内核完全了解系统中的线程,调度程序可能会决定为具有大量线程的进程提供更多时间。
    • 适用于经常阻塞的应用程序。

    KLT的缺点——

    • 缓慢而低效。
    • 它需要线程控制块,所以它是一个开销。

概括:

  1. 每个 ULT 都有一个进程,该进程使用 Thread 表跟踪线程。
  2. 每个 KLT 都有线程表 (TCB) 以及进程表 (PCB)。