基础IO(下)——Linux

根据文件系统在整个分区SuperBlock找到目录所对应的分区与块组——确定文件存储的块——去inodeBitmap里遍历位图,找到0的比特位置为1,同时拿到了一个inode号(遍历的时候做一个计数器不断累加)——拿到了inode编号——在inodeTable里把属性写进去(编号,文件权限,拥有者所属组,时间,大小……——block大小——磁盘:块设备。找到文件:inode编号——分区特定的bg——inode——属性——内容。目录——inodetable——datablock——文件名:inode。
摘要由CSDN通过智能技术生成

1. 理解文件系统

1.2 背景知识

1.有没有一些被打开的文件吗?在哪里?
有。在磁盘里。磁盘级文件

2.我们学习磁盘级别的文件,我们的侧重点在哪里?
衍生问题:
单个文件角度——这个文件在哪里?这个文件多大?这个文件的其他属性是什么?……
系统角度——一共有多少个文件?各自属性在哪里?如何快速找到?我还可以存储多少个文件?如何快速的找到指定的文件?……
如何进行对磁盘文件进行分门别类的存储,用来支持更好的存取?

3.磁盘文件——了解磁盘
内存——掉电易失存储介质
磁盘——永久性存储介质(不止是磁盘)——SSD(固态硬盘)(现在笔记本上应该都是这个,但贵)、U盘、flash卡、光盘、磁带
结论:磁盘是一个外设,同时还是我们计算机中唯一的一个机械设备——慢!(对比出来的)——所以OS一定会有一些提速的方式

4.磁盘结构
物理结构:
磁盘盘片、磁头、伺服系统、音圈马达……
盘面上会存储数据——计算机只认识二进制(两态)——南极北极、有电没电、正负——向磁盘写入,本质就是改变磁盘上的正负性——磁头来改变
磁盘寻到的过程
 
存储结构:
磁道,扇区,柱面
扇区是磁盘存储的基本单位 512字节 4KB 硬件上的
在物理上,如何把数据写入到指定的扇区里?——本质就是如何找到一个扇区?
1.确定在哪一个面上(对应的就是确定哪一个磁头)
2.在哪一个磁道(柱面)上
3.在哪一个扇区上
这就是CHS寻址
如果我们有了CHS,就能找到任意一个扇区,那么所有的扇区我们都能找到。
 
抽象结构:(虚拟、逻辑)结构
磁盘盘片:圆形结构——线性结构
sector disk[10241024n];数组
访问一个扇区,只要知道数组的下标
把磁盘想像成一个大数组

将数组存储到磁盘——将数据存储到该数组
找到磁盘特定扇区的位置——找到数组特定的位置
对磁盘的管理——对该数组的管理

对磁盘的管理——对一个小分区的管理——继续分区
boot block——block group 0—— ——block group n
block group n:
super block——group descirptor table ——block bitmap——inode bitmap——inodetable——data blocks
虽然磁盘的基本单位是扇区(512字节),但是OS(文件系统)和磁盘进行IO交互的基本单位是:4KB(8*512字节)。——block大小——磁盘:块设备。
为什么不以512字节为单位呢?
1.太小。会导致多次IO,进而导致效率的降低
2.如果os使用和磁盘一样的大小,万一磁盘的基本大小变量的话,os的源代码也要改。所以硬件和软件(os)需要进行解耦。

文件 = 内容+属性
linux在磁盘上存储文件的时候,是将内容和属性分开存储(管理)的。

  • 超级块(Super Block):存放文件系统本身的结构信息。文件系统的属性信息 Data
  • blocks:多个4KB(扇区*8)大小的集合,保存的都是特定文件的内容 inode
  • Table:inode是一个大小为128字节的空间,保存的是对应文件的属性。该组块内,所有文件的inode空间的集合,需要标识唯一性,每一个inode块,都要有一个inode编号!一般而言,一个文件,一个inode,一个inode编号
  • BlockBitmap:假设有10000+个blocks,10000+比特位:比特位和特定的block是一一对应的,其中比特位为1,代表该block被占用,否则表示可用
  • inode Bitmap:假设有10000+个inode结点,就有10000+个比特位,比特位和特定的inode是一一对应的,其中比特位为1表示inode被占用,否则表示可用。
  • Group Descriptor Table(GDT):快组描述符,这个快组多大,已经使用多少了,有多少个inode,已经占用了多少个,还剩多少,一共有多少个block,使用了多少……
    这些都是能够让一共文件的信息可追溯,可管理
    格式化

一个文件只对应一共inode属性节点,inode编号
一个文件只能有一个block吗?不一定

1.哪些block属于同一个文件?
inode里面定义了一个数组,里面可以保存块的编号

struct inode
{
   
    //文件的大小
    //文件的inode编号
    //其他属性
    int blocks[15];
    
}


blocks[0] = 6;
blocks[0] = 7;
blocks[0] = 8;

2.找到文件,只要找到文件对应的inode编号就可以找到该文件的inode属性集合,可是文件的内容呢?
也是通过数组,映射表,找到

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hey pear!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值