【Linux】怎么理解进程

news2024/11/17 6:02:33

作者阿润菜菜
📖专栏Liunx系统编程

本文通过冯诺依曼体系结构(硬件部分)和操作系统(软件部分)为基础来介绍我们应该如何理解进程,为后续的学习做铺垫。

本文目录

  • 一、预备知识
    • 1.建立冯诺依曼体系模型
    • 2.理解操作系统
  • 二、理解进程
    • 1.描述进程 - PCB
    • 2.组织进程
    • 3.查看进程

一、预备知识

1.建立冯诺依曼体系模型

截至目前,我们所认识的计算机,都是由一个个的硬件组件组成。

  • 输入单元:包括键盘,鼠标,扫描仪等
  • 中央处理器:CPU含有运算器和控制器等
  • 输出单元:显示器,打印机等

而这些硬件不管是集成在主板上的各种电路还是拔插式的CPU和外设等都是按照冯诺依曼体系进行走线构造的 。生活中,我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
这里我们重点讲解冯诺依曼体系结构中内存的江湖地位
在这里插入图片描述
关于冯诺依曼,必须强调几点:

这里的存储器指的是内存
不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
一句话,所有设备都只能直接和内存打交道。

在硬件层面上:内存起到适配作用。由于输入输出处理的速度和CPU处理的速度不一致,内存可以起到过渡缓冲作用,消除速度差,从而实现在硬件利用上达到一种性价比非常高的体系结构
在数据层面上:内存起到数据预加载作用。我们知道输入输出这些外围设备的数据处理速度是比CPU慢很多的,我们还知道磁盘是擅长存储数据的,CPU是擅长处理数据的,如果让磁盘和CPU直接沟通,磁盘传输速度慢,每次只能传输一小部分数据,就势必会浪费的CPU擅长处理数据的优点,所以为了计算机各硬件的最优性,冯诺依曼体系引入了内存,内存的数据传输速度高于磁盘,可以一次性传输大量数据,这样CPU进行数据处理就可以直接从内存读取,大大提高了处理效率。

为什么写的代码要加载到内存?因为这是体系结构的规定。
图示:
在这里插入图片描述
那问题来了:你凭什么保证存储器能预加载外设中的大部分数据呢?外设里那么多数据动不动几十个G甚至一个T而内存才几个G你怎么选择哪部分数据要预加载?内存不够了怎么办?凭什么先执行A程序不执行B程序?怎么管理内存分配的?等等问题的答案就是:操作系统会处理这些各种问题(局部原理)

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?
理解数据是如何流向的
假如你和你的朋友,QQ发送了一句 在吗? 整个信息是如何在体系结构中流动的?
简单说从打字开始从你的数据外设输入设备流入内存(存储器)进入CPU处理流出输出设备,进入云服务器相似过程处理数据流入你朋友家的计算机冯诺依曼体系结构中处理最终实现显示屏上打印信息

在这里插入图片描述

2.理解操作系统

操作系统 — 一款进行软硬件资源管理的软件
管理的本质:先描述(利用struct结构体保存各种数据信息),再组织(增删查改等操作)
请参考这篇文章:如何理解操作系统
在这里插入图片描述

二、理解进程

我们看完预备知识,知道了操作系统管理的本质是:先描述,再组织
操作系统会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫作系统调用

1.描述进程 - PCB

首先我们应知道程序的本质其实就是文件,二进制文件,这些文件保存在磁盘中,而当一个程序文件被加载到内存中,我们就称之为进程
所以我们以前的任何启动并运行程序的行为-- 都是由操作系统帮助我们将程序转换为进程–完成特定的任务。简单点说,就是当你打开一个程序或者一个app,都会转换成一个进程。
在我们的windows任务管理器中就能看到很多正在运行和后台运行的进程,对于这么多的进程,操作系统是一定要进行管理的,那么操作系统是怎么管理的呢?首先我们先看看操作系统怎么描述进程:
在这里插入图片描述
我们知道文件=内容+属性。而进程与此类似,操作系统同样为进程赋予了属性信息。
操作系统将进程信息放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct(PCB的一种)
我们这里以linux系统下的PCB来讲解。
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息
在这里插入图片描述
task_ struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息
    在这里插入图片描述

2.组织进程

什么是 进程 =内核关于进程的相关数据结构(进程控制块PCB) + 当前进程的代码和数据(磁盘中读取)
我们知道管理的本质是对数据进行管理,管理的逻辑是先描述,再组织,在Linux中,操作系统会通过task_struct结构体将每一个进程的所有属性抽象化描述起来,Linux操作系统再通过双向循环链表的数据结构将数量庞大的进程进行组织,这样的话,管理进程就变成了对进程所对应的PCB进行相关的管理。

我们可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。
在这里插入图片描述
进程的数据被存放在一个叫做进程控制块的数据结构当中,进程控制块又可以称之为PCB(process control block),进程控制块中包含进程标识符、上下文数据、进程调度信息、进程控制信息、IO状态信息以及进程对应的磁盘代码等,Linux操作系统中进程控制块其实就是struct task_struct结构体,windows操作系统中进程控制块其实就是执行体进程块(struct _EPROCESS )

3.查看进程

一、ls指令

ls /proc/进程的pid

在linux中进程的信息可以通过 /proc 系统文件夹查看,记住进程也可以是一个目录,linux一切皆文件。
如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹
在这里插入图片描述
二、ps指令
由于ps命令能够支持的系统类型相当的多,所以选项多的离谱!我们这只列举常用的
示例:

ps axo pid,comm,pcpu # 查看进程的PID、名称以及CPU 占用率
ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序
ps aux | sort -nk 3  # 按 CPU 资源的使用量对进程进行排序
ps -A # 显示所有进程信息
ps -u root # 显示指定用户信息
ps -efL # 查看线程数
ps -e -o "%C : %p :%z : %a"|sort -k5 -nr # 查看进程并按内存使用大小排列
ps -ef # 显示所有进程信息,连同命令行
ps -ef | grep ssh # ps 与grep 常用组合用法,查找特定进程
ps -C nginx # 通过名字或命令搜索进程
ps aux --sort=-pcpu,+pmem # CPU或者内存进行排序,-降序,+升序
ps -f --forest -C nginx # 用树的风格显示进程的层次关系
ps -o pid,uname,comm -C nginx # 显示一个父进程的子进程
ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm # 重定义标签
ps -e -o pid,comm,etime # 显示进程运行的时间
ps -aux | grep named # 查看named进程详细信息
ps -o command -p 91730 | sed -n 2p # 通过进程id获取服务名称

三、top命令
top命令 可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。类似于windows任务管理器。

top(选项)

示例:

top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4147888k total,  2493092k used,  1654796k free,   158188k buffers
Swap:  5144568k total,       56k used,  5144512k free,  2013180k cached

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

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

相关文章

误差逆传播算法公式理解及推导

前言:公式理解及推导参考自《机器学习》周志华 P101 BP网络 BP网络一般是指由 误差逆传播(error BackPropagation, BP)算法训练的多层前馈神经网络。 给定训练集 D{(x1,y1)D\left\{\left(\boldsymbol{x}_1, \boldsymbol{y}_1\right)\right…

2023年我的Flag已准备完毕

前言: 😄作者简介:小曾同学.com,小伙伴们也可以叫我小曾,一个致力于测试开发的博主⛽️ 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭&#xff1a…

用力过猛,把服务压挂了?

背景 在刚开始进行压测的时候,我也不知道需要提前分析下压测的QPS目标,也不知道说第一步压测的预估值是多少,结果一下子干上去,就把测试环境的服务给整挂了,然后就迎来了一大波的投诉(好惨呐&#xff09…

【6-循环神经网络】北京大学TensorFlow2.0

课程地址:【北京大学】Tensorflow2.0_哔哩哔哩_bilibiliPython3.7和TensorFlow2.1六讲:神经网络计算:神经网络的计算过程,搭建第一个神经网络模型神经网络优化:神经网络的优化方法,掌握学习率、激活函数、损…

基于微信小程序的校园自助打印系统小程序

文末联系获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.…

GJB 5000B二级-RDM需求开发与管理

一、主要变化情况 新增3项(金色)、合并12->5项(绿色)、修订3项(蓝色) 合并的主要内容 1、合并过程域:原标准中RD与ReqM合并为RDM   需求开发与需求管理的过程活动紧密相关,在全生命周期中不可分割。 2、合并实践条目:精炼实践,聚焦重点   a)ReqM SP1.1“获…

UE运行时动态设置屏幕分辨率

文章目录 1.实现目标2.实现过程2.1 控制台直接输入命令2.2 通过蓝图设置3.参考资料1.实现目标 在UE中以独立进程(Standalone Game)方式启动游戏,并在运行时动态修改游戏窗口的屏幕分辨率大小,如下图所示屏幕大小从1000x800修改为600x400。 2.实现过程 参考文档和资料,通…

微服务服务治理

服务治理什么是服务治理?第一部分 服务注册第二部分 服务发现Nacos(常见注册中心)入门搭建Nacos环境Nacos远程调用实现商品服务的负载均衡什么是负载均衡?手动实现负载均衡利用组件实现负载均衡修改负载均衡策略什么是服务治理? 服务治理是微…

PySpark sql 中一些函数的总结(持续更新)

看到什么函数就记录了,没有什么逻辑关系 spark 中DataFrame 和 pandas的DataFrame的区别 1. F.split() 和 df.withColumn() from pyspark.sql import SparkSession from pyspark.sql import functions as F from pyspark.sql.types import *df spark.sql(sql) sp…

打开Jupyter notebook没有虚拟环境内核

放了个假,今天准备打开anaconda中的jupyter notebook重温一下之前的文档,结果双击Anaconda-Navigator出现了【应用程序“Anaconda-Navigator”无法打开】,想着利用终端也可以操作,于是使用下面命令激活了环境并打开jupter noteboo…

JZ11 旋转数组的最小数字

【答案解析】:暴力破解:遍历数组找出最小值即可 更优思想:采用二分查找,这个题主要分析三种旋转情况[1, 2, 3, 4, 5],使用中间值与右端进行比较。 1. 中间大于右边[3, 4, 5, 1, 2],这种情况下,最…

Spring Framework-01

Spring两大核心技术 1.IOC 2.AOP Spring 1 Spring Framework 1.核心层 Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块 2.AOP层 AOP:面向切面编程,它依赖核心层容器,目的是在不改变原有代码的前…

国内那么多的低代码平台,究竟哪家比较强?

国内有特色的低代码快速开发平台产品有哪些?这篇就来介绍下目前市面上主要的几家低代码开发平台! 简道云、明道云、IVX这几家目前是无代码赛道的明星选手,在市场综合表现上名列前茅。宜创、红圈营销虽也极具潜力,但在市场表现力上…

virsh日常管理命令

virsh日常管理命令virsh日常管理命令创建vm实例规范网卡编号从0开始Centos7最小化安装环境勾选VM实例建议只分配/分区查看vm列表启动vm实例--startvm实例(软)关机--shutdownvm实例断电关机--destroyvm实例(软)重启--rebootvm实例重命名--domrenamevm实例挂起--suspend查看vm实例…

Elasticsearch:从 Kafka 到 Elasticsearch 的实时用户配置文件数据管道

如今,网络服务、数字媒体、传感器日志数据等众多来源产生了大量数据,只有一小部分数据得到妥善管理或利用来创造价值。读取大量数据、处理数据并根据这些数据采取行动比以往任何时候都更具挑战性。 在这篇文章中,我试图展示: 在…

Discord教程:Discord账号注册、Discord多账号登录和管理

Discord最初是为游戏玩家在群聊和交流而创建的。但自疫情爆发以来,许多企业、公司和初创公司发现,居家办公时使用Discord进行日常沟通非常便捷。 Discord不再是仅限于游戏玩家,平台建立了不同于其他任何社交空间的新空间,封闭又开…

9、矩阵的简单运算

目录 一、矩阵的加减运算 二、矩阵的乘方运算 1.数与矩阵的乘法 2.矩阵与矩阵的乘法 三、矩阵的除法 四、矩阵的幂运算 五、矩阵元素的查找 六、矩阵元素的排序 七、矩阵元素的求和 八、矩阵元素的求积 九、矩阵元素的差分 一、矩阵的加减运算 进行矩阵加法、减法运…

前端学习第四站——CSS全面学习基础篇

目录 一、基础认知 1.1 CSS的介绍 1.2 语法规则 1.3 CSS初体验 1.4 CSS初识-小结 2.1 CSS引入方式 二、基础选择器 1.1 选择器的作用 1.2 标签选择器 1.3. 类选择器 1.4 id选择器 补充:类和id的区别 1.5 通配符选择器 三、字体和文本样式 1. 字体样式 …

python数据可视化开发(2):pandas读取Excel的数据格式处理(数据读取、指定列数据、DataFrame转json、数学运算、透视表运算输出)

系列文章目录 python开发低代码数据可视化大屏:pandas.read_excel读取表格python实现直接读取excle数据实现的百度地图标注python数据可视化开发(1):Matplotlib库基础知识 文章目录系列文章目录前言实践目标一、读取Excel数据read_excel参数说明读取全部…

Launcher应用列表内搜索框显示异常

问题描述 应用列表界面搜索框显示异常。本地试验后发现以下规律。 1、删除几个底边栏图标 2、旋转屏幕 3、进入应用列表,观察上方搜索框显示 问题分析 此问题是launcher内部界面显示问题,比较初级。找到规律后,发现应用列表内搜索框和底边…