【JavaEE】操作系统内核中的进程

news2024/9/24 19:16:32

文章目录

  • 💐什么叫做进程
  • 💐进程在系统中是如何进行管理的
  • 💐PCB中一些比较重要的属性
  • 💐进程持有的CPU资源——进程调度
  • 💐内存分配——内存管理

💐什么叫做进程

进程概念:一个已经跑起来的程序就叫做进程;比如你正在使用微信聊天,微信正在运行,这就是一个进程,一个单一的软件不能称为进程

每个进程要想运行,就会消耗一定的系统资源,有的会消耗cpu,有的会消耗内存,有的会消耗磁盘….等等;

每一个进程在执行时,操作系统都会为每一个进程分配资源,而每一个进程所持有的资源都是独立的,不会产生多个进程共享资源的情况;举个例子:

比如:我们去银行办理个人业务时,每个人都会有一个专属的业务员为你服务,你就可以进行取钱等等一系列的操作,这就相当于一个人就是一个进程,每个专属的业务员就是分配的资源;所以就不会出现一个业务员同时为两个人服务的情况,这样,你自己的个人隐私不久全都曝光了么,这样就像多个进程不会共享同一个份资源一样

所以,每一个进程都是系统资源分配的基本单位,什么意思呢?就像在疫情期间,政府为每个家庭发放蔬菜,每个家庭所得到的蔬菜都是一样的,而资源就像是蔬菜,需要给每一个进程分配;在打开一台电脑后,并不是只有几个进程,而是会有上百个进程在运行,那么,既然有这么多进程,操作系统是如何管理的呢?

在这里插入图片描述

💐进程在系统中是如何进行管理的

只有某个东西非常多时才会进行管理,如果只有一个两个东西,那么也就不会去考虑管理了,而管理主要从两个角度进行:

1.描述:使用类或结构体,把被管理的一个对象的各个属性都表示出来; 意思就是:你要管理某一个对象,肯定是要管理这个对象里的具体东西,所以就需要把被管理对象中的各个部分给描述出来;

2.组织:使用数据结构把这些表示出来的对象串接起来,为了后序的增删查改

既然要先进行描述,那么在操作系统中会有一个专门的结构体

描述进程的属性,这里为什么要作结构体而不叫做类呢?因为操作系统的内核是由C/C++写的,这个结构体称为“进程控制块”PCB;

使用PCB表述进程属性:一个进程可以使用一个或多个PCB表示 ,系统中会使用类似于双向链表这样的数据结构来组织多个PCB,而创建新的进程就是创建PCB,并且插入到链表中,销毁进程就是把PCB从链表中删除,展示进程列表就相当于遍历链表中的每一个节点;

既然PCB是用来描述进程的许多属性,那么下面就介绍几种比较重要的属性:

💐PCB中一些比较重要的属性

**1.pid:**进程的身份标识,每个进程都会有一个pid,同一时刻,不同进程间的pid是不同的;

2.内存指针(进程持有的内存资源)

因为在程序运行时,会产生大量的的数据,而这些数据都需要保存起来,所以每一个进程在运行的时候,都会分配一定的内存空间,但是这个进程的内存空间具体是在哪里?以及分配的内存空间中都保存了哪些部分?每一个部分都是干啥的?此时就会有一组指针进行区分;

比如:在进程的内存空间中,需要有一部分区域存储要执行的指令,一部分区域存储指令依赖的数据,一部分区域存储一些运行时产生的临时数据;所以就会有一组内存指针来区分;

3.文件描述符表(进程持有的硬盘资源)

因为文件都是存储在硬盘上面的,而我们对硬盘的操作时并不是直接操作硬盘的,在代码方面,我们其实是通过操作文件来使用硬盘的,在硬件方面就称为了操作硬盘。

一个进程也需要涉及到硬盘,所以就需要按照文件的方式向硬盘中写入和读出,所以当前进程关联了哪些文件,都能操作哪些文件,就是通过文件描述符表,近而就描述了进程持有了哪些“硬盘资源”

💐进程持有的CPU资源——进程调度

首先,先理解什么是进程的调度?

早期的操作系统,是一个“单任务操作系统”(单核CPU),同一时刻只能有一个进程运行,如果想要运行下一个进程,就需要先退出上一个进程,,而进程要执行,就是需要CPU来执行上面的指令,但是对于单核CPU来说,一个CPU核心,同一时刻只能执行同一个进程的指令,这里也可以进行一个比喻,把CPU核心比喻一个舞台,进程比喻成一个演员,指令比喻成剧本,一个演员在讲台上讲课时,其他演员不能去干扰;这样就导致了一个舞台只能有一个演员;

但是,在这种情况下想要让多个任务同时执行该怎么办呢?就有了分时复用(并发)

分时复用**(并发)**:分时复用是站在了时间的维度上进行的,比如在剧本中有很多的“幕”,就像老舍先生的茶馆,一个演员演一幕,让所有的演员轮流上台表演,只要轮流的速度足够快,这也就看起来好像同时在表演一样,

可以打开我们自己的资源管理器看一下:
在这里插入图片描述

3.74GHz可以大概理解成每秒执行3亿多条指令,调度的速度也已经够快了,足够许多进程进行调度了,因为这里的速度够快,所以人感知不到这里调度之间的时间差;

所以,站在宏观的的角度上看,两个进度好像是“同时执行”的,但是,在微观的角度上,两个进程是轮流调度执行的;

现在电脑的CPU都已经是多核心的,就相当于有很多个舞台,就像我这台电脑就是有4个
在这里插入图片描述

所以,两个进程可以在两个或着多个CPU核心上同时执行,在微观的角度,两个进程是同时执行的,这种情况称为“并行”

相比之下,多个进程在一个CPU核心上快速的轮流调度执行,在宏观上,它们是“同时执行的”, 在微观上,有先后顺序,这种情况称为“并发”

上述的并发 和 并行 在程序员写代码的时候是感知不到的,都是系统内部在执行,底层是并行还是并发,对代码都没有什么区别的影响,所以程序员不用去区分那么细,一般只要没有什么特殊的说明的话,就会将并行+并发 统称为并发;

在目前多核CPU的时代,并发编程是非常重要的,而为了完成进程的调度,PCB中引入了一些属性来支持操作系统实现进程调度的效果,以下有四个重要属性:

1. 进程的状

进程的状态这里主要针对两种重要的状态进行讲解分别是:就绪状态阻塞状态

1、就绪状态:

这里给大家举一个例子:假设我是一个妹子,现在呢有三个同学正在追我,分别是 A同学:有钱、B同学:长得帅、C同学:会舔,但是呢,这三个人都有各自的优点,而我都想要,所以呢,我就同时脚踏三只船,周一、周二和A同学约会,周三、周四和B同学约会,周五和C同学约会,而且,默认情况下这三个同学都是随叫随到,呼之即来挥之即去;这种情况称为“就绪状态”,进程时刻准备好,去CPU上执行;

就绪状态,具体有两种情况:

1进程正在CPU上执行(今天周一,我正在和A约会)

2.虽然进程没在CPU上执行,但是时刻准备着去CPU上执行(今天周一,我没和B约会,但是只要我召唤B,B也会马上来)

2、阻塞状态

某个进程由于某种条件不具备(比如在等待用户输入等),就导致这个进程暂时无法参与CPU的调度执行;

例如:有一天A要去出差一个月,显然这段时间A同学没办法和我约会,此时A就处于“阻塞状态”

2.进程的优先级

操作系统在调度很多的进程时,并不是一视同仁的,而是有些进程会给更高的优先级,优先调度,假如 我现在正在玩英雄联盟和运行着QQ,那么,英雄联盟的优先级要高于QQ,因为对于游戏来讲,我们需要一个系统实时的快速响应,但是QQ呢,只需要将它挂在后台收消息即可,晚收个一两秒也没什么关系,但是,如果打游戏放技能晚个一两秒,那么这游戏就没办法玩了;

3.进程的上下文

进程从CPU上离开之前,需要保存现场,把当前CPU中各中寄存器的状态都记录到内存中等到下次进程回到CPU上执行的时候,此时就会把内存中这些保存的只恢复回去,进程就会沿着上次执行到的位置继续往后执行,其实也就像我们玩单机游戏时的存档、读档

4.进程的记账信息

通过优先级机制,对不同的进程分配了不同权重的资源,但是,有可能出现极端的情况,所有的资源都给了某一个进程,其他的进程一点也没得到,所以就会有记账信息来记录当前进程持有的CPU的情况(在CPU执行了多久)就可以作为操作系统调度进程的参考依据,如果监测到某个进程所持有的CPU资源较少,操作系统就会进行调整,防止某个进程出现卡死情况;

以上只是PCB中一些重要的属性,但是PCB中的属性远不止这些,以上四种属性主要是为了完成进程的调度;

💐内存分配——内存管理

在早期的系统上,程序运行时分配的内存是”物理内存“;

在这里插入图片描述

物理内存就可以理解成由几个宿舍楼组成,每个宿舍楼都有一个编号,每个编号就是一个内存地址,所谓的分配内存就是直接从物理内存上直接分配,但是就会导致一个问题—内存访问越界问题:

在这里插入图片描述

为了避免上述情况,操作系统就引入了 **“虚拟地址空间”**的概念,操作系统不是直接分配物理内存了,而先分配了虚拟的内存空间,这就相当于系统对内存进行了一层抽象,什么意思呢?就比如:进程在操作硬盘时,并不能直接对硬盘进行操作,而是通过对文件的操作变成对硬盘的操作,而文件就是对硬盘这种硬件设备的一种抽象;

同理,使用虚拟地址空间对物理空间进行了一层抽象,通过对虚拟地址空间的操作从而转变成对物理空间的操作,而中间的转变步骤大致如下:

在这里插入图片描述

所以,借助于这种机制,就有效的避免了内存越界访问的情况;

通过上述方式,把进程之间给隔离开了,进程之间就无法互相访问,交互数据,但是,如果某个需求中,需要多个进程之间相互配合,那该怎么办呢?

此处就需要引入一个新的机制,来实现进程之间的相互通信,核心思想就是,借助一个公共的空间,完成数据的交互,就比如在疫情时,我们要买菜,通常给老板发一个微信,然后老板就把菜放到指定的区域,并不会直接送到家里,这个指定的区域就是一个公共的空间;

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

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

相关文章

Scrum和Kanban方法的结合:Scrumban的实施指南

如果没有有效的项目管理,团队成员将不得不处理尽可能多的程序,而这种方法不会导致成功。有几种著名的项目管理方法,例如 Scrum 和看板。但是有一种方法可以结合他们的最佳实践。 Scrum 和看板的优势结合在称为 Scrumban 的混合方法中。它非常…

chales 重写/断点/映射/手机代理/其他主机代理

1 chales 安装和代理配置/手机代理配置/电脑代理配置 chales 安装和代理配置/手机代理配置/电脑代理配置 2 转载:Charles Rewrite重写(详解!必懂系列) Charles Rewrite重写(详解!必懂系列) 1.打开charles,点击菜单栏的Tools选中Rewrite2.…

企业架构LNMP学习笔记59

目录介绍: bin:存放的是启动和关闭tomcat的脚本文件; conf:存放tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml lib: 存放的是tomcat服务器所需要的各种jar文件。java打包类库。 logs&#xff…

区域图片上色

目录 下图中,记得点击Apply,然后再点击Symbology 实际选择的时候,不选1Categorized,因为其分段不方便。

js中如何判断两个对象是否相等?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浅相等(Shallow Equality)⭐ 深相等(Deep Equality)⭐ 自定义深相等函数⭐ 使用第三方库⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接…

电路原理图字母缩写表示什么?

很多小白问,电路原理图上这些字母缩写都是些啥玩意儿啊? (一)EN :Enable,使能,使芯片能够工作。要用的时候,就打开 en 脚,不用的时候就关闭。有些芯片是高使能,有些是低…

SQLSERVER 数据库恢复挂起的解决办法

USE master GO ALTER DATABASE KH_Curve SET SINGLE_USER GO ALTER DATABASE KH_Curve SET EMERGENCY GO DBCC CHECKDB(KH_Curve,REPAIR_ALLOW_DATA_LOSS) go ALTER DATABASE KH_Curve SET ONLINE GO ALTER DATABASE KH_Curve SET MULTI_USER GO

.Net IDE智能提示汉化(.Net6、AspNetCore)

先上现成的.net6汉化文件,可以手动下载后参照 如何为 .NET 安装本地化的 IntelliSense 文件 进行安装。或者使用后文的工具进行自动安装。 无对照英文在前中文在前 汉化内容来自 官方在线文档 ,某些内容可能存在明显的机翻痕迹。 上一些效果图&#x…

destoon根据目录下的html文件生成地图索引

因为项目需要&#xff0c;destoon根据目录下的html文件生成地图索引&#xff0c;操作方法&#xff0c;代码如下&#xff1a; <?php $new_array array(); function loopDir($dir,&$new_array,$modurl) {$handle opendir($dir);header("Content-Type:text/xml&qu…

elasticsearch15-数据聚合

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

为什么日本的网站看起来如此不同

首发于公众号 大迁世界&#xff0c;欢迎关注。&#x1f4dd; 每周一篇实用的前端文章 &#x1f6e0;️ 分享值得关注的开发工具 &#x1f61c; 分享个人创业过程中的趣事 该篇文章讨论了日本网站外观与设计的独特之处。作者指出日本网站设计与西方设计存在明显差异。文章首先强…

CSS动效合集之实现气泡发散动画

前言 &#x1f44f;CSS动效合集之实现气泡发散动画&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 定义一个数组bubbles&#xff0c;用来存储气泡列表的基本新&#xff0c;w表示宽高&#xff0c;x表示绝对定位…

一篇关于vue的入门的详细介绍

目录 一.介绍 二.库和框架的区别 三.什么是MVVM模式 四.实例 4.1. Vue开发示例 4.2. 双向数据绑定 4.3. 生命周期 好啦&#xff0c;今天的分享就到这了&#xff0c;希望能够帮到你呢&#xff01;&#x1f60a;&#x1f60a; 一.介绍 Vue.js是一种流行的JavaScript框架&am…

【CNN-FPGA开源项目解析】01--floatMult16模块

文章目录 (基础)半精度浮点数的表示和乘运算16位半精度浮点数浮点数的乘运算 floatMult16完整代码floatMult16代码逐步解析符号位sign判断指数exponent计算尾数fraction计算尾数fraction的标准化和舍位整合为最后的16位浮点数结果[sign,exponent,fraction] 其他变量宽度表alway…

软件系统性能测试报告+测试策略

一、服务背景 性能测试主要是针对信息系统的应用性能指标制订性能测试方案&#xff0c;通过自动化的测试工具执行测试用例&#xff0c;模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,负载测试和压力测试都属于性能测试&#xff0c;两者可以结合进行。 通…

Servlet 和 Cookie-Session 学习笔记(基础)

简单来说&#xff1a;是运行在服务器端的 Java 程序&#xff0c;它作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。 用处&#xff1a; 使用 Servlet&#xff0c;您可以收集来自网页表单的用户输入&#xff0c;呈现来自数据库或者…

根据3d框的八个顶点坐标,求他的中心点,长宽高和yaw值(Python)

要从一个3D框的八个顶点求出它的中心点、长、宽、高和yaw值&#xff0c;首先需要明确框的几何形状和坐标点的顺序。通常这样的框是一个矩形体&#xff08;长方体&#xff09;&#xff0c;但其方向并不一定与坐标轴平行。 以下是一个步骤来解决这个问题&#xff1a; 求中心点&a…

深度学习:cross-attention介绍以及与self-attention的区别

1.Cross-attention vs Self-attention Cross-attention的输入来自不同的序列&#xff0c;Self-attention的输入来自同序列&#xff0c;也就是所谓的输入不同&#xff0c;但是除此之外&#xff0c;基本一致。 具体而言&#xff0c; self-attention输入则是一个单一的嵌入序列。 …

长城公开秘密AI团队,杨继峰带队,明年城市NOH落百城

作者&#xff5c;Amy 编辑&#xff5c;德新 传统车企如何打磨智能化&#xff0c;大模型将为车企带来多少助力&#xff1f; 近日&#xff0c;长城汽车原沙龙品牌智能化中心负责人、智能化研发总监杨继峰以TCAL&#xff08;Technology Center Al Lab&#xff0c;简称「AI Lab」)…

【产品运营】不理想的知识库产品

知识库是将自己平时看到或用到的产品知识进行汇总和整理&#xff0c;这是产品知识体系的初始系统&#xff0c;但很多企业的知识库管理其实并不理想 为什么写这篇文章&#xff1f;有3个原因&#xff1a; 帮前客户做解决方案预研&#xff1b;见过太多失败案例&#xff1b;市面上…