任何技术,只要足够高深,都无法与邪术区离开来。——亚瑟 • 克拉克为解决种种问题,人们发现了不可胜数的机械。盘算机种类繁多,从嵌入火星周游机械人的盘算机到为利用核潜艇导航系统的盘算机,纷歧而足。
冯• 诺伊曼在1945 年提出第一种盘算模型,无论条记本电脑还是电话,险些所有盘算机都遵循与这种模型相同的事情原理。那么你们相识盘算机是如何事情的吗?本文将讨论这些内容:◎ 明白盘算机体系结构的基础知识◎ 选择编译器将代码转换为盘算机可以执行的指令◎ 凭据存储器条理结构提高数据的存储速度究竟,在非法式员看来,编程要像邪术一样神奇,我们法式员不会这么看。体系结构盘算机是一种凭据指令操作数据的机械,主要由处置惩罚器与存储器两部门组成。存储器又称RAM(随机存取存储器),用于存储指令以及需要操作的数据。
处置惩罚器又称CPU(中央处置惩罚器),它从存储器获取指令与数据,并执行相应的盘算。接下来,我们将讨论这两部门的事情原理。存储器存储器被划分为许多单元,每个单元存储少量数据,通过一个数字地址加以标识。
在存储器中读取或写入数据时,每次对一个单元举行操作。为读写特定的存储单元,必须找到该单元的数字地址。
由于存储器是一种电气元件,单元地址作为二进制数通过信号线传输。二进制数以 2 为基数表现,其事情原理如下:每条信号线传输一个比特,以高电压表现信号“1”,低电压表现信号“0”,如图7-1 所示。
对于某个给定的单元地址,存储器可以举行两种操作:获取其值或存储新值,如图7-2 所示。存储器包罗一条用于设置操作模式的特殊信号线。每个存储单元通常存储一个 8 位二进制数,它称为字节。
设置为“读”模式时,存储器检索生存在单元中的字节,并通过8 条数据传输线输出,如图7-3 所示。设置为“写”模式时,存储器从数据传输线获取一个字节,并将其写入相应的单元,如图7-4 所示。传输相同数据的一组信号线称为总线。
用于传输地址的8 条信号线组成地址总线,用于在存储单元之间传输数据的另外8 条信号线组成数据总线。地址总线是单向的(仅用于吸收数据),而数据总线是双向的(用于发送和吸收数据)。
在所有盘算机中,CPU 与RAM 无时无刻不在交流数据:CPU 不停从RAM 获取指令与数据,偶然也会将输出与部门盘算存储在RAM 中,如图7-5 所示。CPUCPU 包罗若干称为寄存器的内部存储单元,它能对存储在这些寄存器中的数字执行简朴的数学运算,也能在RAM 与寄存器之间传输数据。
可以指示CPU 执行以下典型的操作:◎ 将数据从存储位置 220 复制到寄存器 3;◎ 将寄存器 3 与寄存器 1 中的数字相加。CPU 可以执行的所有操作的荟萃称为指令集,指令集中的每项操作被分配一个数字。盘算机代码本质上是表现CPU 操作的数字序列,这些操作以数字的形式存储在RAM 中。
输入/ 输出数据、部门盘算以及盘算机代码都存储在RAM 中。通过在RAM 中包罗重写部门代码的指令,代码甚至可以对自身修改,这是盘算机病毒逃避反病毒软件检测的习用手法。与之类似,生物病毒通过改变自身的DNA以躲避宿主免疫系统的攻击。
图7-6 取自Intel 4004 操作手册,显示了部门CPU 指令映射为数字的方法。随着制造工艺的生长,CPU 支持的操作越来越多。现代CPU 的指令集极为庞大,但最重要的指令在几十年前就已存在。
CPU 的运行永无休止,它不停从存储器获取并执行指令。这个周期的焦点是PC 寄存器,PC (program counter)是“法式计数器”的简称。
PC 是一种特殊的寄存器,用于生存下一条待执行指令的存储地址。CPU 的事情流程如下:(1) 从PC 指定的存储地址获取指令;(2) PC 自增;(3) 执行指令;(4) 返回步骤1。
PC 在CPU 上电时复位为默认值,它是盘算机中第一条待执行指令的地址。这条指令通常是一种不行变的内置法式,用于加载盘算机的基本功效。
在许多小我私家盘算机中,这种法式称为BIOS(基本输入输出系统)。CPU 上电后将继续执行这种“获取- 执行”周期直至关机。
然而,如果CPU 只能遵循有序、顺序的操作列表,那么它与一个花哨的盘算器并无二致。CPU 的神奇之处在于可以指示它向PC 中写入新值,从而实现执行历程的分支,或“跳转”到存储器的其他位置。这种分支可以是有条件的。以下面这条CPU 指令为例:“如果寄存器1 即是0,将PC设置为地址200”。
该指令相当于:if x = 0compute_this()elsecompute_that()仅此而已。无论是打开网站、玩盘算机游戏抑或编辑电子表格,所涉及的盘算并无区别,都是一系列只能对存储器中的数据求和、比力或移动的简朴操作。
大量简朴的操作组合在一起,就能表达庞大的历程。以经典的《太空侵略者》游戏为例,其代码包罗约莫3000 条机械指令。CPU 时钟 早在20 世纪80 年月,《太空侵略者》就已风靡一时。
这个游戏在配备2 MHz CPU 的街机上运行。“2 MHz”表现CPU 的时钟,即CPU 每秒可以执行的基本操作数。时钟频率为200 万赫兹(2 MHz)的CPU 每秒约莫可以执行200 万次基本操作。
完成一条机械指令需要5到10 次基本操作,因此老式街机每秒能运行数十万条机械指令。随着现代科技的进步,普通的台式盘算机与智能手机通常配备2 GHzCPU,每秒可以执行数亿条机械指令。时至今日,多核CPU 已投入大规模应用,如四核2 GHz CPU 每秒能执行近10 亿条机械指令。
展望未来,CPU 配备的焦点数量或许会越来越多。CPU 体系结构 读者是否思考过,PlayStation 的游戏CD 为何无法在台式盘算机中运行?iPhone 应用为何无法在Mac 中运行?原因很简朴,因为它们的CPU 体系结构差别。
x86 体系结构如今已成为行业尺度,因此相同的代码可以在大部门小我私家盘算机中执行。但思量到节电的要求,手机接纳的CPU 体系结构有所差别。
差别的CPU 体系结构意味着差别的CPU 指令集,也意味着将指令编码为数字的方式各不相同。台式盘算机CPU 的指令并非手机CPU的有效指令,反之亦然。32 位与64 位体系结构 第一种CPU 是Intel 4004,它接纳4 位体系架构。
换言之,这种CPU 在一条机械指令中可以对最多4 位二进制数执行求和、比力与移动操作。Intel 4004 的数据总线与地址总线均只有4 条。
不久之后,8 位CPU 开始广为盛行,这种CPU 用于运行DOS 的早期小我私家盘算机。20 世纪八九十年月,著名的便携式游戏机Game Boy 就接纳8 位处置惩罚器。这种CPU 可以在一条指令中对8 位二进制数举行操作。
技术的快速生长使16 位以及之后的32 位体系结组成为主导。CPU 寄存器随之增大,以容纳32 位数字。更大的寄存器自然催生出更大的数据总线与地址总线:具有32 条信号线的地址总线可以对232 字节(4 GB)的内存举行寻址。
人们对盘算能力的渴求从未停止。盘算机法式越来越庞大,消耗的内存越来越多,4 GB 内存已无法满足需要。使用适合32 位寄存器的数字地址对凌驾4 GB 内存举行寻址颇为棘手,这成为64 位体系结构兴起的动因,这种体系结构如今占据主导职位。
64 位CPU 可以在一条指令中对极大的数字举行操作,而64 位寄存器将地址存储在海量的存储空间中:264 字节相当于凌驾170 亿吉字节(GB)。大端序与小端序 一些盘算机设计师认为,应按从左至右的顺序在RAM 与CPU 中存储数字,这种模式称为小端序。另一些盘算机设计师则倾向于按从右至左的顺序在存储器中写入数据,这种模式称为大端序。
因此,凭据“字节序”的差别,二进制序列1-0-0-0-0-0-1-1 表现的数字也有所差别。◎ 大端序:27 + 21 + 20 = 131◎ 小端序:20 + 26 + 27 = 193现在的大部门CPU 接纳小端序模式,但同样存在许多接纳大端序模式的盘算机。如果大端序CPU 需要解释由小端序CPU 发生的数据,则必须接纳措施以免泛起字节序不匹配。法式员直接对二进制数举行操作,在剖析来自网络交流机的数据时尤其需要注意这个问题。
虽然现在多数盘算机接纳小端序模式,但由于大部门早期的网络路由器使用大端序CPU,所以因特网流量仍然以大端序为基础举行尺度化。以小端序模式读取大端序数据时将泛起乱码,反之亦然。模拟器 某些情况下,需要在盘算机上运行某些为差别CPU 设计的代码,以便在没有iPhone 的情况下测试iPhone 应用,或玩脍炙人口的老式超级任天堂游戏。
这是通过称为模拟器的软件来实现的。模拟器用于模拟目的机械,它假定与其拥有相同的CPU、RAM 以及其他硬件。模拟器法式对指令举行解码,并在模拟机械中执行。可以想见,如果两台机械的体系结构差别,那么在一台机械内部模拟另一台机械绝非易事。
幸亏现代盘算机的速度远远凌驾之前的机械,因此模拟并非无法实现。我们可以使用Game Boy 模拟器在盘算机中建立一个虚拟的Game Boy,然后就能像使用实际的Game Boy 那样玩游戏。
编译器通过对盘算机举行编程,可以完成核磁共振成像、声音识别、行星探索以及其他许多庞大的任务。值得注意的是,盘算机执行的所有操作最终都要通过简朴的CPU 指令完成,即归结为对数字的求和与比力。
而Web 浏览器等庞大的盘算机法式需要数百万以致数十亿条这样的机械指令。但我们很少会直接使用CPU 指令来编写法式,也无法接纳这种方式开发一个传神的三维盘算机游戏。为了以一种更“自然”且更紧凑的方式表达下令,人们缔造了编程语言。
我们使用这些语言编写代码,然后通过一种称为编译器的法式将下令转换为CPU 可以执行的机械指令。我们用一个简朴的数学类比来解释编译器的用途。假设我们向某人提问,要求他盘算5 的阶乘。
5! = ?但如果回覆者不相识什么是阶乘,则这样提问并无意义。我们必须接纳更简朴的操作来重新表述问题。
5×4×3×2×1 = ?不外,如果回覆者只会做加法怎么办?我们必须进一步简化问题的表述。5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 +5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 = ?可以看到,表达盘算的形式越简朴,所需的操作数量越多。
盘算机代码同样如此。编译器将编程语言中的庞大指令转换为等效的CPU 指令。联合功效强大的外部库,就能通过相对较少的几行代码表现包罗数十亿条CPU 指令的庞大法式,而这些代码易于明白和修改。
盘算机之父艾伦• 图灵发现,简朴的机械有能力盘算任何可盘算的事物。如果机械具有通用的盘算能力,那么它必须能遵循包罗指令的法式,以便:◎ 对存储器中的数据举行读写;◎ 执行条件分支:如果存储地址具有给定的值,则跳转到法式的另一个点。我们称具有这种通用盘算能力的机械是图灵完备的。
无论盘算的庞大性或难度如何,都可以接纳简朴的读取/ 写入/ 分支指令来表达。只要分配足够的时间与存储空间,这些指令就能盘算任何事物。人们最近发现,一种称为MOV(数据传送)的CPU 指令是图灵完备的。
这意味着仅能执行MOV 指令的CPU 与完整的CPU 在功效上并无差别:换言之,通过MOV 指令可以严格地表达任何类型的代码。这个重要观点在于,无论简朴与否,如果法式能接纳编程语言举行编码,就可以重写后在任何图灵完备的机械中运行。编译器是一种神奇的法式,能自动将代码从庞大的语言转换为简朴的语言。
操作系统从本质上讲,编译后的盘算机法式是CPU 指令的序列。如前所述,为台式盘算机编译的代码无法在智能手机中运行,因为二者接纳差别的CPU体系结构。
不外,由于法式必须与盘算机的操作系统通信才气运行,编译后的法式也可能无法在共享相同CPU 架构的两台盘算机中使用。为实现与外界的通信,法式必须举行输入与输出操作,如打开文件、在屏幕上显示消息、打开网络毗连等。但差别的盘算机接纳差别的硬件,因此法式不行能直接支持所有差别类型的屏幕、声卡或网卡。
这就是法式依赖于操作系统执行的原因所在。借助操作系统的资助,法式可以绝不艰苦地使用差别的硬件。法式建立特殊的系统挪用,请求操作系统执行所需的输入/ 输出操作。
编译器卖力将输入/ 输出下令转换为合适的系统挪用。然而,差别的操作系统往往使用互不兼容的系统挪用。例如,与macOS或Linux 相比,Windows 在屏幕上打印信息所用的系统挪用有所差别。
因此,在使用x86 处置惩罚器的Windows 中编译的法式,无法在使用x86处置惩罚器的Mac 中运行。除针对特定的CPU 体系结构外,编译后的代码还会针对特定的操作系统。
编译优化优秀的编译器致力于优化它们生成的机械码。如果编译器认为可以通过修改部门代码来提高执行效率,则会处置惩罚。在生成二进制输出之前,编译器可能实验应用数百条优化规则。
因此,应使代码易于阅读以利于举行微优化。编译器最终将完成所有细微的优化。例如,一些人对以下代码颇有微词。
function factorial(n)if n > 1return factorial(n - 1) * nelsereturn 1他们认为应该举行以下修改:function factorial(n)result ← 1while n > 1result ← result * nn ← n - 1return result诚然,在不使用递归的情况下执行factorial 函数将消耗较少的盘算资源,但仍然没有理由因此而改变代码。现代编译器将自动重写简朴的递归函数,举例如下。i ← x + y + 1j ← x + y为制止举行两次x+y 盘算,编译器将上述代码重写为:t1 ← x + yi ← t1 + 1j ← t1应专注于编写清晰且自解释的代码。如果性能泛起问题,可以使用分析工具寻找代码中的瓶颈,并实验改用更好的方法盘算存在问题的代码。
此外,制止在不须要的微操作上浪费太多时间。但在某些情况下,我们希望跳过编译,接下来将对此举行讨论。
剧本语言某些语言在执行时并未被直接编译为机械码,这些语言称为剧本语言,包罗JavaScript、Python 以及Ruby。在剧本语言中,代码由解释器而非CPU 执行,解释器必须安装在运行代码的机械中。
解释器实时转译并执行代码,因此其运行速度通常比编译后的代码慢得多。但另一方面,法式员随时都能立刻运行代码而无须等候编译历程。
对于规模极大的项目,编译可能耗时数小时之久。Google 工程师必须不停编译大量代码,导致法式员“损失”了许多时间(图7-9)。
由于需要保证编译后的二进制文件有更好的性能,Google 无法切换到剧本语言。公司为此开发了Go 语言,它的编译速度极快,同时仍然保持很高的性能。反汇编与逆向工程给定一个已编译的盘算机法式,无法在编译之前恢复其源代码。但我们可以对二进制法式解码,将用于编码CPU 指令的数字转换为人类可读的指令序列。
这个历程称为反汇编。接下来,可以检察这些CPU 指令,并实验分析它们的用途,这就是所谓的逆向工程。
某些反汇编法式对这一历程大有裨益,它们能自动检测并注释系统挪用与常用函数。借由反汇编工具,黑客对二进制代码的各个环节了如指掌。我相信,许多顶尖的IT 公司都设有秘密的逆向工程实验室,以便研究竞争对手的软件。
地下黑客经常分析Windows、Photoshop、《侠盗猎车手》等授权法式中的二进制代码,以确定哪部门代码卖力验证软件许可证。黑客将二进制代码修改,在其中加入一条指令,直接跳转到验证许可证后执行的代码部门。运行修改后的二进制代码时,它在检查许可证前获取注入的JUMP 下令,从而可以在没有付费的情况下运行非法的盗版副本。
在秘密的政府情报机构中,同样设有供宁静研究人员与工程师研究iOS、Windows、IE 浏览器等盛行消费者软件的实验室。他们寻找这些法式中可能存在的宁静毛病,以防御网络攻击或对高价值目的的入侵。在这类攻击中,最知名的当属“震网”病毒,它是美国与以色列情报机构研制的一种网络武器。
通过熏染控制地下聚变反映堆的盘算机,“震网”延缓了伊朗核计划。开源软件如前所述,我们可以凭据二进制可执行文件分析有关法式的原始指令,但无法恢复用于生成二进制文件的原始源代码。在没有原始源代码的情况下,纵然可以稍许修改二进制文件以便以较小的方式破解,实际上也无法对法式举行任何重大更改(如添加新功效)。一些人推崇协作构建代码的方式,因此将自己的源代码开放供他人修改。
“开源”的主要观点就在于此:所有人都能自由使用与修改的软件。基于Linux 的操作系统(如Ubuntu、Fedora 与Debian)是开源的,而Windows 与macOS 是闭源的。开源操作系统的一个有趣之处在于,任何人都可以检查源代码以寻找宁静毛病。
现已证实,政府机构通过日常消费者软件中未修补的宁静毛病,对数百万平民举行使用和监视。但对开源软件而言,代码受到的关注度更高,因此恶意的第三方与政府机构很难植入监控后门法式。使用macOS 或Windows 时,用户必须相信Apple 或Microsoft 对自己的宁静不会组成危害,并尽最大努力防止任何严重的宁静毛病。
而开源系统置于民众的监视之下,因此宁静毛病被忽视的可能性大为降低。存储器条理结构我们知道,盘算机的操作可以归结为使CPU 执行简朴的指令,这些指令只能对存储在CPU 寄存器中的数据操作。但寄存器的存储空间通常被限制在1000 字节以内,这意味着CPU 寄存器与RAM 之间必须不停举行数据传输。
如果存储器会见速渡过慢,CPU 将被迫处于空闲状态,以等候RAM 完成数据传输。CPU 读写存储器中数据所需的时间与盘算机性能直接相关。提高存储器速度有助于加速盘算机运行,也可以提高CPU 会见数据的速度。CPU 能以近乎实时的速度(一个周期以内)会见存储在寄存器中的数据,但会见RAM 则慢得多。
对于时钟频率为1 GHz 的CPU,一个周期的连续时间约为十亿分之一秒,这是光线从本书进入读者眼中所需的时间。处置惩罚器与存储器之间的鸿沟近年来的技术生长使得CPU 速度成倍增长。虽然存储器速度同样有所提高,但却慢得多。
CPU 与RAM 之间的这种性能差距称为“处置惩罚器与存储器之间的鸿沟”。我们可以执行大量CPU 指令,因此它们很“廉价”;而从RAM 获取数据所需的时间较长,因此它们很“昂贵”。随着两者之间的差距逐渐增大,提高存储器会见效率的重要性越发现显。现代盘算机需要约莫1000 个CPU 周期(1 微秒左右) 从RAM 获取数据。
这种速度已很惊人,但与会见CPU 寄存器的时间相比仍然较慢。淘汰盘算所需的RAM 操作次数,是盘算机科学家追求的目的。
在两个面临面的人之间,声波流传需要约莫10 微秒。时间局部性与空间局部性在实验只管淘汰对RAM 的会见时,盘算机科学家开始注意到两个事实。
◎ 时间局部性:会见某个存储地址时,可能很快会再次会见该地址。◎ 空间局部性:会见某个存储地址时,可能很快会会见与之相邻的地址。
因此,将这些存储地址生存在CPU 寄存器中,有助于制止大部门对RAM的“昂贵”操作。不外在设计CPU 芯片时,工业工程师并未找到可行的方法来容纳足够多的内部寄存器,但他们仍然发现了如何有效地使用时间局部性与空间局部性。接下来将对此举行讨论。一级缓存可以构建一种集成在CPU 内部且速度极快的辅助存储器,这就是一级缓存。
将数据从一级缓存读入寄存器,仅比直接从寄存器获取数据稍慢。使用一级缓存,我们将可能会见的存储地址中的内容复制到CPU 寄存器四周,借此以极快的速度将数据载入CPU 寄存器。将数据从一级缓存读入寄存器仅需约莫10 个CPU 周期,速度是从RAM 获取数据的近百倍。借由10 KB 左右的一级缓存,并合理使用时间局部性与空间局部性,凌驾一半的RAM 会见挪用仅通过缓存就能实现。
这一创新使盘算技术发生了排山倒海的变化。一级缓存可以极大缩短CPU 的等候时间,使CPU 将更多时间用于实际盘算而非处于空闲状态。
二级缓存提高一级缓存的容量有助于淘汰从RAM 获取数据的操作,进而缩短CPU 的等候时间。可是,增大一级缓存的同时也会降低它的速度。在一级缓存到达50 KB 左右时,继续增加其容量就要支付极高的成本。更好的方案是构建一种称为二级缓存的缓存。
二级缓存的速度稍慢,但容量比一级缓存大得多。现代CPU 配备的二级缓存约为200 KB,将数据从二级缓存读入CPU 寄存器需要约莫100 个CPU 周期。
我们将最有可能会见的地址复制到一级缓存,较有可能会见的地址复制到二级缓存。如果CPU 没有在一级缓存中找到某个存储地址,仍然可以实验在二级缓存中搜索。仅当该地址既不在一级缓存、也不在二级缓存中时,CPU 才需要会见RAM。现在,不少制造商推出了配备三级缓存的处置惩罚器。
三级缓存的容量比二级缓存大,虽然速度不及二级缓存,但仍然比RAM 快得多。一级/ 二级/ 三级缓存很是重要,它们占据了CPU 芯片内部的大部门硅片空间。见图7-11。使用一级/ 二级/ 三级缓存能显著提高盘算机的性能。
在配备200 KB的二级缓存后,CPU 发出的存储请求中仅有不到10% 必须直接从RAM获取。读者以后购置盘算机时,对于所挑选的CPU,请记着比力一级/ 二级/三级缓存的容量。
CPU 越好,缓存越大。一般来说,建议选择一款时钟频率稍低但缓存容量较大的CPU。
第一级存储器与第二级存储器如前所述,盘算机配有差别类型的存储器,它们按条理结构排列。性能最好的存储器容量有限且成本极高。沿条理结构向下,可用的存储空间越来越多,但会见速度越来越慢。
在存储器条理结构中,位于CPU 寄存器与缓存之下的是RAM,它卖力存储当前运行的所有历程的数据与代码。停止2017 年,盘算机配备的RAM 容量通常为1 GB 到10 GB。
但在许多情况下,RAM 可能无法满足操作系统以及所有运行法式的需要。因此,我们必须深入探究存储器条理结构,使用位于RAM 之下的硬盘。
停止2017 年,盘算机配备的硬盘容量通常为数百吉字节,足以容纳当前运行的所有法式数据。如果RAM 已满,当前的空闲数据将被移至硬盘以释放部门内存空间。问题在于,硬盘的速度很是慢,它一般需要100 万个CPU 周期(1 毫秒)a 在磁盘与RAM 之间传输数据。
从磁盘会见数据看似很快,但不要忘记,会见RAM 仅需1000 个周期,而会见磁盘需要100 万个周期。RAM 通常称为第一级存储器,而存储法式与数据的磁盘称为第二级存储器。尺度照片在约莫4 毫秒内捕捉光线。
CPU 无法直接会见第二级存储器。执行生存在第二级存储器中的法式之前,必须将其复制到第一级存储器。
实际上,每次启动盘算机时,即即是操作系统也要从磁盘复制到RAM,否则CPU 无法运行。确保RAM 永不枯竭 在典型运动期间,确保盘算机处置惩罚的所有数据与法式都能载入RAM 至关重要,否则盘算机将不停在磁盘与RAM 之间交流数据。
由于这项操作的速度极慢,盘算机性能将严重下降,甚至无法使用。这种情况下,盘算机不得不花费更多时间等候数据传输,而无法举行实际的盘算。
当盘算机不停将数据从磁盘读入RAM 时,则称盘算机处于发抖模式。必须对服务器举行连续监控,如果服务器开始处置惩罚无法载入RAM 的数据,那么发抖可能会导致整个服务器瓦解。银行或收银机前将因此排起长队,而服务员除了责怪发生发抖的盘算机系统之外别无他法。
内存不足或许是导致服务器故障的主要原因之一。外部存储器与第三级存储器我们继续沿存储器条理结构向下分析。
在毗连到网络之后,盘算机就能会见由其他盘算机治理的存储器。它们要么位于当地网络,要么位于因特网(即云端)。但会见这些数据所需的时间更长:读取当地磁盘需要1 毫秒,而获取网络中的数据可能耗时数百毫秒。网络包从一台盘算机传输到另一台盘算机约莫需要10 毫秒,如果经由因特网传输则需要200 毫秒到300 毫秒,与眨眼的时间相仿。
位于存储器条理结构底部的是第三级存储器,这种存储设备并非总是在线与可用的。在盒式磁带或CD 中存储数百万吉字节的数据成本较低,但会见这类介质中的数据时,需要将介质插入某种读取设备,这可能需要数分钟甚至数天之久(不妨实验让IT 部门在周五晚上备份磁带中的数据……)。
有鉴于此,第三级存储器仅适合归档很少会见的数据。存储技术的生长趋势一方面,很难显著革新“快速”存储器(位于存储器条理结构顶端)所用的技术;另一方面,“慢速”存储器的速度越来越快,价钱也越来越低。几十年来,硬盘存储的成本一直在下降,这种趋势似乎还将连续下去。
新技术也使磁盘的速度得以提高。人们正从旋转磁盘转向固态硬盘(SSD),它没有动件,因而更快、更可靠且更省电。
接纳SSD 技术的磁盘正变得越来越自制且越来越快,但其价钱仍然不菲。有鉴于此,一些制造商推出了同时接纳SSD 与磁技术的混淆磁盘。
后者将会见频率较高的数据存储在SSD 中,会见频率较低的数据存储在速度较慢的磁盘中。当需要频繁会见原先不经常会见的数据时,则将其复制到混淆驱动器中速度较快的SSD。
这与CPU 使用内部缓存提高RAM 会见速度的技巧颇为类似。小结本文先容了一些基本的盘算机事情原理。任何可盘算的事物都能接纳简朴的指令来表现。为将庞大的盘算下令转换为CPU 可以执行的简朴指令,需要使用一种称为编译器的法式。
盘算机之所以能举行庞大盘算,仅仅是因为CPU 可以执行大量基本操作。盘算机的处置惩罚器速度很快,但存储器相对较慢。CPU 并非以随机方式会见存储器,而是遵循空间局部性与时间局部性原理。
因此,可以将会见频率较高的数据缓存在速度更快的存储器中。这一原则在多个级此外缓存中获得了应用:从一级缓存直到第三级存储器,纷歧而足。本文讨论的缓存原则可以应用于多种场景。
确定应用法式频繁使用的数据,并设法提高这部门数据的会见速度,是缩短盘算机法式运行时间的最常用计谋之一。——本文选自《盘算机科学精炼》。
本文来源:米6体育app官网下载安卓-www.150100sc.com