第四章 Threads,SMP, and Microkernerls

发布于:2022-12-10 ⋅ 阅读:(318) ⋅ 点赞:(0)

# 4.1 进程和线程(Threads)

## 4.1.1 简介
  - OS区别对待以下问题:
      - Resource ownership(资源所有权): 进程包括一个虚拟地址空间来保存进程映像
          - 资源所有权的单位称为进程或任务。
      - Scheduling/execution((调度/执行): 遵循可能与其他进程交错的执行路径
          - 调度的单位称为线程或轻量进程。

## 4.1.2 多线程(Multithreading)
  - Single-Thread(单线程)
      - 单线程指一个进程中只有一个线程在执行的传统方法。(线程的概念并不明确)
          - MS-DOS支持单进程、单线程
          - 一些UNIX系统支持多进程、每个进程单线程            
  - Multithreading(多线程)
      - 多线程指操作系统支持在一个进程中执行多个线程的能力。

  - Process:资源分配单位和保护单位
      - 有一个保存进程映像的虚拟地址空间(code, data,stack, and PCB)
      - 保护对处理器、内存、其他进程、文件和I/O资源的访问
      - 包含一个或多个线程
  - Thread:调度执行的单位
      - 每个线程都有:
          - 执行状态(运行、就绪等)
          - 未运行时,保存的线程上下文(PC)
          - 具有执行栈(Stack)
              - 栈:存储局部变量和函数调用参数,从栈顶取,也在栈顶放置新区域。
          - 对于局部变量,一些线程静态存储
          - 访问其进程的内存和资源
    
  - 线程的优点:
      - 创建更快(创建一个线程比创建一个进程所用的时间更少)(不重新分配内存等资源)
      - 结束快(终止一个线程比终止一个进程所用的时间更少)
      - 切换快(同进程的两个线程之间)(相同镜像,不用切换页表)
      - 通信快(因为同进程的线程共享内存和文件,它们能够不经过内核而互相通信)
        
    - 线程收到进程很多操作的影像:
        - 挂起:挂起进程会挂起该进程的所有线程
        - 终止:终止进程会终止该进程的所有线程

## 4.1.3 线程功能特性

  - 线程的状态
      - Runging, Ready,Blocked
      
  - 与线程状态改变相关的操作:
      - Spawn(派生)
          - 派生另一个线程
      - Block(阻塞)
      - Unblock(解除阻塞)
      - 完成
          - 取消分配寄存器上下文和堆栈
            
  - 在进程中:
      - 所有线程共享相同的地址空间和其他资源
      - 一个线程对资源的任何更改都会影响其他线程

# 4.2 线程类型

## 4.2.1 User-Level Threads (ULT,用户级线程)
  - 由线程库管理多线程。
  - 所有线程管理都有应用程序完成。
  - 内核不知道线程的存在,调度基于进程完成的。
      - 需要通过线程库二次调用线程。
  - ![[用户级线程 示意图.png]]

 

## 4.2.2 Kernel-Level Threads(内核级线程)

  - 内核维护进程和线程的上下文信息
  - 调度基于线程完成。
  - ![[内核级线程 示意图.png]]
 
  -  ULT的优势(与KLT相比)
      - 切换消耗更小
      - 调度策略可以根据不同应用而不同
      - ULTs可以在任何操作系统上运行,无需修改底层内核
  - ULT的劣势(与KLT相比)
      - ULT按进程调度(一个线程阻塞,则该进程的所有线程阻塞)
      - 线程不能分配到多核(一个多线程应用不能发挥多进程的优势)
      - 解决缺点的方法:
          - 用多进程代替多线程
          - Jacketing套管 针对阻塞问题
            
  - KLT的优势(与ULT相比)
      - 克服了ULT的两个主要缺点
          - 多CPU执行(一个进程中的多个线程可以同时在多个处理器上运行)
          - 仅阻塞单个线程(一个线程阻塞不会使同进程中的其他线程阻塞)
  - KLT的劣势(与ULT相比)
      - 线程切换需要模式切换到内核
        
## 4.2.3 Combined Approaches 混合方式
    
  - 线程
      - 创建/调度/同步完全在用户空间完成
      - 允许映射到内核(来自单个应用的多个ULT映射到一些(较小或相等)数量的(可调)KLT。)
![[组合方法 示意图.png]]


  - Combined Approaches的优点:
      - 多CPU运行
      - 仅阻塞单个线程

 

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到