计算机的工作原理(上)

1. 计算机发展史

        计算的需求在人类的历史中是广泛存在的,发展大体经历了从一般计算工具到机械计算机到目前的电子计算机的发展历程。(以下是计算机的发展历程)

1、公元前2500 年前,算盘已经出现了;除此之外,人类还创造了各种工具以辅助计算

2、1694 年,德国博物学家 戈特弗里德·莱布尼兹建造了“步进计算器”。

3、1822 年,英国科学家 查尔斯·巴贝奇设计了“差分机”模型;1991年,才被现代科学家根据手稿建造完成

4、十九世纪三十年代,英国科学家 查尔斯·巴贝奇更进一步设计了“分析机”模型;是第一台“通用计算机”。

5、1890 年,美国科学家为了解决人口普查中的计算问题,发明了“打孔卡片制表机

6、1943年,英国制造了第一个大规模使用“真空管”的计算机 —— 巨人一号,用于破解纳粹通信密码。

7、1944 年,IBM 公司为二战同盟国制作了最大的“机电计算机” —— 哈佛 Mark一号,用于给“曼哈顿计划”跑模拟。

8、1945年,ENIAC在“宾夕法尼亚大学”完成建造,被视为第一台电子通用计算机。

9、1955年,AN/FSQ-7计算机,是“SAGE”防空计算机系统的一部分。

10、1947年,贝尔实验室科学家发明了“晶体管”,一种新的电子开关诞生了。也就是我们平时所谓的“半导体”材料

        人类对计算的需求,驱动我们不断的发明、改善计算机。目前这个时代是“电子计算机”的时代,发展的潮流是:更快速、更稳定、更微型。

        故此计算机是有软件和硬件两部分组成的,大概公式就是:计算机=软件+硬件,其中硬件部分主要依赖于冯诺依曼体系结构

2. 冯诺依曼体系(Von Neumann Architecture)

        现代的计算机, 大多遵守冯诺依曼体系结构,且该体系结构图如下所示:

      简单的词汇讲解:

        1、CPU 中央处理器: 进行算术运算和逻辑判断.

        2、存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)

        存储器(存储器主要有内存+外存,下面是内存和外存的相关比较):

        内存存储空间小,外存更大;

        内存访问速度快,外存更慢;

        内存的成本更高,外存更便宜;

        内存的数据断电后会丢失,外存不会;

        3、输入设备: 用户给计算机发号施令的设备.(鼠标,键盘)

        4、输出设备: 计算机个用户汇报结果的设备.(显示器,音箱)

        番外:

1、关于x86架构和arm架构的若干知识小点:

1.1 关于x86:

        设计cpu有很多不同的方案就称为架构,且不同的架构都会有不同的指令集,这些指令集就会对上层应用程序产生直接的影响。

        所谓编程,就是通过编程语言描述出一些逻辑,这些逻辑最终被转化成cpu能识别的指令最终执行。故此我们现在用java写的代码,先编译成jvm字节码文件,jvm再把这些字节码文件转换成x86架构下的指令。

1.2 关于arm

        相比之下,苹果,高通搞得cpu是另外一套架构,arm架构

        Arm的特点:更适合适用于低功耗的机器上。苹果电脑的续航能力是十分强的,但是其性能比x86要弱一些。

        我们要知道计算机的功耗和性能是对立的,且相互关联的。

2、关于软件:

        软件(是一个广义的概念,并非仅仅是指有图形化的界面,同时一个软件的难易程度,和图形化界面没有关系)

        软件,其实就是通过代码,来解决一些实际的问题。

3、Cpu基本适用情况

    X86架构:intel amd ---->家用pc,服务器

    Arm架构:苹果,高通 ------>苹果电脑。智能手机

    现在的x86的cpu都是64位的(cpu的位数,就和代码中内存地址用几个字节表示,是密切相关的---16位的cpu,就是2个字节)

        Windows的特殊处理:windows64位版本,可以兼容32位的程序

 3. CPU 基本工作流程

      关于cpu是怎么构成的:

    晶体管->门电路 -> 半加器 ->全加器 -> ALU运算器->如此差不多构成cpu

        接下来,我们用一个从无到有的过程,一步步搭建一个 CPU 出来,通过借助这个过程,理解CPU、内存等计算机主要部件的工作原理 ;

3.1 逻辑门

3.1.1 电子开关 —— 机械继电器(Mechanical Relay)

        整个过程,类似一个水龙头:打开水龙头开关,有水流出;关闭水龙头开关,水流停止。

             

        我们可以通过以下电子开关下方线圈通电,产生磁场,吸引上方机械臂闭合,完成上方电路闭合;下方线圈断电,磁场消失,导致上方机械臂弹起,断开上方电路闭合

        通过电子开关,我们可以实现 1 位(bit) 的看似无用的逻辑运算。我们接来下会做进一步的学习了解怎么使用电子开关组合出真正有用的逻辑组件。

3.1.2 门电路(Gate Circuit)

1、NOT GATE(非门)

2、AND GATE(与门)

3、OR GATE(或门)

4、XOR GATE(异或门)

3.2 算术逻辑单元 ALU(Arithmetic & Logic Unit)

        ALU 是计算机中进行算数、逻辑运算的核心部件,是计算机的数学大脑;

1、算术单元(Arithmetic Unit)

        算数单元,负责计算机里的所有数字操作,比如四则运算,当然它能做的远远不止这些。

2、逻辑单元(Logic Unit)

        逻辑单元主要用来进行逻辑操作,最基本的操作就是 与、或、非操作,但不只是一位(bit)数的比较

3、ALU 符号

   3.3 寄存器(Register) 和内存(RAM)

        Ram:内存。

        寄存器:是cpu上的存储数据的单元。(cpu上能直接存的数据比较少,这些寄存器主要是为了支持cpu完成一些计算,保存中间结果的,虽然寄存器空间有限,但是访问速度很快,是内存访问速度的三到四倍的)

        光有 ALU 还是远远不够的,我们无法为 ALU 提供存储的部件,这些存储都是要求必须保持通电状态的,即也就是这些存储都是易失的(volatile),上图的最后的效果就是:使能线置位时,输入为 1,保存 1;输入为 0,保存0。使能线不置位时,则写入无效。我们可以利用门锁,构建我们需要的寄存器和内存

        内存的构建的基本原理与上述大概一致。如此构建的内存被称为RAM(Random AccessMemory),可以支持 O(1) 时间复杂度访问任意位置的数据,这也就是我们数组下标访问操作是 O(1)的硬件支持。

3.4 控制单元 CU(Control Unit) 

        我们现在有 ALU、存储了,但这还是不足以让我们的计算机工作起来,我们需要有一个部件来指挥 ALU进行何种的运算,而这个部件就是控制单元(CU)且两者关系如下所示:

        关于 CU 如何由门电路从无到有搭建,我们就进行抽象了,我们只需要理解 CU 可以驱动 ALU 进行具体的计算工作即可 

3.5 指令(Instruction)

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

3.6 CPU 的基本工作流程

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

        执行周期经过以下阶段:

        当然,电子计算机中的 CPU 可不像我们刚才那样,靠自己来驱动这个周期的运转,而是靠背后一个时钟来进行周期驱动的

        最后,ALU + CU + 寄存器 + 时钟就组成了我们平时经常看到的一个词汇:中央处理器(Center ProcessUnit)简称 CPU

 番外:

1、cpu如何执行指令代码的

        咱们写好的代码,最终想要运行,就需要让操作系统先把写好的并编译好的指令集加载到内存中,然后cpu才能执行。

        1.1 默认情况下,cpu执行内存中的指令,是顺序执行的,当然也会遇到一些跳转指令。

        1.2 当前的计算机,从cpu执行指令的时候,要经历从内存读取数据这样的操作。(本质上,依据于冯诺依曼体系结构,是将“执行”和“存储”分开了,这么做主要是为了“解耦合”降低硬件设计的成本),但现在的cpu执行速度越来越快,内存跟不上cpu的速度了(所谓的表演5分钟,通勤两小时),由此就有了缓存(临时安置一下,cpu附近的区域,之前的缓存在南北桥上,后来都集成到cpu上了)

2、Cpu的执行结论:

        2.1 cpu要执行的指令,是在内存中。(冯诺依曼体系,基本设定让执行单元和存储单元解耦合)

        2.2 cpu要想执行指令,就需要先取指令,在解析指令,然后才能执行指令。

        2.3 取指令需要从内存中读取指令到cpu的寄存器中,取指令的操作是相当耗时的,cpu中通过缓存,流水线等技术,来优化这里的效率。

        2.4 Cpu在解析指令的时候要用到解析表,不同架构的cpu支持的指令表不同(x86和arm等都是不同的),指令表的细节,已经写死到了cpu中了,cpu是可以识别的。

        2.5 指令在执行的过程中,可能会遇到一些操作数,不同的指令,操作数的个数含义都会有所不同

        2.6 Cpu重要的参数,主频,主频的含义,近似看成1s之内,cpu能够执行的指令个数。

3、关于cpu的相关知识

        3.1 Cpu是多核+超线程技术加持的产物(4核8线程)

          

        Cpu的好坏,要多维度来衡量:有的cpu核心多,但是单核频率不高,性能也就一般,同架构下,频率越高越好。

        3.2 其他

        频率:描述单个cpu核心工作的速度。(1khz = 1024hz,1mhz=1024khz,1ghz =1024mhz)

        睿频技术:cpu的频率动态发生变化,看当前任务多不多。

        衡量一个cpu的单核性能,既要看基础频率(下限),最大睿频(上限)。

ps:本次学习就到这里了,如果大家感兴趣的话就请一键三连哦!!!

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

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

相关文章

【案例】图片预览

效果图 如何让图片放大,大多数的UI组件都带有这种功能,今天给大家介绍的这个插件除了放大之外,还可以旋转、移动、翻转、旋转、二次放大(全屏) 实现 npm i v-viewer -Smain.js 中引入 import viewerjs/dist/viewer.c…

C++哈希表的实现

C哈希表的实现 一.unordered系列容器的介绍二.哈希介绍1.哈希概念2.哈希函数的常见设计3.哈希冲突4.哈希函数的设计原则 三.解决哈希冲突1.闭散列(开放定址法)1.线性探测1.动图演示2.注意事项3.代码的注意事项4.代码实现 2.开散列(哈希桶,拉链法)1.概念2.动图演示3.增容问题1.拉…

Linux命令-查看内存、GC情况及jmap 用法

查看进程占用内存、CPU使用情况 1、查看进程 #jps 查看所有java进程 #top 查看cpu占用高进程 输入m :根据内存排序 topMem: 16333644k total, 9472968k used, 6860676k free, 165616k buffers Swap: 0k total, 0k used, 0k free, 6…

网络爬虫之Ajax动态数据采集

动态数据采集 规则 有时候我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览器中可以看到正常显示的页面教据,但是使用 requests 得到的结果并没有,这是因为requests 获取的都是原始的 HTML 文档…

LeetCode刷题--- 目标和

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.csdnimg.cn/hKh2l 前言:这个专栏主要讲述递归递归、搜…

数值分析期末复习

第一章 科学计算 误差 解题步骤 先求绝对误差: ∣ x − x ∗ ∣ |x - x^*| ∣x−x∗∣求相对误差限: ∣ x − x ∗ ∣ x ∗ \frac{|x\,\,-\,\,x^*|}{x^*} x∗∣x−x∗∣​求有效数字 ∣ x − x ∗ ∣ 需要小于它自身的半个单位 |x-x^*|\text{需要小于它自身的半个单位} ∣…

亚信安慧AntDB:支撑中国广电5G业务的数据库之力

自2019年6月获得5G牌照以来,中国广电积极利用700MHz频谱资源,迅速崛起为第四大运营商,标志着其在数字通信领域取得的巨大成就。通过与中国移动紧密合作,共建共享基站已超过400万座,为实现自主运营和差异化竞争提供了坚…

直接插入排序【从0-1学数据结构】

文章目录 💗 直接插入排序Java代码C代码JavaScript代码稳定性时间复杂度空间复杂度 我们先来学习 直接插入排序, 直接排序算是所有排序中最简单的了,代码也非常好实现,尽管直接插入排序很简单,但是我们依旧不可以上来就直接写代码,一定要分析之后才开始写,这样可以提…

微软官方出品:GPT大模型编排工具,支持C#、Python等多个语言版本

随着ChatGPT的火热,基于大模型开发应用已经成为新的风口。虽然目前的大型模型已经具备相当高的智能水平,但它们仍然无法完全实现业务流程的自动化,从而达到用户的目标。 微软官方开源的Semantic Kernel的AI编排工具,就可以很好的…

设计模式(三)-结构型模式(6)-享元模式

一、为何需要享元模式(Flyweight)? 假如在网页中渲染这样的一个画面:大小不一的星星铺满了整个画布,并且都在不断的进行移动闪烁着。一批星星消失了,另一批又从另一边缘处出现。 要实现这样的渲染效果,在…

实习课知识整理2:用户登录及实现登录后用户名和头像的展示

接上一篇&#xff0c;当用户点击购买按钮后&#xff0c;还是未登录的状态&#xff0c;此时页面会跳转到登录页面&#xff0c;这时需要输入正确的用户名和密码&#xff0c;完成登录 1. 给登录按钮添加点击事件&#xff0c;并提交表单中的数据到后端 <form th:action"{/u…

Elasticsearch Reroute API 的使用

本文通过一个 Elasticsearch 集群中主分片分配不均衡的例子演示一下 Cluster reroute API 的使用。 对于 Elasticsearch 分片分配策略不了解的同学可以点一下关注&#xff0c;后面更文之后获取第一手资料。 环境信息 Windows 10 Elasticsearch 8.1 JDK17 初始集群状态 分片…

【JAVA面试题】什么是引用传递?什么是值传递?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 前言 博客的正文部分可以详细介绍Java中参数传递的机制&#xff0c;强调Java是按值传递的&#xff0c;并解释了基本数据类型和对象引用在这种传…

鳄鱼目标检测数据集VOC格式100张

鳄鱼是一种生活在热带和亚热带地区的爬行动物&#xff0c;属于爬行纲鳄形目鳄鱼科。它们的体形庞大&#xff0c;有粗壮的四肢和强壮的尾巴&#xff0c;一般能长到2-6米长&#xff0c;体重可达500公斤以上。鳄鱼的皮肤粗糙&#xff0c;呈灰褐色或黑色&#xff0c;布满了坚韧的鳞…

XSKY星辰天合星海架构荣获 IT168 “2023 年度技术卓越奖”

近日&#xff0c;"2023 年度技术卓越奖"获奖名单公布&#xff0c;XSKY 星辰天合的星海架构&#xff08;XSEA&#xff0c;极速全共享架构&#xff09;获得行业 CIO/CTO 大咖、技术专家及 IT 媒体三方认可&#xff0c;成功入选&#xff01; “技术卓越奖”评选由国内著…

【Linux驱动】字符设备驱动程序框架 | LED驱动

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;Hello驱动程序⚽驱动程序框架⚽编程 &#x1f3c0;LED驱动⚽配置GPIO⚽编程驱动…

最小二乘法简介

最小二乘法简介 1、背景描述2、最小二乘法2.1、最小二乘准则2.2、最小二乘法 3、最小二乘法与线性回归3.1、最小二乘法与线性回归3.2、最小二乘法与最大似然估计 4、正态分布&#xff08;高斯分布&#xff09; 1、背景描述 在工程应用中&#xff0c;我们通常会用一组观测数据去…

电商数仓项目----笔记六(数仓ODS层)

ODS层的设计要点如下&#xff1a; &#xff08;1&#xff09;ODS层的表结构设计依托于从业务系统同步过来的数据结构。 &#xff08;2&#xff09;ODS层要保存全部历史数据&#xff0c;故其压缩格式应选择压缩比较高的&#xff0c;此处选择gzip。 &#xff08;3&#xff09;…

C++入门-【13-C++ 多维数组】

C 多维数组 C 支持多维数组。多维数组声明的一般形式如下&#xff1a; type name[size1][size2]...[sizeN]; 例如&#xff0c;下面的声明创建了一个三维 5 . 10 . 4 整型数组&#xff1a; int threedim[5][10][4]; 二维数组 多维数组最简单的形式是二维数组。一个二维数组&am…

用23种设计模式打造一个cocos creator的游戏框架----(二十三)中介者模式

1、模式标准 模式名称&#xff1a;中介者模式 模式分类&#xff1a;行为型 模式意图&#xff1a;用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 结构图&#xff…