JAVA----进程

进程(process)

目录

  • 进程(process)
    • 1. 进程--即一个**跑起来**的运用程序
    • 2. 进程 可视为是操作系统进行资源分配的基本单位
    • 3. 在操作系统中,通常使用称为 PCB 这样的结构体来描述进程的.
    • 4. PCB
    • 5. 文件描述符(重点)
    • 6. 进程调度(关键重点)
      • 1. PCB 提供了几个属性,支持 进程调度
        • 1. 状态
        • 2. 优先级
        • 3. 上下文
        • 4. 记账信息

1. 进程–即一个跑起来的运用程序

在这里插入图片描述
在任务管理器中,显示的则是所有进程.这些除了上述自己运行的程序外,还有一些系统自带/安装的某些程序.

在这里插入图片描述
在这个表中,表示给某程序分配的各类资源大小.
要想让一个程序运行,就必须给这个进程 分配系统资源.

2. 进程 可视为是操作系统进行资源分配的基本单位

一旦 作为基本单位的进程 多了, 就要考虑管理

管理需要 先描述,后组织.

1.描述: 通过一些结构体/类,把一个进程的核心信息抽象提取出来,并进行表示
2.组织: 通过一定的数据结构,把多个这样的 结构体/类 的对象 串联起来,方便进一步的各种增删改查.

3. 在操作系统中,通常使用称为 PCB 这样的结构体来描述进程的.

PCB(process control block): 进程控制块,内核里的结构体.
不同操作系统代码名不同,在 Linux 系统上 类如 PCB 的命名为: task_struct.

结构体中就需要包含一些进程的核心信息,操作系统中通常会使用 链表 这样的结构,把多个PCB串联起来.(这里的 “链表” 则是多个链表综合在一起构成的).

举个栗子:

  1. 我们在 任务管理器中查看进程列表,就是在遍历 链表 的每个节点,并且获取显示对应的信息.
  2. 创建新的进程(双击某个程序运行), 新的进程创建出一个对应的新的 PCB,并且添加到上述链表中.
  3. 销毁某个进程(某个程序退出), 要把链表上对应的 PCB 节点给删掉.

以上的操作,则就是一些 数据结构代码.

再举个栗子:

比如,双击一个快捷方式, 打开steam进程,本质上是 文件资源管理器(应用程序)感应到鼠标的双击操作, 然后调用操作系统提供的 API(Application Programming Interface----程序之间的接口), 在内核中创建 进程(创建PCB, 插入链表).

4. PCB

PCB 像是一个小本子, 记录这一些信息

  1. pid(process id)
    进程的 id / 进程的标识符.
    在这里插入图片描述
    这些进程均是运行 steam.exe 产生的

得出
同一个机器,同一时刻,进程的id一定是不同的

  1. 内存指针
    指向 进程的 指令 和 数据.
    进程运行时,需要消耗一定的硬件资源,内存就是一个关键的资源.一个程序在运行的时候, 就会被 从硬盘加载到内存中.
    而指针 并非是一个指针,而是一组指针.一组指针标明要运行的 指令(进程下一步的操作) 都在内存的 哪个地址上, 和进程依赖的 数据, 又在哪些地址上.

举个栗子

public class Test {public static void main(String[] args) {System.out.println("hello");}
}

以上则为一个保存在硬盘上的可执行文件.
Test.exe文件中 包含了 System.out.println(); 对应的一系列二进制 指令 (里面调用系统 api 等等).也包含了 “hello” 这样的 数据.

双击 exe, 此时操作系统会产生一个进程 —> 创建 PCB ,再把 PCB 加入到内核的链表中(把 exe 中的 指令 和 数据 加载到内存中).

图示:
在这里插入图片描述

5. 文件描述符(重点)

一个进程运行时,会操作一些文件,通过一个 “顺序表” 这样的数据结构, 记录当前的进程都打开了哪些文件.
在此不再展开…

6. 进程调度(关键重点)

任务管理器中, 系统中包含了很多进程, ,每个进程都需要执行, 执行就需要去占用 CPU 资源, 去 CPU 上执行. 但进程的数量远远多于 CPU 的数量.
这样如何处理呢?

我们采用 进程调度, 分时复用

并行执行:
一个核心,同一时刻,只能运行一个进程, 有 16 个核心, 同一时刻, 同时运行 16 个进程.(同时进行,)

并发执行:
一个核心, 不同时刻, 可以执行不同的进程
这一刻,执行进程1, 下一刻, 执行进程2, , 再下一刻,执行进程3.
由于时间片较短, CPU 切换进程的速度极快, 人感知不到,(本质不是同时). 被称为并发执行

操作系统会按照 并行 + 并发 相互搭配,运行所有进程

并行 微观时间上, 也是同时执行.
并发 宏观时间上, 是同时进行,微观时间上, 是串行执行.

因此,往往把 “并行 + 并发” 统称为 “并发”. 把编写解决并发问题的程序, 称为 “并发编程”.

1. PCB 提供了几个属性,支持 进程调度

1. 状态

就绪状态
“随叫随到”

阻塞状态
处于阻塞状态的进程, 无法在 CPU 上执行,往往这个基础在等待 IO 的时候就会进入阻塞状态.

scanner.next();

遇到以上代码则处于阻塞状态

2. 优先级

分配时间时,不一定是完全公平的, 可能存在倾斜
谁需要的多看多给谁, 谁需要的少就少给谁

3. 上下文

即 小本子, 进程在 CPU 上执行时, 会产生很多的 “中间结果”( CPU 的各种寄存器的值).
存档: 在进程切换出 CPU 之前. 需要把中间结果保存到 PCB 的 上下文 里(寄存器 --> 内存).
读档: 下次进程回到 CPU , 就需要把之前的存档恢复,(内存 --> 寄存器).

4. 记账信息

因为分配时间资源可能不同, 则采用记账信息, 即 表格, 用来统计数据,
操作系统也要避免某个进程一直吃不到信息, 则会进行类似的统计, 给吃的少的进程, 适当的多分配些资源.

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

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

相关文章

2024常用接口抓包以及接口测试工具总结【建议收藏】

接口 统称为API,程序与程序之间的对接、交接。 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点,主要是为了检验不同组件(模块)之间数据的传递是否正确,同时接口测试还要测试当前系统与第三方…

SQLiteC/C++接口详细介绍sqlite3_stmt类(七)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(六) 下一篇: 无 22、sqlite3_column_database_name 用于返回结果集中指定列的数据库名称。如果结果集是由多个Join操作产生的,…

LabVIEW电动汽车直流充电桩监控系统

LabVIEW电动汽车直流充电桩监控系统 随着电动汽车的普及,充电桩的安全运行成为重要议题。通过集成传感器监测、单片机技术与LabVIEW开发平台,设计了一套电动汽车直流充电桩监控系统,能实时监测充电桩的温度、电压和电流,并进行数…

Tether CEO力挺波场TRON,直言其在一定程度实现了惠普金融

近期,加密媒体Bankless对Tether CEO Paolo Ardoino进行了深度专访。在专访中,Tether CEO Paolo Ardoino详细且深入地向听众们介绍了USDT,并对波场TRON的成就给予了高度认可。他更是直接表示,“我们不应该讨厌波场TRON,更应该换位思考站在其他人的角度考虑,尤其是那些无法负担起…

C++实现FFmpeg音视频实时拉流并播放

1.准备工作: 下载rtsp流媒体服务器rtsp-simple-server,安装go开发环境并编译 编译好后启动流媒体服务器 准备一个要推流的mp4视频文件,如db.mp4 使用ffmpeg开始推流 推流命令: ffmpeg -re -stream_loop -1 -i db.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://192.168.16…

【网络安全】这份近 200 页应急响应文档,帮助了不少安全逆子

前言 成为伟大黑客的关键在于做自己喜爱的事,要把一件事情做好,你必须热爱它。所以只要你能坚持对安全技术的热爱,到了这种程度,你就会做得更好。 本文档注重理论与实战结合,不仅提供关键源代码供读者快速实践&#x…

2.1 Windows安装Python

Windows安装Python(图解) 在 Windows 上安装 Python和安装普通软件一样简单,下载安装包以后猛击“下一步”即可。 Python 安装包下载地址:https://www.python.org/downloads/ 打开该链接,可以看到有两个版本的 Pyth…

AD20如何整体修改元器件标号?

1 2这里可以设置元器件标号方向 3更新 4点击前两个选项(生成,执行)即可

蓝桥杯刷题-串的处理

串的处理 代码 s input().split() l_new [] for i in s:i list(i)new""for j in range(len(i)-1): # 遍历newi[j]if i[j].isdigit() and i[j1].isalpha(): # 在字母和数字之间添加“_”new_if i[j].isalpha() and i[j1].isdigit(): # 同上new_newi[-1]l_new.appe…

用这几个工具搭建内容管理平台,企业工作效率翻倍!

在当今这个信息爆炸的数字时代,良好的内容管理变得尤为重要。无论你是一个大型企业,还是一个小型创业公司,一个高效的内容管理系统(CMS)都能够帮助你有条理地规划、创建、发布和优化你的内容。如果你正在寻找一款出色的…

@arco.design radioGroup 组件手写 beforeChange 方法

官方是没有提供 beforeChange 事件的&#xff0c;只能自己写一个 子组件&#xff08;CustomRadioGroup&#xff09; <template><a-radio-group :model-value"modelValue" change"onRadioChange"><a-radio v-for"item in list" …

第13篇:4线-2线优先编码器

Q&#xff1a;上一篇我们实现的4线-2线普通编码器在实际应用中会存在一个问题&#xff1a;如果中有2个或2个以上的取值同时为1&#xff0c;输出编码会出现混乱。本篇我们再来学习设计4线-2线优先编码器解决这个问题。 A&#xff1a;基本原理&#xff1a;规定操作先后顺序&…

Protocol Buffers设计要点

概述 一种开源跨平台的序列化结构化数据的协议。可用于存储数据或在网络上进行数据通信。它提供了用于描述数据结构的接口描述语言&#xff08;IDL&#xff09;&#xff0c;也提供了根据 IDL 产生代码的程序工具。Protocol Buffers的设计目标是简单和性能&#xff0c;所以与 XM…

路径问题总结

257二叉树的所有路径 257二叉树的所有路径 class Solution {public List<String> binaryTreePaths(TreeNode root) {List<String> ans new ArrayList<>();dfs(root,"",ans);return ans;}private void dfs(TreeNode root,String path,List<St…

计算机网络:物理层中的数字传输系统全景概览解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

使用Python制作一个批量查询搜索排名的SEO免费工具

搭建背景 最近工作中需要用上 Google SEO&#xff08;搜索引擎优化&#xff09;&#xff0c;有了解过的朋友们应该都知道SEO必不可少的工作之一就是查询关键词的搜索排名。关键词少的时候可以一个一个去查没什么问题&#xff0c;但是到了后期&#xff0c;一个网站都有几百上千…

【Unity】捕捉PC桌面的插件

【背景】 之前介绍了如何用一款名为uWindowCapture的Unity免费插件在Unity的Canvas上展示PC桌面。经过一段时间的使用,本篇继续分享此插件的一些功能和限制。 在此感谢作者Hecomi。 【特征和限制】 一般局域网络环境只能最多达到15帧的帧率,所以别幻想用来窜流游戏或者看电…

备战蓝桥杯Day35 - 动态规划 - 01背包问题

问题描述 隐含前提&#xff1a; 1.物体是不可分的&#xff0c;要么装&#xff0c;要么不装&#xff0c;不能只装一部分。 2.物体顶多使用一次。 动态规划思路 我在b站上看的闫氏dp分析大法的视频&#xff0c;他对dp问题做了总结归纳。 从集合的角度分析dp问题。求出有限集…

[python]bar_chart_race设置日期格式

1、设置日期标签的时间格式 # 设置日期格式&#xff0c;默认为%Y-%m-%dbcr.bar_chart_race(df, covid19_horiz.gif, period_fmt%b %-d, %Y) 2、更改日期标签为数值 # 设置日期标签为数值bcr.bar_chart_race(df.reset_index(dropTrue), covid19_horiz.gif, interpolate_period…

推荐一款.NET开源跨平台的开箱即用的DNS服务器软件

前言 今天要给大家推荐一款.NET开源跨平台的开箱即用的DNS服务器软件&#xff08;用于提供 DNS 解析服务&#xff09;&#xff1a;Technitium DNS Server。 项目介绍 Technitium DNS Server是一个开源的权威和递归DNS服务器&#xff0c;可以用于自主托管DNS服务器以提升隐私和…