【操作系统】进程管理——进程的概念、组成和特征(个人笔记)

学习日期:2024.6.29

内容摘要:进程的基本概念和特征、状态和转换


进程的概念

程序与进程

程序:是静态的,是存放在磁盘里的可执行文件,就是一系列的指令集合

进程 (Process):是动态的,是程序的一次执行过程。

比如说,电脑里的QQ应用,是一个程序 ,但我们可以同时打开三次QQ,此时打开任务管理器,会看到三个腾讯QQ"应用",这就是进程,同一个程序多次执行会对应多个进程。

进程控制块PCB

操作系统是进程的管理者,那么要如何区分这些进程?

操作系统会给每个进程分配唯一的PID(Process Identifier,进程控制符),相当于各个进程的身份证,程序一运行,系统就会自动分配给进程。进程终止后,PID会被系统回收,也可能被继续分配给新运行的程序。

操作系统要记录PID、进程所属的UID(User Identifier,用户标识符),还要记录给进程分配了哪些资源(如分配了多少内存、正在使用哪些I/O设备、网络流量使用情况等),以及进程当前的状态(就绪态、运行态、阻塞态等等)

这些信息,以及其它所有操作系统对进程进行管理工作所需的信息,都被保存在一个数据结构PCB(Process Control Block)当中,即进程控制块。

PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时再回收。

进程的组成

进程实体由PCB,程序段,数据段组成。

为什么不说"进程"?------因为进程是一个动态的概念,进程实体可以理解为进程在运行过程中某一瞬间的照片,反映进程在该瞬间的状态,在进程运行的过程中,进程实体是在不断变化的。

PCB是给操作系统用的,程序段和数据段是给进程自己用的。

进程是进程实体的运行过程, 是系统进行资源分配和调度的一个独立单位

一个进程被"调度",就是说操作系统决定让这个进程上CPU运行。

进程的特征

动态性:进程是程序的一次执行过程, 是动态的产生、编号、消亡的。(进程最基本的特征)

并发性:内存中有多个进程实体,各进程可以并发执行。

独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位。

异步性:各进程按各自独立的、不可预知的速度推进,可能导致运行结果的不确定性。

结构性:每个进程都会配置一个PCB。从结构上看,进程由程序段、数据段、PCB组成。

进程的状态和状态转换(重点)

创建态:进程正在被创建时的状态,此时操作系统会为进程分配资源,初始化PCB。

就绪态 :进程创建完成后的状态,处于此状态的进程已经具备运行条件 ,但由于没有空闲CPU,暂时不能运行。

运行态:进程正在运行时的状态,CPU会执行该进程对应的程序。当CPU空闲时,操作系统就会选择一个就绪进程运行。

阻塞态:进程运行的过程中,可能会等待某个事件的发生(如等待某种系统资源的分配,或者其它进程的响应),此时操作系统会让这个进程下CPU,进程进入阻塞态。当CPU空闲时,又会选择另一个"就绪态"进程上CPU运行。

终止态:进程可以执行exit系统调用,请求操作系统终止该进程,此时进程会进入终止态。操作系统会让该进程下CPU,并回收内存空间、PCB等资源。

进程状态的转换------"丁字裤"

运行态到阻塞态是进程主动的,但是从阻塞态到就绪态不是,因为进程能决定它等待的资源什么时候才能获得。

就绪、运行、阻塞中间三个状态是基本状态,进程的整个生命周期中,大部分时间都处于这三种基本状态。单CPU状态下,同一时刻只会有一个进程处于运行态,多核CPU的情况下可能有多个进程处于运行态。在PCB中,会有一个变量state来标识当前状态。

进程的组织

链式方式

操作系统管理一系列的队列,每个队列都会管理相应状态的PCB,就绪队列的指针指向就绪队列的PCB(通常会把优先级高的放在队头),阻塞队列的指针指向处于阻塞状态的PCB,依此类推。

有的操作系统还会根据阻塞原因的不同,划分出多个阻塞队列。

索引方式

操作系统根据进程状态的不同,建立几张索引表,持有指向各个表的指针。


内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

相关推荐
薛定谔式炼丹7 分钟前
linux问题总结2
linux·运维·服务器
bananawolf9 分钟前
C++部分复习笔记上
c++·笔记
懒人w13 分钟前
百万数据量修改数据思路及方法
java·linux·windows
ztenv17 分钟前
C++23特性一览
linux·c++·c++23
Comedy_宁20 分钟前
分布式NAS集群+ceph+CTDB
linux·分布式·ceph·nas·ctdb
m0_747124531 小时前
量产工具一一输入系统(二)
linux·imx6ull
这题怎么做?!?1 小时前
自我反思与暑假及大三上学期规划
linux·数据结构·c++
AncleLeen1 小时前
ubuntu 22.04下编译安装glog共享库
linux·运维·ubuntu
FIT2CLOUD飞致云1 小时前
1Panel开源面板项目GitHub Star数量突破20,000!
linux·运维·开源·1panel·面板
xintaiideas2 小时前
熟练掌握Docker及linux常用命令排查线上问题。熟悉Git, Maven等项目管理及构建工具,熟悉微服务中基于Jenkins的CI/CD
linux·git·docker