【Linux】对进程概念的理解

一丶进程概念

进程定义 

进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行的程序的实例,包括程序计数器、寄存器和程序变量的当前值。

进程特征

1.进程依赖于程序运行而存在,进程是动态的,程序是静态的。当一个程序被加载到内存当中并执行起来,整个执行的过程就叫做进程,所以进程是动态的,而程序是静态的。

2.进程是操作系统进行资源分配和调度的一个独立单位(CPU除外,线程是处理器任务调度和执行的基本单位)

3.每个进程拥有独立的地址空间,地址空间包括代码区、数据区和堆栈区,进程之间的地址空间是隔离的,互不影响。对于进程的虚拟地址空间,我会在后面详细介绍。

进程的意义

进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。


二丶进程与程序的区别

  1. 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。我们自己所编写的代码和数据在没有运行起来的时候就叫做程序,仅仅只是一个代码和数据的集合,而当我们真正运行程序的时候,程序就会加载到内存,由cpu执行我们的代码和指令,这就是进程。
  2. 程序可以作为一种软件资料长期存在,而进程是有一定生命期的,程序是永久的,而进程是暂时的。程序作为代码和数据的集合可以长期存在我们的计算机,而进程作为程序的执行过程,当这个过程走到结尾,进程的生命周期也结束了。
  3. 进程是操作系统将程序的代码和数据加载到内存当中,并且由操作系统创建进程控制块(PCB)来对该进程进行管理和控制。即进程实质是程序加载到内存的代码和数据以及对应PCB的集合。

三丶进程状态

 一般而言,每一个进程至少应该处于以下三种状态之一:

         1、就绪状态:这是指进程已处于准备好运行的状态,即进程已分配到除CPU以外的所有的必要资源后,只要获得CPU,便可立即执行。如果系统中有许多处于就绪状态的进程,通常将它们按一定的策略(如优先级策略)排成一个队列,称该队列为就绪队列。

        2、运行状态:这是指进程已获得CPU,其程序正在执行的状态。对任何一个时刻而言,在单处理机系统中,只有一个进程处于执行状态,而在多个处理机系统中,则有多个进程处于执行状态。

        3、阻塞状态这是指正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行时的状态,亦即进程的执行受到阻塞。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般把这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。通常系统将处于阻塞状态的进程也排成一个队列,称该队列为阻塞队列。实际上,在较大的系统中,为了减少队列操作的开销,提高系统效率,根据阻塞原因不同,会设置多个阻塞队列。

这里详细解释一下进程的阻塞状态:

进程阻塞:简而言之也可以说是进程因为等待某种资源就绪,而导致进程不推进的一种状态。例如,一个c语言程序调用了scanf,此时运行该程序,该程序的代码和数据被加载到内存,并产生了该程序的pcb/task_struct供操作系统进行管理,因为scanf函数要读取用户键盘的输入,此时如果用户不输入任何数据,那么该进程就会处于阻塞状态,该进程对应的pcb/task_struct,就要被放到等待相应资源的外设中的队列中去(这里的pcb就应该被放到键盘对应的队列中去等待资源),直到需要的资源就绪,才会重新被操作系统调度,cpu才会进行计算。

有别于进程阻塞,有一种特殊状态叫进程阻塞挂起:当内存不足时,操作系统会将一些处于阻塞状态的进程加载到内存中的代码和数据保存到磁盘上,释放掉代码和数据,从而为正在进行的进程腾出空间。

在linux操作系统中,我们通过命令行指令,可以查到每个进程的属性及具体状态。

R运行状态

进程处于正在执行的状态。

注意:一个状态显示为R状态的进程,不一定正在被CPU调度执行,所有处于CPU执行队列里面的进程的状态都是显示为R状态,表示该进程正在被CPU调度执行,或者正在等待被CPU调度执行。

S休眠状态

可以中断休眠,本质是一种阻塞状态。

下面是一个实验代码,方便我们更好理解进程的运行和阻塞状态,左边是进程的属性及状态等信息,右边是我们所写的程序:

 如果我们没有注释掉执行printf函数这行代码的话,该进程会访问外设,等待显示器的资源就绪(外设的处理速度远小于CPU的处理速度),此时进程会处于阻塞状态,也就是我们所查到的S+状态,而执行查询进程状态时,CPU所花费的时间远远小于等待外设就绪的时间,此时就会查出来进程是休眠状态,而一旦去掉printf函数,进程不再访问外设而在一直运行,那就能查出进程是R+状态,即该进程在CPU的运行队列当中。

而运行队列由操作系统维护,而操作系统也存在内存当中,即该运行队列也在内存中。

D磁盘睡眠状态

不可中断休眠,即使是操作系统也无法杀死这个进程。

当服务器压力过大时,OS会通过一定的手段,杀掉一些进程,来起到节省空间的作用!

如果是S状态时,可以被OS杀掉;

如果是D状态时,不能被OS杀掉,OS无法插手,只能等进程自动醒来;

T暂停状态

kill -17 +pid 暂停进程 显示T状态

kill -18 +pid 继续进程 但进程状态会变为S 即在后台运行的程序,不能被Ctrl+c终止,必须kill -9 +pid 来杀死该进程 调试过程中打断点,本质就是让进程暂停,状态是t,表示追踪时暂停

X死亡状态

一瞬间的状态,不好查到

Z僵尸状态

一个进程不会立即退出,而是保持僵尸状态,方便后续父进程(os)读取该子进程退出的退出结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/110232.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二,手机硬件参数介绍和校验算法

文章目录 前言一、IMEI二、IMSI三、MEID四、ANDROID_ID五、设备序列号六、MAC地址 && 蓝牙地址补充 前言 傻瓜式操作, 人人都能编译操作系统, 每个感兴趣的人都可以基于谷歌安卓aosp源码定制自己的系统 一、IMEI 由14位16禁制字符和第15位校验位标识组成,而…

第十九章、【Linux】开机流程、模块管理与Loader

19.1.1 开机流程一览 以个人计算机架设的 Linux 主机为例,当你按下电源按键后计算机硬件会主动的读取 BIOS 或 UEFI BIOS 来载入硬件信息及进行硬件系统的自我测试, 之后系统会主动的去读取第一个可开机的设备 (由 BIOS 设置的) …

时序预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络时间序列预测

时序预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络时间序列预测 目录 时序预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优…

【算法|虚拟头节点|链表】移除链表元素

Leetcode203 移除链表元素 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出&#xf…

应用在儿童平板防蓝光中的LED防蓝光灯珠

现在电子产品多,手机、平板电脑、电子书等等,由于蓝光有害眼睛健康,于是市场上有很多防蓝光的眼镜、防蓝光的手机膜、防蓝光的平板,这些材料和设备到底有没有用?如何正确预防蓝光危害呢? 我们现在所用的灯…

为什么AirtestIDE的selenium Window突然无法检索控件了?

1. 前言 最近有很多朋友跟我们反馈,为什么1.2.15版本的IDE没办法做网页元素检索了,是不是我们不支持selenium了之类的。 测试后发现,目前版本确实存在这个问题,原因是Chrome113.0.5672.127(最新)版本过高,AirtestIDE…

Python中的缓存库

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 缓存是一种可以存储数据以便快速访问的存储器。 它是一种小型的、快速的存储器,用于保存经常访问的数据。 缓存是必不可少的,因为它可以帮助提高系统的性能,减少系统访问缓慢的主存储器的…

苹果电脑Mac系统运行速度又卡又慢是怎么回事?

通常大家处理Mac运行速度慢的方法不是重启就是清空废纸篓,但是这两种方法对于Mac提速性能的效果是微之甚微的,想要彻底解决Mac运行速度慢,你应该试试一下三种方法~ 1、清理磁盘空间 硬盘空间过少是Mac运行变慢很大的一个因素,各…

浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识,从而知晓YOLOv1到YOLOv4的发展源流和历史演进,进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4…

MySQL数据库管理及数据库基本操作

目录 1 MySQL数据库基本操作 1.1 SQL分类 1.2 SQL语言规范 1.3 数据库对象和命名 1.4 SQL语句分类 2 管理MySQL数据库 2.1 查看数据库结构 2.1.1 查看当前服务器中的数据库 2.1.2 查看数据库中包含的表 2.1.3 查看表的结构(字段) 2.2 数据类型…

面试题五:computed的使用

题记 大部分的工作中使用computed的频次很低的,所以今天拿出来一文对于computed进行详细的介绍,因为Vue的灵魂之一就是computed。 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护…

4.后端·新建子模块与开发(传统模式)

文章目录 学习资料新建子模块与各层查询entity的列表entitymapper层service层controller层 测试 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p8&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e b站的学习视频 新建子模块与各层 在r…