操作系统中的进程和线程
对于计算机相关专业的小伙伴们而言,无论在学习还是面试中,进程和线程的问题出现的概率是极高的,本篇文章来具体说说进程和线程以及两者的区别。
进程
进程的相关概念
进程是程序的一次执行,是一个程序及其数据在处理机上顺序执行所发生的的活动,是系统进行资源分配和调度的一个独立单位。
我们一般对进程的定义:进程是进程实体的运行过程,是系统进行进行资源分配和调度的一个独立单位
进程的属性
进程的五种状态:
1. 创建状态:先为一个新进程创建PCB,并填写必要的管理信息,其次,把该线程转入就绪状态,并插入就绪队列中
2. 就绪状态:当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态成为就绪状态。
3. 执行状态:进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态,在多个处理机系统中,有多个进程处于执行状态
4. 阻塞状态:正在执行的进程由于某些事件而暂时无法继续执行,便放弃处理机而处于暂停状态,该状态成为阻塞状态(或者称为等待状态或封锁状态),发生阻塞的典型事件有:请求I/O,申请缓冲空间,通常把处于阻塞阻塞的进程排成一个队列,即阻塞队列。
5. 终止状态:首先等候操作系统进行善后处理,然后将其PCB清零,并将PCB空间返还系统
进程的五种基本状态以及各状态之间的转换关系
我们通过图示来说明上述的五种状态以及他们之间的转换关系
进程中的PCB
PCB记录了当前进程的情况以及控制进程运行的全部信息,PCB的作用是使得在多道程序环境下不能独立运行的程序,成为一个能与其他进程并发执行的程序。
或者说:操作系统通过PCB来对并发执行的进程进行控制和管理,PCB是进程存在的唯一标志
OS对PCB的管理
1. 链接方式:把具有相同状态的PCB,用其中的链接字链接成为一个队列,这样就有若干个就绪队列、阻塞队列、和空白队列等等
2. 索引方式:系统根据所有进程的状态建立几张索引表
进程的创建步骤
1. 申请空白PCB
2. 为新进程分配资源
3. 初始化进程控制块
4. 将新进程插入就绪队列
线程
线程的定义
线程是CPU运行调度的基本单位,线程必须被包含在进程中,一个进程可以有很多线程(至少有一个),这些线程有自己的资源(如栈,寄存器)也共享进程的许多资源。
线程的特征
1. 轻型实体:线程中的实体基本上不拥有资源,每个线程都具有一个用于控制线程运行的线程控制块(TCB)
2. 独立调度和分派的基本单位。在多线程OS中,线程是能独立运行的基本单位,因而线程也是独立调度和分配的基本单位。而且由于线程很“轻”,故线程的切换速度很快,而且开销小。
3. 可并发执行:一个进程中的多个线程可以并发执行
4. 共享进程资源,在同一个进程中的线程共享该进程所拥有的资源
线程和进程的区别
我们从调度性、并发性、系统开销等方面比较
1. 调度:在传统的操作系统中,作为拥有资源的基本和调度的基本单位都是进程,在引入线程的操作系统中,把线程作为调度和分派的基本单位,把传统进程的拥有资源和调度两个属性分开,使得线程基本上不拥有资源,而专注调度的工作,这样显著地提高了系统的并发成都。
2. 并发性:在引入多线程的操作系统中,不仅线程可以并发执行,而且在进程中的多个线程之间也可以并发执行,使得操作系统有更好的并发性,从而更有效地提高系统资源的利用率和吞吐量。
3. 拥有资源:无论是传统的操作系统,还是引入多线程的操作系统,进程都拥有资源,是系统中拥有资源的基本单位。进程中所拥有的的资源,供该进程中的线程共享。
4. 系统开销:在创建或撤销进程时,系统都要为之创建和回收进程控制块(PCB),分配或回收资源,此时操作系统所需要付出的开销明显大于线程创建或撤销时的开销。另外,在进程切换时,涉及到当前进程CPU环境的保存及新被调度运行进程的CPU环境的设置,而线程的切换切换则仅需要设置和保存寄存器的内容