CSCI3150 T12 FAT文件系统
课程:CSCI3150 Introduction to Operating Systems · 2025T2 本讲:T12 FAT文件系统 · 原件 T12-FAT文件系统-2025T2.pptx(本地课件) · PDF页码副本(本地课件) p.1–16 定位:沿目录项的首簇进入FAT链,区分逻辑长度、分配长度与簇内浪费。 前后:前接 T11,对应 L05实现。
逐页伴读
p.1–3:最后一份历史Tutorial
p.1 Tutorial 12: FAT File System
CSCI3150 Introduction to Operating Systems, Spring 2026
p.2 Assignement 4
Due at 15:59:00 p.m., Apr 24
Final Exam
You can take a A4 cheat sheet and a calculator
封面2026年4月9日;p.2作业截止4月24日与T11的5月1日不同,应视为历史材料中的不同通知,不能拿任一日期当当期要求。允许A4纸和计算器也是该历史期末说明,不代表2026T1已获相同许可。p.3为File and Directory标题。
备注与可见正文的版本差异:原 PPTX slide 2 的演讲者备注另写 “December 9th at 6 p.m.”,与可见页的 4 月 24 日不同。两者属于同一文件中未同步的历史安排,不能合并为一个截止时间。本笔记只把备注作为来源差异保留,不据此改写当前学期的作业日期。
p.4–6:FAT怎样连接名字与内容
p.4 File and Directory is the abstract of the hard disk drive and I/O.
File
One file occupy several clusters (data blocks)
inode: a data structure that describes a FS object
Directory
A file
A list of <user-readable filename, low-level name> pairs
Directory Entry
the logical unit in a directory file. A directory file has one or multiple directory entries. A directory entry is the metadata
of a file and could point to a file or another directory file.
p.5 Simple - and common - file system
Found on all Windows OS and many devices
FAT12: Developed 1977 (MS Disk BASIC)
FAT16: Developed 1987 (MS-DOS 3.31)
FAT32: Developed 1996 (Win95 OSR2)
Few data structures supported:
Cluster: Basic storage unit for files
Directory: Lists file name, starting cluster, and length
File Allocation Table: Contains cluster status and pointer to next cluster in chain
p.6 Relationship between the directory entry structures, clusters, and FAT structure:
一般文件系统用目录项把名称连到底层对象,inode是前面主讲的常见结构;FAT并不要求照搬Unix的磁盘inode表。这里目录项记录名字、首簇和长度,FAT中每项记录该簇的状态或下一簇位置。
图p.6 file1.dat大小4000B、首簇34,FAT[34]指35,FAT[35]标EOF。读取先查目录得到34,再沿表到35,不靠猜“首簇后面连续就是下一块”。该图没给簇字节数,不能仅用4000与两簇反推出精确slack。
p.7–9:两组原题分别算slack
p.7 File tyui.jpg:
occupies clusters 2, 3, and 4.
The file size is 1,400 bytes, it occupies 1,536 bytes (3 clusters) on the disk, and cluster 4 includes 136 bytes of slack space.
File mes.doc:
occupies clusters 5 and 6.
The file size is 980 bytes, it occupies 1,024 bytes (2 clusters), and has 44 bytes of slack space in cluster 6.
Clusters 7, 8, and 9 are unallocated.
p.9 Clusters 3, 6, and 8 are allocated; clusters 2, 4, 5, 7, and 9 are unallocated
Clusters 6 and 8 are only partially filled; the unused portion is slack space
File gary.txt:
logical size is 1,034 bytes
physical size is 2,048 bytes (slack = 1,014 B)
File hello.jpg:
logical size is 3,973 bytes
physical size is 4,096 bytes (slack = 123 B)
p.7题设tyui.jpg为1400B,占簇2、3、4共1536B,故每簇512B,slack=1536−1400=136B;mes.doc为980B,占5、6共1024B,slack44B;7、8、9未分配。两个文件合计2380B逻辑、2560B分配,总slack180B。
p.8说明cluster由若干连续sector组成,图例sector512B;p.9另换簇2048B=4sector。gary.txt首簇6,大小1034B,只占1簇,slack1014B;hello.jpg首簇3,FAT[3]=8、FAT[8]结束,大小3973B,占2簇4096B,slack123B。合计5007B逻辑、6144B分配、slack1137B。簇3与8不连续,展示链式分配;不能把p.7的512B簇长带入p.9。
补充:沿hello.jpg算一次文件偏移。 p.9 的簇长2048B,文件3973B,链为3→8→结束。若要读文件偏移2500处的一个字节,先做2500=1×2048+452;它属于文件的第1号逻辑簇(从0计),簇内偏移452。目录首簇3对应逻辑簇0;查FAT[3]=8,才找到逻辑簇1,因此读簇8的偏移452。不能直接取物理簇4,也不能把FAT[8]的结束标记当成数据。
读到文件末尾还要看逻辑大小。最后一个有效字节偏移3972,在第二簇中的偏移是3972−2048=1924,故第二簇实际使用1925B,剩2048−1925=123B,与原slack吻合。FAT告诉你已分配链怎么走;目录大小告诉你用户内容在哪里终止,二者一起才能避免把末簇剩余空间当成文件内容。
表(p.8,按原图展开):FAT 的四个连续区域
| 区域 | 包含内容 | 页上给出的扇区数关系 |
|---|---|---|
| Reserved | Boot Sector、FAT32 的 FS Information Sector、可选额外保留扇区 | 保留扇区数 |
| FAT Region | FAT#1、FAT#2 等副本 | FAT 数量 × 每份 FAT 的扇区数 |
| Root Directory Region | FAT12/FAT16 的固定根目录 | 根条目数 × 32 ÷ 每扇区字节数 |
| Data Region | 普通文件及目录内容 | 簇数 × 每簇扇区数 |
p.8 将 sector 通常设为 512B,cluster 可取 1、2、4、8、16、32、64 个连续扇区,对应 512B–32KiB。读图时注意根目录区位于 FAT 区之后;备注里“right after reserved region”省略了中间的 FAT 区,与图不一致,以图示顺序逐区计算位置。根目录区的扇区数若算出小数,实际按整扇区存放必须向上取整,这是本步所需的边界补充。
表(p.9):本题的完整 FAT 小表
| Cluster | Next |
|---|---|
| 2 | 0 |
| 3 | 8 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0xFF |
| 7 | 0 |
| 8 | 0xFF |
| 9 | 0 |
本图用 0 表示空闲、0xFF 表示本图的结束记号;并未给出完整 FAT16 编码范围。已分配簇为 3、6、8,其余列出的簇空闲。簇 6 的前 1034B 是 gary.txt,尾部 1014B 未用;hello.jpg 在簇 3 放满 2048B,在簇 8 放剩下的 1925B,留下 123B。PPTX slide 9 备注说 gary.txt 用了两个簇,与可见图及 1034B/2048B 的计算冲突;这里按可见题面算为一簇,不能把该备注直接写成答案。
p.10–11:FAT条目不是数据本身
p.10 FAT contains the metadata for clusters in the filesystem
In FAT16, the size of a FAT entry is 16 bit (2 bytes)
Every cluster in data region will be mapped uniquely mapped to an entry in FAT table
The clusters of a file may not be continuous in the data region, and the file system remembers the relationship of clusters with FAT
p.10 图片表格:FAT16 表项的完整取值分类。 这里读的是 FAT[k] 保存的值,不是下标 k。下表按该页逐行转写。
| 表项值(十六进制) | 原页含义 | 读链时怎样处理 |
|---|---|---|
| 0x0000 | Free cluster | 簇 k 空闲,不是文件正常结束标记 |
| 0x0001 | Reserved cluster | 保留值,不能当成普通后继簇号 |
| 0x0002–0xFFEF | Occupied cluster;指向下一簇 | 继续到该值所指的簇,仍须落在此卷实际数据簇范围内 |
| 0xFFF0–0xFFF6 | Reserved values | 保留编码,不能继续按普通链读取 |
| 0xFFF7 | Bad cluster | 坏簇标记,不是正常文件尾 |
| 0xFFF8–0xFFFF | The last cluster of a file | 簇 k 是链的末簇,停止跟随后继 |
把“下标”和“内容”分开读。 假设目录项给首簇 6,FAT[6]=0x0008,FAT[8]=0xFFFF(本段是按编码表构造的演示)。先读取数据簇 6,再由表项内容 8 找到数据簇 8;读取簇 8 后发现结束编码,链就到此为止。不是去读取“第 65535 簇”,也不是把 FAT 表里的两个字节当文件数据。末簇有多少字节属于文件,仍由目录中的文件大小决定。
若跟随一条已分配文件链却遇到 0x0000,不能把它当成同样正确的 EOF;这与该链应当已分配的前提冲突,需要报告或检查元数据问题。0xFFF7 则说明坏簇状态。区分这些分支,才能理解文件系统为什么不能只写“遇到大数就停”。p.9 用 0xFF 表示结束、p.11 用 0 表示结束,都是各自示意图的简写;不能替换本页 FAT16 的实际分类。
FAT16每项16bit=2B,对应一个数据簇。第k项的内容告诉“簇k后面是谁”,不要把k和内容交换。图p.11 rock.mp3从块1开始,沿中间省略段到6结束;game.exe从19经20及省略段到25结束;ubuntu.iso从7经8、后续到18,再跳26→27结束,展示可不连续。
该教学图用0表示链尾,又画出28→29→30→0的空闲链;这是抽象链表画法,不能拿它当真实FAT16磁盘编码表。真实FAT有专门空闲与结束标记,图上“块1”也不能直接套为数据簇的标准编号。省略号里的条目未逐个给出,本文不补造。
p.12–13:目录文件的内容仍要按目录项解释
p.12 Directory is also a kind of file in FAT. (Directory entries)
In FAT16, the length of a directory entry is 32 bytes
原FAT16目录项32B:名字11B(8字符主体+3扩展名)、属性在0x0B、首簇低位在0x1A占2B、文件大小在0x1C占4B。p.12表中写时间字段占位等,具体保留位随FAT版本与扩展变化,这里按给定布局读。
补充演算:若一目录数据簇2048B、每短目录项32B,可放64项;长文件名会占额外项,不能直接说一定容64个任意文件名。
p.13根目录有rock.mp3(首簇0x0002)和test目录(首簇0x0008);test内有ubuntu.iso(首簇0x0014=20)。路径test/ubuntu.iso先在根找到test,再读其目录数据找ubuntu.iso,最后从20沿文件链读数据。该图是新示例,首簇与p.11不同,不应强行拼成一张磁盘。
表(p.12,视觉读取):原页完整目录项布局
| 名称 | Offset | Size(B) | 原页说明 |
|---|---|---|---|
| DIR_Name | 0x00 | 11 | 前 8 字节名字、后 3 字节扩展名 |
| DIR_Attr | 0x0B | 1 | 原页以 0x10 示目录、0x20 示文件 |
| DIR_NTRes | 0x0C | 1 | reserved |
| DIR_CrtTimeTenth | 0x0D | 1 | reserved |
| DIR_CrtTime | 0x0E | 2 | reserved |
| DIR_CrtDate | 0x10 | 2 | reserved |
| DIR_LstAccDate | 0x12 | 2 | reserved |
| DIR_FstClusHI | 0x14 | 2 | reserved |
| DIR_WrtTime | 0x16 | 2 | 最近修改时间 |
| DIR_WrtDate | 0x18 | 2 | 最近修改日期 |
| DIR_FstClusLO | 0x1A | 2 | 文件首簇号 |
| DIR_FileSize | 0x1C | 4 | 文件大小 |
逐项检验:最后字段从十进制 28 起,占 4 字节,覆盖 28、29、30、31,因此整个条目恰为 32B。名字字段 0–10 共 11B,属性紧接在第 11B。读取首簇时去 0x1A,读取大小时去 0x1C,两者仅差 2B,读错偏移就会把簇号当文件大小。表中 reserved 是本课件的简化写法,不意味着所有 FAT 版本都完全忽略这些时间或高位字段;0x20 也不应被推广成所有普通文件唯一的属性值。
p.14–16:比较要落到访问成本
p.14 Comparing FAT and File Systems discussed in class
p.14 FAT File System:
Advantages:
Simple and easy to implement.
Low overhead for small devices with limited storage.
Universally compatible, supported by most operating systems.
Disadvantages:
Poor scalability for large storage systems.
Fragmentation issues as files grow.
Inefficient for managing large directories or large numbers of files.
p.15 Todays file system (discussed in class)
Advantages:
Supports large-scale file systems with hierarchical structure.
Efficiently handles large directories and files.
Better at minimizing fragmentation due to advanced allocation strategies.
Disadvantages:
More complex to implement and maintain.
Higher overhead in metadata storage.
Requires additional steps to access data through inodes.
FAT结构简单、广泛支持,但长链随机访问往往要沿链接寻找,扩展后可能分散。inode索引结构可通过多级索引定位文件块,也付出元数据与实现复杂度。课件的“现代系统更好”只是概述,实际性能由分配策略、缓存、文件规模和工作负载决定,不能无条件宣称任何inode系统都无碎片。
p.16为Q&A。FAT是Tutorial新展开内容,保留于本文,不把主讲未教的FAT细节默认写入Lecture课程索引。
补充:为什么知道文件内第几个簇,不等于知道磁盘簇号。 目录项只给起始簇。若想找文件内编号 k 的簇,在没有额外索引且从头开始的链式模型中,需要沿 FAT 后继走 k 次;k 从 0 开始,编号 0 就是起始簇,不能再多走一次。取得目标簇号之后,才把簇内偏移用于定位数据。
FAT 表已经缓存在内存时,这些跟链动作主要是内存查表,并不表示每一步必有一次磁盘 I/O;表不在缓存时又有另一套代价。顺序读取可记住刚走到的位置,下一簇只跟一次后继;每次都从头查会把程序自己的重复工作误算成格式必需成本。比较 FAT 与 inode 索引时,先固定随机还是顺序访问、缓存是否命中、是否保留当前位置,再讨论访问次数。
本讲核心考点
- [C] 根据目录首簇与FAT下一簇值追踪文件链。
- [C] 用向上取整算分配簇数、分配空间和slack。
- [C] 区分目录项、FAT项和数据簇。
- [C] 识别教学图的抽象结束标记与真实磁盘编码的边界。
附录
本份没有需要移至附录的长推导;计算过程已在对应页正文写全。
来源与证据
-
原件:T12-FAT文件系统-2025T2.pptx(本地课件);PDF副本(本地课件) p.1–16。本文页码均为 PDF 页号。
-
考试证据:读了 课程大纲-2026T1.pdf、教学计划-2026T1.pdf、T08-期中参考-2025T2-题目-解答.pdf、T07-多级反馈队列-2025T2.pdf(p.13–15内嵌历史试题);未识别用途的 PDF:无
-
2026-10-13 内容补全:保留原页顺序与版本,补入对应页的程序、接口、字段、条件和演算;原程序片段保留课件行号、拼写与省略处,不能据此视为经过编译的完整软件。本文已有运行记录属于其标注日期,本次未重新运行课程容器或提交作业。