首页 > 系统相关 >进程

进程

时间:2022-12-09 16:02:34浏览次数:40  
标签:状态 阻塞状态 进程 就绪 CPU 运行

我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」(Process)

现在我们考虑有一个会读取硬盘文件数据的程序被执行了,那么当运行到读取文件的指令时,就会去从硬盘读取数据,但是硬盘的读写速度是非常慢的,那么在这个时候,如果 CPU 傻傻的等硬盘返回数据的话,那 CPU 的利用率是非常低的。

做个类比,你去煮开水时,你会傻傻的等水壶烧开吗?很明显,小孩也不会傻等。我们可以在水壶烧开之前去做其他事情。当水壶烧开了,我们自然就会听到“嘀嘀嘀”的声音,于是再把烧开的水倒入到水杯里就好了。

所以,当进程要从硬盘读取数据时,CPU 不需要阻塞等待数据的返回,而是去执行另外的进程。当硬盘数据返回时,CPU 会收到个中断,于是 CPU 再继续运行这个进程。

 

这种多个程序、交替执行的思想,就有 CPU 管理多个进程的初步想法。

对于一个支持多进程的系统,CPU 会从一个进程快速切换至另一个进程,其间每个进程各运行几十或几百个毫秒。

虽然单核的 CPU 在某一个瞬间,只能运行一个进程。但在 1 秒钟期间,它可能会运行多个进程,这样就产生并行的错觉,实际上这是并发

1.并发和并行有什么区别?

一图胜千言。

 

2.进程与程序的关系的类比

到了晚饭时间,一对小情侣肚子都咕咕叫了,于是男生见机行事,就想给女生做晚饭,所以他就在网上找了辣子鸡的菜谱,接着买了一些鸡肉、辣椒、香料等材料,然后边看边学边做这道菜。

 

突然,女生说她想喝可乐,那么男生只好把做菜的事情暂停一下,并在手机菜谱标记做到哪一个步骤,把状态信息记录了下来。

然后男生听从女生的指令,跑去下楼买了一瓶冰可乐后,又回到厨房继续做菜。

这体现了,CPU 可以从一个进程(做菜)切换到另外一个进程(买可乐),在切换前必须要记录当前进程中运行的状态信息,以备下次切换回来的时候可以恢复执行。

所以,可以发现进程有着「运行 - 暂停 - 运行」的活动规律。

一、进程的状态

在上面,我们知道了进程有着「运行 - 暂停 - 运行」的活动规律。一般说来,一个进程并不是自始至终连续不停地运行的,它与并发执行中的其他进程的执行是相互制约的。

它有时处于运行状态,有时又由于某种原因而暂停运行处于等待状态,当使它暂停的原因消失后,它又进入准备运行状态。

所以,在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态

 

上图中各个状态的意义:

  • 运行状态(Running):该时刻进程占用 CPU;
  • 就绪状态(Ready):可运行,由于其他进程处于运行状态而暂时停止运行;
  • 阻塞状态(Blocked):该进程正在等待某一事件发生(如等待输入/输出操作的完成)而暂时停止运行,这时,即使给它CPU控制权,它也无法运行;

当然,进程还有另外两个基本状态:

  • 创建状态(new):进程正在被创建时的状态;
  • 结束状态(Exit):进程正在从系统中消失时的状态;

于是,一个完整的进程状态的变迁如下图:

 

再来详细说明一下进程的状态变迁:

  • NULL -> 创建状态:一个新进程被创建时的第一个状态;
  • 创建状态 -> 就绪状态:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态,这个过程是很快的;
  • 就绪态 -> 运行状态:处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运行该进程;
  • 运行状态 -> 结束状态:当进程已经运行完成或出错时,会被操作系统作结束状态处理;
  • 运行状态 -> 就绪状态:处于运行状态的进程在运行过程中,由于分配给它的运行时间片用完,操作系统会把该进程变为就绪态,接着从就绪态选中另外一个进程运行;
  • 运行状态 -> 阻塞状态:当进程请求某个事件且必须等待时,例如请求 I/O 事件;
  • 阻塞状态 -> 就绪状态:当进程要等待的事件完成时,它从阻塞状态变到就绪状态;

如果有大量处于阻塞状态的进程,进程可能会占用着物理内存空间,显然不是我们所希望的,毕竟物理内存空间是有限的,被阻塞状态的进程占用着物理内存就一种浪费物理内存的行为。

所以,在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存空间换出到硬盘,等需要再次运行的时候,再从硬盘换入到物理内存。

 

那么,就需要一个新的状态,来描述进程没有占用实际的物理内存空间的情况,这个状态就是挂起状态。这跟阻塞状态是不一样,阻塞状态是等待某个事件的返回。

另外,挂起状态可以分为两种:

  • 阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现;
  • 就绪挂起状态:进程在外存(硬盘),但只要进入内存,即刻立刻运行;

这两种挂起状态加上前面的五种状态,就变成了七种状态变迁(留给我的颜色不多了),见如下图:

 

导致进程挂起的原因不只是因为进程所使用的内存空间不在物理内存,还包括如下情况:

  • 通过 sleep 让进程间歇性挂起,其工作原理是设置一个定时器,到期后唤醒进程。
  • 用户希望挂起一个程序的执行,比如在 Linux 中用 Ctrl+Z 挂起进程;

二、进程的控制结构

 

标签:状态,阻塞状态,进程,就绪,CPU,运行
From: https://www.cnblogs.com/imreW/p/16969175.html

相关文章

  • widow linux 查看端口被占用的进程ID
    有时候进程觉得关闭了但是并没有真正的关闭重启应用的时候会出现端口号冲突这个时候就需要手动去查询端口号占用情况。linux查看端口占用8080表示需要查询的端口号......
  • 跨进程通信(socket,binder,handler),Binder ,linkToDeathAIDL,Bundle,使用Socket
    目录   ​​一、IPC简介​​​​二、Android中的多进程模式​​​​三、IPC基础概念介绍​​​​1、Serializable接口​​​​2、Parcelable接口​​​​3、Parcelable接......
  • Ubuntu20.04使用valgrind进程内存分析
     一、安装在官网https://valgrind.org/downloads/上下载软件,目前最新版本是Valgrind3.20.0。然后按照下面的命令解压安装sudoapt-getinstallautomakesudoapt-......
  • shell命令:linux进程按内存使用、CPU使用率排序,查找进程对应的可执行文件
    top命令下按键shift+M,对各进程按内存使用率排序按键shift+P,对各进程按CPU使用率排序按键C显示各进程的完整命令查找进程对应的可执行文件的路径:ls-l/proc/进程号/exe......
  • 5、进程与线程
    进程与线程1、 进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程2、 线程Thread是进程下......
  • 进程管理
    1.什么是进程?进程(Process)是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位或者说是基本单位.1.1进程的结构控制......
  • Linux查看进程运行的完整路径方法
    通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等。这时,我们需要通过以下的方法来查看进程的详细信息:Linux在启动一个进程时,系统会在/p......
  • 用Ubuntu+SecureCRT实现客户内网控制器的进程状态监控
    一、使用场景描述:用户有一台控制器的三个组件需要进行端口监控,控制器主机因为跟办公网络未在同一个网络区域,因此不能使用ssh进行直连进行监控。客户现场环境如下(见下......
  • 进程、线程、并行、并发、串行、进程池
    进程什么是进程?开发时编写的代码,我们称为程序。当我们运行一个程序,那么我们将运行的程序叫做进程。进程是线程的容器。程序与进程的区别程序是数据和指令的集合,是静......
  • 理解Nodejs中的进程间通信
    前置知识文件描述符在Linux系统中,一切都看成文件,当进程打开现有文件时,会返回一个文件描述符。文件描述符是操作系统为了管理已经被进程打开的文件所创建的索引,用来指......