整理一下进程和线程的一些简单笔记,如有错误,请在评论区多多指教,非常感谢<(^-^)>。
进程
进程一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是应用程序运行的载体,也是操作系统分配资源和调度的基本单位,每个进程均有独立的内存空间。进程一般由程序段、数据段和进程控制块三部分组成。操作系统通过链接方式和索引方式对各个进程进行管理。在Windows下,每运行一个.exe
文件即为新建一个进程。
进程的特征
- 动态性:进程是程序的一次执行过程,动态产生、动态消亡,是临时的,具有生命周期。
- 并发性:任何进程均可与其他进程一起并发执行。
- 独立性:进程是操作系统进行资源分配和调度的一个独立单位。
- 制约性:因访问共享资源或进程间同步而产生制约。
进程的组成
进程由程序段、数据段和进程控制块三部分组成:
- 程序段:程序段用于描述进程要完成的功能以及控制进程的执行。
- 数据段:数据段包含进程在执行时所需要的数据。
- 进程控制块:操作系统为每个进程都维护一个进程控制块来管理进程,该部分包含进程的描述信息、控制与管理信息、资源分配信息、处理机相关信息,是进程存在的唯一标志,进程的任何状态变化都可通过进程控制块来体现。
进程控制块包含的的信息
进程标识信息:包括本进程的标识、本进程的父进程标识、用户标识等。
处理机状态信息保护区:用于保存进程的运行现场信息:
- 用户可见寄存器:用户程序可使用的(数据、地址等)寄存器;
- 控制和状态寄存器:程序计数器、程序状态字;
- 栈指针:用于中断处理和返回、过程调用、系统调用;
进程控制信息:
- 调度和状态信息:在被操作系统调度时使用;
- 进程间通信信息:进程之间进行通信所需的各种标识、信号等,这些信息存在于接收方的进程控制块中;
- 存储管理信息:包含有指向本进程存储空间的数据结构;
- 进程所用资源:说明由进程使用的系统资源(例如进程打开的文件);
- 有关数据结构连接信息:进程可以连接到一个进程队列中,或连接到相关的其他进程的进程控制块。
进程的组织
- 链接方式:根据进程状态将各进程的进程控制块分为多个队列,操作系统持有指向各队列的指针。
- 索引方式:根据进程状态为各进程的进程控制块建立多个索引表,操作系统持有指向各索引表的指针。
进程的状态
在多数的操作系统中,进程在生命结束前有三种基本状态:
- 就绪状态:进程等待CPU资源,进程此时已具备执行条件,但其他进程正在占用CPU,一旦得到处理机就可以运行。
- 运行状态:进程正在执行,正在占用CPU。
- 阻塞状态:进程本身不具备运行条件,即使其获得CPU也不能运行,进程正在等待某一事件(例如等待输入输出或等待某数据)而暂停执行。
在只搭载一个单核CPU(不考虑超线程技术)的计算机上,在任何时刻有且仅有一个进程处于运行状态。
进程状态间的转换
- 就绪状态 → 运行状态:进程被调度
- 运行状态 → 就绪状态:时间片到,或CPU被其他高优先级的进程抢占
- 运行状态 → 阻塞状态:等待资源分配,或等待某事件的发生(主动行为)
- 阻塞状态 → 就绪状态:资源分配到位,或等待的事件已发生(被动行为)
进程的生命周期管理
进程创建
创建进程有三种主要情况:
- 系统初始化;
- 用户请求创建一个新进程;
- 一个正在运行的进程执行创建进程的系统调用。
进程运行
操作系统内核选择一个处于就绪状态的进程,让其占用处理机并运行。
进程阻塞
进程阻塞有三种主要情况:
- 请求并等待系统服务,无法马上完成;
- 启动某种操作,无法马上完成;
- 需要的数据没有到达。
进程唤醒
进程只能被其他进程或操作系统唤醒,有三种主要情况:
- 被阻塞的进程需要的资源可被满足;
- 被阻塞的进程等待的事件到达;
- 将该进程的进程控制块插入到就绪队列。
进程结束
进程结束有四种主要情况:
- 正常退出(自愿):进程执行完毕,正常终止。
- 出错退出(自愿):进程发现了错误而退出。
- 严重错误(强制):进程发生了严重的错误而不得不退出,通常是由程序的错误引起,例如执行了非法指令、引用不存在的内存等。
- 被其他进程杀死(强制)。
线程
线程是进程执行中的一个单一的顺序控制流程,是进程执行的最小单位,也是资源分配和CPU调度的基本单位。和进程一样,线程也有就绪、阻塞、运行三种基本状态。一个进程包含有一个或多个线程,除线程本身所必需的最基本资源(例如寄存器、栈)外,同一进程中的线程共享操作系统分配给该进程的资源和内存空间。
进程与线程的区别
- 进程是操作系统分配资源和调度的基本单位,线程是CPU调度和执行的基本单位。
- 一个线程只能属于一个进程,而一个进程至少包含有一个线程。
- 进程之间相互独立,但同一进程下的各线程共享该进程所得的资源和内存空间。
- 进程之间的切换所消耗的资源较多,线程之间的切换所消耗的资源较少。
- 一个进程崩溃后,可不对其他进程造成影响;但一个线程的崩溃将导致其所属进程的崩溃。
先整理到这里(′▽`〃)。
本人菜鸡一只,如有错误,请多多指教(′▽`〃)。
本文整理自