【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 查询代理服务 …...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
RLHF vs RLVR:对齐学习中的两种强化方式详解
在语言模型对齐(alignment)中,强化学习(RL)是一种重要的策略。而其中两种典型形式——RLHF(Reinforcement Learning with Human Feedback) 与 RLVR(Reinforcement Learning with Ver…...