操作系统学习笔记(4) 线程(Threads)

1. Overview

线程的概念

线程是CPU使用的最小单元,包括一个线程ID,pc,寄存器组和堆栈。如果可以,它和其他同属于一个进程的线程共享代码段、数据段和其他操作系统资源。

使用线程的原因

把“将工作分成小份的工作”交给操作系统,从而提高响应能力
操作系统学习笔记(4) 线程(Threads)_第1张图片

User Threads

kernel中没有多线程,而user-threads通过library实现

三个primary线程库:

  • POSIX Pthreads
  • Win32 threads
  • Java threads

Kernel Threads

内核层次提供多线程的支持(主流的操作系统都已经提供)。

  • 与user thread的关系:

kernel thread是进行分层封装的线程库,user thread对应着kernel thread,但只有kernel thread对内核可见

2. Multithreading Models

对应的双方指的是user thread和kernel thread

  • 多对一
    操作系统学习笔记(4) 线程(Threads)_第2张图片
    事实上这个thread其实就是操作系统的进程,只是遗产系统在用
  • 一对一
    操作系统学习笔记(4) 线程(Threads)_第3张图片
    这是真实意义上的kernel thread,大部分的现代操作系统实现的都是one-to-one的多线程支持
  • 多对多
    操作系统学习笔记(4) 线程(Threads)_第4张图片
    不常见
  • 2个类型的模型
    操作系统学习笔记(4) 线程(Threads)_第5张图片
    有些用many-to-one,有些用one-to-one

3. Threading Issues

fork()和exec()的语义

操作系统学习笔记(4) 线程(Threads)_第6张图片
类似于一种COW机制

Thread Cansellation

意味在thread没有结束前把它终止,有两种方式:

  • asynchronous cancellation:立刻终止
  • deferred cancellation:设置一个flag变量,周期性地check这个flag,当它置零时再终止

Signel Handling

在unix系统中用于提醒进程发生了某些事情

Thread Pool

  • 在进程池中创建一些待执行的线程

优点:

  • 使用已有的thread通常比创建新thread稍微快
  • 可以使应用中线程的数量被约束在线程池数量内

你可能感兴趣的:(操作系统)