深入解析进程

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

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.mzph.cn/news/184428.shtml

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

相关文章

【Linux】OpenSSH 命令注入漏洞(CVE-2020-15778)(iptables屏蔽22端口方式)

背景 漏洞名称:OpenSSH 命令注入漏洞(CVE-2020-15778) 详细描述:OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密&#…

DaVinci Resolve Studio达芬奇软件 18.6.3

DaVinci Resolve Studio 18是一款专业的视频编辑和调色软件,适用于电影、电视节目、广告等各种视觉媒体的制作。它具有完整的后期制作功能,包括剪辑、调色、特效、音频处理等。 以下是DaVinci Resolve Studio 18的主要特点: - 提供了全面的视…

CAN网络出现错误帧从哪些方面去分析解决

标题:CAN网络出现错误帧从哪些方面去分析 实例1: 断电重启后,会有错误帧产生。 检查方案: 查看收发模块的初始化、使能是否在发送CAN报文之前完成? 实例2: 周期性报文,有时会冒出一帧错误帧&…

【接口自动化】selenium库也有大用场(获取cookie)

相信有些童鞋在做接口、或者说接口自动化测试的过程中会遇到这样的场景:测试的接口,必须是需要登录后才能发起请求成功的。 那么怎么解决呢? 本着团队协作的精神,我们就去让开发同学开个后门,给你个“万能”值&#x…

Condition 源码解析

Condition 源码解析 文章目录 Condition 源码解析一、Condition二、Condition 源码解读2.1. lock.newCondition() 获取 Condition 对象2.2. condition.await() 阻塞过程2.3. condition.signal() 唤醒过程2.4. condition.await() 被唤醒后 三、总结 一、Condition 在并发情况下…

【网络奇遇之旅】:那年我与计算机网络的初相遇

🎥 屿小夏 : 个人主页 🔥个人专栏 : 计算机网络 🌄 莫道桑榆晚,为霞尚满天! 文章目录 一. 前言二. 计算机网络的定义三. 计算机网络的功能3.1 资源共享3.2 通信功能3.3 其他功能 四. 计算机网络…

基于APM(PIX)飞控和missionplanner制作遥控无人车-从零搭建自主pix无人车无人履带车坦克-2(以乐迪crossflight飞控为例)

这里重点以乐迪crossflight飞控为例进行组装调试。 1.刷写固件 安装最新版的乐迪地面站,在官网可以下载。由于产品里面不好找到对应的飞控,可以在首页滑动图片里进入。 1.连接飞控和电脑,查看com口,安装驱动。 2.刷写固件。如果…

Web实现悬浮球-可点击拖拽禁止区域

这次要实现的是这种效果,能够在页面上推拽和点击的,拖拽的话,就跟随鼠标移动,点击的话,就触发新的行为,当然也有指定某些区域不能拖拽,接下来就一起来看看有什么难点吧~ 需要监听的鼠标事件 既…

理解DALL-E 2

1.简介 DALL-E 2的效果想必大家都已经很清楚了,效果是非常惊人的,该篇文章就是讲一下DALL-E 2的原理是什么。 2.方法 DALL-E 2的原理不难理解,前提是你知道CLIP。简单来说,CLIP是一个由文本和图片多模态训练的一个zero-shot模型…

IDEA专栏—重装IDEA的配置

文章目录 1、maven路径2、默认文件路径3、插件4、导包顺序5、快捷键6、调整配置插件 1、maven路径 2、默认文件路径 3、插件 4、导包顺序 import static all other imports <blank line> import java.* import javax.* <blank line> import all other imports <…

python实现获取aws route53域名信息

最近由于工作原因接触到aws的服务&#xff0c;我需要实时获取所有的域名信息&#xff0c;用于对其进行扫描&#xff0c;因此写了一个自动化爬取脚本 给需要的人分享。 1.基础准备 代码环境&#xff1a;python3 第三方库&#xff1a;boto3 &#xff08;安装方法pip install…

虚幻学习笔记7—蓝图接口

一、前言 蓝图接口就是可以在蓝图中实现的接口&#xff0c;有它方便的地方&#xff0c;可以很方便的调用到实现了接口的函数。 二、实现 2.1、创建一个蓝图接口 1&#xff09;可以添加多个函数。 2&#xff09;函数在蓝图接口中只能规定输入和输出参数。 只有输入参数的可以…

SSM校园学习助手系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 校园学习助手系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

C语言--每日选择题--Day30

第一题 1. i 5&#xff0c;j 7&#xff0c;i | j 等于多少&#xff1f; A&#xff1a;1 B&#xff1a;3 C&#xff1a;5 D&#xff1a;7 答案及解析 D &#xff5c;这个是按位或运算符&#xff0c;两个数的二进制位&#xff0c;有1为1&#xff0c;同0为0&#xff1b; i的二进…

ubuntu下训练自己的yolov5数据集

参考文档 yolov5-github yolov5-github-训练文档 csdn训练博客 一、配置环境 1.1 安装依赖包 前往清华源官方地址 选择适合自己的版本替换自己的源 # 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak # 修改源文件 # 更新 sudo apt update &&a…

虚拟机VMware下CentOS7.9对磁盘扩容

首先是在VMware虚拟下对机器进行关机&#xff0c;然后扩容后启动机器&#xff08;操作简单&#xff0c;忽略&#xff0c;网上很多&#xff09; 开始增加磁盘空间 查看磁盘空间 发现此时磁盘空间仍然没变化 df -lh 查看当前磁盘分区信息 fdisk -l 对新加磁盘空间进行分区操…

UG\NX二次开发 创建对象属性UF_ATTR_assign

文章作者:里海 来源网站:里海NX二次开发3000例专栏 感谢粉丝订阅 感谢 weixin_43890371 订阅本专栏,非常感谢。 简介 创建对象属性UF_ATTR_assign 这个函数在后续NX版本中被UF_ATTR_set_user_attribute替代,新的函数使用例子请参阅这篇文章《UG\NX二次开发 创建对象属性UF_…

UG\NX二次开发 获取对象上属性的锁定状态UF_ATTR_ask_locked

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 感谢粉丝订阅 感谢 2301_80435318 开发 订阅本专栏&#xff0c;非常感谢。 简介 设置对象上属性的锁定状态UF_ATTR_set_locked&#xff0c;需要先在“用户默认设置”中勾选“通过NX Open锁定属性”&…

shiro-cas处理请求的流程

1.shiro框架处理请求&#xff0c;首先会先经过AccessControlFilter的onPreHandle方法。 2.onPreHandle中 ①isAccessAllowed&#xff1a;判断用户是否登录 在登录的情况下会走此方法&#xff0c;此方法返回true直接访问控制器&#xff1b; ②onAccessDenied&#xff1a;是否是拒…

如何保证缓存和数据库的双写一致性?

一、什么是数据库和缓存双写一致性&#xff1f; 在分布式系统中&#xff0c;数据库和缓存会搭配一起使用&#xff0c;以此来保证程序的整体查询性能。也就说&#xff0c;分布式系统为了缓解数据库查询的压力&#xff0c;会将查出来的数据保存在缓存中&#xff0c;下次再查询时…