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

一、计算机发展史

计算的需求在⼈类的历史中是广泛存在的,发展大体经历了从⼀般计算⼯具到机械计算机到目前的电子计算机的发展历程。
人类对计算的需求,驱动我们不断的发明、改善计算机。目前这个时代是“电子计算机”的时代,发展的潮流是:更快速、更稳定、更微型。

推荐大家看《计算机简史》,这里就不过多介绍了

二、冯诺依曼体系

 现代的计算机, ⼤多遵守 冯诺依曼体系结构

 

  • CPU 中央处理器: 进行算术运算和逻辑判断.
  • 存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
  • 输入设备: 用户给计算机发号施令的设备.
  • 输出设备: 计算机给用户汇报结果的设备。
针对存储空间:硬盘 > 内存 >> CPU
针对数据访问速度:CPU >> 内存 > 硬盘
认识计算机的祖师爷 -- 冯诺依曼
冯·诺依曼(John von Neumann,1903年12⽉28⽇-1957年2⽉8⽇), 美籍 匈⽛利 数学家、 计算机 科学家、 物理学家 ,是 20世纪 最重要的数学家之⼀。冯·诺依曼是 布达佩斯大学 数学博⼠,在现代 计算机 博弈论 核武器 生化武器 等领域内的科学全才之⼀,被后⼈称为“现代计算机之父”、“ 博弈论 之父”.

三、CPU的四个构成部分 

 从功能方面看,CPU的内部由以下四部分组成:

  • 寄存器:寄存器用来暂存指令、数据等处理对象,可以看作是内存的一种。
  • 控制器:负责把内存上的指令、数据等读入寄存器,并根据指令的执行结果来控制整个计算机。
  • 运算器:负责运算从内存读入寄存器的数据。
  • 时钟:负责发出CPU开始计时的时钟信号。不过,也有些计算机的时钟位于CPU的外部。时钟信号以Hz(赫兹)为单位,代表每秒的频率,时钟信号的频率越高,CPU的运行速度越快。

四、CPU 基本工作流程 

首先,我们先介绍下我们需要到的指令:
所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。
其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。
指令本⾝也是⼀个数字,用二进制形式保存在内存的某个区域中。

 

接下来,我们演示指令运行的⼀个周期 :

CU:控制单元,ALU:算术逻辑运算单元

 

 

 

 

第⼀条指令的运行,其实没有用到我们之前制作的 ALU 部件,但这只是其中⼀些指令而已,大家可以尝试自己把剩余的 3 条指令运行一次,观察并理解这个过程。

我们可以得到指令周期:取指令-->分析指令--> 执行指令

小结

  1. CPU 中的 PC 寄存器,是决定 CPU 要执行哪条指令的关键;
  2. 指令是由 动作 + 操作对象组成
  3. CPU 眼中只有指令,没有其他的概念

五、编程语言 

1、程序(Program)

所谓程序,就是⼀组指令以及这组指令要处理的数据。狭义上来说,程序对我们来说,通常表现为⼀ 组文件。
程序 = 指令 + 指令要处理的数据。

2、编程语言发展

为了提升编程效率,最早创造了汇编语⾔的概念。其实汇编语⾔和机器语言(也就是指令)直接是完全⼀⼀对应的,只是相对于 0、1 这些数字,发明了⼀些帮助⼈类记忆和理解的符号将其对应起来,也就是我们上面看到的类似 LOAD_A、LOAD_B 等。
程序员完成编程之后,需要使⽤汇编器 (assembler)将汇编语言翻译成机器语言。虽然汇编降低了程序员的记忆成本,但要求程序还是必须掌握计算机硬件的所有知识,而且随着计算机厂商越来越多,⼀次编写的程序往往只适用于⼀类计算机。
这个是远远不够的,所以更为高级的语⾔诞生了,高级语言屏蔽了硬件细节,让程序员可以站在更高的层⾯上思考自己的业务。这⾥以 C 语言为例,程序员完成程序的编写之后,需要使⽤编译器(compiler)和连接器(linker)将程序翻译成汇编语⾔,再借助汇编器变成最终的机器语⾔。借助封装的思想,我们学习编程变得越来越容易。不过有利则有弊,⾼度的抽象,导致很多的程序员把计算机视为⼀个⿊箱,完全⽆法理解⾃⼰的程序是如何⼯作起来的。

 

 注意:⾼级语⾔的⼀条语句(Statement)往往对应很多条指令(Instruction)才能完成。

六、操作系统

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

1、操作系统的定位

 

操作系统的两个基本功能:

  1. 管理各种硬件设备
  2. 给软件提供稳定的运行环境 

2、什么是进程/任务

 每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。

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

3、进程控制块抽象

计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。操作系统一般是用C/C++实现的,因此就可以用类或结构体来描述这一特征。
我们就给 表示进程信息的结构体,起了个名字,PCB(进程控制块)。
这样,每⼀个 PCB 对象,就代表着⼀个实实在在运⾏着的程序,也就是进程。
操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,⽅便管理时进⾏增删查改的操作。

 PCB中的一些核心属性:

  • pid:进程的身份标识,系统会保证,同一个机器上,同一时刻,每个进程的pid都是唯一的。
  • 内存指针(一组):描述了进程使用内存资源的详细情况(进程都能使用哪些内存,进程也需要知道哪里存的是指令,哪里存的是数据)
  • 文件描述符表:描述了这个进程所涉及的硬盘相关的资源。

 进程经常要访问硬盘。操作系统对于硬盘这样的硬件设备,进行了封装,抽象为”文件“,按照”文件“的方式来操作。

一个进程要想操作文件,需要先”打开文件“:就是让进程在文件描述符表中分配一个表项(构造一个结构体)表示这个文件的相关信息。

4、CPU 分配⸺进程调度

 我们假设CPU是一个舞台,要执行的指令(进程要执行指令)是一个演员。一个CPU可能有一个核心,也可能有多个核心,每个核心都是一个舞台,演员需登上舞台才能表演,同一时刻,一个舞台上只能有一个演员(进程)!

如果一个电脑的CPU有16个核心,但系统上的进程远远不止16个,这时候就不够分了!这就涉及到一个非常关键的概念——分时复用(并发)。

也就是让演员轮流上场

对于单核CPU:

 单核CPU也能支持一个“多任务操作系统”的运行。这就是用到了“分时复用(并发)”。

CPU的核心只有一个,先执行进程1的代码,执行一会儿后,让进程1下来,进程2上;进程2执行一段时间后,换进程3,以此类推。

只要切换速度足够快,人们是感知不到这个切换的过程的,在人眼看起来,多个任务/进程就是“同时执行”的。对于CPU频率,都是多少GHz,一秒钟执行几十亿条指令!意味着,短时间内,CPU就可以进行很多次的进程切换,只要速度够快,人们就感知不到。当然也会存在极端情况,比如系统的进程太多,负担太重,就会出现卡顿的现象。

对于多核CPU:

多核CPU的产生,同时执行进程就变得更加复杂。

假设有一个四核CPU,同时就可以有四个不同的进程,在各自的“舞台”上进行执行,此时,微观上,这几个进程也是“同时执行”的,而不是靠快速地切换模拟的“同时执行”(单核CPU),这时也称为“并行执行”。但是针对每个核心,前面的“并发执行”也依然存在。

当前现代的计算机的执行过程,往往是并行+并发同时存在的, 因此,往往将“并行”和“并发”统称为“并发”,对应的编程方式,称为“并发编程”:解决一个问题,同时搞多个任务来执行,共同协作解决问题。

 对于实现进程调度,就需要PCB提供一些属性,来支持系统完成对这些进程的调度。以下属性:

  • 状态:描述一个进程是否能去CPU上执行,如一个进程处于阻塞状态,就不方便到CPU上执行。对于就绪状态,就是随时准备好到CPU上去执行。
  • 优先级:多个进程等待系统的调度时,根据其优先级来确定其调度次序。
  • 记账信息:针对每个进程,占据了多少CPU时间,进行了一个统计,会根据这个统计结果进一步调整调度的策略,因此就需要在下一轮次进行调整,至少保证不会出现进程完全捞不着CPU的情况。
  • 上下文:支撑进程调度的重要属性,相当于游戏中的存档和读档。

每个进程在运行过程中,就会有很多的中间结果,在CPU的寄存器中。

存档:在进程调度出CPU之前,把当前CPU寄存器中的这些信息,给单独保存到一个地方。

读档:在该进程下次再去CPU上执行的时候,再把这些寄存器的信息给恢复回来。 

5、内存分配⸺内存管理 

操作系统对内存资源的分配,采⽤的是空间模式⸺不同进程使用内存中的不同区域,互相之间不会干扰。

6、进程间通信 

进程是操作系统进⾏资源分配的最⼩单位,这意味着各个进程互相之间是⽆法感受到对方存在的,这就是操作系统抽象出进程这⼀概念的初衷,这样便带来了进程之间互相具备“隔离性”。
但现代的应⽤,要完成⼀个复杂的业务需求,往往⽆法通过⼀个进程独⽴完成,总是需要进程和进程进⾏配合地达到应⽤的⽬的,如此,进程之间就需要有进⾏“信息交换”的需求。进程间通信的需求就应运⽽⽣。
⽬前,主流操作系统提供的进程通信机制有如下:
  1. 管道
  2. 共享内存
  3. ⽂件
  4. ⽹络
  5. 信号量
  6. 信号
其中,网络是⼀种相对特殊的 IPC 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同⼀主机上的进程间进行通信。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

变量命名的规则与规范

变量命名的规则与规范 变量命名的规则不能使用关键字字母须区分大小写由字母、数字、_、$组成,且不能以数字开头 变量命名的规范起名须有一定的意义遵守小驼峰命名法 变量命名的规则 不能使用关键字 在JavaScript中声明变量不能使用JavaScript的常用关键字&#x…

程序员开发者神器:10个.Net开源项目

今天一起盘点下,8月份推荐的10个.Net开源项目(点击标题查看详情)。 1、基于C#开发的适合Windows开源文件管理器 该项目是一个基于C#开发、开源的文件管理器,适用于Windows,界面UI美观、方便轻松浏览文件。此外&#…

Google Earth Engine(GEE)操作

地理信息网站 Eatrth Explorer操作界面 在研究中,我们常需要遥感数据。在下面的网站中,可以得到遥感数据。 EarthExplorer (usgs.gov)https://earthexplorer.usgs.gov/登陆网站: 通常,在Additional Criteria中,可以…

被锁总时间

题目描述: 对一个事务进行加锁与解锁,其中有加锁数组,解锁数组,这两个数组长度相等,且数组内数据代表加锁与解锁的具体时间点,求给出数组中事务的总被锁时间。(其中加锁后默认在60秒后解锁&…

分享禁止Win10更新的两种方法

深恶痛绝 Windows更新简直就是毒瘤,总是在某些不需要的时候提示更新,而且关闭服务后总有办法重启。老是关不掉。 如果每次都是正常更新,好像也没啥所谓,但是总有那么一两次会蓝屏、黑屏、开不了机…… 52出品 下面是吾爱社区找…

贝锐蒲公英助力智慧楼宇,实现自控系统远程运维、数据实时监测

在智慧楼宇系统中,存在着多套不同的系统,比如:智能照明控制、智能空调控制、智能安防监控等。在实际应用中,除了需要打通楼内各个系统实现智能联动,如何实现各地多楼宇的数据实时互通构建智慧楼宇生态系统也是需要解决…

C#入门(1):程序结构、数据类型

一、C#程序结构 第一个C#程序 using System;namespace base_01 {class Program{#region 代码折叠块static void Main(string[] args){//控制台输出Console.WriteLine("Hello World!");Console.Write("C#是微软的编程语言"); //不换行输出//Console.Rea…

线性变换功能块S_RTI工程上的主要应用

西门子S_RTI模拟量转换功能块算法公式和代码介绍请参考下面文章链接: PLC模拟量输出 模拟量转换FC S_RTI-CSDN博客文章浏览阅读5.3k次,点赞2次,收藏11次。1、本文主要展示西门子博途模拟量输出转换的几种方法, 方法1:先展示下自编FC:计算公式如下:intput intput Real IS…

辅助笔记-Jupyter Notebook的安装和使用

辅助笔记-Jupyter Notebook的安装和使用 文章目录 辅助笔记-Jupyter Notebook的安装和使用1. 安装Anaconda2. conda更换清华源3. Jupter Notebooks 使用技巧 笔记主要参考B站视频“最易上手的Python环境配置——Jupyter Notebook使用精讲”。 Jupyter Notebook (此前被称为IPyt…

mysql的行列互转

mysql的行列互转 多行转多列思路实现代码 多列转多行思路代码 多行转多列 多行转多列,就是数据库中存在的多条具有一定相同值的行数据,通过提取相同值在列头展示来实现行数据转为列数据,一般提取的值为枚举值。 思路 转换前表样式 -> 转…

(动手学习深度学习)第13章 计算机视觉---微调

文章目录 微调总结 微调代码实现 微调 总结 微调通过使用在大数据上的恶道的预训练好的模型来初始化模型权重来完成提升精度。预训练模型质量很重要微调通常速度更快、精确度更高 微调代码实现 导入相关库 获取数据集 数据增强 定义和初始化模型 微调模型 训练模型

kaggle新赛:SenNet 3D肾脏分割大赛(3D语义分割)

赛题名称:SenNet HOA - Hacking the Human Vasculature in 3D 赛题链接:https://www.kaggle.com/competitions/blood-vessel-segmentation 赛题背景 目前,人类专家标注员需要手动追踪血管结构,这是一个缓慢的过程。即使有专家…

WSA子系统(一)

WSA子系统安装教程 Windows Subsystem for Android (WSA) 是微软推出的一项功能,它允许用户在 Windows 11 上运行 Android 应用程序。通过在 Windows 11 上引入 WSA,用户可以在其 PC 上轻松运行 Android 应用程序,从而扩展了用户的应用程序选…

Java内存结构

1.对象的结构 一个Java对象在内存中包括3个部分:对象头、实例数据和对齐填充 2.虚拟机存储数据的方式 2.1小端存储 : 便于数据之间的类型转换,例如:long类型转换为int类型时,高地址部分的数据可以直接截掉。 2.2大端存储 : 便于数据类型…

德迅云安全告诉您 网站被攻击怎么办-SCDN来帮您

随着互联网的发展给我们带来极大的便利,但是同时也带来一定的安全威胁,网络恶意攻击逐渐增多,很多网站饱受困扰,而其中最为常见的恶意攻击就是cc以及ddos攻击。针对网站攻击,今天为您介绍其中一种防护方式-SCDN&#x…

Zabbix实现故障自愈

一、简介 Zabbix agent 可以运行被动检查和主动检查。 在被动检查模式中 agent 应答数据请求。Zabbix server(或 proxy)询求数据,例如 CPU load,然后 Zabbix agent 返还结果。 主动检查处理过程将相对复杂。Agent 必须首先从 Z…

【算法每日一练]-分块(保姆级教程 篇1)POJ3648

插讲一下分块 题目:(POJ 3648) 一个简单的整数问题 前缀和往往用于静态的不会修改的区间和。遇到经常修改的区间问题,就要用分块或线段树来维护了。 分块算法是优化后的暴力,分块算法有时可以维护一些线段树维护不了的…

Michael Jordan最新报告:去中心化机器学习中的契约、不确定性和激励

‍ ‍导读 11月3日,智源研究院学术顾问委员会委员、机器学习泰斗Michael Jordan在以“新一代人工智能前沿”为主题的2023北京论坛 新工科专题论坛上,发表了题为Contracts, Uncertainty, and Incentives in Decentralized Machine Learning(去…

RHCSA --- Linux存储管理

存储管理 Boot:可引导操作系统的分区(必须是主分区) 分区 ll /dev/nvme0n* 表示的是 nvme接口的磁盘 0n1 1 0n2 2 0n3 3 brw-rw----. 1 root disk 259, 0 Nov 15 19:31 /dev/nvme0n1 磁盘1 brw-rw----. 1 ro…

「Verilog学习笔记」根据状态转移图实现时序电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 这是一个典型的米利型状态机。三段式即可解决。 米利型状态机:即输出不仅和当前状态有关,也和输入有关。 其中ST0,ST1,ST3的…