进程和线程

  • 基础知识
  • 操作系统
  • 进程
  • 线程

一、什么是进程

进程是:

  • 一次程序的执行
  • 程序及其数据在计算机上执行所发生的活动
  • 时操作系统分配资源和调度的一个独立单位

进程分为内核进程、用户进程:

  • 内核进程:就是操作系统内核,在开机时,磁盘中的内核程序加载进内存,成为内核进程
  • 用户进程:一般讲的进程就是用户进程,就是应用程序的执行过程。

1.1 PCB

创建进程实质上是创建进程实体中的PCB(进程控制块),系统利用PCB描述和记录进程的基本情况和活动记录。

PCB包含以下信息:

  • 进程标识符:
    • 外部标识符
    • 内部标识符
  • 处理机状态
  • 进程调度信息
  • 进程控制信息

PCB组织管理方式:

  • 线性方式:相当于用数组管理PCB
  • 链接方式:相当于链表,根据进程的状态,会有三种不同的链表实现的队列(就绪队列、执行队列、阻塞队列)
  • 索引方式:根据进程的状态,开几个数组,数组记录PCB的地址

1.2 进程的状态

  • 就绪:分配好出CPU以外的必要资源后,其PCB会被放到就绪队列中
  • 执行:获取到CPU后,其PCB会被放到执行队列中
  • 阻塞:进程发生IO请求、申请缓冲区失败等暂时无法继续执行的操作时,就会阻塞。其PCB会被系统挪到阻塞队列中

进程状态切换:

  • 就绪->执行:被调度,获取到CPU
  • 执行->就绪:时间片用完
  • 执行->阻塞: IO阻塞...
  • 阻塞->就绪: IO完成...

1.3 进程间通信方式

  • 管道
  • 消息队列
  • 共享内存
  • 信号量
  • 信号
  • socket

二、什么是线程

早期的操作系统中都是以进程作为独立运行的基本单位,后来人们提出了比进程更小的进本单位----线程。

线程拥有传统进程所拥有的特征,所以又被称之为轻量级进程。初期以进程作为基本调度和分派单位时,都需要进行较大开销的上下文切换。而以线程作为基本调度和分派单位时,上下文切换的开销远低于进程,仅需保存和设置少量寄存器内容。

2.1 TCB

每个进程都有自己的PCB,同样的每个线程有自己的TCB(线程控制块)。

线程控制块用于记录控制管理线程的信息。

TCB包含以下信息:

  • 现成标识符
  • 一组寄存器
  • 线程状态
  • 优先级
  • 线程私有的存储区
  • 信号屏蔽
  • 堆栈指针

2.2 线程状态

  • 就绪状态:除了CPU,其它必要资源都一获得
  • 执行状态:已经获得CPU且正在执行
  • 阻塞状态:调用发生阻塞时,处于暂停状态

2.3 线程的实现

  • 内核支持线程KST(kernel support thread):在内核中实现的线程,是由内核管理的线程
  • 用户级线程ULT(user level thread): 在用户空间实现的线程,不是由内核管理的线程

基于ULT、KST可以实现n:1、1:1、n:m线程模型

  • 轻量级进程LWP: LWP通过系统调用获得内核提供的服务,通过LWP把内核、用户级线程连接,同时也实现了隔离

一个进程可有一个或多个 LWP,每个 LWP 是跟内核线程一对一映射的,也就是 LWP 都是由一个内核线程支持,而且 LWP 是由内核管理并像普通进程一样被调度

在 LWP 之上也是可以使用用户线程的,那么 LWP 与用户线程的对应关系就有三种:

  • 1 : 1,即一个 LWP 对应 一个用户线程;
  • N : 1,即一个 LWP 对应多个用户线程;
  • M : N,即多个 LWP 对应多个用户线程;

2.4 线程间通信方式

  • 信号量
  • 信号
Loading...