磁盘物理结构介绍(磁头,扇区),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

相关文章

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g