深入解析进程

news2024/11/16 21:28:38

在现代计算机系统中,进程是一个核心概念,它代表了程序的执行实例。通过并发执行多个进程,计算机能够提高效率和资源利用率。

1. 进程的概念

进程是指在计算机系统中正在执行的程序的实例。每个进程都有自己的地址空间、寄存器集合、堆栈和文件描述符等资源。进程的创建和销毁由操作系统负责管理。进程可以独立运行,也可以与其他进程进行通信和协作。进程是操作系统分配资源的基本单位。

2. 进程在系统中的管理 

2.1  描述

进程是类似于对象,有一些属性,所以需要 像 类/结构体 这样的概念来描述它

操作系统大多是 C/C++实现的,所以进程的描述大多使用的是结构体 (没有Java写的操作系统)

表示进程信息的结构体,被称为 PCB (进程控制块, Process Control Block)这个概念在说有操作系统中是通用的,说有的操作系统中的进程都可以被称为PCB,不过具体对应的结构体名称可能会有不同,例如Linux 中该结构体名称 为 task_struct

2.2 组织 

在操作系统中所有进程都会被以一定的数据结构进行组织起来, 例如 在Linux 中,使用的是链表把所有的进程给串联起来,当我们看到任务管理器中的进程时,意味着系统内部就在遍历链表,并打印每个节点的相关信息。

如果运行一个新的程序,于是系统中就会多一个进程,多出的这个进程,就需要构造出一个新的 PCB 并且添加到链表上

如果某个运行的程序,退出了,就需要把对应的 PCB 从链表中删除, 并且销毁对应的 PCB 资源 

3. CPU的资源分配

一个CPU可能有一个核心可能有多个核心,在同一时刻,一个核心上只能有一个进程,以我的电脑为例:

我的电脑有16个逻辑核心,也就是说,同一时刻我的电脑上只能运行16个进程,但是我电脑上却不止运行了16个进程,于是就引出了一个概念 分时复用(并发):让多个进程轮流在核心上运行。

假设只有一个核心,让进程1先执行一会,然后让进程2执行, 然后进程三执行.....然后又到进程1执行,以此类推,只要切换的速度足够快人是感知不到这个切换的过程的,于是在人眼中看起来,一个核心在同时执行多个进程,这就叫做并发

如果有多个核心 ,那么同时就可以有多个不同的进程,同时执行,这种同时执行不是靠快速切换来模拟出来的,称为“并行执行”  ,每个核心任然会进行分时复用。

现在的计算机执行过程 往往是 并行+并发 同时存在的, 两个进程是并行执行还是并发执行 是看系统的调度的,系统如何调度,取决于系统调度器模块的实现,常规手段是无法干预的。因此往往把“并行” 和 “并发” 统称为“并发”

我们打开任务管理器看见进程所占的CPU百分比是单位时间内 该进程在CPU上执行的时间比例

 

4. PCB 中的核心属性

PCB 这个结构体,是一个非常庞大的结构体,有上百个属性,这里我们只需要了解几个重要的属性

4.1 进程标识符(Process Identifier,PID)

每个进程都有一个唯一的PID,用于标识和管理进程,此处是通过一个整数来进行区分的(从1开始累加),系统会保证同一个机器上,同一时间,每个进程的PID是唯一的,如果要对某个进程进行一定的操作,就可以用PID进行区分

 

例如:在任务管理器中选中某个进程点击结束任务,此时就是任务管理器获取到你选中的进程的PID 然后带哦用一个系统的 API 把 PID 作为参数传进去 从而完成这里的结束任务的操作。

4.2 内存指针

进程运行过程中,需要消耗一些系统资源,其中内存就是一种重要的资源。进程想要使用内存需要从系统这里申请,系统给进程分配了一块空间才能使用。每个进程都只能使用自己申请到的内存。

内存指针就是用来描述这个进程,能使用哪些内存。

当开始运行一个进程的时候,系统会先把这个执行文件包含的指令和数据先加载到内存中,然后再创建进程,让进程开始执行

4.3 文件描述符表 

进程经常要访问硬盘

操作系统对于硬盘这样的硬件设备进行了封装 ->"文件"

一个进程想要操作文件,需要先打开文件 ,打开文件就是 让进程在文件描述符表中分配一个表项(构造一个结构体)表示这个文件的相关信息,例如C语言中的 fopen函数

4.4 状态

描述,某个进程,是否能够 去 CPU上执行,比如某个进程 通过Scanner等待用户输入,但是用户什么时候输入是不确定的,所以在用户输入前就不能让这个进程在CPU上

此时这个进程的状态就被称为 “阻塞状态”

阻塞状态:当前进程不方便去CPU上执行,不应该去调度它

就绪状态:当前进程随时可以去CPU上执行,等待系统调用

4.5 优先级 

多个进程等待系统调度时,调度的先后顺序,在CPU上执行的时间长短都是可以调配的。

例如在你玩游戏时,当前运行的游戏,优先级肯定是比大多数进程更高的。

4.6 记账信息 

对每个进程在CPU上调度的时间进程一个统计 ,针对这个结果对进程的调度进行一个调整

4.7 上下文 

上下文是支持进程调度的重要信息,相当于游戏的存档和读档。

每个进程在运行过程中,会有很多的中间结果,在CPU的寄存器中,操作系统对进程的调度可以认为是随机的,任何一个进程执行到任何一条指令的时候都有可能被调度出CPU,上下文就可以保存当前进程执行的进度,确保下次该进程再次进出CPU执行时,能够从上次被调度出CPU时的进度开始执行。

例如:执行 3 + 14时,刚把 3 和 14 存到寄存器中,这个进程就被调度走了,等这个进程再次进入CPU执行时,就会直接执行后续的指令,不会再次执行 把3 和 14 存到寄存器的指令

当操作系统决定切换到另一个进程时,需要保存当前进程的上下文信息,并加载下一个进程的上下文。 

5. 进程间通信

多个进程之间需要进行通信和协作,以实现共享资源、数据传输和协同处理等目标。常见的进程间通信方法包括:

  1. 管道(Pipe):一种单向的通信方式,可以在具有亲缘关系的进程之间进行通信。
  2. 共享内存(Shared Memory):多个进程可以访问同一块共享内存,实现高速的数据传输和共享。
  3. 消息队列(Message Queue):多个进程可以通过消息队列进行异步通信,将消息发送到队列中,其他进程可以从队列中接收消息。
  4. 套接字(Socket):用于不同计算机之间的进程间通信,可以通过网络进行数据传输。

 

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

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

相关文章

ANN人工神经网络:从基础认知到现实理解

什么是神经网络? 神经网络的再认知 前面我们了解过,人工神经网络(Artificial Neural Network,ANN)是人类为了模仿人大脑的神经网络结构创建出来的一种计算机系统结构。但如果仔细深入到神经网络当中,会慢…

springMVC实验(二)—调式工具APIFOX的使用

【知识要点】 后端开发调试工具 前后端分离已经成为互联网类软件开发主流模式,没有前端操作的支持,如何调试后端程序的就是开发人员必须解决的问题。如:get类请求可以直接使用浏览器就能模拟测试,但是post、put等类型的请求&…

open3d-点云及其操作

open3d提供了一个专门用于点云的数据结构 PointCloud。 class PointCloud(Geometry3D):color # 颜色normals # 法向量points # 点云def __init__(self, *args, **kwargs):"""__init__(*args, **kwargs)Overloaded function.1. __init__(self: open3d.cpu.py…

对某登录站点的JS前端逆向思路

前言 js逆向一直没有相关了解,虽然目前渗透遇见的不是很多,大多数遇见的要么不加密,要么无法实现其加密流程,不过最近看到了一个较为简单的站点正好能够逆向出来,就做了简单记录。本文旨在介绍js逆向的一些基础思路&a…

Antd可编辑表格初始数据为空,单元格不能编辑的解决办法

黑科技超简单: 给table表格增加行className rowClassName{() > editable-row} 然后设置可编辑表格的行样式 .editable-row:hover .editable-cell-value-wrap {border: 1px solid #d9d9d9;border-radius: 4px;padding: 4px 11px;}.editable-cell-value-wrap {padding: 5px…

网络调试助手 连接Onenet 多协议接入平台 TCP透传协议

onenet文档链接 多协议接入地址 打开Onenet平台,多协议接入 选择TCP透传协议,点击添加产品,输入信息,点击确认 点击设备列表,添加设备 下面需要上传一个解析脚本文件该文件的下载地址lua文件下载地址 建立连接 设备…

Vmware虚拟化引擎开启

VMware虚拟化引擎开启可以优化虚拟机性能和安全性,但总会出现打开后报错的情况,需要按以下步骤设置处理。 通过任务管理器查看CPU是否已经启用虚拟化 在启用或关闭windows功能中去掉和虚拟化配置相关的功能项后重启 在VMware中选择需要的虚拟化引擎&…

上海震坤行:水泥行业数字化采购的趋势、策略与实践

上海震坤行:水泥行业数字化采购的趋势、策略与实践 在中国水泥协会发布的《2023年上半年水泥行业经济运行及下半年展望》中提到了水泥行业的发展现状——2023年上半年,在全球经济增长放缓、国内经济延续恢复态势、但市场需求不足的宏观环境下&#xff0…

Leetcode394. 字符串解码

Every day a Leetcode 题目来源:394. 字符串解码 解法1:栈 本题中可能出现括号嵌套的情况,比如 2[a2[bc]],这种情况下我们可以先转化成 2[abcbc],在转化成 abcbcabcbc。我们可以把字母、数字和括号看成是独立的 TO…

leetcode LCR 179. 查找总价格为目标值的两个商品(优质解法)

代码&#xff1a; class Solution {public int[] twoSum(int[] price, int target) {int lengthprice.length;int left0;int rightlength-1;while (left<right){if(price[left]price[right]>target){right--;}else if(price[left]price[right]<target){left;}else {b…

express+mySql实现用户注册、登录和身份认证

expressmySql实现用户注册、登录和身份认证 注册 注册时需要对用户密码进行加密入库&#xff0c;提高账户的安全性。用户登录时再将密码以相同的方式进行加密&#xff0c;再与数据库中存储的密码进行比对&#xff0c;相同则表示登录成功。 安装加密依赖包bcryptjs cnpm insta…

毫无基础的人如何入门 Python ?--找对学习入口是关键!

1.行百里者半三十 不少学生或职场人士总面临这样一种窘境&#xff1a;数字化转型大背景、大趋势下&#xff0c;感觉非常有必要学习Python等分析工具&#xff0c;但在真正学习Python的各种语言规则时&#xff0c;往往体验不到知识的乐趣&#xff0c;翻看个别章节后即束之高阁。…

循环神经网络RNN

1. 背景 RNN(Recurrent Neural Networks) CNN利用输入中的空间几何结构信息&#xff1b;RNN利用输入数据的序列化特性。 2. SimpleRNN单元 传统多层感知机网络假设所有的输入数据之间相互独立&#xff0c;但这对于序列化数据是不成立的。RNN单元用隐藏状态或记忆引入这种依赖…

力扣 --- 三数之和

目录 题目描述&#xff1a; 思路描述&#xff1a; 代码&#xff1a; 提交结果&#xff1a; 官方代码&#xff1a; 官方提交结果&#xff1a; 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k…

【虚拟机】Docker基础 【二】

2.2.数据卷 容器是隔离环境&#xff0c;容器内程序的文件、配置、运行时产生的容器都在容器内部&#xff0c;我们要读写容器内的文件非常不方便。大家思考几个问题&#xff1a; 如果要升级MySQL版本&#xff0c;需要销毁旧容器&#xff0c;那么数据岂不是跟着被销毁了&#x…

vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?

面试官&#xff1a;vue要做权限管理该怎么做&#xff1f;如果控制到按钮级别的权限怎么做&#xff1f; 一、是什么 权限是对特定资源的访问许可&#xff0c;所谓权限控制&#xff0c;也就是确保用户只能访问到被分配的资源 而前端权限归根结底是请求的发起权&#xff0c;请求…

上海震坤行被评为虹桥生产线互联网服务高质量发展平台

上海震坤行被评为虹桥生产线互联网服务高质量发展平台 10月12日&#xff0c;新一期“潮涌浦江投资虹桥”活动暨“战略赋能新机遇&#xff0c;开放引领新高地”——2023虹桥国际中央商务区投资促进大会在上海虹桥举行。 本次活动旨在释放关于推动虹桥国际开放枢纽进一步提升能级…

Attention机制(笔记)

参考&#xff1a;2.3.2注意力机制-part1_哔哩哔哩_bilibili 什么是attention&#xff1f; 答&#xff1a;注意力放在事物最有辨识度的部分 attention计算机制&#xff1a; 为什么用这个公式可以得到attention&#xff1f; 补充说明&#xff08;chatGPT给出的解释&#xff09;&…

Vue中 实现自定义指令(directive)及应用场景

一、Vue2 1. 指令钩子函数 一个指令定义对象可以提供如下几个钩子函数 (均为可选)&#xff1a; bind 只调用一次&#xff0c;指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。inserted 被绑定元素插入父节点时调用 (仅保证父节点存在&#xff0c;但不一定已…

高等数学中微分方程的种类及其解法

1 微分方程的基本概念 1.1 微分方程 含导数或微分的方程,称为微分方程 1.2 微分方程的阶 微分方程中所含的导数或微分的最高阶数,称为该微分方程的阶数 1.3 微分方程的解 使得微分方程成立的函数,称为微分方程的解,微分方程的解可分为通解和特解 不含任意常数的微分方程的…