【JavaEE】认识进程


一、操作系统(operating system)

操作系统是一组做计算机资源管理的软件的统称,它能够把一个计算机上的所有硬件资源和软件资源都管理好:能够管理好各种硬件资源,让他们很好的相互配合,能够管理好各种软件资源,为每个软件都提供稳定的运行环境

操作系统的内核

操作系统由 内核配套的应用程序 组成:操作系统对硬件、软件的管理都是在内核中完成的

配套的应用程序也是靠内核一些功能作为支撑,举一个例子:

写了这样一个代码:System.out.println("hello world");

这就是一个“应用程序”,这里println需要操作显示器,而显示器是一个硬件设备,应用程序并不能直接操作,所以应用程序会告诉操作系统它要操作显示器,接下来操作系统内核就会给应用程序提供一系列的api(有的api是操作显示器的,有的是响应鼠标键盘的,有的是操作网卡的,这里会调用操作显示器的api)

具体过程:1. 应用程序执行println,调用操作系统内核给应用程序提供的api;2. 操作系统内核里感知到要操作显示器的行为;3. 操作系统通过驱动程序(操作系统和硬件设备之间的接口)找到对应的硬件设备(显示器),并且执行显示字符串的操作

二、进程(Process)

一个程序运行起来,在操作系统中就会出现一个对应的进程,换言之,进程就是程序的一次运行过程

由上图可以看出,操作系统是一个进程一个进程的分配资源的,所以又可以称进程是操作系统分配资源的基本单位

进程控制块(PCB)

一旦进程多了起来,操作系统就会对这些进程进行管理 => 所谓管理就是<先描述,在组织>

描述是通过一些 结构体/类 把进程的核心信息抽象提取出来,在操作系统中是通过PCB这样的结构体来描述进程(假设这里的进程都是单线程←这句话到后面就理解了)的,结构体中包含进程的核心信息

管理是通过数据结构例如线性表、搜索树等将每一个PCB联系起来,方便在管理时进行增删查改


假如是通过链表将每一个PCB联系起来的,

1.在上图中显示了每一个进程,这就相当于遍历链表的每一个结点,并显示每一个进程

2.创建一个新的进程(双击某个程序):新的进程创建一个对应的PCB,并添加到链表中

3.销毁某个进程(退出某个程序):把链表中某个结点删除

PCB中的主要信息

1. pid:进程的 id/标识符


2. 内存指针:一个进程运行时需要消耗一定的硬件资源,内存就是一个关键的硬件资源,一个程序在运行时,就会将运行该程序的指令和依赖的数据从硬盘加载到内存中,之后,内存指针(这是一组指针,不只有一个)就会告诉操作系统要运行的指令都在内存的哪里,进程依赖的数据都在内存的哪里

此时 test.exe 这个文件就在硬盘中

双击这个程序 => 此时操作系统就会产生一个进程,创建PCB并将PCB加入到内核的链表中


3. 文件描述符表

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

文件描述符表在未来会再进行详细讲解

4. 进程调度的相关属性

进程调度的属性有:状态、优先级、上下文、记账信息;

什么是进程调度

上图是一个任务管理器的界面,可以看到有很多进程,每一个进程都要执行,但凡要执行就要占用CPU资源,我们的CPU是多核心CPU,每一个核心都可以各自工作、互不影响,但即使如此进程的数量还是远远多于CPU核心的数量,为了让核心更有效率的执行进程,就需要进程调度来负责了

并行与并发

一个核心同一时刻只能执行一个进程,有16个核心,同一时刻就可以同时运行16个进程,这就是并行执行

 虽然一个核心同一时刻只能运行一个进程,但是CPU切换进程的速度极快,比如把总的执行时间分为好几块,每一个时间块都运行一个进程,在极快的切换速度下,站在人的角度就是几个进程同时运行,这就是并发执行

操作系统会按照并行 + 并发的方式执行所有的进程

具体什么时候用什么方式,操作系统的内核都已经管理好了,编写应用程序的时候无法干预,普通用户也感知不到,所以往往会把并行和并发统称为“并发”

进程调度的相关属性

1. 状态

阻塞状态,处于阻塞状态的进程无法在CPU上执行,比如该进程在等待一些IO操作时就会处于阻塞状态(例如scanner.next,如果不输入一些东西,该进程就会一直处于阻塞状态),阻塞状态的相反就是就绪状态

状态这里在未来讲到线程的时候会做更详细的区分

2. 优先级

进程之间也会有优先级,CPU在执行进程时会考虑进程的优先级

不止是进程的执行顺序有优先级,CPU给不同的进程分配的资源也具有优先级,有的进程吃到的CPU资源多,有的少

3. 上下文

进程在CPU执行过程中,会产生很多的“中间结果”,在进程切换出CPU之前,就需要把这些中间结果(CPU的各种寄存器中的值)保存到pcb的上下文里(寄存器 -> 内存),这个操作相当于存档

下次这个进程回到CPU上执行的时候,就需要把之前的存档回复回来(内存 -> 寄存器)

4. 记账信息

延续刚才优先级,操作系统为了避免某个进程一直吃不到CPU资源,就会进行统计,给得到的资源比较少的进程适当的多分配一点


🙉本篇文章到此结束,接下来将会开启多线程的学习

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

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

相关文章

Android——横屏竖屏

系统配置变更的处理机制 为了避免横竖屏切换时重新加载界面的情况&#xff0c;Android设计了一中配置变更机制&#xff0c;在指定的环境配置发生变更之时&#xff0c;无需重启活动页面&#xff0c;只需执行特定的变更行为。该机制的视线过程分为两步&#xff1a; 修改 Androi…

基于卷积神经网络(CNN)的时间序列预测,15个输入1个输出,可以更改数据集,MATLAB代码

1. 数据收集与预处理 数据清洗&#xff1a;处理缺失值、异常值等。特征工程&#xff1a;提取有助于预测的特征。数据标准化&#xff1a;将时间序列数据标准化&#xff0c;使其具有零均值和单位方差&#xff0c;有助于模型训练。滑动窗口划分&#xff1a;将时间序列数据划分为多…

css 文字一行没有放满不进行换行

在开发过程中&#xff0c;经常会出现一行的文字没有放满 就出现了换行的情况 word-break: break-all;

社区团购 2.0 版本发展与创新模式研究:融合新元素的机遇与挑战

摘要&#xff1a;本文深入探讨了社区团购 2.0 版本的发展模式&#xff0c;以便利连锁店为核心的新形态对传统社区团购的冲击和革新。同时&#xff0c;分析了山东小爱联盟推动的爱客优选模式特点&#xff0c;包括佣金体系、运营模式等。在此基础上&#xff0c;研究如何将开源 AI…

isaac sim 14 物理学习(车辆动力学)

文章内容均来自博客文章、官方文档手册等 参考内容 Nvidia Isaac Sim代码编程 入门教程 2024&#xff08;7&#xff09;_isaac sim franka-CSDN博客 Python Bindings API — omni_physics 106.1 documentation Physics — Omniverse IsaacSim latest documentation Vehicle…

理解Laravel中的pipeline

pipeline在laravel的启动过程中出现次数很多&#xff0c;要了解laravel的启动过程和生命周期&#xff0c;理解pipeline就是其中的一个关键点。网上对pipeline的讲解很少&#xff0c;所以我自己写一写吧。 首先还是来看看调用栈&#xff0c;也就是从一个请求开始到返回响应&…

基于uniapp和java的电动车智能充电系统软件平台的设计

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 对电动车智能充电系统进行设计和开发。通过使用本系统可有效地减少运营成本&#xff0c;提高管理效率。 根据近年来社会…

使用css和html制作导航栏

代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}#m{background-color: antiquewhite;width: 100%;height: 50px;}#i{float: left;width: 100px;height: 50px;li…

怎样使用pycharm的服务?

‌在PyCharm中使用服务器的步骤如下‌&#xff1a; ‌打开PyCharm&#xff0c;选择“File”->“Settings”‌。‌选择左侧工具栏中的“Project:…”‌&#xff0c;然后选择“Python Interpreter”。‌点击右上角的“Add Interpreter”‌&#xff0c;选择“On SSH”。‌如果…

CI_CD

什么是CI/CD 在前端开发中&#xff0c;CI/CD 是 Continuous Integration&#xff08;持续集成&#xff09;和 Continuous Deployment/Continuous Delivery&#xff08;持续部署/持续交付&#xff09;的简称。它是一种软件开发实践&#xff0c;自动化了应用的构建、测试和发布过…

设置JAVA以适配华为2288HV2服务器的KVM控制台

华为2288HV2服务器比较老旧了&#xff0c;其管理控制台登录java配置比较麻烦&#xff0c;华为的ibmc_kvm_client_windows客户端测试了几个版本&#xff0c;连接控制台也有问题&#xff0c;最终安装JDK解决。 一、测试环境 主机为WindowsServer2012R2,64位系统 二、Java软件包…

机器学习—构建一个神经网络

如何在Tensorflow中构建神经网络&#xff1f; 回到之前的例子&#xff0c;如果你想做钱进支柱&#xff0c;初始化数据x创建第一层&#xff0c;如下图所示计算一个1&#xff0c;然后创建第二层并计算一个2&#xff0c;所以这是一种明确的向前推进的方式。 事实证明&#xff0c;…

基于51单片机的步进电机定时控制proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1_F5bfyS_e_eKSblnja7RqA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

【云原生开发】如何通过client-go来操作K8S集群

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

idea 配置自动导入设置

配置自动导入设置&#xff1a; 通过访问 Settings→Editor→General→Auto Import&#xff0c;勾选 Add unambiguous imports on the fly 和 Optimize imports on the fly 选项&#xff0c;可以实现自动添加明确的导入和快速优化导入&#xff0c;即自动删除无用的导入

【文本情感分析识别】Python+SVM算法+模型训练+文本分类+文本情感分析

一、介绍 使用Python作为开发语言&#xff0c;基于文本数据集&#xff08;一个积极的xls文本格式和一个消极的xls文本格式文件&#xff09;&#xff0c;使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于D…

iptables面试题

1、详述iptales工作流程以及规则过滤顺序&#xff1f; iptables过滤的规则顺序是由上至下&#xff0c;若出现相同的匹配规则则遵循由上至下的顺序 2、iptables的几个表以及每个表对应链的作用&#xff1f; Iptables有四表五链 Filter表 : Filter表是iptables中使用的默认表…

【青牛科技】GC2803:白色家电与安防领域中 ULN2803 的卓越替代者

在当今科技飞速发展的时代&#xff0c;电子元器件在各个领域都扮演着至关重要的角色。在白色家电和安防等产品的电路设计中&#xff0c;驱动芯片的选择尤为关键。传统的 ULN2803 曾是广泛应用的一款芯片&#xff0c;但如今&#xff0c;芯麦 GC2803 的出现为这些领域带来了新的选…

变脸、看完毒液3,我把自己的脸变毒液了,视频有点惊悚!请谨慎观看

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 AI工具集1&#xff1a;大厂AI工具【共23款…

数据分析:微生物功能差异分析之Maaslin2

文章目录 介绍加载R包数据链接导入数据数据预处理Maaslin2检验输出结果画图系统信息介绍 Maaslin2(Microbiome Multivariable Associations with Linear Models)是一种用于微生物组学数据的多变量关联分析工具。它的原理和特点如下: 多变量关联分析: Maaslin2旨在高效确定…