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

理解磁盘结构---CHS---LAB---文件系统

1,初步了解磁盘

机械磁盘是计算机中唯的一个机械设备,

特点是慢,容量大,价格便宜。

磁盘上面的光面,由数不清的小磁铁构成,我们知道磁铁是有n/s极的,这刚好与二进制的01相对应,操作系统也是以01来读写,所以改变数据等于对01做改变,也就是在对小磁铁的n/s极做改变。

可以看到磁盘中有一条杠在盘面上,这就是磁头,磁头与盘面不接触。

磁头摆动,定位磁道。

磁盘盘片旋转:定位扇区

扇区:是磁盘存储数据的基本单位(基本上512字节)

读写磁盘,是从一扇区来读的而不是字节,所以磁盘是块设备

磁盘的每一面都有一个磁头,读写哪一个磁头的本质就是读写哪一面!

2,如何定位扇区

先定位磁头(heander)

磁头移动要访问哪一个柱面(磁道)(cylinder)

定义一个扇区(sector)

这就是        CHS:地址定位法。

上面指令可以查看自己的盘

3,如何将磁盘抽象成逻辑概念?

我们拿磁带举例子:

磁带是通过卷在一起的方式存储起来,但我们可以认为手动的把它拉直,磁盘也是一样,磁盘就是一个卷起来的磁带,可以把它拉成线性结构,抽象成线性结构。

所以定位扇区从用CHS定位变成了使用数组下标来定位,磁盘就被拉成了数组结构,这就是线性地址---LBA

但是磁盘真实的物理运动过程还是通过CHS的方式,但是这里面有一个细节:

传动臂的磁头是共进退的

磁盘整体是由柱面卷起来的,所以真实情况就是某一个磁道展开就成了一个一维数组:

柱面是由多个磁道构成,对柱面展开就是一个二维数组:

整个磁盘由n个柱面组成,展开就相当于三维数组:

那么三维数组需要三个参数来定位,因此就有了CHS!!!

所以定位磁面就抽象成了找哪个二维数组

定位磁道就抽象成了找二维数组中哪个以为数组

然后就是定位扇区

又因为各二维数组本质其实也是一维数组,所以定位数组可以用到下标,也就是LBA

通过LBA给的指引,原理上可以找到块,但是因为磁盘物理结构就是这样不变,所以要把LBA转变成CHS,这个过程由磁盘自己做,磁盘里由固件(硬件电路,伺服系统)会帮我们完成这项任务。

LBA = 柱面号*单个柱面扇区总数 + 磁头号 * 每磁道扇区数 +扇区号s -1;

由于(磁头数*每磁道扇区数)< 每磁道扇区数 < 扇区

所以LBA->CHS:

柱面号(C) = LBA / (磁头数*每磁道扇区数) 余数就是柱面号

磁头号(H)    = LBA %  (磁头数*每磁道扇区数)

扇区(S)        =  (LBA % 每磁道扇区数)+1;

4,引入文件系统

os和磁盘进行io的时候,如果以扇区为基本单位进行io,512字节那就太少了效率太低了,

一般以1kb ,2kb,4kb,8kb等进行io,现在大部分都是以4kb进程io,4kb这一内存开出来叫做一个数据块,由八个扇区组成。

所以io的基本单位是八个扇区--》4kb -- 》数据块

那么就可以引入块号的概念:

块号*8 + 【1,8】就可以找到扇区,一块等于八个LBA的地址。

所以可以抽象成:磁盘是以块为单位的一维数组。

5,分区管理

一个盘里由500GB如何做管理?

这就和一个国家如何管理一片国土一样,需要划分各个区域,比如说每个划分为多个省,省可以划分为多个市。

磁盘也可以分区,如果做过分盘的知道一个电脑只有一个盘,但是它可以分成c盘d盘。

这样我们只用管理好一个分区就可以同一个方法管理好多个分区

磁盘分完区之后可以分组

这样就可以细化为只用管理好一组其他复制其管理方式就行。

6,初见磁盘中组内划分

我们知道,一个文件等于内容加属性

属性也是数据,是通过结构体的方式构建出来(inode)

一个文件只有一个inode,inode是一个文件数据属性的集合。

每个inode都有自己的唯一编号(不重复):

组内有一个区域叫inodetable,里面管理了一组里的所有属性集,

数据就存在datablock中,里面全是划分好的4kb大小的块

Linux中文件属性和文件内容分开存储。

图中BootBlock里存与开机相关我们不管,剩下的Block group中就是存数据的地方。

http://www.lryc.cn/news/471283.html

相关文章:

  • 我在1024谈华为
  • NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备视频监控解决方案
  • 二叉树前序遍历的 Java 实现,包括递归和非递归两种方式
  • QT开发:构建现代UI的利器:深入详解QML和Qt Quick基础开发技术
  • vue前端使用pdfjs与pdfdist-mergeofd 实现预览pdf并翻页,同时解决预览pdf显示模糊的问题
  • C语言——回调函数
  • 2016年ATom-1飞行活动期间以10秒间隔进行的一氧化碳(CO)观测数据
  • MLM之Emu3:Emu3(仅需下一个Token预测)的简介、安装和使用方法、案例应用之详细攻略
  • Spring Boot与Flyway实现自动化数据库版本控制
  • input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序
  • SQL-lab靶场less1-4
  • 【生成模型之二】diffusion model模型
  • 记录 Maven 版本覆盖 Bug 的解决过程
  • 【K8S系列】Kubernetes Service 基础知识 详细介绍
  • python在物联网领域的数据应用分析与实战!
  • 目标跟踪算法-卡尔曼滤波详解
  • SpringBoot后端开发常用工具详细介绍——application多环境配置与切换
  • php反序列化漏洞典型例题
  • 浅析Android View绘制过程中的Surface
  • 基于卷积神经网络的大豆种子缺陷识别系统,resnet50,mobilenet模型【pytorch框架+python源码】
  • HarmonyOS项目开发一多简介
  • C++基础三
  • 利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛:台风预测与分析
  • Linux系统操作篇 one -文件指令及文件知识铺垫
  • 隨筆20241028 ISR 的收缩与扩展及其机制解析
  • linux-字符串相关命令
  • ES6 函数的扩展
  • Mac 查看占用特定端口、终止占用端口的进程
  • C#入坑JAVA MyBatis入门 CURD 批量 联表分页查询
  • RabbitMQ 安装(Windows版本)和使用