这一篇作为介绍操作系统的第一篇博客,那么就从进程和线程这一不能忽略的重要主题开始吧
进程
进程的定义
- 进程是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程
进程的组成
- 程序代码
- 程序处理的数据
- 程序计数器中的值,指示下一条将要运行的指令
- 一组通用寄存器的当前值,堆和栈
- 一组系统资源(如打开的文件)
总之,进程包含了正在运行的一个程序的所有状态信息
进程的特点
- 动态性,可动态的创建、结束进程
- 并发性,进程可以被独立调度并占用CPU运行,也就是说CPU可以从一个进程切换到另一个进程运行,虚存的页表记录了每个进程占用的内存资源,可以防止一个进程访问另一个进程的内存空间(保护措施之一,还有其他的措施)
- 独立性,不同进程的工作互不影响
- 制约性,因访问共享数据/资源或进程间同步而产生制约
进程控制结构
- 描述进程的数据结构:进程控制块(Process Control Block,PCB)
- OS为每一个进程维护一个PCB,用来保存与该进程有关的各种状态信息
- PCB是OS管理控制进程运行所用的信息集合,OS用PCB来描述进程的基本情况以及运行变化的过程,PCB是进程存在的唯一标识
OS使用PCB管理和控制进程
- 进程的创建(为该进程生成一个PCB)
- 进程的终止(回收终止进程的PCB)
- 进程的组织管理(通过对PCB的组织管理来实现)
PCB含有三大类信息
- 进程标识信息,如本进程的标识,本进程的产生标识(父进程标识),用户标识
- CPU状态信息保护区,保存进程的运行现场信息,如用户可见寄存器(用户程序可以使用的数据、地址等寄存器)、控制和状态寄存器(程序计数器PC,程序状态字PSW)和栈指针(过程调用/系统调用/中断处理和返回时需要用到它)
- 进程控制信息,如调度和状态信息(用于操作系统调度进程并占用CPU执行)、进程间通信(为支持进程间的与通信相关的各种标识、信号、信件等)、存储管理信息(包含有指向本进程映像存储空间的数据结构)、进程所用资源(说明由进程打开、使用的系统资源,比如打开的文件等)和有关数据结构连接信息(进程可以连接到一个进程队列中,或连接到相关的其他进程的PCB)
PCB的组织方式
- 链表,同一状态的进程其PCB成一链表,各个状态对应多个不同的链表(各状态的进程形成不同的链表:就绪链表、阻塞链表等)
- 索引表,同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的索引表(各状态的进程形成不同的索引表:就绪索引表、阻塞索引表)
线程
- 创建进程时,分配资源,建立PCB;撤销进程时,回收资源,撤销PCB;进程切换时,保存当前进程的状态,可以看出OS维护进程开销比较大,所以提出了比进程更小的能独立运行的基本单位线程(Thread),与进程一样线程也有其数据结构线程控制块(Thread Control Block,TCB)
- 线程之间可以并发执行,同一进程的不同线程之间共享相同的地址空间(线程 = 进程 - 共享资源)
- 一个线程崩溃,会导致其所属的进程的所有线程崩溃
线程是进程当中一条执行流程,可以从两个方面来重新理解进程
- 从资源组合的角度,进程把一组相关的资源组合起来,构成了一个资源平台(环境),包括地址空间(代码段、数据段)、打开的文件等各种资源
- 从运行的角度,代码在这个资源平台上的一条执行流程(线程)
进程和线程的区别和联系
- 进程是资源分配的单位,线程是CPU调度的单位
- 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈
- 线程同样具有就绪、阻塞和执行三种基本状态,同样具有状态之间的转换关系
- 线程能减少并发执行的时间和空间开销,线程的创建时间比进程短、线程的终止时间比进程短、同一进程内的线程切换时间比进程短、由于同一进程的各线程间共享内存和文件资源,可直接进行不通过内核的通信
如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢