理解磁盘结构---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.rhkb.cn/news/458718.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium脚本编写及八大元素定位方法

selenium脚本编写 上篇文章介绍了selenium环境搭建&#xff0c;搭建好之后就可以开始写代码了 基础脚本,打开一个网址 from selenium import webdriver driver webdriver.Chrome()#打开chrome浏览器 driver.get(https://www.baidu.com) #打开百度 打开本地HTML文件 上篇…

利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布

部分借鉴地址: https://support.huaweicloud.com/intl/zh-cn/bestpractice-cce/cce_bestpractice_10002.html 1.原理介绍 用户通常使用无状态负载 Deployment、有状态负载 StatefulSet等Kubernetes对象来部署业务&#xff0c;每个工作负载管理一组Pod。以Deployment为例&#x…

Macos m系列芯片环境下安装python3以及mysqlclient流程以及遇到的一系列问题

最近升级了生产力&#xff0c;换了m3的mbp&#xff0c;迁移项目的时候遇到的一系列python mysqlclient的环境问题&#xff0c;这里总结记录一下。 设备&#xff1a;Macbook Pro m3系统&#xff1a;macos Sonoma 14.6最终成功的python版本&#xff1a;Python3.9.1最终系统环境下…

STL-常用容器-list

1list基本概念 **功能&#xff1a;**将数据进行链式存储 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成&#xff1a;链表由一系列结点组成 结点的组成&#xff1a;一个是存储…

基于django的志愿者社团管理系统

大家是不是常常遇到校园社团活动组织混乱、统计繁琐的困扰&#xff1f;其实我以前在做毕业设计的时候也头疼这些问题。后来&#xff0c;我们开发了一个基于Django的志愿者社团管理系统&#xff0c;可以帮你轻松解决这些麻烦&#xff01;&#x1f4cc; &#x1f680; 核心功能模…

Opensearch集群部署【docker、服务器、Helm多种部署方式】

操作系统兼容性 我们建议在 Red Hat Enterprise Linux (RHEL) 或使用systemd的基于 Debian 的 Linux 发行版上安装 OpenSearch &#xff0c;例如 CentOS、Amazon Linux 2 和 Ubuntu Long-Term Support (LTS)。OpenSearch 应该适用于大多数 Linux 发行版&#xff0c;但我们只测…

Java题集练习4

Java题集练习4 1 异常有什么用&#xff1f; 用来找到代码中产生的错误 防止运行出错2 异常在java中以什么形式存在&#xff1f; 异常在java中以类的形式存在&#xff0c;分为运行时异常和编译期异常&#xff0c;他们都在类Exception中3 异常是否可以自定义&#xff1f;如何自…

衡石分析平台系统分析人员手册-导入图表库图表

导入图表库图表​ 本文讲述在仪表盘中如何使用图表库图表&#xff0c;如果您还不了解图表库&#xff0c;请先点击链接了解它的功能和作用。 在数据集市中建立图表库后&#xff0c;分析人员可以在应用创作中引用图表库图表&#xff0c;快速的进行数据分析工作。 导入图表库图…

【建造&机械】木材运输车辆检测系统源码&数据集全套:改进yolo11-GhostHGNetV2

改进yolo11-SPPF-LSKA等200全套创新点大全&#xff1a;木材运输车辆检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.28 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片…

ubuntu 20.04编译驱动报gcc-12 not found错误

最近在自己安装的Ubuntu 系统上编译自定义驱动&#xff0c;发现无法编译.ko,错误如下&#xff1a; 按照如下操作&#xff0c;发现可以解决&#xff0c;记录下&#xff0c;主要是Ubuntu缺少g-12的包 安装包以后发现可以正常编译

什么是微服务中的反应性扩展?

大家好&#xff0c;我是锋哥。今天分享关于【什么是微服务中的反应性扩展&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 什么是微服务中的反应性扩展&#xff1f; Reactive Extensions 也称为 Rx。这是一种设计方法&#xff0c;我们通过调用多个服务来收集结果…

电脑程序变化监控怎么设置?实时监控电脑程序变化的五大方法,手把手教会你!

​在现代办公和信息安全领域&#xff0c;实时监控电脑程序变化是一项至关重要的任务。 无论是企业内网安全、员工行为审计&#xff0c;还是个人电脑的隐私保护&#xff0c;了解并设置有效的监控方法都是必不可少的。 本文将详细介绍五种电脑程序变化监控的方法&#xff0c;帮助…

DEVOPS: 集群伸缩原理

概述 阿里云 K8S 集群的一个重要特性&#xff0c;是集群的节点可以动态的增加或减少有了这个特性&#xff0c;集群才能在计算资源不足的情况下扩容新的节点&#xff0c;同时也可以在资源利用 率降低的时候&#xff0c;释放节点以节省费用理解实现原理&#xff0c;在遇到问题的…

华为原生鸿蒙操作系统的发布有何重大意义和影响:

#1024程序员节 | 征文# 一、华为原生鸿蒙操作系统的发布对中国的意义可以从多个层面进行分析&#xff1a; 1. 技术自主创新 鸿蒙操作系统的推出标志着中国在操作系统领域的自主创新能力的提升。过去&#xff0c;中国在高端操作系统方面依赖于外国技术&#xff0c;鸿蒙的发布…

outlook创建新账户时报错2603、2604的解决办法

全新的戴尔笔记本电脑&#xff0c;自带的Win11家庭版&#xff0c;安装ms office 2021也顺利完成。 但是奇怪的是&#xff0c;只有其中一台笔记本电脑&#xff0c;OUTLOOK无法添加新账户。 但是这个账号在WEB端登录正常&#xff0c;由于是新入职的员工&#xff0c;根据以往经验&…

Python小白学习教程从入门到入坑------第十八课 异常模块与包【上】(语法基础)

一、异常 在Python中&#xff0c;异常&#xff08;Exception&#xff09;是一种用于处理在程序运行时可能发生的错误情况的机制 异常允许程序在检测到错误时不是简单地崩溃&#xff0c;而是能够优雅地处理这些错误&#xff0c;可能包括记录错误信息、清理资源、或者向用户提…

QT界面开发--我的第一个windows窗体【菜单栏、工具栏、状态栏、铆接部件、文本编辑器、按钮、主界面】

经过前面的铺垫&#xff0c;今天我们就开始我们图形化界面之旅了&#xff0c;我们的第一个窗体主要包括&#xff1a;菜单栏、状态栏、工具栏、铆接部件、还有Qt提供的一些主窗体的API。 第一部分&#xff1a;主界面(QMainWindow) 当创建好项目后&#xff0c;我们直接运行&…

logdata-anomaly-miner:一款安全日志解析与异常检测工具

关于logdata-anomaly-miner logdata-anomaly-miner是一款安全日志解析与异常检测工具&#xff0c;该工具旨在以有限的资源和尽可能低的权限运行分析&#xff0c;以使其适合生产服务器使用。 为了确保 logdata-anomaly-miner的正常运行&#xff0c;推荐安装了python > 3.6的…

Qt 文本文件读写与保存

Qt 文本文件读写与保存 开发工具&#xff1a;VS2013 QT5.8 设计UI界面&#xff0c;如下图所示 sample7_1QFile.h 头文件&#xff1a; #pragma once#include <QtWidgets/QMainWindow> #include "ui_sample7_1QFile.h"class sample7_1QFile : public QMainWin…

中国人寿财险青岛市分公司:保障民生,传递关爱

中国人寿财险青岛市分公司以保障民生为使命&#xff0c;传递关爱与温暖。 在健康险领域&#xff0c;公司为市民提供全面的医疗保障。从重大疾病保险到普通医疗保险&#xff0c;满足不同客户的需求。通过与医疗机构合作&#xff0c;为客户提供便捷的就医服务和理赔服务&#xf…