进程的概述
进程是计算机科学中的一个基本概念,它指的是在操作系统中正在执行的程序的实例
在Linux操作系统中,进程是程序执行的实体,是资源分配的基本单位
在在Ubuntu中,通过使用ps
命令可以查看当前的进程列表
ps aux
进程与程序的区别
-
定义:
- 程序:程序是一组指令的集合,它们被编写来执行特定的任务,存储在磁盘上的可执行文件中。程序是静态的,不包含关于执行状态的信息。
- 进程:进程是程序的执行实例,是程序在执行时的动态实体。它不仅包含程序代码,还包括程序计数器、寄存器、堆栈、内存分配等执行状态信息。
-
存储位置:
- 程序通常存储在磁盘上,是持久的。
- 进程存在于内存中,是暂时的,随程序的执行而动态变化。
-
执行:
- 程序本身不执行任何操作,它只是指令的集合。
- 进程是程序在执行时的实体,具有执行能力。
-
生命周期:
- 程序的生命周期与文件系统相关,只要文件未被删除,程序就存在。
- 进程的生命周期与执行过程相关,一旦执行结束或被终止,进程就会消亡。
程序是一组静态的指令集合,而进程是这些指令在执行时的动态实体,包含了程序计数器、寄存器、内存等执行状态信息。程序是进程执行的基础,而进程是程序执行的载体。
并发与并行
并发(Concurrency)
- 定义:并发是指在计算机系统中,多个任务(程序或线程)似乎同时执行的能力。实际上,这些任务可能是交替执行的,但它们在时间上被分割,使得从外部看起来像是同时进行。
- 多任务处理:并发通常通过时间分片或多任务处理实现,操作系统将CPU时间分配给不同的任务,快速地在它们之间切换。
- 单核处理器:即使在单核处理器上,也可以通过操作系统的调度实现并发执行。
- 目的:并发的主要目的是提高资源利用率和系统吞吐量
并行(Parallelism)
- 定义:并行是指在计算机系统中,多个任务或计算过程真正同时执行的能力。
- 硬件支持:并行需要硬件支持,如多核处理器、多处理器或分布式计算系统。
- 同时执行:在并行计算中,任务或数据被分割成多个小块,每一块都在不同的处理器或计算节点上同时执行。
- 目的:并行的主要目的是减少程序的执行时间,通过并行处理可以显著提高计算速度。
区别
- 执行方式:并发是任务交替执行,给人一种同时执行的假象;并行是任务真正同时执行。
- 硬件要求:并发可以在单核上实现,而并行需要多核或多处理器。
- 性能提升:并行通常能提供更显著的性能提升,因为它减少了任务的总体执行时间。
- 复杂性:并行编程通常比并发编程更复杂,因为它需要处理数据同步、通信和潜在的竞态条件。
进程的空间分配
进程的空间分配
进程建立之后,系统则要为这个进程分配相应的空间,32位Linux系统中,会为每个进程分配 4G 的空间。
4G的进程空间主要分为两部分,高位1G是内核空间,低位3G是用户空间
用户空间又具体分为如下区间
stack : 存放非静态的局部变量
heap : 动态申请的内存
.bss : 未初始化过的全局变量(包括初始化为0的,未初始化过的静态变量(包括初始化为0)
.data : 初始化过并且值不为0的全局变量,初始化过的不为0静态变量
.rodata : 只读变量(字符串之类)
.text : 程序文本段(包括函数,符号常量)
Tips:1. 当用户进程需要通过内核获取资源时,会切换到内核态运行,此时当前进程会使用内核空间的资源
2. 用户需要切换到内核态运行时,主要是通过 系统调用
虚拟地址与物理地址
-
物理地址(Physical Address):
- 物理地址是内存单元在实际物理内存(RAM)中的实际地址。
- 它们是直接被内存管理单元(MMU)和CPU用来访问物理内存的地址。
- 物理地址的大小受限于系统的物理内存大小。
-
虚拟地址(Virtual Address):
- 虚拟地址是程序在执行时使用的地址,它们通过内存管理单元(MMU)转换为物理地址。
- 虚拟地址允许每个进程拥有自己的地址空间,这个地址空间不必与物理内存的实际布局相对应。
- 虚拟地址的大小通常由CPU的地址宽度决定,例如32位或64位。
-
内存管理单元(MMU):
- MMU是硬件组件,负责将虚拟地址转换为物理地址,这个过程称为地址转换。
- 当程序访问内存时,MMU查找它的页表,找到虚拟地址对应的物理地址。
-
内存映射(Memory Mapping):
- 内存映射是将文件或设备直接映射到虚拟地址空间的过程,这样可以使用虚拟地址来访问文件或设备。
-
地址转换过程:
- 当程序访问一个虚拟地址时,MMU使用页表来确定对应的物理地址。
- 如果虚拟地址不在当前的页表中,将触发缺页异常(Page Fault),操作系统会处理这个异常,将缺失的数据加载到物理内存中。
在操作系统中使用虚拟地址空间主要是基于以下原因:
1.直接访问物理地址,会导致地址空间没有隔离,很容易导致数据被修改
2.通过虚拟地址空间可以实现每个进程空间都是独立的,操作系统会映射到不用的物理地址区间,在访问时互不干扰
Linux的状态管理
进程状态描述了进程在操作系统中的生命周期中的不同阶段
三态模型
进程的三态模型是操作系统中描述进程状态及其转换的基本理论,包括以下三种状态:
-
运行态(Running):进程当前正在执行,占用CPU资源。在单核系统中,只有一个进程处于此状态;而在多核系统中,可以有多个进程同时处于运行态 。
-
就绪态(Ready):进程已经具备了运行的所有条件,包括所需的资源,等待CPU调度执行。处于就绪状态的进程可能存在多个,它们通常被组织在就绪队列中等待CPU时间 。
-
等待态(Waiting或Blocked):又称阻塞态或睡眠态,进程正在等待某个事件的发生,如I/O操作完成或某些资源的可用性。在这种状态下,即使分配CPU资源,进程也无法立即执行 。
进程状态转换的主要场景包括:
- 运行态→等待态:进程可能因等待资源(如I/O操作)而从运行状态转换到等待状态。
- 等待态→就绪态:当进程所等待的事件发生,如I/O操作完成,进程从等待状态转换到就绪状态。
- 运行态→就绪态:由于时间片用完或出现更高优先级的进程,当前运行的进程可能会被挂起,转换到就绪状态。
- 就绪态→运行态:当CPU空闲或调度策略选中就绪队列中的进程时,进程从就绪状态转换到运行状态 。
三态模型简洁地描述了进程在生命周期中的基本状态及其转换,是操作系统中进程管理的核心概念之一。
五态模型
五态模型是操作系统中描述进程状态及其转换的一种模型,它在传统的三态模型基础上增加了新建态(new)和终止态(exit),具体包括以下五种状态:
-
创建态(New):
- 对应于进程被创建时的状态,此时进程已经拥有进程控制块(PCB),但其他资源尚未就绪,进程尚未进入就绪队列。创建进程需要两个步骤:分配所需的资源和建立管理信息,然后操作系统将该进程设置为就绪态并等待调度执行 。
-
就绪态(Ready):
- 进程已经具备了除CPU以外的所有必要资源,一旦获得CPU即可运行。系统中可能存在多个处于就绪状态的进程,它们通常被组织在就绪队列中等待CPU时间 。
-
运行态(Running):
- 进程当前正在执行,占用CPU资源。在单核系统中,只有一个进程处于此状态;而在多核系统中,可以有多个进程同时处于运行态 。
-
等待态(Waiting或Blocked):
- 进程正在等待某个事件的发生,如I/O操作完成或信号量等资源的可用性,因此暂时无法执行。即使分配了CPU资源,进程也无法立即运行,故称该状态为阻塞状态 。
-
终止态(Exit):
- 进程完成任务正常结束,或因错误异常终止,或被操作系统及有终止权的进程所终止时所处的状态。处于终止态的进程不再被调度执行,操作系统将进行善后处理,回收资源并最终从系统中删除该进程 。
五态模型通过引入新建态和终止态,更加细致地描述了进程从创建到结束的整个生命周期,为操作系统提供了更为丰富的状态管理和调度策略。
经常使用的进程状态:
(1)运行态(TASK_RUNNING) : 此时进程或者正在运行,或者准备运行,就绪或者正在进行都属于运行态
(2)睡眠态(TASK_SLEEP): 此时进程在等待一个事件的发生或某种系统资源
可中断的睡眠(TASK_INTERRUPT) : 可以被信号唤醒或者等待事件或者资源就绪
不可中断的睡眠(TASK_UNTERRUPT) : 只能等待特定的事件或者资源就绪
(3)停止态(TASK_STOPPED) : 进程暂停接受某种处理。例如:gdb调试断点信息处理。
(4)僵尸态(TASK_ZOMBIE):进程已经结束但是还没有释放进程资源
Linux下进程的相关命令
-
ps
:查看当前运行的进程
ps -aux 显示所有进程的详细信息
ps -ef 列出所有的进程,相比 ps -aux 信息要少一些
-
top
:实时显示进程的资源占用情况,类似于Windows的任务管理器。
top -i:不显示任何闲置 (idle) 或无用 (zombie) 的进程
top -n:更新的次数,完成后将会退出top
-
pgrep
:根据名称或其他属性查找进程。
pgrep -u username 查找特定用户的所有进程
-
kill
:向特定PID的进程发送信号
kill -9 PID 发送SIGKILL信号以杀死进程
-
pstree
:以树状图展示进程和它们的父进程关系
pstree -p 显示进程树并包括进程的PID
结语:
无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。