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

news2024/11/17 2:32:26

目录

🎈冯诺依曼体系

❗外存和内存的概念

❗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.coloradmin.cn/o/1506569.html

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

相关文章

超越基础:提升你的数据采集策略与IP代理的高级应用

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

软件测试 需求

文章目录 1. 需求1.1 什么是需求1.2 为什么要有需求1.3 测试人员眼中的需求1.4 如何深入理解需求 2. 测试用例的概念2.1 什么是测试用例2.2 为什么要有测试用例 3. 软件错误(BUG)的概念4. 开发模型和测试模型4.1 软件的生命周期4.2 瀑布模型(…

[SAP] ABAP注释快捷键修改

在使用ABAP编辑器的时候,原有的添加代码注释和取消代码注释的快捷键未生效,这时我们可以考虑对注释快捷键进行修改 在事务码SE38(ABAP编辑器)屏幕右下角,点击【Options选项】图标 在【键盘】|【命令】输入栏中输入"comment"关键字…

mac上更改vscode快捷键

以移动当前行代码为例 mac上的vscode,默认移动当前行代码的快捷键是⌥↑即option↑按键 现在我想改成command↑ 步骤如下 1.打开vscode-code-首选项-键盘快捷键 2.打开快捷键列表 3.输入move line,找到要改动的这个快捷键 当前行-右键-更改键绑定&…

LTspice(14) Noise仿真

LTspice(14) Noise仿真 好久没有更新LTspice的教程了,大家想了没? 截止目前LTspice已经更新到24.0.9。界面发生了一些变化,但主要功能并不受影响,新的版本改了UI,找东西更加方便了,界面如下图1所示。 图1…

JavaEE+springboot教学仪器设备管理系统o9b00-springmvc

本文旨在设计一款基于Java技术的教学仪器设备销售网站,以提高网站性能、功能完善、用户体验等方面的优势,解决现有教学仪器设备销售网站的问题,并为广大教育工作者和学生提供便捷的教学仪器设备销售渠道。本文首先介绍了Java技术的相关基础知…

checking file system on C

1、win7系统 开机检查C盘,虽然可以ESC取消检查,每次操作很麻烦,且没有意思 2、注册表清空BootExecute数值数据 1)打开注册表 WinR (快捷键)输入“regedit”,回车 2)位置HKEY_LOCAL…

怎么在运行框执行脚本和软件?

1.新建一个文件夹(随便命名) 2.右击此电脑点击属性 3.点击高级系统设置 4.点击环境变量 5.选中Path,点击编辑 6.点击编辑,粘贴你刚刚文件夹的地址 7.所有窗口全部点击确定 8.你可以把常用的软件快捷方式复制到文件夹里(比如微…

QT画图功能

QT画图功能 每个QWidget都自带的功能,继承了QPainteDevice都可以使用QPainter来进行绘图。 画图需要调用paintEvent绘制事件,paintEvent事件时QWidget类自带的事件。 重写paintEvent事件。(重写事件:如果父类有某个方法&#xff…

协程库项目—协程类模块

ucontext_t结构体、非对称协程 协程类 ucontext_t结构体 头文件中定义的四个函数(getcontext(), setcontext(), makecontext(), swapcontext())和两个结构类型(mcontext_t, ucontext_t)在一个进程中实现用户级的线程切换。 其中…

MySQL进阶之(五)InnoDB数据存储结构之表空间

五、InnoDB数据存储结构之表空间 5.1 数据页加载的三种方式5.1.1 内存读取5.1.2 随机读取5.1.3 顺序读取 5.2 区5.2.1 为什么要有区?5.2.2 碎片区5.2.3 区的分类 5.3 段5.4 表空间5.4.1 独立表空间5.4.2 系统表空间 在数据页结构中提到过,页的上层结构中…

RN开发搬砖经验之-如何处理FlashList组件加载后调用scrollToIndex没有滚动指定位置

前言 如题,这里只能说是处理,起正向作用的临时方案,因为我也着实没搞懂这个BUG的具体原因,看github上有提相关的issuesFor long lists with different item types scrollToIndex does not work reliable,但看官方没有…

PLC的FC与FB模块程序的功能解析

前文讲了在西门子系列的PLC中四个程序模块的描述,从S7-1200PLC开始就有FC和FB程序块了,但在使用的时候,一些使用者还是不好理解,以至于不知道该如何选择。今天,我们就用大白话的方式给大家讲解FC与FB的功能。 1、FC与…

前端学习之列表标签

目录 有序列表 结果 无序标签 结果 数据标签 结果 有序列表 &#xff08;注&#xff1a;注释是解释&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </…

Image Demoireing with Learnable Bandpass Filters

一、简介 标题:Image Demoireing with Learnable Bandpass Filters(https://openaccess.thecvf.com/content_CVPR_2020/papers/Zheng_Image_Demoireing_with_Learnable_Bandpass_Filters_CVPR_2020_paper.pdf) 期刊:CVPR 时间:2020 作者:Bolun Zheng, Shanxin Yuan, …

Google浏览器122.下载驱动

打开网址&#xff1a;Chrome for Testing availability (googlechromelabs.github.io) 选择stable 选择对应的驱动就行

前后端交互理解 简易表白墙(servlet)

前后端交互理解 简易表白墙&#xff08;servlet&#xff09; 文章目录 前后端交互理解 简易表白墙&#xff08;servlet&#xff09;后端核心内容前后端交互接口约定后端代码展示 上期介绍过 Servlet API &#xff0c;本篇文章目的是借助 servlet 做出一个完整的网站。在一个网站…

Spring Boot 面试题及答案整理,最新面试题

Spring Boot中的自动配置是如何工作的&#xff1f; Spring Boot的自动配置是其核心特性之一&#xff0c;它通过以下方式工作&#xff1a; 1、EnableAutoConfiguration注解&#xff1a; 这个注解告诉Spring Boot开始查找添加了Configuration注解的类&#xff0c;并自动配置它们…

怎么看待Groq

用眼睛看。 就是字面上的意思用眼睛看。 我属于第一波玩到的,先给大家一个直观的印象,Groq到底有多快。 目前Groq只能选Llama的70b,和Mixtral的MoE,那我选7*8的这个MoE模型来实验。 这么好些字大概花了不到1秒,流式响应,其实是不是流式已经没那么重要了 ,然后看每秒Toke…

第二十二周周报

论文研读&#xff1a;Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from a Single RGB Image 粗读10篇文献。 通过图2 我可以知道这个论文大概实现的这个姿态估计效果的方法&#xff0c;首先是把图片输入到DetectNet网络&#xff0c;该网络…