Python并发编程

第一章:掌握并发与并行

第二章:让程序动起来-进程

第三章:程序的执行者-线程

第四章:比线程更轻量-协程

首页 > Python并发编程 > 第二章:让程序动起来-进程 > 2.2节:进程的状态,地址空间

2.2节:进程的状态,地址空间

薯条老师 2020-05-29 08:39:49 231506 0

编辑 收藏

教程引言:

该系列教程会系统地讲解并发与并行的基础概念,以及如何使用Python进行并发编程。掌握并发编程,是成为一名优秀程序员所必须具备的基本功。

2.2.1 进程的状态

在上节内容中,我们编写了一个Python脚本程序wonderful.py,在命令行或PyCharm中执行该脚本程序以后,程序wonderful.py就变成了一个进程。程序在计算机中运行,需要占用CPU,如果系统中其它的进程正占用CPU,那么wonderful进程必须等待系统分配处理器,此时进程处于一种就绪的状态。

当wonderful进程被分配CPU以后,wonderful进程开始运行,此时的进程处于一种运行的状态。进程在执行的过程中,如需等待某一事件发生,比如等待用户的键盘输入,此时的进程会进入休眠状态,直到该事件发生,又从休眠态转为就绪态。

综上,进程的状态可分为三种状态:就绪态,运行态,休眠态系统中不止存在一个进程,每个进程在执行过程中,都处于这三种状态之一。进程在执行过程中会发生状态的转换,比如上文提及的wonderful进程从休眠态转为就绪态,再从就绪态转为运行态。

总的说来,进程在执行过程中会发生如下四种状态的转换:
(1)运行态->休眠态:等待资源分配或特定事件发生,如在程序中等待用户从键盘输入。
(2)运行态->就绪态:进程的CPU时间片已结束,或CPU被更高优先级的进程抢占。
(3)休眠态->就绪态:资源被分配给当前进程或特定事件己经发生。
(4)就绪态->运行态:具备运行条件后,系统分配了CPU给当前进程。

下图描述了进程的状态转换过程:

image.png



2.2.2 进程的地址空间

程序在执行过程中不仅需要占用CPU,还需要占用内存资源。进程所占用的内存空间大小即为进程的地址空间。

进程需要占用CPU,内存,磁盘等系统资源,进程是资源分配的基本单位。

通常说的地址空间是指虚拟地址空间,操作系统在实际实现中将内存与磁盘抽象为虚拟内存,并为进程提供了一层抽象,使得每个进程都在独占地使用这块虚拟内存,这块虚拟内存即为进程的虚拟地址空间。在32位的操作系统中,虚拟地址空间的大小为2的32次方个字节,也就是4GB。

对于64位操作系统来说,则最大为2的64次方个字节大小的地址空间,但实际实现中并不需要这么宽的地址长度,例如在Linux系统中仅以48位来进行寻址,最多可以寻址256TB的地址空间。

与虚拟地址空间相对的是物理地址空间,进程的物理地址空间对应的是进程实际占用的这块物理内存。

image.png



进程地址空间的内存布局,大体可分为四个部分:代码段,数据段,堆区,栈区。每个部分用来存储特定类型的数据,比如代码段存储的是可执行的机器指令,数据段存储的是程序的数据。进一步学习进程的地址空间,内存管理,以及与操作系统相关的知识,薯条老师推荐《深入理解计算机系统》这本书。

2.2.3 进程的父子关系

进程的父子关系很好理解,假设A进程创建了B进程,那么A进程就是B进程的父进程,B进程是A进程的子进程。同现实生活中的父子关系一样,子进程会继承父进程的部分资源,比如在Unix系统中,子进程继承了父进程的环境变量,工作目录,堆栈等。

2.2.4 知识要点

(1) 进程的状态可分为三种状态:就绪态,运行态,休眠态。系统中的进程在执行过程中,都处于这三种状态之一。进程在执行过程中会发生状态的转换。
(2) 程序在执行过程中不仅需要占用CPU,还需要占用内存资源。进程所占用的内存空间大小即为进程的地址空间。
(3) 通常说的地址空间是指虚拟地址空间,操作系统在实际实现中将内存与磁盘抽象为虚拟内存,并为进程提供了一层抽象,使得每个进程都在独占地使用这块虚拟内存

2.2.5 课后习题

(1) 简述进程的状态转换过程
(2) 课后思考题,为什么操作系统会引入虚拟地址空间这个概念?

关注微信公众号:Python在线课堂,学习Python视频课程以及其它的编程课程:tornado,django,web开发,网络爬虫,大数据分析,机器学习。公众号后台回复“学习资料”领取Python,web开发,网络爬虫,大数据分析,机器学习等学习资料。


欢迎 发表评论:

  • 请填写验证码