进程的定义:进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程
进程的特点
动态性:可动态地创建、结束进程
并发性:多个进程可并发执行
独立性:进程可以被独立调度并占用处理机运行
制约性:不同进程的工作不相互影响,但是可能因访问共享数据/资源或进程间同步而产生制约
进程的地址空间如下图所示:
进程的组成:代码,数据,进程控制块。下面重点介绍一下进程控制块的概念。
进程控制块(PCB,Process Control Block):操作系统管理控制进程运行所用的信息集合,PCB是进程存在的唯一标志,每个进程都在操作系统中有一个对应的PCB。当创建进程时,操作系统会生成该进程的PCB;终止进程时,回收它的PCB。
我们知道了PCB是控制进程所用的信息集合。那么PCB具体包含进程的哪些信息呢?接下来我将一一列出:
调度和状态信息:调度进程和处理机使用情况
进程间通信信息:进程间通信相关的各种标识
存储管理信息:指向进程映像存储空间数据结构
进程所用资源:进程使用的系统资源,如打开文件等
数据结构有关连接信息:与PCB相关的进程队列
通过上面的介绍,我们大概知道了PCB的概念,那么,PCB又是如何组织的呢?通常情况下有两种方式:
链表
同一状态的进程其PCB成一链表,多个状态对应多个不同的链表
索引表
同一状态的进程归入一个索引表(由索引指向PCB),多个状态对应多个不同的索引表
接下来我们就来学习进程的三状态模型:就绪,等待,运行
运行状态(Running):进程正在处理机上运行
就绪状态(Ready):进程获得了除处理机之外的所需资源,得到处理机即可运行
等待状态(又称阻塞状态Blocked ):进程正在等待某一事件的出现而暂停运行
进程的切换(上下文切换):暂停当前运行进程,从运行状态变成其他状态,调度另一个进程从就绪状态变成运行状态
进程切换的要求:切换前,保存进程上下文;切换后,恢复进程上下文
大致了解了进程, 接下来我们开始学习线程:
线程的概念:线程是进程的一部分,描述指令流执行状态。它是进程中的指令执行流的最小单元,是CPU调度的基本单位。
线程的优点:一个进程中可以同时存在多个线程,各个线程之间可以并发地执行,各个线程之间可以共享地址空间和文件等资源
线程的缺点:一个线程崩溃,会导致其所属进程的所有线程崩溃
线程模型:
线程又包括用户线程和内核线程
用户线程:由一组用户级的线程库函数来完成线程的管理,包括线程的创建、终止、同步和调度等
内核线程:由内核通过系统调用实现的线程机制,由内核完成线程的创建、终止和管理
线程与进程的比较:
- 进程是资源分配单位,线程是CPU调度单位
- 进程拥有一个完整的资源平台,而线程只独享指令流执行的必要资源,如寄存器和栈
- 线程能减少并发执行的时间和空间开销:线程的创建和终止时间比进程短,同一进程内的线程切换时间比进程短,由于同一进程的各线程间共享内存和文件资源,可不通过内核进行直接通信