计算机实际上是如何记住的?

原文:towardsdatascience.com/how-do-computers-actually-remember-af43d49e82ab

简介

你是否曾经想过计算机实际上是如何“记住”东西的?当然,你听说过它使用 RAM 作为“短期”内存,而你的硬盘或固态硬盘是“长期”内存。但是,这些设备是如何实际保留信息的?这正是我们将在本文中回答的问题。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/edabe52cd144447a065329358f8f1f21.png

Markus SpiskeUnsplash 上拍摄的照片

作为数据科学家,我们通常使用高级工具。Python 很棒,但它为了简化而隐藏了计算机工作的许多细节。然而,计算机是我们行业的工具——我们了解它们是如何工作的不是很有意义吗?这篇文章是我系列文章“初学者数据科学家计算机硬件入门”的第三篇。如果你错过了前两篇,不要担心——你实际上并不需要它们来跟上进度,但它们将帮助你达到更深层次的理解(如果你想阅读其他文章,可以在本文底部找到链接)。

本系列文章的目的是让新的(或经验丰富的)数据科学家一窥他们每天使用的工具是如何实际工作的,而不需要任何关于物理学、电气工程或低级计算机科学概念的知识。如果你对计算机的工作原理感兴趣,但在这个领域没有太多的背景知识,那么这个系列将是你开始的好地方。

太好了,现在我们已经解决了这个问题,让我们进入有趣的部分!

内存与存储:有什么区别?

根据你的背景,你可能听说过计算机使用内存和存储,并且这两个元素是不同的。大致来说,内存(或 RAM)是计算机的“短期”内存,而存储(通常是你的硬盘或固态硬盘)是你的“长期”内存。

首先,让我们清理一下我们的词汇。从现在开始,我们将不再称之为“短期”和“长期”内存,而是分别将它们称为“易失性”和“非易失性”内存。易失性内存指的是在失去电力后无法保留数据的组件,而非易失性内存组件即使在没有电力的情况下也能保留其数据。实际上,存在许多不同类型的易失性和非易失性内存。本文将重点介绍易失性内存,这是用于 RAM 的内存类型。在下一篇文章中,我们将讨论非易失性内存,并比较和对比这两种类型。

易失性内存:计算机的短期内存

再次强调,易失性存储器在没有电源的情况下会丢失数据。这意味着它不能(也不应该)用来长期存储文件。你可能听说过 RAM(Random Access Memory)。你可以在任务管理器中轻松地看到你的电脑正在使用多少 RAM,如果你曾经尝试使用我们有时作为数据科学家可以访问的一些较大的数据集,你可能在任务中途就已经用完了它(总是让人沮丧)。虽然 RAM 是计算机使用的一种易失性存储器,但它并不是计算机使用的唯一易失性存储器。

RAM 可以分为两大类:DRAM(动态 RAM)和 SRAM(静态 RAM)。我们将首先讨论 DRAM,这是你可能熟悉的一种 RAM 类型。

DRAM:一切都是关于电容器

如果你曾经听说过有人谈论“RAM 棒”或者提到他们的电脑有多少 RAM,他们所说的是 DRAM。DRAM 背后的核心思想实际上非常简单——它只是给电容器充电来表示 1,放电来表示 0。让我们看看电路图。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4d9df4285c9fc0a37c72c6390c594b2c.png

作者图片

在这种配置中,word line 是一根作为启用/禁用开关的电线,而 bit line 是一根将数据传输到电容器的电线。我明白这可能一开始不太容易理解——没关系。我会进一步解释。

要理解这个电路是如何工作的,你需要对晶体管元件有一个基本了解。对于这篇文章的目的,你只需要了解晶体管的一件事:它作为一个开关工作。施加在基极(wordline 连接的部分)的电流(电压)允许电流从集电极(位线连接的部分)流向发射极(电容器连接的部分)。

想象一下你水槽上的水龙头。你转动把手(就像“wordline”通过向其供电来“转动”基极),水(电流)从水管(集电极)流出,通过龙头(发射极)。如果你想深入了解晶体管的工作原理,我推荐我的上一篇文章,计算机是如何实际计算的?

让我们继续我们的水龙头类比。我们实际上只需要做一个小改动。在龙头上,你只有一个把手,现在你有两个。一个控制龙头(字线),另一个控制水流通过管道(位线)。电容器是一个存储电能的电气元件(就像排水槽存储水)。当电容器充满电能(当排水槽充满水时),我们把这理解为那里存储了一个 1 比特。注意,只有当两个把手都打开时,排水槽才能充满。如果你只打开水龙头上的把手(字线),那么管道中没有水(位线设置为 0)来填充排水槽(电容器)。

让我们总结一下。字线充当一个启用开关,告诉我们的电容器何时可以和不可以读取位线上传入的数据。当字线开启而位线关闭时,就在电容器中存储一个“0”。当字线开启且位线开启时,就在电容器中存储一个“1”。

我向你展示的电路实际上是简化了一些的。我省略了一些处理电容器电学特性相关奇怪现象所需的组件。其中一个特性是电容器会随时间泄漏。为了正确存储我们的数据,我们必须刷新存储在其中的电能。回到我们的排水槽类比,这就像打开水龙头短暂地给泄漏的排水槽补水。如果你听说过 RAM 的刷新率,这就是他们所说的。刷新率是指你多久需要用电力补充泄漏的电容器以保持数据完整性。

结合起来:如何从单个存储单元到 DRAM

让我们称这些小电路为存储单元。你可以将存储单元链成一个二维网格,一次写入多个比特。让我们举一个例子。让我们看看如何使用 DRAM 存储单元来存储一个 4 位数。

备注: 如果你需要快速回顾一下我所说的 4 位数的含义,这里有一个简要总结。计算机以二进制形式存储数字(仅使用 0 和 1)。4 位意味着我们可以存储任何仅使用四个 0 或 1 表示的数字。这给了我们从 0 到 2³-1=7 的范围。所以,将我们的典型数字系统转换为二进制,0 = 0b0000,7 = 0b1111。如果你想深入了解,我有一篇文章涵盖了二进制的基础:为什么计算机甚至使用二进制?

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e335c68bb5461d42070c17c764605e63.png

图片由作者提供

这些存储单元的每一行可以存储一个 4 位数。当我们开启字线 1 时,它将第一行的晶体管打开,允许位线 1-4 的数据被读入并存储在电容器中。如果我们把我们的 4 位数中的每一位放在不同的位线上,我们可以通过开启相应的字线一次存储整个数字。

这种二维架构还允许我们为每个存储单元分配地址。比如说,我们想引用第一行数字的第二列中的数据。我们知道它在位线 1,位线 2。这使得计算机能够以极高的精度访问不同位置的内存。许多高级编程语言抽象了这种详细的内存管理类型,但像 C 这样的低级语言让你能更清楚地看到这一点。

我想暂停一下,来回答一个可能困扰着你的问题。为什么叫它“位线”?这听起来像是为本质上像一排存储单元的开关的线使用的非常奇怪的词。答案在于我们如何谈论计算机科学中的数据大小。所有计算机硬件都有一个它能处理的每数字的最大位数。这通常由处理器决定。最常见的是,处理器可以处理每数字 32 或 64 位。当我们说计算机是 32 位或 64 位时,这就是我们的意思。在计算机科学中,“字”是指一次可以移动到内存和处理器之间的数字大小。通常,字大小与 32 或 64 这个数字相匹配,以简化。在上面的例子中,我们每行只有 4 个存储单元,所以我们的字大小是 4。在一个真实系统中,每行通常会有 32 或 64 个元素。位线控制对整个数据字的读写,因此得名。RAM 被称为 RAM(随机存取存储器),因为它可以随机抓取一个未使用的行并在需要存储数据时访问它。

现在你应该对 DRAM 的工作原理有了相当好的理解。然而,DRAM 并不是你计算机使用的唯一类型的 RAM。还有 RAM 的另一分支——SRAM。SRAM 代表静态 RAM;这是你的 CPU 用来缓存它正在积极处理的数据。

SRAM:为快速计算机提供快速内存

SRAM 被你的计算机 CPU 用来快速访问在工作时需要的数据。为了实现这一点,我们以两种方式使用 SRAM:作为缓存和作为寄存器。首先,我们将深入了解 SRAM 是如何工作的,然后我们将讨论这两种用例之间的区别。

触发器!(不是海滩那类的)

SRAM 与 DRAM 在本质上工作方式不同。它不使用电容器作为数据存储的单位——相反,它使用称为逻辑门的巧妙排列的晶体管来存储数据。

如果你对逻辑门不熟悉,我将简要总结一下你需要了解的这篇文章中的内容。逻辑门是由晶体管组成的电路元件,它们实现了基本的逻辑功能。例如,一个 AND 逻辑门如果两个输入都是 1,则输出 1,否则输出 0。想象一下,这是一个说“如果这个输入 AND 那个输入都开启,我就开启。否则,我将关闭”的组件。AND 是逻辑门家族的一部分,如 OR 和 NOT,这些都可以使用晶体管实现。对于更详细的讨论,请参考我的上一篇文章计算机实际上是如何计算的?

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/faaa57e1dcf2262ebdbfb1c9f112417f.png

图片由 Ridwan Muhamad IqbalUnsplash 上提供

我们使用两种由逻辑门组成的电路来存储:触发器和触发器。我们将专注于触发器,因为它们稍微简单一些,但大多数 SRAM 电路使用触发器。然而,它们是非常相似的电路,两者的核心思想是相同的。

让我们从查看电路开始。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8c7beb5b6724bcc13081cd2b4d2e1a88.png

图片由作者提供

这是 D 触发器的电路(D 代表数据)。这个电路背后的想法是,每当使能开启(设置为 1)时,数据就会从数据线读入并存储。如果使能关闭,则存储的数据保持其先前的值,无论数据如何变化。

在心中玩转这个电路。作为提醒,以下是对每个门的作用的说明。NOT 门反转信号(如果输入 = 0,输出 = 1。如果输入 = 1,输出 = 0)。AND 门如果两个输入都是 1,则输出 1,否则输出 0。OR 门如果任一或两个输入是 1,则输出 1,但如果两个输入都是 0,则输出 0。

如果你玩得足够久,你应该能从上面的电路中得到以下输出表(称为真值表)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/04cb8eb4f1cf12dc86ea89b4aea503d8.png

图片由作者提供

注意,“X”表示我们不在乎输入是什么,电路无论哪种方式都会有相同的行为。

D 触发器和 D 触发器之间的唯一真正区别是使能线连接到了触发器中的时钟。这意味着数据更新是在时钟变化时发生的,而不是在其他时候。一些电路设计者更喜欢使用这些而不是触发器,但核心思想是相同的。

每个这样的电路组成 SRAM 中的一个存储单元。我们可以将不同的位线连接到每条数据线,将使能线连接到字线(就像我们在 DRAM 中做的那样)来制作更大型的 SRAM 组件。

两种应用:缓存和寄存器

SRAM 主要用在你电脑的缓存和 CPU 寄存器中。我们使用它的原因很简单:它比 DRAM 更快,体积更小。电容器众所周知体积大且速度慢,这使得它们在需要速度的应用中不是一个好的选择。然而,它们比它们的 SRAM 对应物便宜得多,因此计算机工程师试图通过在需要的地方使用 SRAM,在其他所有地方使用 DRAM 来在速度、空间和成本效益之间取得平衡。寄存器和缓存是工程师通常优先考虑速度和尺寸而不是成本的两个地方。我们在这里将简要介绍这些的用途。

缓存是一小块 RAM,其使用方式与 DRAM 类似。一旦存储在 DRAM 中的数据被 CPU 使用,它就会被复制到 SRAM 数据缓存中。这样做的原因是计算机科学中的一个原则,你将在该领域的许多不同分支中看到它的应用:如果数据被访问一次,它很可能会很快再次被访问。我们之所以从 DRAM 复制数据到 SRAM 缓存,是因为 SRAM 要快得多,并且它允许我们在 CPU 需要访问最近使用过的数据时,加快我们电脑的访问时间。

CPU 寄存器是存储在 CPU 单元内部的小型内存元素,暂时存储正在操作的数据。CPU 是您电脑中最快的操作组件之一——通常它正在等待从 RAM 或非易失性内存中到达数据,以便它可以执行其计算。当它执行计算(如加法)时,它会将正在操作的两个数字加载到 CPU 内部的 SRAM 寄存器中,然后直接将其传输到 CPU。SRAM 寄存器允许 CPU 快速对其正在积极处理的数据执行内存操作。

结论

在这篇文章中,我们简要讨论了易失性和非易失性计算机内存之间的区别。我们了解到,易失性内存失去电源时会丢失数据,而非易失性内存则不会。然后我们深入探讨了 RAM 的内部工作原理,这是计算机中最常见的易失性内存类型。我们区分了慢速、体积大且便宜的 DRAM 和快速、体积小且昂贵的 SRAM。我们展示了两种电路,并讨论了它们如何组合起来存储大量数据。

希望这篇文章让您对计算机实际上是如何记住数据的有了更深入的了解。作为数据科学家,计算机对我们职业至关重要。对它们的深入了解可以帮助您更有效地使用它们。内存是计算的核心概念,了解哪些类型最适合哪些应用以及为什么,在需要应用程序快速运行的应用中可能是至关重要的。

希望您觉得这篇文章有趣且有用。下次,我们将讨论另一种类型的计算机内存——非易失性计算机内存。我们将讨论像硬盘和固态硬盘这样的突出非易失性技术。

在我们讨论完记忆之后,我们将把这些前三篇文章中涵盖的许多概念汇总起来,讨论它们如何组合在一起形成 CPU——中央处理单元。如果你从未真正理解过计算机的工作原理,请继续跟随,因为这就是本系列将要探讨的方向。

我希望下周再次见到你们!朋友们,祝你们有个美好的一天。

想查看本系列之前的文章?请见下文。

为什么计算机甚至使用二进制?

计算机实际上是如何计算的?

参考文献

[1] R. Palaniappan, 数字系统设计 (2011), dvikan.no/ntnu-studentserver/kompendier/digital-systems-design.pdf

<think>首先,用户询问了计算机科学的定义。我需要根据用户之前的请求和我之前的回应来组织答复。用户最后说:“我想了解计算机科学的定义 请问计算机科学的定义”,所以我的回答应该集中在定义上。 从系统级指令中,我需要: - 使用中文回复。 - 确保所有数学表达式都使用了 $...$ 或 $$...$$。 - 在引用的段落末尾自然地添加引用标识,例如 [^1]。 - 清晰的结构化回答。 - 最后生成相关问题。 用户提供了两个引用: - 引用 [1]:将计算机科学描述为研究计算机及其周围现象和规律的科学,涉及系统结构、软件、人工智能和计算本质。 - 引用 [2]:强调计算机科学作为一门正式学科的短暂历史,以及它对科学和社会的贡献,是信息时代的基础。 我应该将这些自然地融入我的回答中,但要记住,这些引用仅供参考,优先考虑用户的请求。 在我的上一个响应中,我没有计算机科学定义的先前历史,所以我会直接处理这个新问题。 关键要素: 1. **定义**:提供一个清晰、准确的计算机科学定义。 2. **结构**:组织答案以逐步解决问题: - 介绍什么是计算机科学。 - 解释其核心组成部分。 - 引用提供的资料。 3. **引用**:在适当的地方添加引用标识,例如在提到相关信息之后。 4. **数学表达式**:如果适用,请使用数学表达式。在这个背景下,计算机科学可能涉及算法或理论概念,所以我应该包含一些,比如算法复杂性的表示(例如 $O(n \log n)$)或离散数学的概念。 5. **生成相关问题**:在最后,添加一个“相关问题”小节,包含 3-5 个问题。 可能的定义: - 计算机科学是研究如何表示和处理信息的科学,包括算法、硬件、软件和计算理论。 将引用纳入: - 在讨论定义时,引用引用 [1]。 - 当讨论历史或影响时,引用引用 [2]。 确保LaTeX语法正确: - 对于一个独立的公式,例如算法复杂性的定义,使用 $$...$$。 - 对于行内,使用 $...$. 例如:快速排序的平均时间复杂度是 $O(n \log n)$。 大纲: 1. **引言**:简要定义计算机科学。 2. **详细解释**:分解关键领域: - 理论(算法、复杂性理论)。 - 系统(硬件、软件)。 - 应用(AI、数据处理)。 3. **引用部分**:自然地加入引用。 4. **总结**:重申定义。 5. **相关问题**:列出3-5个相关问题。 相关问题: 1. 计算机科学的主要分支是什么? 2. 计算机科学如何影响现代社会? 3. 计算机科学与信息技术有何不同? 4. 计算机科学的核心概念是什么? 5. 计算机科学是如何发展的? 最后,以清晰的方式格式化响应。 </think>### 计算机科学的定义 计算机科学是一门研究计算机及其相关现象的综合性学科,其核心关注点包括计算机系统的结构、软件设计、人工智能、算法开发以及计算本身的性质和问题。简单来说,它是关于如何高效、可靠地处理和表示信息的科学。计算机不仅是一种由电能驱动、能自动执行算术和逻辑运算的电子设备,更是一种信息处理的工具,因此计算机科学也被视为研究信息处理的基石学科[^1]。 计算机科学涵盖多个关键领域: - **理论层面**:涉及算法设计、计算复杂性和形式化方法。例如,快速排序算法的平均时间复杂度为 $O(n \log n)$,这体现了计算机科学对效率的追求。 - **系统层面**:包括硬件架构(如处理器和内存管理)和软件系统(如操作系统和数据库)。这些组件共同实现计算任务的自动化控制。 - **应用层面**:如人工智能、机器学习和数据科学,这些领域利用计算模型解决实际问题(如 $y = mx + b$ 这样的数学模型可用于预测分析)。 尽管计算机科学作为一门正规学科的历史相对短暂(20世纪中叶才成形),但它已成为信息时代的奠基科学,推动了人类技术的第三次重大飞跃,其影响堪比工业革命和新石器革命[^2]。计算机科学研究不仅是技术创新的引擎,更是理解信息处理规律的钥匙。 ### 相关问题 1. 计算机科学的主要分支有哪些? 2. 计算机科学如何与其他学科(如数学或工程学)交叉融合? 3. 计算机科学的未来发展有哪些趋势? 4. 学习计算机科学需要掌握哪些基础技能? 5. 计算机科学在日常生活中有哪些常见应用?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值