上一篇我们聊到了计算机从计数起源到硬件、语言的发展脉络,而早期的原始计算模型,其实存在一个致命短板 —— 无法自主存储数据,哪怕是临时数据,所有计算都依赖人力输入和存储。也正是因为数据存储的需求,才有了后续纸带、磁盘等一系列存储载体的发展,今天我们就聚焦计算机数据存储的底层,聊聊从纸带的小插曲到磁盘的读写原理、空间分配的那些事儿。

小知识点:

曾经我们要向给计算机输入数据进行预算,我们只能输入0和1这两个数字,
输出是以纸带的形式进行输出,在纸带上打眼的地方就代表着数字1,
在纸带上没有打眼的地方就是0,但是有一次呀人们发现电脑没有问题,但就是输出不对,
后来人们发现原来是一个小飞虫堵住了纸袋上的一个眼导致了错误的发生。
小飞虫在英文里边叫做(bug),后来人们把出现的问题就叫做bug.

一、磁盘的形式

固态盘不是主要的应用对象,因为固态盘的使用次数是有限的,无法支撑高并发场景

磁盘能成为主流存储载体,其基础结构的设计功不可没,核心由磁头、主轴、移动臂等部件组成,整体的工作逻辑十分清晰:

  • 磁盘面会以固定的转速持续旋转,这是数据读写的基础;
  • 用于读写数据的磁头并非固定不动,而是连接在移动臂上,通过移动臂的径向移动,磁头可以精准定位到磁盘的任意磁道上;
  • 磁盘分为单盘面和多盘面结构,多盘面的设计能进一步提升磁盘的存储容量,满足更多的数据存储需求。

看似简单的结构组合,却实现了数据的精准定位与读写,为后续的存储原理落地奠定了硬件基础。

二、磁盘是如何存储数据的

https://www.bilibili.com/video/BV1sx41177Ch

磁盘存储的最基本原理是电生磁。磁盘的磁道里边有很多的磁颗粒,磁颗粒上边有一层薄膜为了防止磁点氧化,很薄,手一碰就会消失。

从下图当中我们可以看到如何在磁颗粒上边写入数据

我们的磁头上边有一个线圈,我们可以通过调整线圈的电流方向来控制磁头的磁极,那么在磁头上边的磁颗粒就是出现和磁头相反的磁性。假设我们用磁极N级代表数字1,磁极S级代表数字0,这样我们每个磁颗粒都存储这相应的数据。每个磁颗粒都存储着一个数据,我们将这个磁颗粒存储的数据叫做1 比特

三、磁盘是如何读取

磁头在磁道上运转会切割磁感线,由于磁点有N极和S极。所以会产生两种方向相反的电压,所以需要我们的磁头也需要带有一定的电压。

(举例):假如正电压产生的是2V,负电压也产生2V,我们默认让磁头拥有3V的电压,当他滑到正的时候就有5V电压,当他滑动到负的时候就只有1V的电压

磁头在切割磁感线的时候必然会产生电压,但是不是所有的数据都是我们想要的如何得到我们想要的数据呢?

数据的传输必然是一个闭合的电路。我们只需要在数据传输线路上加一个数据拦截器,当传到不合法的电压的时候会出现断路,如果出现合法的电压的时候回形成闭合电路。

cpu要想读取磁盘当中的某些数据,就必须先将地址发送给磁盘。默认数据拦截器内的电路是断开的状态,数据电压要想通过就必须和地址电压共同作用将数据拦截器内的半导体变为导体。

四、计算机磁盘空间分配

1.磁盘对数据最小的存储单元

假设我们要存储以下数据:

0:----》0
1:-----》1
2:----》10
3:----》11
4:----》100

那么我们会得到以下比特流:

011011100

但是这样做会出现歧义性, 那如何解决这个问题呢?-----按固定字符进行分割

比如这里我们用8比特进行字符的分割

那么我们储存以上的数据就会变成

0000000000000001000000100000001100000100

我们用每8位进行分割,最终会是一下的情况

00000000:-----》0
00000001:-----》1
00000010:-----》2
00000011:-----》3
00000100:-----》4

我们通常把8比特称为1字节单位(B),也是磁盘当中的最小存储单元。

1T = 1024G = 1024 * 1024M = 1024 * 1024*1024KB = 1024 * 1024 *1024 *1024B

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐