[架构之路-228]:目标系统 - 纵向分层 - 计算机硬件与体系结构 - 硬盘存储结构原理:如何表征0和1,即如何存储0和1,如何读数据,如何写数据(修改数据)

news2024/11/20 3:34:29

目录

前言:

一、磁盘的盘面组成

1.1 磁盘是什么

​编辑1.2 磁盘存储介质

1.3 磁盘数据的组织

1.3.1 分层组织:盘面号

1.3.2 扇区和磁道

1.3.3 数据

1.3.4 磁盘数据0和1的存储方式

1.3.5 磁盘数据0和1的修正方法

1.3.6 磁盘数据0和1的读

二、磁盘寻址过程

2.1 机械磁盘物理结构

2.2 机器磁盘的寻址过程:先旋转后寻道

2.3 固态磁盘的区别

三、文件系统:计算机中数据的组织方式

3.1 什么是文件系统

3.2 如何解决寻址问题

四、总结

参考资料:


前言:

硬盘,也称为磁盘,是最重要的永久存储数据的介质之一,本文就是探讨硬盘的工作原理:如何表征0和1,即如何存储0和1,如何读数据,如何写数据(修改数据)

一、磁盘的盘面组成

在解释磁盘读写之前,我们首先要了解它底层到底是个什么东西,数据到底是如何存储在物理设备上面,是以一个什么的形式存在。

因此,我们先来了解一下:磁盘究竟是什么,是用什么介质来存储数据的,数据在介质中的形式是什么样的?


1.1 磁盘是什么

磁盘(disk)是指利用记录技术存储数据的存储器。磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。



1.2 磁盘存储介质

所以存储介质是:用一堆可以存储正负电极的磁性材料组成,因为磁性方向可以代表计算机中0和1,并非真的是0和1电平,只是用来不同的磁性方向表征0或1

所以我们所熟知的视频、语音、图片、文字等这些 ,在磁盘存储形式都是0和1,映射到存储介质中,就是一堆的正负磁性材料。

1.3 磁盘数据的组织

磁盘是用于存放数据的物理介质,是按照分层的方式组织起来,用于增加磁盘的容量。

1.3.1 分层组织:盘面号

1.3.2 扇区和磁道

磁道号 = 柱面号 (移臂算法)

磁盘的每一面被分为很多条磁道,即表面上的一些同心圆,越接近中心,圆的周长就越小

如果,每一个磁道又按固定长度,如512个字节为单位划分为等分,叫做扇区,在一些硬盘的参数列表上你可以看到描述每个磁道的扇区数的参数,它通常用一个范围标识,例如373~746,这表示,最外圈的磁道有746个扇区,而最里面的磁道有373个扇区,因此可以算出来,磁道的容量分别是从186.5KB到373KB(190976B–381952B)。
 

1.3.3 数据

1.3.4 磁盘数据0和1的存储方式

1.3.5 磁盘数据0和1的修正方法

1.3.6 磁盘数据0和1的读

二、磁盘寻址过程

磁盘的存储介质了解之后,下面就是对盘面数据进行磁盘io读写,磁盘数据的读写,就涉及磁盘到底是如何寻址的,如下图所示:


目前市面上一般有两种磁盘,一种是机械磁盘(又叫做HDD),另外一种是固态磁盘(又叫做SSD)。后者比前者速度快,稳定性要好,当然价格相对也更贵。

我们今天主要介绍经典的HDD磁盘是如何寻址的。

2.1 机械磁盘物理结构


机械磁盘是由很多盘片组成的圆柱体,每个盘面有很多的磁道,磁道里面又可以划分为很多的扇区,扇区才是真正存储数据的地方。所以地址寻址本质上,是指从一个个扇区中找到所需数据的过程。


2.2 机器磁盘的寻址过程:先旋转后寻道

机械磁盘存在两组运动,

一组是磁盘的旋转运动(旋转延时时间)

一组是机械臂控制磁头的沿半经方向的直线运动(寻道时间),其中寻道时间远大于旋转时间。

所以我们在寻址时优先考虑磁盘旋转,而后再考虑磁头移动。

因为读取数据,本质上是通过磁头读取介质中的正负磁性,然后通过电流传输回去这个读取过程是非常快速的,相对旋转时间和寻道时间几何可以忽略不计所以读取速度的瓶颈就是如何减少寻址的时间
在我们不知道具体物理地址之前,需要进行全盘遍历寻址,那如何遍历寻址才会高效呢?

上头我们介绍到,机械磁盘其实是圆柱体,是由很多盘片组成,又因为寻道时间大于旋转时间远所以是并发同时进行最外层磁道的读取,如果整个圆柱体的当前磁道都读取不到数据的情况下,再移动磁头,也就是进行寻道,然后再接着继续旋转读取磁道信息,这样一直反复直到找到对应的数据。

但是不管是旋转还是寻道对比内存和cpu处理时间,都不在一个数量级上面,所以这也是数据库索引为什么用B+Tree,以此来降低树的高度,减少磁盘访问次数的原因。

磁盘访问时间是指从计算机发送读/写请求到磁盘,并且完成相应操作所需的时间。磁盘访问时间包括以下几个方面:

  1. 旋转延迟时间(Latency Time)-- 先旋转延迟时间是指磁盘使得目标扇区旋转到读写头下方所需的时间。对于传统的磁盘驱动器(HDD),它采用旋转的盘片来存储数据,因此需要等待目标数据旋转到合适位置。

  2. 寻道时间(Seek Time)-- 后寻道寻道时间是指磁盘驱动器的读写头从当前磁道移动到目标磁道所需的时间。磁盘有多个磁道,寻道时间取决于读写头的移动速度和寻道路径的长度。

  3. 传输时间(Transfer Time)-- 再传输传输时间是指数据从磁盘传输到计算机或从计算机传输到磁盘所需的时间。传输时间取决于磁盘驱动器的数据传输速度以及数据的大小。

        这三个时间因素组合在一起决定了磁盘访问的总体时间。通常,磁盘访问时间是主要影响计算机性能和响应速度的因素之一。为了减少磁盘访问时间,可以采取以下措施:

  • 提高磁盘驱动器转速和传输速率,例如升级到更高转速的磁盘驱动器或采用更快速的固态硬盘(SSD)。
  • 优化文件和目录的存储位置,让相关的文件和数据物理上更接近,减少寻道时间
  • 使用缓存技术,如读写缓存或页面缓存,减少对磁盘的直接读写操作
  • 合理规划磁盘分区和文件系统避免过度碎片化和文件过度分散等情况。

需要注意的是,磁盘访问时间是一个相对的概念,不同型号的硬盘或固态硬盘可能有不同的访问时间,而且各种因素的影响程度也会根据具体的情况而有所不同。

2.3 固态磁盘的区别

固态磁盘和机械磁盘物理结构有着本质的区别,它没有扇区、盘片、圆柱体这些概念,从名字就可以看出,它不是机械来驱动的,它是采用存储芯片进行数据存储

固态磁盘的存储芯片主要分为两种:

一种是采用闪存作为存储介质的;

另一种是采用DRAM作为存储介质的。

目前使用较多的主要是采用闪存作为存储介质的固态磁盘。

固态磁盘啥都好,就是价格贵(哈哈哈),还有一个非常核心的问题,就是存在写入次数上限,这个和它的工作原理有关(有兴趣的同学可以自行百度),超过一定次数,就会损坏。但是这边写入次数,并不是指文件写入次数,而是写入超多多少的量才算一次,一般的SSD的寿命在10-20年之间
固态磁盘虽然和机械磁盘很不一样,但是为了保证计算机的兼容性,不需要对上层程序进行更改,固态磁盘实际寻址方法和机械磁盘寻址方法是一样(软件层面上),只是磁盘内部做了兼容处理。最有力的证据就是:如果二者不兼容,旧电脑的磁盘是无法变更为固态磁盘的,因为硬件程序不兼容。
 

三、文件系统:计算机中数据的组织方式

计算机磁盘我们现在清楚了,但是我们不可能每打开一个文件,就全局遍历所有的内容,这样会导致打开一个文件,就要等很长一段时间,效率太差。

而且磁盘存储数据是0和1,文件是各种格式的数据,需要有一个数据解析转化的过程。

那谁来实现这个过程呢,对就是文件系统。

3.1 什么是文件系统

像我们不管是开发程序还是日常使用软件,对于文件的读写,都不需要考虑底层存储细节,而且速度非常快,实现这一切的功臣就是我们所熟知的操作系统

每个操作系统都提供了成熟的文件系统。不管是linux,还是win系统,都有自己的文件系统来处理文件的读写操作。

下面我们就来介绍一下,文件系统到底是如何工作,一个文件要怎么做,才能快速的找到存储地址,从而快速的读写。

那什么是文件系统呢?

说白了就是:介于磁盘上层的一个读写数据系统,让应用层不需要知道磁盘复杂结构,就可以快速寻址并解析原始数据,返回文件对应格式数据

3.2 如何解决寻址问题

那文件系统到底怎么解决快速寻址的问题

大家有没有发现,每当我们初始化系统之后,就莫名其妙少了一部分的磁盘空间,这部分的磁盘空间是无法存储数据,是操作系统独享的

这里面除了操作系统所需要的空间外,还有一部分空间是用来存储元数据。

上面的磁盘空间是1T的,也就是有1024GB空间,现在只有931G空间,其中一部分就是被元数据所占用。

什么是元数据的首先我们系统中所有的文件都在某一个目录上面,所以最基础的文件结构就是:目录--》文件,再复杂点,就是目录--》子目录--》子目录....--》文件。

所以我们只要确定文件到底存储在哪个目录下,就可以直接跳转到这个地址去读取文件。

元数据就是这些目录和文件对应的磁盘物理地址

当然,目录和文件也是一个海量的数据,不可能一股脑全部放到一起,每次全量扫描这种。

它也是采用上下级的形式,从最顶层一直到最底层。

上层的元数据在系统启动之后会初始化到内存中,并结构化为方便查询的数据结构。

这样打开一个文件就变成,从内存/磁盘中找到文件的物理地址,然后通过磁盘读写,将数据读取出来,通过文件系统转译为文件本身格式,将数据返回给调用者。

上述只是简单地对文件系统做一个介绍,文件系统的内容永不止这些,目前比较主流的是FAT和EXT2文件系统,有兴趣的同学可以阅读:文件系统是怎么通过路径来知道文件所在的磁盘位置? - 知乎

四、磁盘调度算法

4.1 先来先服务算法

FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法。该算法的优点是具有公平性。如果只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;但如果有大量进程竞争使用磁盘,那么这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中考虑一些更为复杂的调度算法。 [1] 

1、算法思想:按访问请求到达的先后次序服务。

2、优点:简单,公平。

3、缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。

4、例子:

假设磁盘访问序列:98,183,37,122,14,124,65,67。读写头起始位置:53。求:磁头服务序列和磁头移动总距离(道数)。

由题意和先来先服务算法的思想,得到下图所示的磁头移动轨迹。由此:

磁头服务序列为:98,183,37,122,14,124,65,67

磁头移动总距离=(98-53)+(183-98)+|37-183|+(122-37)+|14-122|+(124-14)+|65-124|+(67-65)=640(磁道)

FCFS

FCFS

4.2 最短寻找时间优先算法/最短移臂算法

[1]  SSTF算法优选选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但是能提供比FCFS算法更好的性能。这种算法会产生“饥饿”现象

1、算法思想:优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先

2、优点:改善了磁盘平均服务时间。

3、缺点:造成某些访问请求长期等待得不到服务。

4、例子:对上例的磁盘访问序列,可得磁头移动的轨迹如下图。

4.3 扫描算法(又称电梯算法)

SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如FCFS算法和SSTF算法好。 [1] 

算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移 [2]  动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复。如下图所示:

扫描算法(电梯算法)的磁头移动轨迹

2、优点:克服了最短寻道优先的缺点,既考虑了距离,同时又考虑了方向。

4.4 循环扫描算法

[1]  在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题。

釆用SCAN算法和C-SCAN算法时磁头总是严格地遵循从盘面的一端到另一端,显然,在实际使用时还可以改进,即磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点。这种形式的SCAN算法和C-SCAN算法称为LOOK和C-LOOK调度。这是因为它们在朝一个给定方向移动前会查看是否有请求。注意,若无特别说明,也可以默认SCAN算法和C-SCAN算法为LOOK和C-LOOK调度。

五、总结


了解底层存储原理和文件系统之后,我们再去学习各类数据库就会事半功倍。童靴们要明白,在物理存储介质没有突破之前,任何一款数据库想要达到优质的性能,除了不断优化框架和算法之外,必然是采用空间换时间的办法。

因为单台计算机是有上限的,但我们的数据量又是没有上限。所以必然要采取分布式存储的架构来扩展系统。但是如果采用分布式,要保证CAP,就必须要多副本、多机器,这本身就是一个很大的成本在里面。CAP 理论是针对分布式数据库而言的,它是指在一个分布式系统中,一致性(Consistency, C)、可用性(Availability, A)、分区容错性(Partition Tolerance, P)三者不可兼得。所以同学们如果有机会作为架构师来选择数据库的时候,就要把握好这个度了,目前没有一款产品,可以完美的解决各种大数据问题,都是某一方面存在特性,但是又不完美,需要根据业务场景来确定,而不是简单的拍脑袋。

参考资料:

详细了解硬盘的工作原理,原来数据的读写这么神奇,数码,数码硬件,好看视频 (baidu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1064544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI视野·今日Robot 机器人论文速览 第四十九期】Fri, 6 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 6 Oct 2023 Totally 29 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚ContactGen, 基于生成模型的抓取手势生成,类人五指手。(from 伊利诺伊大学 香槟) 数据集:GRAB da…

多线程 - 定时器

多线程 - 定时器 定时器的背景知识 定时器 ~~ (就类似于定闹钟) 平时的闹钟,有两种风格: 指定特定时刻,提醒指定特定时间段之后,提醒 这里的“定时器”,不是提醒,而是执行一个实现准备好的方法/代码,它是开发中一个常用的组件,尤其是在网络编程的时候,使用浏览器上网,打开…

【立体视觉(五)】之立体匹配与SGM算法

【立体视觉(五)】之立体匹配与SGM算法 一、立体匹配一)基本步骤二)局部立体匹配三)全局立体匹配四)评价标准1. 均方误差(RMS)2. 错误匹配率百分比(PBM) 二、半全局(SGM)立体匹配一)代价计算二&a…

雷达干扰和烧穿范围简介

一、干扰信号比 J/S或J-to-S是从目标发射的干扰信号接收的功率(J)与从目标的雷达反向散射接收的功率的比率。 二、烧穿范围 通过电子攻击(J)可以首先检测到目标回波信号(S)的雷达到目标的距离。 三、自保护干扰 也称为主瓣干扰(雷达回波源和干扰机并置)。 烧穿范围…

汽车驾驶任务的隐马尔可夫模型识别方法研究

汽车驾驶任务的隐马尔可夫模型识别方法研究 一、Introduction 自动驾驶汽车经过了几十年的发展,是目前国内外汽车行业中的重要研究方向。自 动驾驶汽车的智能化需要车辆能够有类“人”的行为,在决策策略上可以满足人的心理 需求。人在驾驶过程中&#…

Aasee Api开放平台上线啦!

使用方法 首先介绍使用方法&#xff0c;只需导入一个SDK即可使用实现调用第三方的接口&#xff0c;那如何导入SDK呢&#xff0c;目前jar已经上传至maven中心仓库可直接引入到pom文件中使用&#xff0c;下面是例子&#xff1a; <dependency><groupId>io.github.Aa…

攻防世界-T1 Training-WWW-Robots

文章目录 步骤1步骤二结束语 步骤1 看到文本——>提取有效信息——>利用有效信息 文本&#xff1a;In this little training challenge, you are going to learn about the Robots_exclusion_standard. The robots.txt file is used by web crawlers to check if they …

jar 命令启动java 指定配置文件路径 jar如何启动

一、各种启动方式 1.java -jar # 例子 java -jar test.jar 1. 2. 这是最简单的启动方式&#xff0c;同时弊端也是很多的。 弊端1&#xff1a;exit 退出终端会导致java进程中断。 弊端2&#xff1a;ctrlc 退出启动展示页会导致java进程中断。 弊端3&#xff1a;直接关闭终端会…

FREERTOS内容解惑与综合应用(基于STM32F103)

本文基础内容参考的是正点原子的FREERTOS课程。 这是基于HAL库的 正点原子手把手教你学FreeRTOS实时系统 这是基于标准库的 正点原子FreeRTOS手把手教学-基于STM32 基础知识&#xff0c;直接参考正点原子《FreeRTOS开发指南V1.1》基于标准库的&#xff0c;此处不再赘述。 本文…

【Java 进阶篇】HTML介绍与软件架构相关知识详解

HTML&#xff08;Hypertext Markup Language&#xff09;是一种用于创建网页的标记语言。它是互联网上信息传递和展示的基础&#xff0c;无论是在浏览器中查看网页还是在移动设备上浏览应用程序&#xff0c;HTML都扮演着关键角色。本文将向您介绍HTML的基础知识&#xff0c;并探…

踩大坑ssh免密登录详细讲解

目 录 问题背景 环境说明 免密登录流程说明 1.首先要在对应的用户主机名的情况下生成密钥对&#xff0c;在A服务器执行 2.将A服务器d公钥拷贝到B服务器对应的位置 3.在A服务器访问B服务器 免密登录流程 0.用户说明 1.目前现状演示 2.删除B服务器.ssh 文件夹下面的…

多普勒频率相关内容介绍

图1 多普勒效应 1、径向速度 径向速度是作用于雷达或远离雷达的速度的一部分。 图2 不同的速度 2、喷气发动机调制 JEM是涡轮机的压缩机叶片的旋转的多普勒频率。 3、多普勒困境 最大无模糊范围需要尽可能低的PRF&#xff1b; 最大无模糊速度需要尽可能高的PRF&#xff1b…

什么是TF-A项目的长期支持?

安全之安全(security)博客目录导读 问题&#xff1a;Trusted Firmware-A社区每六个月发布一次代码。然而&#xff0c;对于生产中的平台&#xff0c;该策略在维护、重要软件修复的向后兼容性、获得最新的安全缓解措施和整体产品生命周期管理方面不具备可扩展性。 开源软件项目&…

假期题目整合

1. 下载解压题目查看即可 典型的猪圈密码只需要照着输入字符解开即可得到答案 2. 冷门类型的密码题型&#xff0c;需要特意去找相应的解题思路&#xff0c;直接百度搜索天干地支解密即可 3. 一眼能出思路他已经给了篱笆墙的提示提示你是栅栏密码对应解密即可 4. 最简单的社会主…

【17】c++设计模式——>原型模式

原型模式的定义 c中的原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;其目的是通过复制&#xff08;克隆&#xff09;已有对象来创建新的对象&#xff0c;而不需要显示的使用构造函数创建对象&#xff0c;原型模式适用于创建复杂对象时&a…

Linux软硬链接和动静态库

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 软硬链接和动静态库 前言正文软硬链接原理使用 文件时间动静态库库介绍静态库静态库制作静态库的使用关于静态链接 动态库动态库制作动态库的使用关于动态链接 补充 最…

React18学习

17、React_JSX的注意事项 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>JSX的注意</title><script src="./script/react.development.js"></script><script src=&…

秋招还没Offer怎么办?

作者 | 磊哥 来源 | Java中文社群 作者微信 | GG_Stone 如果你是双非院线、没有实习经历、没有出众的技术&#xff08;算法没刷一千道&#xff0c;也没做过 Spring Cloud 项目&#xff09;、现在还没有面试&#xff08;或只有少量的面试&#xff09;、并且目前还没有 Offer&…

1392. 最长快乐前缀

链接&#xff1a; 1392. 最长快乐前缀 题解&#xff1a; class Solution { public:string longestPrefix(string s) {if (s.size() < 0) {return "";}int MOD 1e9 7;// 构建26的n次方&#xff0c;预处理std::vector<long> pow26(s.size());pow26[0] 1…

频次直方图、KDE和密度图

Seaborn的主要思想是用高级命令为统计数据探索和统计模型拟合创建各种图形&#xff0c;下面将介绍一些Seaborn中的数据集和图形类型。 虽然所有这些图形都可以用Matplotlib命令实现&#xff08;其实Matplotlib就是Seaborn的底层&#xff09;&#xff0c;但是用 Seaborn API会更…