【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?
本篇博客给大家带来的是与计算机相关的知识点, 包括:计算机的组成, 指令, 进程(重点).
文章专栏: JavaEE初阶
若有问题 评论区见
欢迎大家点赞 评论 收藏 分享
如果你不知道分享给谁,那就分享给薯条.
你们的支持是我不断创作的动力 .
1. 计算机的组成
1.1 计算机的发展史
计算的需求在⼈类的历史中是⼴泛存在的,发展⼤体经历了从⼀般计算⼯具到机械计算机到⽬前的电
⼦计算机的发展历程。
⼈类对计算的需求,驱动我们不断的发明、改善计算机。⽬前这个时代是“电⼦计算机”的时代,发
展的潮流是:更快速、更稳定、更微型。计算机的以后将如何发展,期待⼤家的努⼒。
推荐书籍: 《计算机简史》: https://book.douban.com/subject/35043034/
1.2 冯诺伊曼体系
现代的计算机, ⼤多遵守 冯诺依曼体系结构
• CPU 中央处理器: 进⾏算术运算和逻辑判断.
• 存储器: 分为外存和内存, ⽤于存储数据(使⽤⼆进制⽅式存储). 如: 硬盘,U盘
• 输⼊设备: ⽤⼾给计算机发号施令的设备. 如: 键盘, 鼠标, 麦克风
• 输出设备: 计算机个⽤⼾汇报结果的设备. 如: 显示器, 打印机
2. 指令
CPU是计算机的中央处理单元,而指令是CPU执行任务的最小单元.
一个 CPU 设计的时候, 就会提供一些可以进行的操作(支持哪些指令)
比如,加法指令,读取内存指令,写入内存指令,条件判定/跳转指令,函数调用指令,堆栈操作指令…
cpu 是一个铁憨憨~~
你给它发布一个任务,就需要你把任务拆分成非常细致的每个部分,才能让它执行.
比如: 小陈爸爸让CPU小陈去楼下买一瓶酱油.
CPU小陈就需要向前走10步到楼梯口, 按下电梯开关, 进电梯…
这些最小单元,都是由 二进制 的方式来表示的(机器语言).
不同的 cpu 支持的指令/机器语言是不相同的.
3. 操作系统
操作系统是⼀组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
3.1 操作系统的作用
操作系统本质上都是用来搞管理的软件
3.1.1 对下管理所有的硬件设备
对下管理所有的硬件设备,但是操作系统不可能认识所有的硬件设备.但是,操作系统知道,市面的硬件设备就这么几个大的类别,每个大类别下面的硬件设备大概都有哪些功能~~
硬件厂商就需要在开发硬件的时候,同时开发一个驱动程序(软件),专属于这个硬件设备,让操作系统通过这个驱动程序完成对硬件设备的控制.
3.1.2 对上要给软件提供稳定的运行环境
一个计算机上可以运行多个程序, 这些程序相互独立,互不干扰.
这个作用涉及到了进程的隔离性.
3.2 操作系统的内核与应用程序
内核中有着操作系统最核心的功能,硬件的驱动程序都是在系统内核执行的.
内核需要给很多应用程序提供支持, 利用API 管理应用程序, 不同的系统提供的API不同,这对Java程序员不是很友好, 好在JVM将系统API 封装好了, 只需利用系统API, 便可实现跨平台.
4. 进程/任务(process/task)
操作系统内核中涉及到很多的关键性的概念, 进程只是其中一个, 由于进程和Java程序员写代码密切相关, 故此重点介绍进程.
4.1 进程的概念
1. 已经跑起来的程序就叫进程.
上图是一个应用程序,但不是一个进程,因为它当前并没有运行.
2. 每个进程都是系统分配资源的基本单位, 每个进程想要执行都需要消耗一定的系统资源(硬件资源).
4.2 进程的管理
从两个角度来看
1.描述: 使用类/结构体, 将被管理对象的各个属性都表示出来.
2.组织: 使用数据结构,把这些对象串起来,为了后续的增删查改.
系统中有一个专门的结构体PCB(系统内核由C/C++写的)来描述进程的属性. 这个结构体统称为"进程控制块"PCB.
进程可以用一个或者多个PCB来表示.
系统中会使用类似于双向链表这样的数据结构来组织多个PCB
创建新的进程,就是创建 PCB 并且把 PCB 插入到链表中
销毁进程,就是把 PCB 从链表上删除并释放
展示进程列表,就相当于是遍历链表的每个节点~~
4.2.1 PCB中的属性
想要进一步了解进程的详细特性, 还需讨论一下PCB中的属性.
PCB是一个非常庞大的结构体. 包含很多属性. (去翻Linux操作系统源码就能看到,Linux中的PCB以task_struct命名.)
1. pid, 进程身份标识. 每个进程都会有一个pid, 同一时刻,不同之间的pid是不同的.
2. 内存指针(一组属性):
每个进程在运行的时候,都会分配一定的内存空间,
这个进程的内存空间,具体是在哪里,以及分配的内存空间中有哪些部分,每个部分的有什么功能. 由这么一组指针来进行区分.
最典型的,进程的内存空间,需要有专门的区域存储要执行的指令,以及指令依赖的数据,同时还需要存储一些运行时产生的临时数据~~
C语言的程序,一些代码/函数
例如: .exe程序就包含了一些二进制指令. 双击 exe,系统就会读取可执行文件的内容
加载到内存中, cpu 才能从内存中取走指令并 进行指令的执行.
3. 文件描述符表, 它类似于数据结构中的顺序表, 存储了很多元素. 文件描述符表和文件(硬盘)有关,描述了进程关联了哪些文件,都能操作哪些文件.
文件描述符表描述了进程持有的"硬盘资源"是什么样的 , 一个进程涉及到硬盘操作, 就需要按照文件的方式来操作.
4.3 进程的分时复用/并发执行
4.3.1 单核CPU
早期的操作系统是一个"单任务操作系统",同一时刻只有一个进程能运行,运行下一个进程,就会退出上一个. 例如早期手机: 诺基亚,摩托罗拉(不需要考虑调度).
一个进程要执行,就是需要 cpu 来执行这上面的指令. 早期的电脑,还是单核 cpu, 一个 cpu 核心同一时刻,只能执行一个进程的指令.
如果把cpu比作舞台, 那进程就是演员,指令就是剧本. 分时复用就是多个进程轮流到cpu舞台演出, 一个进程演员演一会下来,另一个进程就上台接着演. 由于进程演员之间轮转调度太快了,所以肉眼看起来进程演员就像在同时表演,这就是并发执行.
如果两个进程同时在两个cpu核心上,微观上也是"同时执行",这个情况称为“并行”.
在一个cpu核心上,通过快速轮转调度的方式,执行多个进程,宏观上是"同时执行”,微观上有先有后,这个情况称为"并发". 从编程角度来说,底层是并发还是并行,对代码没啥影响… 平时也就会统一使用"并发"来代指 并行 和 并发.并把这样得编程称为并发编程
5. PCB对进程调度的支持
PCB 中引入了一些属性,用来支持操作系统实现 进程调度 的效果
5.1. 进程的状态
1. 就绪状态: 有两种情况,第一种: 进程随时准备着, 随时可以去cpu上执行. 第二种: 正在cpu上执行了.
2. 阻塞状态: 某个进程不具备某种执行条件导致这个进程暂时无法参与cpu的调度执行.
进程还存在很多种状态,在此只介绍上述两种.
5.2 进程的优先级
操作系统在调度多个进程的时候并非是一视同仁,有些进程会给更高的优先级.
比如: 我的电脑上同时运行 LOL(优先级更髙)和 QQ(优先级更低), 这样才能更好地调配系统资源
5.3 进程的上下文
进程从 cpu 离开之前,需要保存现场,把当前 cpu 中各种寄存器的状态,都记录到内存中.等到下次进程回到 cpu 上执行的时候,此时就可以把保存的这些寄存器的值,恢复回去. 进程就会沿着上次执行到的位置,继续往后执行! 其实就是我的世界里的存档和读档.
5.4 进程的记账信息
通过优先级机制,对不同的进程分配了不同权重的资源.有可能会出现极端的情况,所有的资源都给某个进程,其他进程一点都没捞着. 为了避免这种情况,记账信息,会记录当前进程持有 cpu 的情况
可以作为操作系统调度进程的参考依据.
本篇博客写的内容偏基础, 重点掌握进程和指令.
博客到这里也就结束啦, 感谢各位宝子的观看, 如果觉得对你有用,别忘了点赞+收藏哦, 嘻嘻嘻.
期待与你的下一次相遇!
相关文章:

【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?
本篇博客给大家带来的是与计算机相关的知识点, 包括:计算机的组成, 指令, 进程(重点). 文章专栏: JavaEE初阶 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 1. 计算机的组成 1.1 计算机的发展史 计算…...

破解天然气巡检挑战,构建智能运维体系
一、行业现状 天然气行业在能源领域地位举足轻重,其工作环境高风险,存在有毒有害、易爆气体及高温等情况,且需持续监控设备运行状态,人工巡检面临巨大挑战与风险。好在随着科技发展,防爆巡检机器人的应用为天然气管道…...

go web单体项目 学习总结
为什么学习go 博主的主语言是Java,目前的工作也是做Java web开发,有了Java的经验后就想着再学一门语言,其实有两个原因,第一是基于兴趣,也想和Java对比下到底有什么不同,在学习go的时候让我更加了解了Java…...

Cocos游戏优化
在游戏开发中,性能优化是确保游戏流畅运行和玩家体验的关键环节。Cocos作为一款强大的开源游戏引擎,支持多平台开发,尤其在2D游戏开发领域有着显著优势。以下是一些针对 Cocos游戏优化的实用策略,旨在帮助开发者提升游戏性能和用户…...

wsl2的Ubuntu18.04安装ros和anaconda
参考:超详细 WSL2 安装 ros 和 anaconda_wsl2安装anaconda-CSDN博客 一.安装ros 1. 更换系统源 输入 wget http://fishros.com/install -O fishros && . fishros 和上面的链接一样,依次输入5-2-1 2. 安装ros 输入 wget http://fishros.c…...

基于迅为RK3568开发板全国产平台,快速实现APP开机自启动技术分享
应用场景: 在一些场景中需要系统启动以后就让应用程序运行起来,如闸机打卡系统,智能点餐系统,广告机系统等等。这个需求叫做自启动。 除全国产版本核心板以外,RK3568核心板还有工业级,商业级,连…...

C++网络编程之多播
概述 在移动互联网时代,随着多媒体应用的日益普及,如何高效地将数据传输给多个接收者成为了网络通信领域的一个重要课题。多播(英文为Multicast)作为一种高效的网络通信方式,可以将数据同时发送到多个接收者࿰…...

不只是请求和响应:使用Fiddler抓包URL和Method全指南(中)
欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 不只是请求和响应:使用Fiddler抓包HTTP协议全指南(上)-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144005872?spm1001.2014.3001.5502 🙉在(上)篇博客中…...

学习threejs,使用设置normalMap法向量贴图创建更加细致的凹凸和褶皱
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshPhongMaterial高…...

Hive构建日搜索引擎日志数据分析系统
1.数据预处理 根据自己或者学校系统预制的数据 使用less sogou.txt可查看 wc -l sogou.txt 能够查看总行数 2.数据扩展部分 我的数据位置存放在 /data/bigfiles 点击q退出 将一个文件的内容传递到另一个目录文件下 原数据在 /data/bigfiles ->传递 到/data/workspac…...

Vue 3 defineModel: 简化组件的双向绑定
1. 引言 在 Vue 3.4 版本中,引入了一个新的组合式 API 函数 defineModel。这个函数大大简化了自定义组件中实现 v-model 的过程,使得创建具有双向绑定功能的组件变得更加直观和简洁。 © ivwdcwso (ID: u012172506) 2. defineModel 的基本概念 defineModel 是一个宏,它简…...

【Flutter】搭建Flutter开发环境,安卓开发
Flutter是谷歌开源的一个跨平台开发的框架,方便好用,这里以Windows 上构建 Flutter Android 应用为例,记录下我搭建环境时碰到的一些问题以及解决。 第一步:参考官网:开发 Android 应用 | Flutter 中文文档 - Flutter …...

Linux中的共享内存
在Linux中,共享内存是一种高效的进程间通信(IPC)机制,允许多个进程共享一块内存区域,从而实现数据的快速传递和共享。它的特点是可以直接访问共享的内存,无需额外的拷贝操作,因此速度非常快。 共…...

SpringBoot中忽略实体类中的某个属性不返回给前端的方法
使用Jackson的方式: //第一种方式,使用JsonIgnore注解标注在属性上,忽略指定属性 public class PropertyDTO {JsonProperty("disable")private Integer disable;JsonProperty("placeholder")private String placeholde…...

ubuntu 安装proxychains
在Ubuntu上安装Proxychains,你可以按照以下步骤操作: 1、更新列表 sudo apt-update 2、安装Proxychains sudo apt-get install proxychains 3、安装完成后,你可以通过编辑/etc/proxychains.conf文件来配置代理规则 以下是一个简单的配置示例&…...

pytorch四种单机多卡分布式训练方法
文章目录 1、原生pytorch(mp.spawn)2、pytorch ddp (torchrun)3、lightning fabric4、Hugging Face Accelerate4、总结与对比4.1 mp.spawn4.2 torchrun4.3 Lightning Fabric4.4 Hugging face accelerate pytorch 分布式训练的四种方法。 我将会产生一份伪数据0到19共…...

archlinux 触摸板手势配置
文章目录 [toc]libinput-gestures安装 libinput-gestures加入 input 组创建配置文件可用手势 启动 libinput-gestures停止 libinput-gestures自启动 libinput-gestures Touchpad Synapticssynaptics.4 在 /etc/X11/xorg.conf.d/ 目录下会有默认的触摸板配置文件,如果…...

djinn:1 靶场学习小记
一、测试环境: kail攻击机:Get Kali | Kali Linux 靶场镜像:https://download.vulnhub.com/djinn/djinn.ova 描述: 该机器与 VirtualBox 和 VMWare 兼容。DHCP 将自动分配一个 IP。您将在登录屏幕上看到 IP。您必须找到并读取分…...

kafka消费者组和分区数之间的关系是怎样的?
消费者组和分区数之间的关系决定了Kafka中消息的消费方式和负载均衡。合理配置分区数和消费者数量对于优化Kafka的性能和资源利用率至关重要。以下是这种关系的几个关键点: 一个分区只能被同一组的一个消费者消费:这是为了保证消息的顺序性。在同一个消费…...

【go】查询某个依赖是否存在于这个代理
1. 使用 go list 命令 go list -m -versions github.com/gin-gonic/gin 如果模块存在,该命令会返回模块及其可用版本: github.com/gin-gonic/gin v1.7.0 v1.7.1 v1.8.0如果模块不存在或无法找到,会返回错误。 2. 使用 curl 查询代理服务 …...

如何从postman中导出所有集合Collection
项目场景: 有时候需要备份或迁移到其他平台,我们需要在postman中将这些集合数据导出。导出 Postman 集合是为了备份、团队共享或平台迁移等目的的重要步骤。此过程可分为导出单个集合和批量导出所有集合两部分,确保已保存和更新集合后&#x…...

在 Spring Boot 中实现多种方式登录(用户名、手机号、邮箱等)的不正经指南
欢迎来到一场技术与幽默交织的冒险!今天,我们将跳进 Spring Boot 的世界,探索如何通过 用户名、手机号、邮箱 等多种方式实现登录。想象一下,用户在登录时可以随心所欲地选择——就像你今天早上纠结到底是要喝美式咖啡还是拿铁&am…...

.NET平台用C#添加动作到PDF文档
使用C#语言在.NET框架下向PDF文档中添加动作,不仅能够提升文档的交互性和用户体验,还能够在自动化工作流中发挥关键作用,例如自动跳转至特定页面、链接外部资源或播放音频资源等操作。这种能力使得开发者能够根据具体需求定制PDF文档的互动操…...

大数据治理:概念、框架与实践应用
摘要: 随着大数据时代的到来,数据量呈爆炸式增长,数据来源和类型日益多样化。大数据治理作为确保数据质量、安全性、合规性以及有效利用数据资产的关键领域,已成为企业和组织在数字化转型过程中面临的重要挑战和机遇。本文深入探讨了大数据治理的概念,详细阐述了其涵盖的主…...

Vue.observable 全解析:Observable 是什么及使用场景剖析
Vue.observable 详解 Vue.observable 是 Vue 2.x 中的一个 API,用于将普通对象转化为响应式对象,类似于 Vue 组件中的 data 对象,可以实现数据的双向绑定。它允许你将任何普通对象转化为 Vue 响应式系统管理的对象,使得该对象的属性变化时能够自动触发视图更新。 什么是 …...

MySQL基础知识大总结
一,介绍 数据库是什么,我们在学习其他编程语言的时候会使用数组呀,链表,二叉树等等一些数据结构来存储我们的数据,但是大家有没有发现我们一旦关闭程序,所有的数据都没有了,这在发行的软件来看是…...

池化技术、Commons Pool介绍
概述 池化技术,一种通过重复利用对象实例而非频繁创建和销毁的技术。 常见的可池化对象: 数据库连接(Connection):数据库连接创建和销毁代价高,连接池广泛用于管理JDBC连接;线程(Thread):线程的创建和销…...

下载并安装Visual Studio 2017过程
一、下载 1、下载链接 下载链接:官方网址 先登录 往下滑找到较早的下载 2、进行搜索下载 或者直接点击🔗网站跳转 3、确认系统信息进行下载 二、安装 下载完成后右键使用管理员身份运行 1、点击同意后安装 2、若报错—设置失败 打开控制面板-&g…...

菊风视频能力平台开发服务正式入驻华为云云商店,成为华为云联营联运合作伙伴
日前,菊风视频能力平台开发服务正式入驻华为云云商店,成为华为云在实时音视频领域的联营联运合作伙伴。 菊风结合自身产品方案优势与华为云开放、共盈的生态优势强强联手,在推动金融行业数字化转型的路上又向前迈出了一大步。华为云云商店作为…...

springboot整合kafka
springboot整合kafka pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven…...