计算机硬件知识总结

计算机硬件知识总结计算机硬件对于软件工程师来说很多时候只是停留在一个概念上,例如CPU和内存,硬盘等等,这些都属于计算机组成原理里面必然会介绍到的,博主大学前期接触过大量的计算机硬件知识,曾几何时我甚至考虑过全身心投入到半导体行业,但是考虑到环境限制因素和个人职业的发展,折中选择了软件方向,但是最近阅读了一些机器学习相关的文章,也尝试过自己去训练模型,发现模型训练对硬件的要求比较特殊,这也让我有机会来从新总结一下硬…

大家好,又见面了,我是你们的朋友全栈君。

计算机硬件对于软件工程师来说很多时候只是停留在一个概念上,例如CPU和内存,硬盘等等,这些都属于计算机组成原理里面必然会介绍到的,博主大学前期接触过大量的计算机硬件知识,曾几何时我甚至考虑过全身心投入到半导体行业,但是考虑到环境限制因素和个人职业的发展,折中选择了软件方向,但是最近阅读了一些机器学习相关的文章,也尝试过自己去训练模型,发现模型训练对硬件的要求比较特殊,这也让我有机会来从新总结一下硬件方面的知识,从软件工程师的角度介绍一下我理解的硬件知识。
首先我主要介绍的是单机系统的硬件组成,不太涉及路由器和交换机等等网络设备,毕竟即使是分布式系统也是由一台台机器组成的,分布式系统技术会涉及很多网络和数据一致性方面的问题,这在单机系统里这些问题都几乎被解决了,因为它是由系统总线与各种高速并且可靠协议的传输保证。
只要是计算机体系结构就离不开三个部分,处理运算模块,存储模块,通信模块。在单机系统里对应就是CPU,内存与硬盘,系统总线。
无论是服务器还是PC,体系都差不多,只是在各个具体的部件对于性能和稳定性有一些特殊的要求,例如服务器更要求稳定性,因为服务器要保证7×24服务,而个人电脑更多强调的是比较强劲的性能,偶尔宕机只需要重新启动即可,这样用户是可以接受的。典型的电脑配置包含几个部分:CPU,内存,硬盘,显卡,主板,电源早期还有北桥(内置内存控制器等模块),南桥,还有散热系统。

CPU是计算机的核心部件,也是计算机系统的核心,主要包含运算器,控制器,寄存器和之间的总线,还包含各个缓存与指令集。CPU的主要参数包括主频和多级缓存,还有核心架构,还有制造工艺,核心数,一般来说主频越高单位时间能够做的处理越快,早期的CPU位宽比较低,现在位宽都是64位,只有64位处理器才支持64和32操作系统,32位只支持32,幸运的是现在CPU几乎都是64。当然在同样架构的情况下比较主频才有意义,否则不同架构之间的单纯的比较主频是意义不大的。运算器进行逻辑运算会把中间值缓存到多级缓存,cache L1~L3,L1很小,但是速度最快,L3最次,这个当然是越大越好,但是由于其造价十分高昂,也由于空间限制,不可能制造的太大。因为同样的运算结果往往会被多次访问,这样的缓存结构能够大大增加数据访问的命中率,这样就能大大消除运算与存储之间的鸿沟。控制器能够有条不紊的协调多个组件之间的运行,指令集是各种组合操作的一套原语集,优化各种指令的执行效率,感兴趣可以了解下流水线的概念。CPU现在主要的是分为精简RISC和复杂CISC两个指令集,RISC主要是用简单的指令组合成复杂的指令,执行效率高。CISC是用复杂的指令尽量多的包含常见操作,执行效率低。现在主流的x86架构是CISC,intel与AMD处理器就是x86架构,比较广泛的RISC为IBM的powerPC,其应用在playstation游戏上,或则是著名的ARM都是RISC,其广泛应用在智能手机上。CPU的制造工艺为SOC上的晶体管逻辑门电路之间的距离,一般来说工艺为一个数字,这个数字越小代表着越精密,其在同样范围内的面积上能够放越多的晶体管,同样面积的范围处理能力也就越强,漏电也会降低,功耗也就越低,按照著名的摩尔定律预测,从1960年代开始,每18个月大概同样面积大小的芯片上的晶体管数量就会翻倍,当然最近几年由于已经逼近10nm,摩尔定律的时间周期正在延长,个人认为这与人们对高能效计算需求的迫切性是有关系的,毕竟现在大部分人的手机都比十年前的PC性能都强,计算能力已经比较过剩,这也间接加速了云计算的发展。比较著名的CPU设计厂家为Intel, AMD,Qualcomm, ARM,IBM,三星,联芯科技,联发科。著名的代工厂有TSMC(台积电),三星,global foundries。

内存:内存的存在也是为了解决CPU与硬盘之间的速度差异,内存的特点是易失性存储,因为它的数据在断电之后就会消失,所以无法做永久的数据存储,但是其速度较快,因为早期的磁盘是机械部件,现在的存储一般也是容量和价格并不能兼得,所以内存就是为了解决这个问题,任何程序都会直接从外部存储先加载到内存,然后提供给CPU进行处理,内存的指标主要看内存类型,最先进的是DDR4内存,还要看带宽,其与CPU之间的通信是通过前端总线BUS去交互,外频X倍频=主频,主频x前端带宽基本就能得到前端总线的带宽,如果主板上支持多个slot插口,同样类型的内存还能组成双通道,这样就能大大提升带宽。内存一般也是由闪存颗粒组成,闪存颗粒也分很多种,NAND SLC,TLC等等,主要是性能和寿命之间的差异。

硬盘:硬盘是真正存储数据的介质,现在也主要分为机械硬盘和固态硬盘,因为在这几十年,计算能力提升了上百倍,但是存储的接口却提升的十分缓慢,这就导致CPU出现了吃不饱的现象,木桶效应比较明显,毕竟机械硬盘是由机械臂,磁盘,转轴,控制器,硬盘缓存几个部件构成,虽然内部是真空,但是由于是机械部件,其寻磁道的时间是非常缓慢的,提升缓存一定程度可以提升速度但是无法根本上解决问题,这就导致了固态硬盘的发展,固态硬盘就是用闪存技术去存储数据,电子会比机械跑的更快。闪存的介质包含很多种,SLC性能相对低(但是仍旧远大于机械硬盘),但是寿命长点,TLC性能高,但是寿命短。固态硬盘也分多种接口,SATA是能够直接跟老的机械硬盘无力接口兼容,但是受到接口协议的限制,速度无法放开,理论也就600M/s,PCI-E和M.2接口是非常快的,至于接口,我在这里不展开了,主要就是各种协议和通道的区别导致的理论速度的差异,还有不同的主控和写入格式和制造工艺等等带来的差异会导致市面上的固态硬盘价格也区别比较大。固态硬盘主要的厂家有三星,英特尔,浦科特等,机械硬盘主要有希捷,西部数据,和HGST等。

显卡:显卡主要由GPU和PCB面板构成,GPU全称为(Graphic process unit)图像处理单元,早期的电脑是只有集成显卡的,就是集成在主板上,或则后来还有APU, GPU早期也只是协助图像的处理,因为图像的显示是需要处理像素单元的,这样的运算让CPU来做并不是特别的合适,CPU主要适合做一些复杂的逻辑运算,而图像显示的处理更多是大量的简单的工作,CPU的核心一般也就是4个或则8个,就算是服务器,最多也就32个,这跟功耗和软件支持都有很大关系,GPU天生的设计就是大量核心,但是每个核心都不是特别的复杂,这样就非常适合做一些并行的操作,这也是现在火热的比特币挖矿的技术支持。GPU动辄上百个核心,每个核心能够做细微的运算再合并到显存进行输出,这是显卡的原理。英伟达的CUDA框架也可以让你用GPU做一些非图像的东西,例如深度学习模型的训练等等。

主板:主板是很重要的,但是却最容易被忽视的一个部分,它是所有硬件之间通信的基础,只有主板能够协调各个硬件的工作,才能让整个计算机系统正常运行,主板上主要包含电路板,主板芯片,CMOS芯片和CPU与GPU和内存硬盘等插槽,IO面板等等。早期的主板芯片分为南桥和北桥,北桥主要有内存控制器和集成显卡和连接南桥的通道,现在内存控制器早已集成到CPU,北桥在很多主板已经消失,功能转移到其他部件内。南桥就主要连接了CPU和各个IO部件的通信。IO面板提供了鼠标键盘网线等等接口。主板也分为大板Ex-ATX和小板M-ATX和普通的主板,ATX代表设计布局,统一的布局方便兼容机箱。

以上是我对与计算机硬件比较核心的硬件的理解,很多比较细小的方面没有详细展开,也可能存在一定的错误,但是大的内容应该没什么问题,特此做个总结,后期如果有人感兴趣,我可以更详细分析各个部件的一些指标甚至是制造过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163118.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言括号匹配(栈括号匹配c语言)

    给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的(),[],{}是否匹配。输入格式:输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。输出格式:如果括号配对,输出yes,否则输出no。输入样例1:sin(10+20)输出样例1:yes输入样例2:{[}]输出样例2:no思路:题目输入一些字符串,我们就先保留括号之类的,判断是否匹配。如果遇到左括号,就入栈,如果遇到一个右括号,就与栈顶元

    2022年4月13日
    32
  • php 依据字符串生成相应数组方法

    php 依据字符串生成相应数组方法

    2022年1月30日
    41
  • java常量的定义

    java常量的定义在Java语言中,主要是利用final关键字来定义常量。当常量被设定后,一般情况下就不允许再进行更改。如可以利用如下的形式来定义一个常量:finaldoublePI=3.1315。在定义这个常量时,需要注意如下内容:一是常量在定义的时候,就需要对常量进行初始化。也就是说,必须要在常量声明时对其进行初始化。都跟局部变量或者成员变量不同。当在常量定义的时候初始化过后,在应用程序中就无法再次对这

    2022年7月8日
    23
  • numpy如何求矩阵的逆_numpy矩阵

    numpy如何求矩阵的逆_numpy矩阵1.矩阵求逆importnumpyasnpa=np.array([[1,2],[3,4]])#初始化一个非奇异矩阵print(a.I)print(np.linalg.inv(a))#与上一步等同,对应于MATLAB中inv()函数2.矩阵求伪逆importnumpyasnp#定义一个奇异阵AA=np.zeros((4,…

    2022年8月21日
    8
  • Java课设–学生成绩管理系统一

    Java课设–学生成绩管理系统一写在前面这个项目是Java课程的课设,一共花了5天的时间去完成它,在这期间感谢一些博主的帮助,让我了解到了一些新的技术知识,所以打算写这一系列博客来介绍一整个课设项目,也为了帮助之后的人,如有错误,请联系我。为了更好的让读者了解到整个项目的设计流程,我将项目拆分成几个部分来就行解说,这一小节是一个总述,主要介绍课设的整个框架和最终效果,代码我会放到后面的github链接上,欢迎大家star。如果有一些参考没有加上联系,希望大家可以联系我,因为写的时候查的比较快,没有记录到博主的链接,敬请谅解!!!一、

    2022年7月8日
    18
  • 安装搭建Python2.* 和3.* 环境详细步骤

    安装搭建Python2.* 和3.* 环境详细步骤Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。安装Python首先进入"Python官方网站",将Python下载下来。wi

    2022年7月5日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号