当前位置: 首页 > article >正文

总结:磁盘写入原理

一、介绍

一直好奇,操作系统这种软件是如何驱动数据写入到磁盘这种物理介质的?

另外,磁盘这种物理介质是如何存储数据的?是磁盘里有房子一样的空间把数据给放进去吗?

带着这些好奇心咨询chatgpt,算是找到了比较满意的答案。

二、磁盘这种物理介质是如何存数据的?

数据在计算机系统中是以二进制数的形式存储的,即0,1方式。磁盘设备中的物理介质是由多个磁性材料上的微小磁区组成的,每个磁区表示一个二进制数字的0或者1,或者不同的磁性材料代表不同的二进制数字。

所以可以这么认为:磁盘本身已经有了数据了,比如默认都是0或默认都是1,这就是基本的磁盘存储原理。

如果我们存数据,我们只要想办法去改变对应小磁区的磁性材料即可。

三、磁盘中内置了接口或代码吗?

是的,磁盘有一些接口或API供磁盘驱动程序调用。

磁盘设备通常使用通用块设备(Generic Block Device)接口与操作系统进行通信。这个接口向操作系统提供了一些基本的块操作,如读取和写入数据块等。

通用块设备接口是一个抽象接口,它可以被不同的块设备实现。磁盘驱动程序可以实现这个接口,从而使操作系统能够通过这个接口与磁盘设备进行通信。

磁盘驱动程序可以使用一些标准的命令和协议与磁盘设备进行通信,如SCSI(Small Computer System Interface)和ATA(Advanced Technology Attachment)等。这些协议提供了一些通用的命令集,可以用来发送读取和写入数据的请求。

例如,在使用ATA磁盘时,操作系统可以使用ATA指令来进行读取和写入操作。磁盘驱动程序需要实现操作系统所需的块操作接口,并实现ATA指令功能,使得操作系统能够通过这个接口向磁盘设备发出读写请求,并得到响应。

在实现交互方面,磁盘驱动程序通过提供一些抽象的接口,如通用块设备接口等,可以实现在软件和硬件之间的交互。同时,磁盘驱动程序需要实现磁盘协议和命令集等,以确保操作系统和磁盘设备之间的通信是正确的和有效的。

总之,磁盘驱动程序通过实现一些标准的协议和接口,以及处理磁盘数据缓存、磁盘请求调度等一系列任务,实现了在软件和硬件之间的交互,并能够将业务数据存储到磁盘中。

四、应用程序将数据写入磁盘的流程

当应用程序需要将数据写入磁盘时,它向操作系统发送请求,操作系统选择磁盘驱动程序来处理该请求。

磁盘驱动程序会执行以下步骤:
1. 将数据保存到内存缓冲区中;
2. 将内存缓冲区中的数据写入磁盘控制器;
3. 磁盘控制器将数据写入磁盘。

由于操作系统本身并不了解磁盘的物理结构,因此需要磁盘驱动程序来完成与磁盘的交互,从而实现数据存储。

五、磁盘是如何工作的?

以SATA盘举例。

SATA(Serial ATA)磁盘中有嵌入程序代码。SATA磁盘内部包含了一些控制器芯片,控制器芯片中内置了程序代码,用于控制磁盘的读取、写入、缓存、磁盘系统管理等操作。这个程序代码通常称为磁盘固件(Disk Firmware)。

磁盘控制器芯片中的程序代码通过与磁盘设备上各个组件(如读写磁头、马达等)的电路进行交互,控制磁盘的读取、写入、搜索等操作。控制器芯片可以读取或写入磁盘磁道、扇区的数据等,同时还可以通过调整磁盘设备的参数来提高磁盘的性能。具体地,磁盘控制器芯片的工作流程如下:
1. 磁盘控制器芯片通过控制电路控制电机,以使磁盘转动并让读头定位到相应位置。
2. 磁盘控制器芯片读取或写入磁盘磁道、扇区的数据等,并且保存或修改这些数据。
3. 磁盘控制器通过校验和纠错等技术对读取或写入的数据进行校验和处理,以确保数据的可靠性。
4. 磁盘控制器芯片可以调整磁盘设备的参数,以提高磁盘的性能。

总之,磁盘控制器芯片的程序代码与磁盘设备上各个组件(如读写磁头、马达等)的电路进行交互,通过控制磁盘的读取、写入、搜索等操作,从而完成对磁盘的控制和管理。

当磁盘控制器芯片中的程序代码需要与磁盘设备上的各个组件进行交互时,它会通过控制引脚(Control Pins)向磁盘设备中传递电信号来控制电路的状态和行为。磁盘控制器芯片通过将控制信号传递给磁盘设备的电路,通过强磁场或弱磁场的作用,可以将这些磁区中的磁性材料极化,从而表示不同的二进制数字。


http://www.kler.cn/a/5158.html

相关文章:

  • 多目标优化算法之一:基于分解的方法
  • 基于Python实现的通用小规模搜索引擎
  • 【python基础——异常BUG】
  • 【网络协议】开放式最短路径优先协议OSPF详解(四)
  • CDP集成Hudi实战-Hive
  • B树及其Java实现详解
  • ijkplayer 源码分析(1):初始化流程
  • Java中的Math类和String、StringBuffer、StringBuilder类
  • C# 各种文件和路径操作小结
  • Gitlab中Pipeline语法三
  • Python3,自从掌握了这个方法,再也不用print进行调试了。
  • 集合之ArrayList
  • JetBrains GoLand 2022.3 Crack
  • Python使用深度神经网络对高光谱图像进行土地覆盖分类
  • Vue项目的打包上线步骤
  • [架构之路-144]-《软考-系统分析师》- 7-企业信息化战略与实施-1-概念、方法、与企业战略/IT战略/业务重组的关系
  • 泰克示波器校准失败
  • 【深入理解二叉树OJ题】
  • 二分查找算法
  • 智联物联分享之物联网协议MQTT简述,MQTT协议特点
  • 今年面试好激烈!
  • 主成分分析(PCA)原理
  • 计算机软件著作权登记申请流程和需要的时间
  • 天狗实战SpringBoot+Vue(二)项目结构搭建(上)
  • 离线GPU服务器配置虚拟环境
  • 日入500+的程序员都在用的“接私活”平台