JavaEE初阶——关于进程

news2024/9/21 17:23:47

 

此篇文章和大家一起分享关于操作系统对进程的调度

目录

1.操作系统

操作系统的构成

2.进程

2.1进程的概念

2.2管理

2.3pcb

(1)pid

(2)内存指针

​编辑

(3)文件描述符

(4)进程调度信息

并行执行

并发执行

pcb中支持进程调度的属性

谢谢您的访问!!期待您的关注!!


1.操作系统

我们知道,在一台计算机中,有内存、硬盘等硬件资源,而我们的操作系统就是软件层面的了

实际上软件就是许多指令的集合,就是一些数据,但是可以让计算机按照对应的规则去执行

而操作系统是一个非常复杂的软件,设计的指令代码量是千万级别的

对于我们常见的操作系统,比如win10,win11,Linus(主要是给程序员使用),macOS(苹果电脑),Android ,IOS,以及其他特定领域的操作系统

不同的操作系统,是不同的厂商给特定的领域提供的,但是实际上核心大同小异

操作系统的初心实际上是为了搞管理 ,就是为了使得一台计算机上的所有硬件资源能够配合好,并给所有软件资源提供良好稳定的运行环境

操作系统的构成

操作系统 = 内核 + 配套的应用程序

首先内核是操作系统中最核心的一部分,我们前面说到的管理,就是在操作系统内核里面完成的,而配套的应用程序往往需要靠操作系统内核提供一些功能作为支撑

假设

System.out.println("hello world");

 我们运行这一段简单的代码,实际上就可以当成应用程序,这里就需要操作显示器,但是显示器是一个硬件资源,并不能直接由程序操作,就需要这个程序告诉操作系统,"我要操作显示器",那么操作系统就会完成对应的功能

而"告诉操作系统"这个方法,是因为操作系统会给程序提供了一系列的API,有的API是操作显示器,有的是操作网卡,有的是响应鼠标键盘的...而上述打印的过程就是程序调用了java内置的标准库方法,这个方法本质就是调用操作系统里面提供"操作显示器"的API.这个系统调用就称为"System call",调用对应API后,就会进入到操作系统内核,内核再通过显示器的驱动程序,在显示器上就能绘制出对应内容

而驱动程序是必不可少的,操作系统需要通过硬件资源对应的驱动程序来操作硬件.硬件是非常多的,同一种硬件,不同的厂商,生产出来的硬件细节都会有所不同,操作系统也不知道具体操作的是哪个硬件,就需要商家通过驱动程序,告诉操作系统这个硬件对应的特点和使用详情


2.进程

前提说明:为了方便理解,此处一个进程里面只包含一个线程,等后续更新线程专题,会有所不同

2.1进程的概念

所谓进程,可以理解成:当一个运行起来应用程序,在操作系统就会有一个对应的进程

进程是操作系统分配给执行程序的一块内存空间,当一个程序被执行的时候,操作系统为它创建进程中就会包括存储程序的代码.数据以及执行状态等.

我们在我们的电脑任务管理器上也可以看到当前电脑上的进程:

这上面就显示了这些进程都占用了哪些系统资源,占用了多少...想要让一个程序运行起来,需要给他分配的系统资源包括但不限于内存,cpu,硬盘,网络带宽...

因此:进程也可以认为是系统进行资源分配的基本单位

2.2管理

进程多了,就要考虑管理.对于管理这件事情,操作系统采取的方法就是"先描述再组织"

所谓先描述,就是通过一些结构体(因为操作系统大部分底层都都是c / c++实现的) / 类把一个进程的核心信息抽象出来,并进行表示;而组织是通过一定的数据结构将这样的多个结构体 / 类的对象进行串起来,方便进行增删改查

2.3pcb

我们在上述管理中谈到的结构体,在操作系统中通常使用被称为pcb这样的结构体来描述进程的,

所谓pcb就是进程控制块(Process control block),但是实际上落到具体的操作系统上名称会有所不同,就比如Linus上的pcb叫做task_struct

而组织就是操作系统会把这样多个pcb用链表结构组织起来(实际上不能简单认为是链表,而是多个链表综合在一起的,这里只是简称).因此,我们通过任务管理器查看进程列表就是在遍历链表的每个节点,并且获取显示出对应的信息,创建新的进程,新的进程会创建出新的pcb,并添加到上述的链表中销毁某个进程,就要把链表上对应的pcb节点删除

在pcb中,我们重点了解以下属性:

(1)pid

就是进程的id / 身份标识

(2)内存指针

程序运行的时候,需要消耗一定的硬件资源,而内存就是一个非常重要的资源.一个程序在运行的时候,,就会将对应的数据 / 指令加载到内存里面

而内存指针就是一组指针,用来告诉操作系统,这个程序要运行的指令以及依赖的数据都存放在内存的哪些地方

具体如下图所示:

(3)文件描述符

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

(4)进程调度信息

我们在任务1管理器中能看到

当前运行了上百个进程 

我们知道现代的cpu是多核心cpu,一个进程在一个cpu核心上运行,但是cpu的核心数量跟进程相比也是远远不足的

这时候,就要通过进程调度来负责了

并行执行

在上面提过,一个进程在一个cou核心上面运行

此时在同一时间,就能有16个进程同时运行(完全是同时),这就是并行执行

并发执行

一个核心虽然在同一时刻只能执行一个进程,但是在不同时刻是可以执行不同进程的

cpu会把总的执行时间,切换成若干个小的片段,每个片段执行一个进程,这样的每个片段称为"时间片",由于时间片比较短,cpu切换进程的速度极快,人感知不到,站在人的角度,就是这若干个进程在同时执行(其实本质上不是同时)

这样,即使是在单核cpu的年代,也可以通过并发来实现同时运行多个程序的效果

注意:并行,是指在微观上也是同时执行

但是并发是指在宏观上是同时执行,但是在微观上面是串行执行

这两者都是在操作系统内核部分管理好了,编写应用程序的时候无法干预,普通用户也无法感知到

因此,往往就把并行和并发统称为"并发",把编写解决并发问题的程序,称为并发编程

pcb中支持进程调度的属性

(1)状态

状态有:就绪状态和阻塞状态

处于就绪状态就是随叫随到,但是处于阻塞状态的进程,无法在cpu上执行,往往一个进程在等待IO操作的时候就会进入阻塞状态(scanner.next等操作)

(2)优先级

进程在竞争 CPU 时间时的相对重要性。不同的进程可以有不同的优先级,进程调度算法会参考进程的优先级来决定下一个执行的进程,在分配资源的时候就存在资源倾斜

(3)上下文

进程在cpu执行过程中,也会产生很多的"中间结果",在进程切换出cpu之前,就需要把这些中间结果(cpu的各种寄存器中的值)保存到pcb的上下文里面(从寄存器到内存)

下次这个进程回到cpu上执行的时候,就需要先把之前的存档恢复回来(内存->寄存器),在其中就有一个pc程序计数器,记录执行到哪一条指令了,下次执行就是沿着上次执行到的地方继续执行

(4)记账信息

操作系统也是要避免某个进程一直吃不到cpu资源,就会进行类似的统计,给吃的cpu少的进程,适当地多分配点


谢谢您的访问!!期待您的关注!!

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

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

相关文章

【概念验证(POC):技术项目开发的关键一步】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

redis开启aof持久化失败,无法生成.aof文件

大概率是因为redis-server服务没有关,关掉之后先删除.rdb文件,然后重启server,再去使用cli,然后退出应该就有.aof文件了 1、改配置文件 在redis.conf文件中搜索appendonly,然后将no修改为yes,保存并退出。…

程序员必会技能—股权之舟引领创业者驶向成功之岸【文末送书-44】

文章目录 程序员必会技能—股权之舟引领创业者驶向成功之岸股权进阶:让股权助创业成功的核心3问【文末送书-44】 程序员必会技能—股权之舟引领创业者驶向成功之岸 在创业过程中,股权管理是至关重要的一环。正确处理股权关系可以促进公司的发展&#xf…

RuoYi-Vue-Plus(登录流程-验证码生成)

一、登录流程 1- 进入登录页面,调用 com.ruoyi.web.controller.common.CaptchaController 类中的 captchaImage 方法,生成base64的图片 以及 UUID 2- 提交 登录信息 验证码 uuid 比对 错误:返回错误信息,删除缓存的验证码 成功…

vivado Modifying Logic

修改逻辑 在中实现后,可以修改非只读逻辑对象的属性Vivado IDE以及Tcl。 注意:有关Tcl命令的更多信息,请参阅Vivado Design Suite Tcl命令参考指南(UG835),或键入<command>-help。…

SEO 谷歌浏览器模拟baodu蜘蛛 模拟UA 设置UA

目录 前言baidu UA操作设置百度UA 前言 要在谷歌浏览器中设置用户代理(User Agent)来模拟百度蜘蛛,您可以按照以下步骤进行操作 baidu UA Mozilla/5.0 (compatible; Baiduspider-render/2.0; http://www.baidu.com/search/spider.html)操作…

Linux(1)常用指令总结大全

1、firewall-cmd 1.1 打开443/TCP端口 firewall-cmd --add-port443/tcp 1.2 永久打开3690/TCP端口 firewall-cmd --permanent --add-port3690/tcp ​ # 永久打开端口好像需要reload一下,临时打开好像不用,如果用了reload临时打开的端口就失效了 # …

【无标题】C高级325

练习1:输入一个数,实现倒叙123-》321 练习2:输入一个,判断是否是素数 练习3:输入一个文件名, 判断是否在家目录下存在, 如果是一个目录,则直接输出是目录下的sh文件的个数 如果存在则判断是否是…

java常用应用程序编程接口(API)——IO流概述及字节流的使用

前言: IO流和File是用于把数据存放在硬盘里的工具。File可以把文件存至硬盘,但不能更改里面的数据。通过IO流可以改写硬盘里的数据。整理下学习笔记,打好基础,daydayup!!! IO流 I指Input,称为输入流:负责把…

【好书推荐2】AI提示工程实战:从零开始利用提示工程学习应用大语言模型

【好书推荐2】AI提示工程实战:从零开始利用提示工程学习应用大语言模型 写在最前面AI辅助研发方向一:AI辅助研发的技术进展方向二:行业应用案例方向三:面临的挑战与机遇方向四:未来趋势预测方向五:与法规的…

扬州大数据局领导一行参访百望云 探索新质生产力在百态千业的落地场景

​ 在当前全球经济一体化的大背景下,新质生产力的发展代表着科技进步、产业升级和商业模式创新的方向。特别两会期间,新质生产力概念爆火,也体现出我国政府高度重视新质生产力,将其作为实现高质量发展的重要支柱。 在此背景下&…

Day20 代码随想录(1刷) 二叉树

目录 654. 最大二叉树 617. 合并二叉树 700. 二叉搜索树中的搜索 98. 验证二叉搜索树 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数…

今日arXiv最热NLP大模型论文:微软重磅:AgentAI,下一代人工智能的关键

人工智能的发展已从简单算法进化到复杂的大型基础模型,尤其在理解开放世界环境中的感官信息方面取得显著进步。然而,关键转折点在于从过度简化方法转向强调整体运作的系统,催生了Agent AI的兴起。Agent AI将大型基础模型整合到代理行动中的具…

如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段,应用服务通常是部署在开发环境,在有数据回调的开发场…

❤ leetCode简易题1-两数之和、简易2--回文数判断、简易14-最长公共前缀

❤ leetCode简易题1-两数之和、简易题14- 最长公共前缀 1、简易1-两数之和 ① 题目要求 数字A B target,以target为求和结果,找出数组中符合的A、B数字下标。 第一次做的时候完全脑子一片蒙,随后认真看了看题目发现是发现找符合target和…

rust中字符串String常用方法和注意事项

Rust 中通常说的字符串指的是&#xff1a;String 和 &str(字符串字面值、或者叫字符串切片)这两种类型。str是rust中基础字符串类型&#xff0c;String是标准库里面的类型。Rust 中的字符串本质上是&#xff1a;Byte的集合&#xff08;Vec<u8>&#xff09; 基础类型…

职场口才提升之道

职场口才提升之道 在职场中&#xff0c;口才的重要性不言而喻。无论是与同事沟通协作&#xff0c;还是向上级汇报工作&#xff0c;亦或是与客户洽谈业务&#xff0c;都需要具备良好的口才能力。一个出色的职场人&#xff0c;除了拥有扎实的专业技能外&#xff0c;还应具备出色…

gsxt cookie:__jsl_clearance_s 参数研究获取

gsxt cookie&#xff1a;__jsl_clearance_s 参数研究获取 今天尝试了一下 gsxt 网站中 cookie __jsl_clearance_s 参数解密 抓包 打开 fiddler 抓包工具&#xff0c;新建无痕浏览器页面刷新后得到抓包数据 发现后续的所有的请求都会携带这两个加密参数 __jsl_clearance_s17…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果 一、简单介绍 二、简单图像倾斜校正处理效果实现原理 三、简单图像倾斜校正…

2024年升级_python风控建模实战lendingClub_新增2020年数据(14万条)

作者Toby&#xff0c;来源公众号&#xff1a;python风控模型《python风控建模实战lendingClub_新增2020年数据&#xff08;14万条&#xff09;》 公告通知&#xff0c;我方重庆未来之智信息技术咨询服务有限公司自研课程《python风控建模实战lendingClub》2024年升级&#xff…