Sunteți pe pagina 1din 10

CSE451 Introduction to Operating Systems

Spring 2008

Tour of the Windows NT File Systems

Gary Kimura & Mark Zbikowski

• Portable System Group formed November 1988
– Started with five software engineers
– Later became Windows NT
• FAT for NT was written in early 1989
– Supported DOS disk format
– Entirely new code base and programming model
– FASTFAT started in late 1989 (two person effort)
• Other file systems done by the Core NT group were
• FS development was done concurrently with kernel
– A lot of cooperative design between the file systems, I/O system,
Memory Management, and the Cache manager
Fat on-disk Structure
• Boot sector, followed by reserved sector Area
• File Allocation Table (FAT)
– 12, 16, and 32 bit FAT
– Clusters size
– Typically two copies of FAT
• Root Directory
– Fixed size
– 32 byte Directory Entries (dirent)
– 8.3 names
• Data area
– Once only for file data, later expanded to include subdirectories

1.44 MB Floppy format

• Number of sectors = 0xB40 (2,880)

• Sector size = 0x200 (512)
• Number of Fats = 0x2, Sectors per Fat = 0x9
• Root directory Size = 0xE (14) sectors, 0xE0 (224) entries
• Layout
– Sector 0x0: boot sector
– Sector 0x1: start of first FAT
– Sector 0xA: start of second FAT
– Sector 0x13: start of root directory
– Sector 0x21: start of data area
• Disk Edit utility to help in your project
– Added to the project4 directory (copy everything to your vhd)
I/O – FS Interface
• Layering of drivers (file systems, disks, etc.)
– All orchestrated by the I/O System
– Driver Objects (one per file system). Each driver “registers” with
the I/O system, see DriverEntry(…) in FatInit.c
– Device Objects (one per volume). Created when a new volume is
mounted, see FatMountVolume(…) in Fsctrl.c
– File Objects (one per CreateFile call). See FatCommonCreate(…)
in create.c
• I/O Call Driver model using I/O Request Packets (IRP)
– IRP Stack locations (see “inc\ddk\wdm.h”)
– Major and minor functions
– IoCallDriver(…) and IoCompleteRequest(…)
• File Object
– FsContext and FsContext2
Windows FS Architecture
• Data Structure Layout
– Mimics as much as practical the on-disk directory/file
– Keeps in memory the opened files and directories
– Volume Control Block (VCB)
– File Control Block (FCB) and Directory Control Block
– Context Control Block (CCB)
– All rooted in FatData (See FatStruc.h)

Windows FS Architecture (Continued)
• FSD/FSP Model
– User Thread versus Worker Thread
– Driven off of IRP Major Function
• See DriverEntry(…) in FatInit.c
– Fat Common Routines
• Everything looks like a file
– FatReadVolumeFile(…)
• Some things to watch out for
– Kernel Stack Space Limitation
– Being able to wait for I/O
– Recursive routines

Cache/MM Interaction
• Virtual caching
• Memory Mapped Files
• Fast read and fast write
• Ancillary file system data also cached
– Borrowing a pin and unpin logic from databases
• Noncached I/O
– Where the actual read/write to disk occur
– Synchronous and Asynchronous I/O
– See read.c, write,c and deviosup.c

CreateFile Operation
• Some of the main files and functions to look at
• Create.c and dirsup.c
• FatFsdCreate
• FatCommonCreate
• FatCreateNewFile
• FatCreateNewDirent
• FatConstructDirent

Programming Style

• Engineering practices
• Comments
• Indentation
• Variable names
• Project 4 description has a synopsis of each source file