Linux-进程概念

news2024/11/20 10:38:10

目录

进程状态:

操作系统简图

调用进程bin.exe的详细过程 

cpu运行队列的结构

R进程和阻塞进程

进程状态:挂起:

Linux操作:

 ​编辑

 R运行状态

S休眠状态

 T暂停状态:

kill

 kill -18 表示继续

kill -9 杀死进程

 D状态:深度睡眠状态:


进程状态:

 在我们的理解中,进程状态就是进程运行的状态,是这样吗?

操作系统简图

 假如我们有一个可执行程序bin.exe,假如我们想要把该程序加载到内存中,应该怎么操作呢?

调用进程bin.exe的详细过程 

1: 我们的可执行程序文件bin.exe是放在内存中的,假如我们想要把程序加载到内存中,我们首先会把bin.exe加载到内存中,然后生成pcb进程控制块,进程控制块的形式是一个结构体,结构体内部包括进程的所有属性,然后我们的cpu通过进程控制块来控制调用进程,但是注意cpu的数量远远小于进程,所以这些进程要以队列的形式进行排列,由cpu进行依此调用。 如图所示:

注释:cpu以队列的形式对进程进行调用

2:我们知道,程序还可以调用硬件,例如程序A中有printf函数,可以打印信息到显示器上,我们可以发现:进程的数量也是远大于硬件的,所以一个硬件也是对应多个进程的,所以进程不仅需要等待cpu的处理,也需要等待硬件的处理,如图所示:

 由上面的铺垫,我们可以知道:进程状态的定义。

进程状态:在运行队列中的进程的状态叫做进程状态。

进程状态的总结:

1:一个cpu对应一个运行队列

2:让进程进入队列,本质是让该进程的pcb进入队列

3:当进程pcb在运行队列中,进程状态就是R。

4:进程状态不是进程运行时的状态,还是进程在运行队列时的状态。

5:进程不仅要占用cpu的资源,还有可能调用外设(硬件)的资源。

cpu运行队列的结构

 进程队列分为两部分,第一部分是进程控制块指针,指向下一个进程的pcb

第二部分是其他属性,这个属性通常只是一个常数,例如1表示运行,0表示死亡,2表示睡眠等等。

R进程和阻塞进程

例如:cpu调用一个进程,该进程有一个fwrite函数,fwrite需要调用硬盘,但是硬盘被其他的进程占用了,那么cpu怎么操作呢?难道让cpu干等着吗?

答:cpu的速度非常快,效率很高,所以cpu一定不能干等着,cpu把该含有fwrite的进程从进程队列中拿出,把它放在硬盘的等待队列中,然后cpu开始处理下一个进程。

这个fwrite对应的进程就叫做阻塞进程

R进程:进程在cpu的运行队列。

阻塞进程:进程在硬件的等候队列。

 处于阻塞状态的Z进程,当硬件处理到这个进程时,这个进程从阻塞状态变成R状态,并且从硬件的等候队列拿到cpu的运行队列,由cpu处理过之后就可以访问外设了。

拿来拿去处理的都不是进程,而是进程的pcb。

进程状态:挂起:

 如图所示,我们的程序bin.exe被加载到内存中,pcb就是其对应的进程控制块,该进程需要调用硬件,所以该进程是阻塞进程,阻塞进程不会被立即调用,所以阻塞进程短期内并不能够被调用

当我们的进程数量很多时,内存已经快要装不下了,我们怎么处理呢?

答:因为阻塞进程并不会马上就运行,为了节省空间,我们可以把阻塞进程对应的代码和数据存放到磁盘中,阻塞进程所对应的内存就可以供其他进程来使用,进而节省了空间。

1:内存的呼入换出:将进程的相关数据加载或保存到硬盘上。

2:挂起进程一定是阻塞进程,阻塞进程不一定是挂起进程。

Linux操作:

 

 我们重点介绍这些进程状态

 R运行状态

我们首先创建两个文件

 myprocess.c对应的是我们进程的代码,Makefile对应的是我们的进程的依赖方法和依赖对象。

 

 我们对该进程进行调用。

 

 这个指令表示筛选出名字中由myprocess的进程,第一个就是我们需要的进程。

我们可以加上进程的标题,这样更方便查看。

 这里的R是run的缩写,表示运行状态。

S休眠状态

我们对进程的代码进行修改:

 然后我们对该进程进行调用

 

 在进程进行运行的时候,我们创建一个ssh渠道来查看进程的状态。

 我们的进程在运行途中,对应的状态却是S,表示的是休眠状态。

原因如下:我们的cpu是很快的,我们的printf进行调用时需要访问显示器,显示器是外设,比较慢,所以等显示器需要话比较长的时间。

这些时间如果按照百分比来划分的话:大约99%是在等外设就绪,1%的时间在打印数据。

所以,我们大概有99%可能都在等外设就绪,这时候进程处于阻塞状态,我们查看进程状态时,进程显示的是休眠状态。

休眠状态是阻塞状态的一种。

 T暂停状态:

我们对进程的代码进行修改

 我们运行进程:

 我们查看kill指令:

kill

 19号对应的就是暂停指令。

我们查看运行的进程:

 我们的进程的pid是5632,假如我们想要暂停进程时,我们可以输入指令:

当我们输入指令之后:

进程暂停。

 这时候,进程的状态变成T,表示暂停。

暂停也算是阻塞的一种

 kill -18 表示继续

 把暂停的进程恢复运行:

 接下来,查看进程的属性:

 进程属性变成了R,但是少了一个+号,这个是怎么回事呢?

我们先杀死该进程:

kill -9 杀死进程

 接下来,我们对进程代码进行编辑:

 我们对进程进行调用:

 我们查看进程的状态:

 进程中带有+号,进程在运行时,我们在shell输入指令不会生效,并且我们按ctrl+c可以结束掉该进程

 我们先暂停该进程,然后再继续运行该进程:

 这个时候,进程的状态是S

我们可以在进程运行状态下输入指令

 并且按CTRL+c不会终止指令。

 +状态表示的是前台进程,前台进程可以通过CTRL+C直接终止,并且一旦进程运行了,shell命令就无法解析了

-状态表示的是后台进程,后台进程不能通过CTRL+C直接终止,但是可以解析shell命令。

我们可以使用kill -9 来结束后台进程。

 D状态:深度睡眠状态:

D状态表示深度睡眠状态,d表示浅度睡眠,深度睡眠不可以被终止,浅度睡眠是可以被终止的

 进程A的作用是往磁盘中输入数据和信息,当进程空间不够时,操作系统会采用kill一些进程的方法来解决问题,假如我们kill了进程A,磁盘输入的信息也就失效了,这个时候,我们可以把进程A的状态修改为深度睡眠状态,在该状态下,进程A不会被操作系统杀死,只有通过断电或者进程自己醒来的方法解决。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

肿瘤内微生物群在癌症转移中的新作用

谷禾健康 癌症是一种复杂的疾病,归因于多因素变化,导致治疗策略困难。 90%的癌症患者死于复发或转移。癌症转移是恶性肿瘤进展的关键步骤,由癌细胞内在特性和外在环境因素决定。 一些微生物组通过诱导癌性上皮细胞和慢性炎症促进癌发生、癌症…

光耦合器:类型及其应用

光耦合器:类型及其应用 介绍 光耦合器(也称为光隔离器)是一种在两个隔离电路之间传输电信号的半导体器件。光耦合器由两部分组成:发射红外光的LED和检测LED光的光敏器件。这两个部件都装在一个带有连接销的黑匣子中。输入电路接收…

数据可视化笔记记录(二)pandas

笔记内容是根据B站上面的一位老师的视频而记录了,因为我也还在学习,所以个人理解可能会出现错误,若有错误请指出。另外这篇文章会很长 B站视频连接、 numpy,matplotlib的学习记录 pandas 学习记录 SerIes结构,一图胜千言 Seri…

实用工具:FastDoc 文档提取工具

实用工具:FastDoc 文档提取工具 简单、实用的 HTTP API 文档生成工具,支持 Spring MVC/Spring Boot 下的控制器信息提取,类似 Swagger 但稍有不同的机制。 在线演示地址在 https://framework.ajaxjs.com/demo/fast-doc/。 关于研发者这工具…

二三层转发原理

二层转发原理 数据帧 二层即数据链路层的转发是以数据帧的格式进行转发,数据帧的格式如下: 目的地址(Destination Address,DA) :可以是单独的地址,或者是广播或组播MAC地址。 源地址(Source Address,SA) :用来识别发送没备,在S…

听说你想用开发者工具调试我的网站?挺可以的啊。25

本篇博客重点为大家介绍,如何禁止用户在浏览器中查看源码,禁用开发者工具调试等前端需求 案例已更新到 爬虫训练场 文章目录禁用右键,禁用 F12禁用 ctrl U 查看源代码,禁用 ctrl shift i 打开开发者工具实现开发者工具无限 deb…

arcgis使用Python脚本进行批量截图

arcgis使用Python脚本进行批量截图 介绍 最近公司数据部那边有个需求,需要结合矢量数据和影像数据,进行批量截图,并且截图中只能有一个图斑,还要添加上相应的水印。 思路 一开始我是准备使用QGIS直接进行批量出图,…

Ant Design在处理业务表单中的一些实践

文章目录前言表单处理实践Modal 清空旧数据使用Form.create和getFieldDecorator对Form进行包装表单控件是switch自定义表单控件Table列表SelectshowSearch 用于在选择框中显示搜索框其他需要注意的组件Tabs其它前言 目前,很多中小企业前端实现采用了react&#xff…

二、总线控制

文章目录一、引子二、总线判优控制1.基本概念2.方式(1)集中式①链式查询方式②计数器定时查询方式③独立请求方式(2)分布式三、总线通信控制1.基本概念2.方式(1)同步通信①介绍②同步式数据输入③同步数据输…

数据结构与算法学习推荐

推荐:官网地址:http://localhost:8000/algorithm/github:https://github.com/paiDaXing-web/You-Dont-Know-Algorithm 点star 大话搜索搜索一般指在有限的状态空间中进行枚举,通过穷尽所有的可能来找到符合条件的解或者解的个数。…

佳能C5235彩色激光复印机复印有底灰

故障描述: 佳能C5235彩色激光复印机,复印的时候有不同颜色的底灰问题; 检测分析: 打印不同纯色的纸张进行测试发现每张纸的上面都有不同颜色的底灰; 拆机进行检测吧,先打开前盖,拧下左右两边的螺…

CMake基础教程

CMake最大优势是跨平台&#xff0c;可以根据不同的平台生成Makefile文件&#xff0c;看下CMake的基础使用。 cmake&#xff08;单目录单文件&#xff09; 第一个最简单的cmake构建。 demo1.cpp代码&#xff1a; #include <iostream>using namespace std;int main(int…

【基于机械臂触觉伺服的物体操控研究】UR5e动力学建模及代码实现

我的毕设题目定为《基于机械臂触觉伺服的物体操控研究》&#xff0c;这个系列主要用于记录做毕设的过程。 前言&#xff1a;UR系列是优傲公司的代表产品&#xff0c;也是目前比较通用的产品级机械臂。所以我打算用该机械臂进行毕设的仿真实现。关于其动力学建模&#xff0c;网…

台阶问题-

台阶问题 题目描述 有NNN级的台阶&#xff0c;你一开始在底部&#xff0c;每次可以向上迈最多KKK级台阶&#xff08;最少111级&#xff09;&#xff0c;问到达第NNN级台阶有多少种不同方式。 输入格式 两个正整数N&#xff0c;K。 输出格式 一个正整数&#xff0c;为不同…

JVM(一)——架构基础

JVM java虚拟机 java gc 主要回收的是 方法区 和 堆中的内容&#xff0c;以下架构图是重点&#xff1a; 方法区和堆是线程共享&#xff0c;java栈、本机方法栈、程序计数器是线程私有。 运行时数据区可以用Runtime.getRuntime()获取 字节码执行引擎&#xff0c;修改程序计数器…

不要怀疑了,个人也是可以做好跨境电商的!

近几年随着跨境电商卖家们赚得盆满钵满&#xff0c;许多人都想从中分一杯羹&#xff0c;进而入住了跨境电商市场&#xff0c;有人与一些公司企业合作&#xff0c;也有人选择了自己做跨境电商平台&#xff0c;个人做的优劣势又有哪些呢&#xff1f; 个人做跨境电商平台最明显突…

A V L树

概念 在之前介绍了搜索二叉树&#xff0c;但是当我们插入的数据若是有序或者接近于有序&#xff0c;那么此时查找的效率底下&#xff0c;于是俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法&#xff1a;当向二叉搜索树中插入新结点后&am…

javaEE学生教学实习计划申报系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 javaEE学生教学实习计划申报系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&…

正点原子【第四期】手把手教你学 Linux之驱动开发篇-01

学习目的 了解驱动开发和应用开发的过程&#xff0c;具有一定的基础就行 第一讲&#xff1a;linux驱动开发与裸机开发区别 刚开始听不懂很正常&#xff0c;等之后学了一点你就会知道它说啥了 第二讲&#xff1a;字符设备驱动开发基础 字符设备驱动是最简单的&#xff0c;块设…

C++ 移动语义

从拷贝说起我们知道&#xff0c;C中有拷贝构造函数和拷贝赋值运算符。那既然是拷贝&#xff0c;听上去就是开销很大的操作。没错&#xff0c;所谓拷贝&#xff0c;就是申请一块新的内存空间&#xff0c;然后将数据复制到新的内存空间中。如果一个对象中都是一些基本类型的数据的…