OS

OS 4进程和线程

Posted by lsq on November 28, 2018

1 进程

进程是现代分时操作系统的工作单元,系统由一组进程组成,操作系统进程执行系统代码而用户系统执行用户代码。粗略地说,进程是执行中的程序,进程不只是程序代码,有时也成为文本段(代码段)。进程还包括当前活动,通过程序计数器和处理器寄存器的内容表示。另外,进程通常还包括进程堆栈段和数据段。如下图所示。

进程在执行时会改变状态,每个进程可能会处于下列状态之一。一次只能有一个进程可以在一个处理器上运行,但是多个进程可处于就绪或等待状态。如下图所示,该模型称为三状态(就绪、运行、等待)进程模型。

  • 创建:进程正在被创建
  • 就绪:进程等待分配处理器
  • 运行:指令正在被执行
  • 等待(或阻塞):进程等待某个事件的发生
  • 终止:进程完成执行

每个进程在操作系统内用进程控制块(process control block, PCB)来表示,如下图所示。PCB是进程存在的唯一标志,进程创建是生成PCB,进程终止时回收PCB,PCB的生命周期与进程一致。

  • 进程状态:包括创建、就绪、运行、等待、停止等。
  • 进程编号
  • 程序计数器:表示进程要执行的下个指令的地址
  • CPU寄存器:包括累加器、索引寄存器、堆栈指针等,和程序计数器一起,需要在出现中断时保存,以便进程以后能够正确地继续执行
  • CPU调度信息:包括进程优先级、调度队列的指针和其他调度参数。
  • 内存管理信息:包括基址和界限寄存器的值、页表或段表

CPU在进程间的切换也成为上下文切换,包括两个步骤:暂停当前运行进程,从运行状态变成其他状态;调度另一个进程从就绪状态变成运行状态。在切换过程中要求切换前保存进程上下文,切换后恢复进程上下文,并且切换过程尽可能快速。过程如下图所示。

操作系统内并发执行的进程可以是独立进程或协作进程,如果一个进程不能影响其他进程或被其他进程所影响,那么该进程是独立的,反之就是协作的。在某些环境下是建议进程间进行协作的,如:信息共享、并发执行、系统模块化等。协作进程需要一种进程间通讯机制来允许进程相互交换数据和信息。进程间通讯有两种模式:共享内存和消息传递。在共享内存模式中,需要一块供协作进程共享的内存区域,以写入或读取数据来交换信息。在消息传递模式中,通过在进程间交换信息来实现通信。

消息传递模式对于交换较少数量的数据很有用,因为不需要避免冲突,而且容易实现。共享内存模式允许以最快的速度进行方便的通讯,可以达到内存的访问速度。采用共享内存的进程间通讯需要通信进程建立共享内存区域,这个问题可以类比生产者-消费者问题,生产者进程产生信息以供消费者进程消费。生产者和消费者必须同步,以免消费者消费一个没有生产出来的项。

2 线程

有时一个进程需要执行多个相似的任务,如果作为传统单个线程的进程来执行,那么一次只能处理一个请求,造成必须等待很长的处理请求时间。一种解决办法是当受到请求时,创建另一个进程以处理请求,但是进程的创建很耗时间和资源。如果新进程与现有进程执行同样的任务,那么并不需要这些开销,一个具有多个线程的进程能够达到同样的目的,而且更为有效。单线程进程与多线程进程的区别如下图所示。

线程是进程的一部分,描述在进程资源环境中的指令流执行状态,是进程中的指令执行流的最小单元。多线程的优点在于可以并发执行,并且可以共享地址空间和文件等资源;缺点在于如果一个线程崩溃,会导致其所属进程的所有线程崩溃。线程具有和进程相同的状态及转换关系,区别在于:

进程 线程
资源分配单位 CPU调度单位
需要一个完成的资源平台 只需要指令流执行的必要资源,如寄存器和栈
- 创建、终止、切换的时间短,可不用过内核进行线程间通信

线程有三种实现方式:用户线程、内核线程和轻权线程。用户线程是有一组用户级的线程库函数来完成线程的管理,每个进程都有线程控制块(TCB)列表,而且同一进程的用户线程切换速度快。内核线程是通过系统调用实现的线程机制,由内核维护PCB和TCB,被阻塞时不影响其他线程,但是创建、终止和切换的花费较大。轻权线程是由内核支持的用户线程,一个进程可以有多个轻权线程,每个轻权进程由一个单独的内核线程支持。用户线程和内核线程有:一对一,多对一和多对多三种对应关系。

Reference

操作系统概念
操作系统-清华大学
Operation system: three easy piece