标签:全面 设备 受限 完整 mic 因此 学一学 磁盘 har
自己在复习校招时候由于转行,时间有限,计组并没有完整的学过,我的策略是学到哪个需要的知识点就回头看一下。当时我还不太懂计组的意义,感觉软件工程师只要能顺利coding就好了,校招过程直截了当地问计组的情况其实并不多。但是当面试官很多问题深入追问的时候,比如,为什么用吞吐率和响应时间考量程序的性能?volitale关键字是什么作用?JVM中类加载的三个步骤加载、链接、初始化,深入到底什么意思?等等问题,想要回答的更加准确和深入,就需要一定的计组基础了。其实很多知识面试我也是背下来的,只不过学的时候,知识没成体系,没有感触而已。到后面学了一定计组的知识,回想曾经学的,才感觉到豁然开朗。
实习时候的leader强烈推荐我,好好学一学计组的知识。现在回头来看,其实计组确实相当有意义的课程之一,现在也在逐渐学习的过程中,我的感受是,这门课完全可以用一个词来概括,就是“抽象”。在我看来“抽象”一词,这也是整个计算机设计中所蕴含的的灵魂。计算机组成原理,就是围绕着计算机是如何组织运作展开的。也许当妹子咨询你电脑问题的时候,答案就藏在这门课程里面(大雾)。
计算机,显式来看是有CPU,内存,主板等硬件组成的设备。但是我们从事的软件开发工作。显然,计算机组成原理就是隔离了软件和硬件,并且提供了软件硬件接口。实际上计算机内部的晶体管和电路,完全不知道自己做了什么,人们把他们不同的状态抽象成0和1的概念,进行逻辑运算,然后用这些逻辑运算我们可以用二进制的形式表示数值运算,再结合这些运算,就产生了一条条指令,最后把这些电路统一成CPU,实际上都是一层一层的抽象。最上一层的抽象可以轻松供我们使用,而不需要每次都关注0或者1。层层抽象的过程中,每一层完成自己的任务,同时又提供更高层次的抽象。
学完计组后,对之前学的一些知识的细节确实有一种豁然开朗的感觉。不过计组的知识体系很庞大,我也在逐渐学习的过程中。应对校招的话,如果时间有限,可能也并不需要学习那么全面。
接下来我准备记录一下自己关于计组的学习笔记和思考。主要是CPU篇,内存篇等,最后会总结成一个面向校招的笔记~敬请期待
CPU即中央处理器(Central Processing Unit),可以说是计算机中最重要的配件之一,因为计算机所有的计算都是由CPU来完成的。
而硬件层面上来看,CPU就是一个超级精细的印刷电路板。
内存(Memory)也是学习和面试中经常出现的字眼。我们运行的程序,比如跑的代码,玩的游戏,看的视频,都要加载到内存中,才能正常运行。总而言之,计算机所有程序的运行都在内存中运行
从硬件层面来看,内存就是我们所说的内存条,由内存芯片,电路板等元件组成。
存放在内存里的程序和数据,需要被 CPU 读取,CPU 计算完之后,还要把数据写回到内存。那么CPU究竟是如何和内存进行数据交换的呢?两块单独的电路板是无法直接交换数据的。因此,有了另外一个重要的硬件——主板
主板是一个有着各种各样,有时候多达数十乃至上百个插槽的配件。我们的 CPU 要插在主板上,内存也要插在主板上。主板的芯片组(Chipset)和总线(Bus)解决了 CPU 和内存之间如何通信的问题。芯片组控制了数据传输的流转,也就是数据从哪里到哪里的问题。总线则是实际数据传输的高速公路。因此,总线速度(Bus Speed)决定了数据能传输得多快。
有了这些,再加上曾经大计基学过的,一些IO设备,显卡,GPU等就可以组成一台完整的计算机了。
从硬件角度来看,寄存器就是 CPU 内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路。(触发器和锁存器,其实就是两种不同原理的数字电路组成的逻辑门,这是数电的概念,简单了解即可)
一个 CPU 里面会有很多种不同功能的寄存器。给你介绍三种比较特殊的。
PC 寄存器(Program Counter Register),它就是用来存放下一条需要执行的计算机指令的内存地址。(学过JVM的小伙伴是不是看到这里很亲切,JVM中的程序计数器和这个一模一样,因为JVM就是是一种利用软件方法实现的,抽象的计算机基于下层的操作系统和硬件平台)
指令寄存器(Instruction Register),用来存放当前正在执行的指令。
条件码寄存器(Status Register),用里面的一个一个标记位(Flag),存放 CPU 进行算术或者逻辑计算的结果。
也就是说,寄存器实际上也是一种存储器,但是它更像是CPU的一部分,只能存放有限的信息,但是它的速度十分快,几乎与CPU同步
首先,缓存只是一种非常快速的内存类型,小伙伴们应该不陌生了。面试用经常问到如何加快数据库热点数据访问速度,我们一定绕不开Redis这个缓存中间件。而计算机内部有多种内存类型,比如缓存,比如主存储(常说的硬盘或者SSD)用于存储大量数据(操作系统和所有程序)。
那么缓存是怎么来的呢?
按照摩尔定律,CPU 的访问速度每 18 个月便会翻一番,相当于每年增长 60%。内存的访问速度虽然也在不断增长,却远没有这么快,每年只增长 7% 左右。长此以往导致CPU和内存的速度差异越来越大。为了弥补两者之间的性能差异,更好的利用CPU性能,我们在现代 CPU内部引入了高速缓存,也就是CPU Cache。
从硬件角度看,CPU Cache 用的是一种叫作SRAM(Static Random-Access Memory,静态随机存取存储器)的芯片。
SRAM(Static Random-Access Memory,静态随机存取存储器),之所以是静态的,是因为只要通电,内部的数据就可以存在。而一旦断电,数据也就丢失了。是不是看起来不太安全?但是设计简单的好处就是用起来更方便。在SRAM中,数据存储密度并不高,而且存储的数据有限。但是正是由于SRAM的结构简单,所以数据访问速度十分快。
那么既然有静态随机存取存储器是否也有动态随机存储器呢?接着往后看
我们已经知道,程序被设计为一组指令,最终由CPU运行。当我们运行程序的时候,这些指令必须从主存储器取指令到CPU。这是内存层次结构起作用的地方。
由于内存和CPU运行速度差异过大,所以数据需要首先被加载到SRAM中,然后被发送到CPU。因为CPU每秒都能够执行大量指令。为了充分利用其功能,CPU需要访问超高速内存,这是缓存的来源。
高速缓存在CPU内执行数据的来回传输。内存和缓存不断进行交互。
CPU缓存分为三个主要的级别,即L1,L2和L3
之前说了CPU内部高速缓存用的SRAM,结构简单,数据存储量小,但是速度十分快。而内存就是用的DRAM(Dynamic Random Access Memory,动态随机存取存储器)的芯片,比起 SRAM 来说,它的密度更高,有更大的容量,而且它也比 SRAM 芯片便宜不少。DRAM 被称为“动态”存储器,是因为 DRAM 需要靠不断地“刷新”。所以,DRAM 在同样的物理空间下,能够存储的数据也就更多,也就是存储的“密度”更大。但是,因为数据是存储在电容里的,电容会不断漏电,所以需要定时刷新充电,才能保持数据不丢失。DRAM 的数据访问电路和刷新电路都比 SRAM 更复杂,所以访问延时也就更长。
这样,各个存储器只和相邻的一层存储器打交道,并且随着一层层向下,存储器的容量逐层增大,访问速度逐层变慢,而单位存储成本也逐层下降,也就构成了我们日常所说的存储器层次结构。
SSD(Solid-state drive 或 Solid-state disk,固态硬盘)、HDD(Hard Disk Drive,硬盘)这些被称为硬盘的外部存储设备
SSD 固态硬盘是基于NAND 芯片的高速硬盘。而 HDD 硬盘则是一种完全符合“磁盘”这个名字的传统硬件。“磁盘”的硬件结构,决定了它的访问速度受限于它的物理结构,是最慢的。
因此,一般我们装电脑时候,都是用固态硬盘来装系统盘,用机械硬盘来存储其他数据,也是同样的道理。
? 我画了一张金字塔图,大家可以对照着看一下,从CPU 、内存,到 SSD 和 HDD 硬盘。其中,容量越小的设备速度越快,而且,CPU 并不是直接和每一种存储器设备打交道,而是每一种存储器设备,只和它相邻的存储设备打交道。
? 这样,各个存储器只和相邻的一层存储器打交道,并且随着一层层向下,存储器的容量逐层增大,访问速度逐层变慢,而单位存储成本也逐层下降,也就构成了我们日常所说的存储器层次结构。
标签:全面 设备 受限 完整 mic 因此 学一学 磁盘 har
原文地址:https://www.cnblogs.com/xuxiaoxiasde/p/14141557.html