进程
一般情况下,我们把进程实体简称为进程。程序段、数据段、PCB三部分组成了进程实体(进程映像)。PCB是进程存在的唯一标志,创建进程实质上是创建进程实体中的PCB。
进程是程序的一次执行过程,是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单位。
PCB(进程控制块)
- 进程描述信息。进程标识符PID,每个进程的唯一标识号。用户标识符UID,标记进程所属的用户。
- 进程控制和管理信息。进程当前状态:描述进程的状态信息,作为CPU调度的依据。进程优先级;代码运行入口地址;程序的外存地址;进入内存时间;处理机占用时间;信号量使用。
- 资源分配清单。代码段指针;数据段指针;文件描述符等。
- 处理机相关信息。通用寄存器值;地址寄存器值;控制寄存器值;标志寄存器值;状态字。
进程切换
进程切换是在操作系统内核的支持下运行的,是与内核紧密相关的。
- 保存处理机上下文,包括程序计数器和其他寄存器。
- 更新PCB信息。
- 把进程PCB移入相应的队列,如就绪,等待队列
- 选择另一进程执行,更新其PCB。
- 更新内存管理的数据结构。
- 恢复处理机上下文。
进程通信
- 共享存储。通信进程之间存在一块可直接访问的共享空间。
- 消息传递。
- 直接通信方式:消息发送给接收进程,放在接收进程的消息缓冲队列上,接收进程通过缓冲队列获取消息。
- 间接通信。将消息发送到某个中间实体,一般称为信箱。接收进程从信箱获取消息。
- 管道通信。管道是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件。管道只能采用半双工通信,即某一时刻只能单向传输。
线程
引入线程是为了更好的使多道程序并发执行,以提高资源利用率和系统吞吐量,增加程序的并发性。
线程是一个轻型实体,每个线程都应有一个唯一的标识符和线程控制块。线程控制块记录寄存器和堆栈等信息,是CPU调度和程序执行调度的基本单位。自己不拥有系统资源,与其他线程共享进程的资源。具体实现方式有用户级线程和内核级线程。
线程与进程的比较
- 调度。在同一进程线程切换不会引起进程调度,不同进程间的线程切换则会引起进程切换。
- 拥有资源。进程是拥有资源的基本单位,而线程不拥有。
- 并发性。引入线程后,进程可以并发,线程也可以并发,使得操作系统的并发系更强,提高吞吐量。
- 系统开销。创建或者撤销进程时,系统都要分配或者回收资源,开销会比线程的创建销毁大。进程的切换因为涉及处理机上下文的保存,PCB信息的更新,开销大于线程,因为线程切换只需要保存和设置少量寄存器内容。
- 地址空间和其他资源。进程间的地址空间相互独立。进程内的线程对其他进程是不可见的。
- 通信方面。进程间通信需要进程同步和互斥来保证数据一致性,线程间可以直接读取全局变量来通信。