【JavaEE初阶系列】——计算机是如何工作的

目录

🎈冯诺依曼体系

❗外存和内存的概念

❗CPU中央处理器—人类当今科技领域巅峰之作之一

🚩如何衡量cpu

🚩指令(Instruction)

🎈操作系统(Operating System)

🎈什么是进程/任务(Process/Task)

❗进程控制块抽象(PCB Process Control Block)

🎈虚拟地址空间

🎈线程

❗为啥要有线程

🎈线程和进程的区别


🎈冯诺依曼体系

说到计算机,我们要认识一个计算机的祖师爷,那就是冯诺依曼。

 著名的冯诺依曼体系(Von Neumann Architecture)构成了计算机工作的原理。

现代的计算机 , 大多遵守 冯诺依曼体系结构
  • CPU 中央处理器: 进行算术运算和逻辑判断.
  • 存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
  • 输入设备: 用户给计算机发号施令的设备.
  • 输出设备: 计算机个用户汇报结果的设备.
我之前的有个文章  冯诺依曼体系结构 具体详细点开链接。
关于冯诺依曼,要强调的几点
这里的 存储器指的是内存,不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备),外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
一句话, 输入输出设备都只能直接和内存打交道(cpu不能直接访问到外设)
cpu速度>存储器速度> 外设速度(为什么有内存的原因)
  • CPU的运算速度是非常快的,要远大于外设,那么我们进行输入之后,CPU很快就将问题给解决了,然后传递给输出设备,这个时候又有数据从输入设备进行输出,CPU解决之后,上一次的数据输出设备还没有输出完毕。所以就需要一个速度不是特别快,也不是特别慢的中间物质来进行一个存储。就跟木桶原理很相似
  • 这个桶能装多少水,取决于最低的那个木板,因为外设的速度将问题输入之后,由存储器来获取内存,然后CPU从存储器中获取要处理的数据,处理完成之后,将数据返回给存储器,再由外设接收,这样,无论什么时候,CPU只从存储器中获取数据,这样就能大大的提高计算机的效率。

我们可以理解为:内存的引入就是为了解决CPU和外设速度不匹配的问题。

针对存储空间
硬盘 > 内存 >> CPU
针对数据访问速度
CPU >> 内存 > 硬盘

❗外存和内存的概念

其实我们之前所说的内存其实是外存,只是外存和内存被人统一说成内存了,除了特殊情况下,被说成外存。

外存其实就是冯诺依曼体系结构中的 输入和输出设备。而内存则是存储器。

  • 与cpu的关系不同: 在电脑中,CPU负责运算和处理,内存负责数据交换。两者属于协作关系,内存相当于是CPU的数据存取通道。而外存要与CPU或I/O设备进行数据传输,必须通过内存进行。

  • 易失性不同:内存,是具有易失性的。这意味着当系统断电时,数据就会丢失。外部存储是非易失性的,因此即使没有电源,它也能保存数据(磁盘中的所有东西不会因为我关机了就会消失,而是永久存在,除非你删了);
  • 访问权限不同,CPU只能直接访问内存,外存的东西要先到内存CPU才能处理(这就是符合冯诺依曼体系结构,内存解决了cpu和外设速度不匹配的问题)


❗CPU中央处理器—人类当今科技领域巅峰之作之一

中央处理器(Central Processing Unit,简称CPU)作为 计算机系统的 运算和控制核心,是 信息处理、程序运行的最终 执行单元。CPU自产生以来,在 逻辑结构、 运行效率以及功能外延上取得了巨大发展。
一个计算机能否工作,很大一部分是由cpu决定的。这样看来,cpu在电脑工作上起了很大的作用。

🚩如何衡量cpu

衡量cpu有很多指标。最最关注的指标有俩个:主频和核心数

就拿我的电脑的中央处理器做比例吧


🚩指令(Instruction)

我们上面谈到了cpu的俩个重要指标,主频,2.5GHZ主频,就相当于cpu能在1s内可以执行25亿指令。

cpu上能够执行的任务的最小单位

一个cpu设计的时候,就会提供一些可以进行的操作(执行哪些指令)比如:加法指令,读取内存指令。写入内存指令,条件判断/跳转指令,函数调用指令,堆栈操作指令.......

这些最小单元,都是由二进制的方式来表示的机器语言。(不同的cpu支持的指令/机器语言是不相同的)

其实cpu就是一个憨憨吧,你给他发布一个任务,就需要你把任务分成非常非常细致的每个部分,才能让他执行。就比如我让张老师给我做西红柿炒鸡蛋,放进计算机中编程思维就是,cpu,你要准备菜西红柿和鸡蛋,然后你要去洗菜,然后洗锅,然后你插电,放油.....等等一步一步的操作进行。


🎈操作系统(Operating System)

操作系统是一组做计算机资源管理的软件 的统称。目前常见的操作系统有: Windows 系列、 Unix 系列、 Linux系列、 OSX 系列、 Android 系列、 iOS 系列、鸿蒙等

本质上就是用来搞管理的软件

  • 操作系统帮助用户,管理好下面的软硬件资源(手段)  (对下)
  • 为用户程序(应用程序)提供一个良好(稳定,高效,安全)的执行环境(目的) (对上)


🎈什么是进程/任务(Process/Task)

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程; 同时,在操作系统内部, 进程又是操作系统进行资源分配的基本单位。

 一个跑起来的程序就是进程

程序:是应用程序,没有点开运行的就是程序

进程:一个跑起来的程序就是进程

 

一个电脑一开机就有百八十个进程正在运行,有的是系统自己创建的,有的是自己手动的,每个进程要想执行都需要消耗一定的资源(进程是资源分配的基本单位),就比如疫情封城,小区发菜,以政府为单位发菜,然后发给小区,然后发给家庭。都是资源分配。

那我们有没有想过一个问题,进程是如何管理的呢?

管理有俩个角度:

  • 描述  使用类/结构体,把被管理的一个对象,各个属性都表示除了
  • 组织  使用数据结构,把这些表示出来的对象,串起来(为了后续的增删查改)

系统中专门有一个结构体(操作系统内核是c/c++)描述进程的属性。

这个结构体统称为 PCB(进程控制块)


❗进程控制块抽象(PCB Process Control Block)

  • 人是通过属性认识的,当属性足够多,这一对属性的集合就是目标对象
  • 描述进程——多个属性合起来

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。在 Java 语言中, 我们可以通过类/ 对象来描述这一特征。
// 以下代码是 Java 代码的伪码形式,重在说明,无法直接运行
class PCB {// 进程的唯一标识 —— pid;// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等// 分配给该资源使用的各个资源// 进度调度信息(留待下面讲解)
}
  • 每一个 PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。进程里面有很多属性,一个进程可以有一个PCB或者多个PCB。
  • 操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进行增删查改的操作。
  • 创建进程,就是再创建PCB,并且将PCB插入到链表中,销毁进程,就是将PCB从链表中删除并释放,展示进程列表,就相当于遍历链表的每个节点。

想要进一步了解进程的明确特征,就要讨论一下PCB里面的属性。

pcb是一个庞大的结构体,包含了很多的属性,

  • 1.pid(进程标识符)

进程身份标识 每个进程都会有一个pid,同一时刻,不同进程的pid是不同的。

  • 2.内存指针:(进程持有的内存资源)
每个进程在运行的时候,都会分配一定的空间
  • 3.文件描述符表(进程持有的硬盘资源)
.....pcb还引入了一些属性,用来支持操作系统实现进程调度的效果。为什么需要进程调度呢?因为
一个电脑进程太多,cpu核心数太少(狼多,肉少),就需要让这些进程轮番在cpu上执行,只要轮转的速度足够快,宏观上(用户眼中),看起来就是这些进程是"同时"执行。——并发。
  • 1.进程的状态

就绪状态:随叫随到,呼之即来,挥之汲去。

就绪状态分俩种情况:第一种情况是进程正在cpu上执行,第二种情况是进程没在cpu上执行,但是时刻准备着去cpu上执行。

阻塞状态: 某个进程,某种执行条件不具备(例如进程等待用户输入),就导致这个进程暂时无法参与cpu的调度执行。(比如命令行让你输入密码,你一直不输入,那么就说明处于 阻塞状态)

  • 2.进程的优先级

操作系统在调度多个进程的时候并非一视同仁的,有些进程会给更高的优先级,优先调度。电脑同时运行dota2(优先级更高)和qq(更低),后收到信息。

  • 3.进程的上下文

进程从cpu离开之前,需要保存现场,把当前cpu中各种寄存器的状态,都记录到内存中。等到下次进程回到cpu上执行的时候,此时就可以把保存的这些寄存器的值,恢复回去,进程就会沿着上次执行的位置,继续往后执行。(我们手机上的计算器,我们将计算器进程从后台清除后,我们下次再打开计算器的时候,我们发现还是会保留原来的值,这就是上下文的运用)——存档,读档。

  • 4.进程的记账信息

通过优先级机制,对不同的进程分配了不同权重的资源,有可能会出现极端的情况,所有资源都给某个进程,其他进程一点都没捞着。记账信息会记录当前进程持有的cpu情况(再cpu执行了多久)就可以作为操作系统调度进程的参考依据

比如我们有三个好朋友,但是一个星期,一周四天都和朋友A玩,俩天都和朋友B玩,1天就呆在家里,那么朋友C怎么办,这样长期下去C对我的热情就会降低,就会和他自己的好朋友玩耍,所以我们要适当的安排点时间给朋友C。


🎈虚拟地址空间

比如说进程A和进程B分别分配了固定的内存大小,但是B进程越界访问了A进行的内存,把A内存写坏了(写成错误的值了),A进程就可能崩溃了。

操作系统的作用就来了,操作系统要给进程提供稳定的运行环境。
所以操作系统就引入了"虚拟地址空间"概念,不是直接分配物理内存了,而是分配虚拟的内存空间。
A操作某个内存中的数据,就需要把操作的虚拟地址给操作系统,操作系统再把虚拟地址翻译程物理地址(有一个类似于hash表这样的映射结构)在操作物理地址。
操作系统其实就是用来检查/检验了,就需要看看当前的虚拟地址是否能顺利完成翻译,如果给定的虚拟地址是非法的,是一个越界访问,系统就能及时发现,并且对当前进程进行处理,就不会波及其他的进程。
通过上述方式,我们把进程之间隔离开了,如果某个需求中,确实就需要让多个进程相互配合,此时就不好搞了,此时就需要引入新的机制,来实现进程之间的通信。具体的实现方式有很多,但是每个方式的核心思想都是一样的。 都是需要借助一个公共的空间,完成数据的交互
就比如给菜谱老板,发个微信,写上要买啥,老板直接把菜送到小区门口,可以放到保安厅里,我也就可以从保安停拿到菜。

🎈线程

一个进程包含一个或多个线程。前面谈到进程调度,前面的讨论都是基于”一个进程里只有一个线程"的情况,实际上,一个进程中是可以有多个线程的,每个线程都是 可以独立进行调度的。
每个线程也有状态,优先级,上下文,记账信息....
一个进程使用pcb来表示,一个进程可能使用一个pcb表示,也可能使用多个pcb表示。每个pcb对应到一个线程上,每个线程都有这些信息用来辅助调度 。除此之外,前面谈到了pid,是相同的,内存指针,文件描述符表也是共用同一份的。
所以衍生的 线程的特点:
  • 1.每个进程都可以独立的去cpu上调度执行
  • 2.同一个进程的多个线程之间,共用同一份内存空间和文件资源。(创建线程的时候,不需要重新申请资源了,直接复用之前已经分配好的进程资源,省去了资源分配的开销,于是创建的效率更高了)
所以    线程是调度执行的基本单位

 因为量多,所以一个生产线是不够的,我们的方案一就是再建个院子,然后再院子里创建一个生产线,但是把,再建个院子成本比较高,物流线也是需要成本的。

所以我们就可以再同一个院子里再建立一个生产线,这俩个生产线是独立的,各自都能进行生产, 这俩个生产线公用的是一个院子,共用的是一组工人,共用的是一套物流体系,此时我们就可以提高生产力。所以引申到进程中,当我们刚创建一个线程的时候,相当于是和进程一起创建的,还是需要有一定的开销去申请资源的(这个帐是记在进程头上的)后面再创建进程,开销就省下了,因为每个线程是独立的,但是共用同一份资源。


❗为啥要有线程

  • 单核 CPU 的发展遇到了瓶颈. 要想提高算力, 就需要多核 CPU. 而并发编程能更充分利用多核 CPU 资源.
  • 有些任务场景需要 "等待 IO", 为了让等待 IO 的时间能够去做一些其他的工作, 也需要用到并发编.

🎈线程和进程的区别

  • 进程包含一个线程,也可以包含多个线程。
  • 进程和线程,都是用来实现并发编程场景的,但是线程比进程更轻量,更高效。
  • 同一个进程的线程之间,共用同一份的资源(内存+硬盘),省去了申请资源的开销
  • 进程和进程之间,是具有独立性,一个进程挂了,不会影响别人。
  • 线程和线程之间(前提是同一个进程内),是可能会相互影响的。(线程安全问题+线程出现异常)
  • 进程是资源分配的基本单位,线程是调度执行的基本单位。

今天发烧了。也得完成任务。

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

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

相关文章

关于GPU显卡的介绍

一.关于英伟达历代产品架构 显卡是一种计算机硬件设备,也被称为显示适配器或图形处理器。目前的硬件部分主要由主板、芯片、存储器、散热器(散热片、风扇)等部分。显卡的主要芯片是显卡的主要处理单元。显卡上也有和计算机存储器相似的存储器&#xff0…

聊聊.NET中的连接池

在.NET中,连接池被广泛用于管理和优化不同类型资源的连接。连接池可以减少建立和关闭连接所需的时间和资源消耗,从而提高了应用程序的性能和响应能力。 HttpClient中的连接池 System.Net.Http.HttpClient 类用于发送 HTTP 请求以及从 URI 所标识的资源…

安全测试报告-模板内容

1. 概述 为检验XXXX平台 系统的安全性,于 XXXX年 XX 月 XX 日至 XXXX年 XX 月 XX日对目标系统进行了安全测试。在此期间测试人员将使用各 种非破坏性质的攻击手段,对目标系统做深入的探测分析,进而挖掘系统中的安 全漏洞和风险隐患。研发团队…

代码讲解:如何把3D数据转换成旋转的视频?

目录 3D数据集下载 读取binvox文件 使用matplotlib创建图 动画效果 完整代码 3D数据集下载 这里以shapenet数据集为例,可以访问外网的可以去直接申请下载;我也准备了一个备份在百度网盘的数据集,可以参考: ShapeNet简介和下…

Java适配器模式源码剖析及使用场景

文章目录 一、适配器模式介绍二、大白话理解三、 项目案例四、Java源码 一、适配器模式介绍 适配器模式(Adapter Pattern)是一种结构型设计模式,它作用于将一个类的接口转换成客户端所期望的另一种接口,从而使原本由于接口不兼容而无法一起工作的那些类可以在一起工作。它属于…

Vue3中Vue Router的使用区别

在 Vue 3 中,useRouter 和 useRoute 是两个用于 Vue Router 的 Composition API 函数,它们的用途和返回的对象不同,接下来详细了解一下它们的区别以及如何正确使用它们。 useRouter useRouter 用于获取 router 实例,这个实例提供…

macOS14.4安装FFmpeg及编译FFmpeg源码

下载二进制及源码包 二进制 使用brew安装ffmpeg : brew install ffmpeg 成功更新到ffmpeg6.1 下载FFmpeg源码

MIT 6.858 计算机系统安全讲义 2014 秋季(三)

译者:飞龙 协议:CC BY-NC-SA 4.0 SSL/TLS 和 HTTPS **注意:**这些讲座笔记略有修改自 2014 年 6.858 课程网站上发布的笔记。 这节课涉及两个相关主题: 如何在比 Kerberos 更大规模上加密保护网络通信? 技术&#xf…

LVS (Linux Virtual server)集群介绍

一 集群和分布式 (一)系统性能扩展方式: Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务 (即升级单机的硬件设备) Scale Out:水平扩展&#xff0…

Anaconda prompt运行打开jupyter notebook 指令出错解决方案

一、打不开jupyter notebook网页 报错如下: Traceback (most recent call last): File “D:\anaconda3\lib\site-packages\notebook\traittypes.py”, line 235, in _resolve_classes klass self._resolve_string(klass) File “C:\Users\DELL\AppData\Roaming\Py…

单文件组件SFC及Vue CLI脚手架的安装使用

单文件组件SFC及Vue CLI脚手架的安装使用 Vue 单文件组件(又名 *.vue 文件,缩写为 SFC)是一种特殊的文件格式,它允许将 Vue 组件的模板、逻辑 与 样式封装在单个文件中。 为什么要使用 SFC 使用 SFC 必须使用构建工具&#xff…

Pycharm jupyter server process exited with code 1

Pycharm jupyter server process exited with code 1 1. 问题描述2. 原因和解决方法 1. 问题描述 使用 Pycharm 启动 Jupyter 时,报错如下, jupyter server process exited with code 12. 原因和解决方法 Pycharm 启动 jupyter 时,默认的 …

Linux:开源世界的基石

Linux:开源世界的基石 在信息技术的海洋中,Linux像一座灯塔,照亮了开源文化的道路,成为了无数技术爱好者、开发者和企业的选择。作为一个操作系统的内核,Linux的出现犹如一阵清风,打破了操作系统市场的一统…

Vue class和style绑定:动态美化你的组件

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

考研经验|如何从考研失败中走出来?

对我来说,太丢人了 其实我在本科的时候在同学眼中,一直很优秀,每年奖学金必有我的,国家励志奖学金,国家奖学金,这种非常难拿的奖学金,我也拿过,本科期间学校有一个公费去新西兰留学的…

初识C语言—字符串、转义字符、注释

字符串 字符串就是一串字符 用英文双引号括起来的字符 int main() {"dasgfhjkasg\n""hello world!"return 0; } 字符串的结束标志是\0这个转义字符 如何证明呢? int main() {//字符数组 - 数组是一组相同类型的元素char arr[] "hel…

基于注解完成基本类型属性赋值 (DI)

在上一篇文章中,介绍了如何基于注解的方式自动为引用类型的属性赋值,这里介绍如何为基本类型的属性赋值。 为基本类型的属性赋值,使用注解Value。通常用于注入外部数据,或者我们可以直接手动赋值。 步骤如下: 声明外…

【个人开发】llama2部署实践(一)——基于CPU部署

1. Anaconda安装 mkdir -p /opt/anaconda cd /opt/anaconda # 参考链接:https://repo.anaconda.com/archive/index.html wget https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh sh Anaconda3-2023.07-2-Linux-x86_64.sh2.安装git yum inst…

【动态规划】代码随想录算法训练营第四十三天 |1049. 最后一块石头的重量 II,494. 目标和,474.一和零 (待补充)

1049. 最后一块石头的重量 II 1、题目链接:. - 力扣(LeetCode) 2、文章讲解:代码随想录 3、题目: 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出任意两块石头,然后…

PCB行业IPC标准内容介绍及子标准文件总结

🏡《总目录》 目录 1,概述2,标准内容简介3,IPC标准总结4,总结1,概述 IPC二级标准是针对电路板质量而制定的国际标准。它主要涉及到电路板的设计、制造和检验等方面,旨在确保电路板的质量、可靠性和性能达到一定的标准。 2,标准内容简介 IPC标准主要包括如下四个方面的…