基于System ACE的DSP文件系统设计
读写必须以扇区为单位,每个扇区为512字节,每次可以读写1个扇区或连续多个扇区。扇区的寻址方式有2种:逻辑寻址(LBA)和物理寻址(CHS),它们之间的关系为:
LBA=(柱面号×磁头数+磁头号)×扇区数+扇区数-1
寻址方式采用LBA(Logic Block Address),该方式将全部扇区映射至1块连续的地址空间中,这样可以大大简化编程的工作,同时避免了柱面、磁头和扇区之间的换算,使寻址更方便。对CF卡的配置及各种操作,如读写、删除、格式化等,都通过写特殊功能寄存器完成。
3 文件系统的建立
3.1 文件系统的引入
100个数在文件系统中是如何存放的呢?在计算机中是以0/1二进制的形式简单地存放在存储介质中。如果不同的数多,如何处理?这就引出了文件系统。文件系统实际上就是对存储的数据进行管理。本文在CF卡上建立的文件系统是FAT16。FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中。
硬盘上的数据按照其不同的特点和作用大致可分为5部分:MBR(Main Boot Record,主引导扇)区,DBR(DosBoot Record,操作系统引导记录)区,FAT(File AllocationTable,文件分配表)区,DIR(Directory,根目录)区,DATA区。
MBR区位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第1个扇区),bios在执行自己固有的程序以后就会跳转到mbr中的第1条指令,将系统的控制权交由mbr来执行。在总共512字节的主引导记录中,MBR的引导程序占了其中的前446字节(偏移0H~偏移1BDH),随后的64字节(偏移1BEH~偏移1FDH)为DPT(Disk Partition Table,硬盘分区表),最后的2字节"55 AA"(偏移1FEH~偏移1FFH)是分区有效结束标志。MBR不随操作系统的不同而不同,即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质,具有公共引导的特性。
DBR(Dos Boot Record,操作系统引导记录)区通常占用分区的第0扇区,共512字节(特殊情况下也要占用其他保留扇区,这里先说第0扇)。在这512字节中,其实又是由跳转指令、厂商标志和操作系统版本号、BPB(BIOS Parameter Block)、扩展BPB、os引导程序、结束标志几部分组成。
FAT表是用FAT16来记录磁盘数据区簇链结构的。如前面的例子,FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。通常情况下,每扇区512字节的原则是不变的。簇的大小一般是2n(n为整数)个扇区的大小,像512 B、1 KB、2 KB、4 KB、8 KB、16 KB、32 KB、64 KB。实际中通常不超过32 KB。之所以簇为单位而不以扇区为单位进行磁盘的分配,是因为当分区容量较大时,采用大小为512位的扇区管理会增加FAT表的项数,对大文件存取增加消耗,文件系统效率不高。
DIR(Directory)是根目录区,紧接着第二FAT表(即备份的FAT表)之后,记录着根目录下每个文件(目录)的起始单元、文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。
数据区是真正意义上的数据存储的地方,位于DIR区之后,占据硬盘上的大部分数据空间。
3.2 FAT16文件系统存储原理
在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。格式化FAT16分区时,格式化程序根据分区的大小确定簇的大小,然后根据保留扇区的数目、根目录的扇区数目、数据区可分的簇数与FAT表本身所占空间来确定FAT表所需的扇区数目,之后将计算结果写入DBR的相关位置。FAT16 DBR参数的偏移0x11处记录了根目录所占扇区的数目。偏移0x16记录了FAT表所占扇区的数据。偏移0x10记录了FAT表的副本数目。系统在得到这几项参数以后,就可以确定数据区的开始扇区偏移了。FAT16文件系统从根目录所占的32个扇区之后的第1个扇区开始以簇为单位进行数据的处理,这之前仍以扇区为单位。对于根目录之后的第1个簇,系统并不编号为第0簇或第1簇,而是编号为第2簇,也就是说数据区顺序上的第1个簇也是编号上的第2簇。FAT文件系统之所以有12、16、32不同的版本之分,其根本在于FAT表用来记录任意一簇链接的二进制位数。以FAT16为例,每一簇在FAT表中占据2字节(二进制16位)。所以,FAT16最大可以表示的簇号为0xFFFF(十进制的65535),以32 KB为簇的大小的话,FAT32可以管理的最大磁盘空间为:32 KB×65 535=2 048 MB,这就是为什么FAT16不支持超过2 GB分区的原因。FAT表实际上是1个数据表,以2字节为单位,我们暂将这个单位称为FAT记录项,通常情况其
- linux操作系统下的进程通信设计(01-24)
- EDM安全访问机制应用方案(02-12)
- 基于SystemC的通用嵌入式存储器模型设计(08-02)
- 嵌入式存储器基于不同存储单元的设计方案汇总(10-04)
- 基于32位RISC架构的SoC系统设计与验证(11-08)
- 可视化系统集成器大大加快系统开发(07-02)