磁盘基本原理.docx

上传人:b****5 文档编号:7385202 上传时间:2023-01-23 格式:DOCX 页数:16 大小:34.71KB
下载 相关 举报
磁盘基本原理.docx_第1页
第1页 / 共16页
磁盘基本原理.docx_第2页
第2页 / 共16页
磁盘基本原理.docx_第3页
第3页 / 共16页
磁盘基本原理.docx_第4页
第4页 / 共16页
磁盘基本原理.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

磁盘基本原理.docx

《磁盘基本原理.docx》由会员分享,可在线阅读,更多相关《磁盘基本原理.docx(16页珍藏版)》请在冰豆网上搜索。

磁盘基本原理.docx

磁盘基本原理

硬盘FAT文件系统原理的详细分析

◎  存储论坛网友/sjhf2004-04-02

   一、硬盘的物理结构:

   硬盘存储数据是根据电、磁转换原理实现的。

硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中。

   硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。

当系统向硬盘写入数据时,磁头中“写数据”电流产生磁场使盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持,这样数据就存储下来了;当系统从硬盘中读数据时,磁头经过盘片指定区域,盘片表面磁场使磁头产生感应电流或线圈阻抗产生变化,经相关电路处理后还原成数据。

因此只要能将盘片表面处理得更平滑、磁头设计得更精密以及尽量提高盘片旋转速度,就能造出容量更大、读写数据速度更快的硬盘。

这是因为盘片表面处理越平、转速越快就能越使磁头离盘片表面越近,提高读、写灵敏度和速度;磁头设计越小越精密就能使磁头在盘片上占用空间越小,使磁头在一张盘片上建立更多的磁道以存储更多的数据。

   二、硬盘的逻辑结构:

   硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头。

如果有N个盘片。

就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。

每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的。

)每个盘片的划分规则通常是一样的。

这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个扇区。

这三个参数即是硬盘的物理参数。

我们下面的很多实践需要深刻理解这三个参数的意义。

   三、磁盘引导原理:

   3.1  MBR(master boot record)扇区:

   计算机在按下power键以后,开始执行主板bios程序。

进行完一系列检测和配置以后。

开始按bios中设定的系统引导顺序引导系统。

假定现在是硬盘。

Bios执行完自己的程序后如何把执行权交给硬盘呢。

交给硬盘后又执行存储在哪里的程序呢。

其实,称为mbr的一段代码起着举足轻重的作用。

MBR(master boot record),即主引导记录,有时也称主引导扇区。

位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令。

将系统的控制权交由mbr来执行。

在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。

   MBR不随操作系统的不同而不同,意即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质。

具有公共引导的特性。

   我们来分析一段mbr。

下面是用winhex查看的一块希捷120GB硬盘的mbr。

   你的硬盘的MBR引导代码可能并非这样。

不过即使不同,所执行的功能大体是一样的。

这里找wowocock关于磁盘mbr的反编译,已加了详细的注释,感兴趣可以细细研究一下。

   我们看DPT部分。

操作系统为了便于用户对磁盘的管理。

加入了磁盘分区的概念。

即将一块磁盘逻辑划分为几块。

磁盘分区数目的多少只受限于C~Z的英文字母的数目,在上图DPT共64个字节中如何表示多个分区的属性呢?

microsoft通过链接的方法解决了这个问题。

在DPT共64个字节中,以16个字节为分区表项单位描述一个分区的属性。

也就是说,第一个分区表项描述一个分区的属性,一般为基本分区。

第二个分区表项描述除基本分区外的其余空间,一般而言,就是我们所说的扩展分区。

这部分的大体说明见表1。

   注:

上表中的超过1字节的数据都以实际数据显示,就是按高位到地位的方式显示。

存储时是按低位到高位存储的。

两者表现不同,请仔细看清楚。

以后出现的表,图均同。

   也可以在winhex中看到这些参数的意义:

   说明:

 每个分区表项占用16个字节,假定偏移地址从0开始。

如图3的分区表项3。

分区表项4同分区表项3。

   1、0H偏移为活动分区是否标志,只能选00H和80H。

80H为活动,00H为非活动。

其余值对microsoft而言为非法值。

   2、重新说明一下(这个非常重要):

大于1个字节的数被以低字节在前的存储格式格式(little endian format)或称反字节顺序保存下来。

低字节在前的格式是一种保存数的方法,这样,最低位的字节最先出现在十六进制数符号中。

例如,相对扇区数字段的值0x3F000000的低字节在前表示为0x0000003F。

这个低字节在前的格式数的十进制数为63。

   3、系统在分区时,各分区都不允许跨柱面,即均以柱面为单位,这就是通常所说的分区粒度。

有时候我们分区是输入分区的大小为7000M,分出来却是6997M,就是这个原因。

 偏移2H和偏移6H的扇区和柱面参数中,扇区占6位(bit),柱面占10位(bit),以偏移6H为例,其低6位用作扇区数的二进制表示。

其高两位做柱面数10位中的高两位,偏移7H组成的8位做柱面数10位中的低8位。

由此可知,实际上用这种方式表示的分区容量是有限的,柱面和磁头从0开始编号,扇区从1开始编号,所以最多只能表示1024个柱面×63个扇区×256个磁头×512byte=8455716864byte。

即通常的8.4GB(实际上应该是7.8GB左右)限制。

实际上磁头数通常只用到255个(由汇编语言的寻址寄存器决定),即使把这3个字节按线性寻址,依然力不从心。

 在后来的操作系统中,超过8.4GB的分区其实已经不通过C/H/S的方式寻址了。

而是通过偏移CH~偏移FH共4个字节32位线性扇区地址来表示分区所占用的扇区总数。

可知通过4个字节可以表示2^32个扇区,即2TB=2048GB,目前对于大多数计算机而言,这已经是个天文数字了。

在未超过8.4GB的分区上,C/H/S的表示方法和线性扇区的表示方法所表示的分区大小是一致的。

也就是说,两种表示方法是协调的。

即使不协调,也以线性寻址为准。

(可能在某些系统中会提示出错)。

超过8.4GB的分区结束C/H/S一般填充为FEH FFH FFH。

即C/H/S所能表示的最大值。

有时候也会用柱面对1024的模来填充。

不过这几个字节是什么其实都无关紧要了。

   虽然现在的系统均采用线性寻址的方式来处理分区的大小。

但不可跨柱面的原则依然没变。

本分区的扇区总数加上与前一分区之间的保留扇区数目依然必须是柱面容量的整数倍。

(保留扇区中的第一个扇区就是存放分区表的MBR或虚拟MBR的扇区,分区的扇区总数在线性表示方式上是不计入保留扇区的。

如果是第一个分区,保留扇区是本分区前的所有扇区。

   附:

分区表类型标志如图4

   3.2 扩展分区

   扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录( Extended Boot Record, EBR),也有人称之为虚拟mbr或扩展mbr,意思是一样的。

扩展引导记录包括一个扩展分区表和该扇区的标签。

扩展引导记录将记录只包含扩展分区中每个逻辑驱动器的第一个柱面的第一面的信息。

一个逻辑驱动器中的引导扇区一般位于相对扇区32或63。

但是,如果磁盘上没有扩展分区,那么就不会有扩展引导记录和逻辑驱动器。

第一个逻辑驱动器的扩展分区表中的第一项指向它自身的引导扇区。

第二项指向下一个逻辑驱动器的EBR。

如果不存在进一步的逻辑驱动器,第二项就不会使用,而且被记录成一系列零。

如果有附加的逻辑驱动器,那么第二个逻辑驱动器的扩展分区表的第一项会指向它本身的引导扇区。

第二个逻辑驱动器的扩展分区表的第二项指向下一个逻辑驱动器的EBR。

扩展分区表的第三项和第四项永远都不会被使用。

   通过一幅4分区的磁盘结构图可以看到磁盘的大致组织形式。

如图5:

   关于扩展分区,如图6所示,扩展分区中逻辑驱动器的扩展引导记录是一个连接表。

该图显示了一个扩展分区上的三个逻辑驱动器,说明了前面的逻辑驱动器和最后一个逻辑驱动器之间在扩展分区表中的差异。

   除了扩展分区上最后一个逻辑驱动器外,表2中所描述的扩展分区表的格式在每个逻辑驱动器中都是重复的:

第一个项标识了逻辑驱动器本身的引导扇区,第二个项标识了下一个逻辑驱动器的EBR。

最后一个逻辑驱动器的扩展分区表只会列出它本身的分区项。

最后一个扩展分区表的第二个项到第四个项被使用。

   扩展分区表项中的相对扇区数字段所显示的是从扩展分区开始到逻辑驱动器中第一个扇区的位移的字节数。

总扇区数字段中的数是指组成该逻辑驱动器的扇区数目。

总扇区数字段的值等于从扩展分区表项所定义的引导扇区到逻辑驱动器末尾的扇区数。

   有时候在磁盘的末尾会有剩余空间,剩余空间是什么呢?

我们前面说到,分区是以1柱面的容量为分区粒度的,那么如果磁盘总空间不是整数个柱面的话,不够一个柱面的剩下的空间就是剩余空间了,这部分空间并不参与分区,所以一般无法利用。

照道理说,磁盘的物理模式决定了磁盘的总容量就应该是整数个柱面的容量,为什么会有不够一个柱面的空间呢。

在我的理解看来,本来现在的磁盘为了更大的利用空间,一般在物理上并不是按照外围的扇区大于里圈的扇区这种管理方式,只是为了与操作系统兼容而抽象出来CHS。

可能其实际空间 zymail@

   四、FAT分区原理

   先来一幅结构图:

   现在我们着重研究FAT格式分区内数据是如何存储的。

FAT分区格式是MICROSOFT最早支持的分区格式,依据FAT表中每个簇链的所占位数(有关概念,后面会讲到)分为fat12、fat16、fat32三种格式"变种",但其基本存储方式是相似的。

   仔细研究图7中的fat16和fat32分区的组成结构。

下面依次解释DBR、FAT1、FAT2、根目录、数据区、剩余扇区的概念。

提到的地址如无特别提示均为分区内部偏移。

   4.1 关于DBR.

   DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,通常占用分区的第0扇区共512个字节(特殊情况也要占用其它保留扇区,我们先说第0扇)。

在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,os引导程序,结束标志几部分组成。

 以用的最多的FAT32为例说明分区DBR各字节的含义。

见图8。

   图8的对应解释见表3

   图9给出了winhex对图8 DBR的相关参数解释:

   根据上边图例,我们来讨论DBR各字节的参数意义。

   MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86的CPU指令。

这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。

   跳转指令之后是8字节长的OEM ID,它是一个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号。

为了保留与MS-DOS的兼容性,通常Windows 2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了“MSDOS 5.0”,在NTFS磁盘上(关于ntfs,另述),Windows 2000记录的是“NTFS”。

通常在被Windows 95格式化的磁盘上OEM ID字段出现“MSWIN4.0”,在被Windows 95 OSR2和Windows 98格式化的磁盘上OEM ID字段出现“MSWIN4.1”。

   接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息。

通常称之为BPB(BIOS Parameter Block),BPB一般开始于相同的位移量,因此,标准的参数都处于一个已知的位置。

磁盘容量和几何结构变量都被封在BPB之中。

由于引导扇区的第一部分是一个x86跳转指令。

因此,将来通过在BPB末端附加新的信息,可以对BPB进行扩展。

只需要对该跳转指令作一个小的调整就可以适应BPB的变化。

图9已经列出了项目的名称和取值,为了系统的研究,针对图8,将FAT32分区格式的BPB含义和扩展BPB含义释义为表格,见表4和表5。

   DBR的偏移0x5A开始的数据为操作系统引导代码。

这是由偏移0x00开始的跳转指令所指向的。

在图8所列出的偏移0x00~0x02的跳转指令"EB 58 90"清楚地指明了OS引导代码的偏移位置。

jump 58H加上跳转指令所需的位移量,即开始于0x5A。

此段指令在不同的操作系统上和不同的引导方式上,其内容也是不同的。

大多数的资料上都说win98,构建于fat基本分区上的win2000,winxp所使用的DBR只占用基本分区的第0扇区。

他们提到,对于fat32,一般的32个基本分区保留扇区只有第0扇区是有用的。

实际上,以FAT32构建的操作系统如果是win98,系统会使用基本分区的第0扇区和第2扇区存储os引导代码;以FAT32构建的操作系统如果是win2000或winxp,系统会使用基本分区的第0扇区和第0xC扇区(win2000或winxp,其第0xC的位置由第0扇区的0xAB偏移指出)存储os引导代码。

所以,在fat32分区格式上,如果DBR一扇区的内容正确而缺少第2扇区(win98系统)或第0xC扇区(win2000或winxp系统),系统也是无法启动的。

如果自己手动设置NTLDR双系统,必须知道这一点。

   DBR扇区的最后两个字节一般存储值为0x55AA的DBR有效标志,对于其他的取值,系统将不会执行DBR相关指令。

上面提到的其他几个参与os引导的扇区也需以0x55AA为合法结束标志。

   FAT16 DBR:

   FAT32中DBR的含义大致如此,对于FAT12和FAT16其基本意义类似,只是相关偏移量和参数意义有小的差异,FAT格式的区别和来因,以后会说到,此处不在多说FAT12与FAT16。

我将FAT16的扇区参数意义列表。

感兴趣的朋友自己研究一下,和FAT32大同小异的。

   4.2  关于保留扇区

   在上述FAT文件系统DBR的偏移0x0E处,用2个字节存储保留扇区的数目。

所谓保留扇区(有时候会叫系统扇区,隐藏扇区),是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区。

在FAT16文件系统中,保留扇区的数据通常设置为1,即仅仅DBR扇区。

而在FAT32中,保留扇区的数据通常取为32,有时候用Partition Magic分过的FAT32分区会设置36个保留扇区,有的工具可能会设置63个保留扇区。

   FAT32中的保留扇区除了磁盘总第0扇区用作DBR,总第2扇区(win98系统)或总第0xC扇区(win2000,winxp)用作OS引导代码扩展部分外,其余扇区都不参与操作系统管理与磁盘数据管理,通常情况下是没作用的。

操作系统之所以在FAT32中设置保留扇区,是为了对DBR作备份或留待以后升级时用。

FAT32中,DBR偏移0x34占2字节的数据指明了DBR备份扇区所在,一般为0x06,即第6扇区。

当FAT32分区DBR扇区被破坏导致分区无法访问时。

可以用第6扇区的原备份替换第0扇区来找回数据。

   4.3  FAT表和数据的存储原则

   FAT表(File Allocation Table 文件分配表),是Microsoft在FAT文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构。

假如把磁盘比作一本书,FAT表可以认为相当于书中的目录,而文件就是各个章节的内容。

但FAT表的表示方法却与目录有很大的不同。

   在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。

同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。

   ★存储过程假想:

   我们模拟对一个分区存储数据的过程来说明FAT文件系统中数据的存储原则。

   假定现在有一个空的完全没有存放数据的磁盘,大小为100KB,我们将其想象为线形的空间地址。

为了存储管理上的便利,我们人为的将这100KB的空间均分成100份,每份1KB。

我们来依次存储这样几个文件:

A.TXT(大小10KB),B.TXT(大小53.6KB),C.TXT(大小20.5KB)。

   最起码能够想到,我们可以顺序的在这100KB空间中存放这3个文件。

同时不要忘了,我们还要记下他们的大小和开始的位置,这样下次要用时才能找的到,这就像是目录。

为了便于查找,我们假定用第1K的空间来存储他们的特征(属性)。

还有,我们设计的存储单位是1KB,所以,A.TXT我们需要10个存储单位(为了说明方便,我们把存储单位叫做“簇”吧。

也能少打点字,呵呵。

),B.TXT需要54个簇,C.TXT需要21个簇。

可能有人会说B.TXT和C.TXT不是各自浪费了不到1簇的空间吗?

干嘛不让他们紧挨着,不是省地方吗?

我的回答是,如果按照这样的方式存储,目录中原本只需要记下簇号,现在还需要记下簇内的偏移,这样会增加目录的存储量,而且存取没有了规则,读取也不太方便,是得不偿失的。

   根据上面所说的思想,我们设计了这样的图4.3.1所示的存储方式。

   我们再考虑如何来写这三个文件的目录。

对于每个文件而言,一定要记录的有:

文件名,开始簇,大小,创建日期、时间,修改日期、时间,文件的读写属性等。

这里大小能不能用结束簇来计算呢?

一定不能,因为文件的大小不一定就是整数个簇的大小,否则的话像B.TXT的内容就是54KB的内容了,少了固然不行,可多了也是不行的。

那么我们怎么记录呢?

可以想象一下。

为了管理上的方便,我们用数据库的管理方式来管理我们的目录。

于是我把1KB再分成10份,假定开始簇号为0,定义每份100B的各个位置的代表含义如图4.3.2

   这样设计的结构绝对可以对文件进行正确的读写了。

接着让我们设计的文件系统工作吧。

先改动个文件,比如A.TXT,增加点内容吧!

咦?

增加后往哪里放呀,虽然存储块的后面有很多空间,但紧随其后B.TXT的数据还顶着呢?

要是把A.TXT移到后边太浪费处理资源,而且也不一定解决问题。

这个问题看来暂时解决不了。

   那我们换个操作,把B.txt删了,b.txt的空间随之释放。

这时候空间如图4.3.3,目录如图4.3.4

   这个操作看来还可以,我们接着做,在存入一个文件D.txt(大小为60.3KB),总共100簇的空间只用了31簇,还有68簇剩余,按说能放下。

可是?

往那里放呢?

没有61个连续的空间了,目录行没办法写了,看来无连续块存储暂时也不行。

   你一定能够想到我们可以在连续空间不够或增加文件长度的时候转移影响我们操作的其他文件,从而腾出空间来,但我要问你,那不是成天啥也不要干了,就是倒腾东西了吗?

   看来我们设计的文件系统有致命的漏洞,怎么解决呢?

其实可以这样解决:

   首先我们允许文件的不连续存储。

目录中依然只记录开始簇和文件的大小。

那么我们怎么记录文件占用那些簇呢,以文件映射簇不太方便,因为文件名是不固定的。

我们换个思想,可以用簇来映射文件,在整个存储空间的前部留下几簇来记录数据区中数据与簇号的关系。

对于上例因为总空间也不大,所以用前部的1Kb的空间来记录这种对应,假设3个文件都存储,空间分配如图4.3.5,同时修改一下目录,如图4.3.6

   第一簇用来记录数据区中每一簇的被占用情况,暂时称其为文件分配表。

结合文件分配表和文件目录就可以达到完全的文件读取了。

我们想到,把文件分配表做成一个数据表,以图4.3.7的形式记录簇与数据的对应。

   用图4.3.7的组织方式是完全可以实现对文件占有簇的记录的。

但还不够效率。

比如文件名在文件分配表中记录太多,浪费空间,而实际上在目录中已经记录了文件的开始簇了。

所以可以改良一下,用链的方式来存放占有簇的关系,变成图4.3.8的组织方式。

   参照图4.3.8来理解一下文件分配表的意义。

如文件a.txt我们根据目录项中指定的a.txt的首簇为2,然后找到文件分配表的第2簇记录,上面登记的是3,我们就能确定下一簇是3。

找到文件分配表的第3簇记录,上面登记的是4,我们就能确定下一簇是4......直到指到第11簇,发现下一个指向是FF,就是结束。

文件便丝毫无误读取完毕。

   我们再看上面提到的第三种情况,就是将b.txt删除以后,存入一个大小为60.3KB的d.txt。

利用簇链可以很容易的实现。

实现后的磁盘如图4.3.9  4.3.10  4.3.11

   上面是我们对文件存储的一种假设,也该揭开谜底的时候了。

上面的思想其实就是fat文件系统的思想的精髓(但并不是,尤其像具体的参数的意义与我们所举的例子是完全不同的。

请忘掉上边细节,努力记忆下边)。

   ★FAT16存储原理:

  

   当把一部分磁盘空间格式化为fat文件系统时,fat文件系统就将这个分区当成整块可分配的区域进行规划,以便于数据的存储。

一般来讲,其划分形式如图7所示。

我们把FAT16部分提取出来,详细描述一下:

   FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中,FAT16简单来讲由图4.3.12所示的6部分组成(主要是前5部分)。

引导扇区(DBR)我们已经说过,FAT16在DBR之后没有留有任何保留扇区,其后紧随的便是FAT表。

FAT表是FAT16用来记录磁盘数据区簇链结构的。

像前面我们说过的例子一样,FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。

通常情况下,每扇区512字节的原则是不变的。

簇的大小一般是2n (n为整数)个扇区的大小,像512B,1K,2K,4K,8K,16K,32K,64K。

实际中通常不超过32K。

 之所以簇为单位而不以扇区为单位进行磁盘的分配,是因为当分区容量较大时,采用大小为512b的扇区管理会增加fat表的项数,对大文件存取增加消耗,文件系统效率不高。

分区的大小和簇的取值是有关系的,见表9  

   注意:

少于32680个扇区的分区中,簇空间大小可最多达到每个簇8个扇区。

不管用户是使用磁盘管理器来格式化分区,还是使用命令提示行键入format命令格式化,格式化程序都创建一个12位的FAT。

少于16MB的分区,系统通常会将其格式化成12位的FAT,FAT12是FAT的初始实现形式,是针对小型介质的。

FAT12文件分配表要比FAT16和FAT32的文件分配表小,因为它对每个条目使用的空间较少。

这就给数据留下较多的空间。

所有用FAT12格式化的5.25英寸软盘以及1.44MB的3.5英寸软盘都是由FAT12格式化的。

除了FAT表中记录每簇链结的二进制位数与FAT16不同外,其余原理与FAT16均相同,不再单独解释。

   格式化FAT16分区时,格式化程序根据分区的大小确定簇的大小,然后根据保留扇区的数目、根目录的扇区数目、数据区可分的簇数与FAT表本身所占空间 来确定FAT表所需的扇区数目,然后将计算后的结果写入DBR的相关位置。

   FAT16 DBR参数的偏移0x11处记录了根目录所占扇区的数目。

偏移0x16记录了FAT表所占扇区的数据。

偏移0x10记录了FAT表

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1