磁盘物理结构介绍(磁头,扇区),chs寻址,如何读写,磁盘io消耗时间;线性抽象结构,lba寻址,分区引入

本文主要是介绍磁盘物理结构介绍(磁头,扇区),chs寻址,如何读写,磁盘io消耗时间;线性抽象结构,lba寻址,分区引入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

磁盘文件

引入

看待角度

磁盘

介绍

物理结构 

俯视图

立体图

磁头

扇区

如何找到一个扇区 -- CHS寻址

如何读写

磁盘io消耗时间

抽象结构 -- 线性

引入

介绍 -- LBA寻址

分区

引入

介绍


磁盘文件

引入

文件分为两种

  • 被打开的文件(主要讨论与进程之间的联系)
  • 没有被打开的文件(存放在磁盘上)

我们这里来介绍磁盘级别的文件

看待角度

  • 从单个文件角度:文件具体存放在哪里,如何存储,大小是多少,属性有哪些
  • 从系统角度:一共有多少个文件,内容和属性存放在哪里,如何快速找到指定的文件和对应的数据

为了了解磁盘文件,我们得先来认识磁盘是什么 

磁盘

介绍

  • 内存--掉点易失存储介质
  • 磁盘--永久性存储介质(eg: ssd,u盘,flash卡,光盘,磁带)
  • 磁盘属于冯诺依曼模型中的外设,是一种机械设备(所以它io速度很慢)

物理结构 

俯视图

  • 工作时,磁盘进行高速旋转(有不同的转速)
  • 磁头会左右摇摆,进行寻址(数据其实就在磁盘上)
立体图

磁头

  • 可以看到,磁盘并不是只有一片,它其实是多个磁盘叠放在一起的
  • 磁盘的两面都可以存放数据,所以一个磁盘对应两个磁头

  • 磁头并不是紧挨着磁盘,他俩中间有一定的距离
  • 因为两者都会旋转
  • 如果挨着,磁盘表面肯定会有一定程度的磨损,而数据也可能随之丢失
  • 虽然他俩有距离,但其实距离很小
  • 所以,一旦在磁盘工作过程中,电脑磕了碰了啥的,都可能会引起磁头和磁盘的接触,就可能磨损磁盘,数据就可能会丢失

扇区

扇区磁盘存储数据的基本单位,一个扇区一般占512字节

如何找到一个扇区 -- CHS寻址

因为存储数据的基本单位是扇区,那么我们进行读写的前提是找到扇区

  • 首先确定在哪一个柱面
  • 每个柱面对应磁头的一个位置,柱面由多个半径相同的磁道组成
  • 然后移动磁头到对应的磁道上
  • 再确定要找的扇区在哪个扇面上(也就是具体对应哪个磁头)
  • 然后就可以找到对应的扇区了

如何读写

由于计算机只认识二进制,而数据都在盘面上,所以盘面上就存储了大量的二进制

类比于磁铁的正负极,盘面是通过磁性来区分0,1

  • 读取操作时,磁头感应磁性场盘面上的磁变化,并将其转换为对应的数据
  • 写入操作时,磁头改变磁场的极性,将数据写入磁性盘面

磁盘io消耗时间

 

抽象结构 -- 线性

引入

  • 随着磁盘容量的增加和计算机系统的发展,CHS寻址方式面临容量限制、复杂性和效率等问题
  • 为了克服CHS寻址方式的限制,磁盘驱动器制造商引入了逻辑块寻址(LBA)方式
  • LBA寻址方式将磁盘的物理位置抽象为一系列逻辑块,每个逻辑块都有唯一的逻辑块地址(LBA)
  • 类比磁带,它看似是圆形结构,实际上圆盘是由非常长的线性磁带环绕而成
  • 因此我们也可以将磁盘的盘片想象成线性的结构

介绍 -- LBA寻址

  • 像上面那样抽象成线性结构,每一个扇区就变成了一个块状结构
  • 如果平铺下来,是不是很像数组:
  • 所以,访问扇区,只需要知道它所在的下标即可
  • 这样的寻址方式就叫做LBA寻址
  • 最终将LBA找到的扇区,转换为CHS上的物理结构即可

分区

引入

通过上面的抽象,我们对磁盘的操作,就变成了对数组的操作:

但是,磁盘通常容量很大,几百g甚至t,若将其看作一个整体,则太过于庞大

于是我们可以将它进行分区,这些分区以统一的视角去看待,就可以将大的问题简单化

介绍

先将非常大容量的磁盘分区:

但是,这样分下来,每个区还是很大,不好管理

所以每个分区里面再进行分区:

不断分区...最终以块组为单位,组成磁盘

一个很大的磁盘 -> 多个分区 -> 很多个块组

所以只要管理好块组,分区就管理好了,分区管理好了,磁盘也就管理好噜~

这篇关于磁盘物理结构介绍(磁头,扇区),chs寻址,如何读写,磁盘io消耗时间;线性抽象结构,lba寻址,分区引入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/354684

相关文章

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Mysql表如何按照日期字段的年月分区

《Mysql表如何按照日期字段的年月分区》:本文主要介绍Mysql表如何按照日期字段的年月分区的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、创键表时直接设置分区二、已有表分区1、分区的前置条件2、分区操作三、验证四、注意总结一、创键表时直接设置分区

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义