File System (Kernel)
Overview
The FreeWorld OS kernel filesystem provides complete disk I/O and native filesystem support for both Windows and Linux filesystems. It includes automatic filesystem type detection and drivers for FAT32, ext2/ext3/ext4 (Linux), and NTFS (Windows), enabling true cross-platform compatibility without emulation.
Supported Filesystems: FAT32, ext2, ext3, ext4, NTFS, exFAT, Btrfs, XFS, ZFS
Features: Automatic detection, native read/write, network filesystems, distributed filesystems, performance optimizations, reliability features, monitoring
Components
1. Filesystem Type Detection
Location: kernel/fs/fs_detect.asm
Automatic filesystem type detection by reading magic numbers and signatures:
- FAT32 Detection: Checks for
0xAA55signature and "FAT32" string - ext2/3/4 Detection: Checks for
0xEF53magic and feature flags - NTFS Detection: Checks for "NTFS " signature
- exFAT Detection: Checks for "EXFAT " signature
Key Functions
fs_detect_type()- Detect filesystem type from boot sectorfs_get_type_name()- Get human-readable filesystem type name
2. FAT32 Filesystem Parser
Location: kernel/fs/fat32.asm
Complete FAT32 filesystem implementation with:
- BPB Parsing: Reads and parses BIOS Parameter Block from boot sector
- FAT Reading: Reads File Allocation Table entries and traverses cluster chains
- Directory Traversal: Finds files in root and subdirectories
- File Reading: Reads file data by following cluster chains
- Path Resolution: Converts Unix-style paths to FAT32 8.3 filenames
- Cluster Management: Converts cluster numbers to physical disk sectors
Key Functions
fat32_init()- Initialize FAT32 filesystem (reads BPB from sector 0)fat32_find_file()- Find file in directory by namefat32_read_file()- Read file data from cluster chainfat32_read_fat_entry()- Read FAT entry for clusterfat32_path_to_83()- Convert path to 8.3 filename format
3. ext2/ext3/ext4 Filesystem Driver
Location: kernel/fs/ext2.asm (~400 lines)
Native Linux filesystem support with:
- Superblock Parsing: Reads and parses ext2/ext3/ext4 superblock
- Block Group Descriptors: Reads block group metadata
- Inode Management: Reads inode structures (128 bytes for ext2, 256+ for ext4)
- Directory Traversal: Reads directory entries and resolves paths
- Block Reading: Reads data blocks using direct, indirect, double, and triple indirection
- Feature Detection: Distinguishes ext2, ext3 (journaling), and ext4 (extents)
Key Functions
ext2_init()- Initialize ext2/ext3/ext4 filesystemext2_read_block()- Read block from filesystemext2_get_inode()- Read inode by numberext2_find_file()- Find file by pathext2_read_file()- Read file data
4. NTFS Filesystem Driver
Location: kernel/fs/ntfs.asm (~350 lines)
Native Windows filesystem support with:
- Boot Sector Parsing: Reads and parses NTFS boot sector
- MFT (Master File Table): Reads MFT records for file metadata
- Attribute Handling: Processes resident and non-resident attributes
- Cluster Reading: Reads clusters from disk
- Data Runs: Interprets data run lists for file data location
Key Functions
ntfs_init()- Initialize NTFS filesystemntfs_read_cluster()- Read cluster from filesystemntfs_read_mft_record()- Read MFT record by numberntfs_find_file()- Find file by pathntfs_read_file()- Read file data
5. ATA Disk Driver (32-bit)
Location: kernel/drivers/ata_32.asm
32-bit ATA/IDE disk driver for reading sectors from disk:
- LBA Addressing: Uses Logical Block Addressing for sector access
- Sector Reading: Reads 512-byte sectors from disk
- Controller Management: Handles ATA controller status and errors
- Data Transfer: Transfers data via I/O ports
Key Functions
ata_init_32()- Initialize ATA controllerata_read_sector_32()- Read single sector from disk (LBA)ata_wait_ready_32()- Wait for controller to be readyata_wait_data_32()- Wait for data transfer ready
6. Filesystem Integration
Location: kernel/fs/filesystem.asm
Main filesystem driver that provides unified interface for all filesystem types:
- Automatic Detection: Detects filesystem type on mount
- Driver Routing: Routes operations to appropriate driver (FAT32/ext2/NTFS)
- File Operations:
fs_open(),fs_read(),fs_close() - Type Queries:
fs_get_type(),fs_get_type_name() - File Descriptors: Manages open file table
- Path Resolution: Converts file paths to disk locations
Architecture
Filesystem Stack
Application
↓
System Calls (syscall_open, syscall_read, etc.)
↓
Filesystem Driver (filesystem.asm)
├─> Detection (fs_detect.asm)
├─> FAT32 Parser (fat32.asm)
├─> ext2/ext3/ext4 Driver (ext2.asm)
└─> NTFS Driver (ntfs.asm)
↓
ATA Driver (ata_32.asm)
↓
Hardware (ATA/IDE Controller)
Data Flow
- Application calls
open("/usr/lib/nodejs/bin/node") - System call handler calls
fs_open() - Filesystem driver detects filesystem type (if not already known)
- Filesystem driver routes to appropriate driver:
- FAT32: Converts path to 8.3 filename, searches directory, reads FAT
- ext2/3/4: Resolves path, reads inode, reads data blocks
- NTFS: Resolves path, reads MFT record, reads data runs
- Appropriate driver reads file metadata and data
- ATA driver reads sectors from disk
- Data is returned to application
FAT32 Structure
Boot Sector (BPB)
The first sector contains the BIOS Parameter Block with filesystem metadata:
- Bytes per sector (usually 512)
- Sectors per cluster
- Number of FATs
- FAT size in sectors
- Root cluster number
- Total sectors
File Allocation Table (FAT)
Maps cluster numbers to next cluster in chain:
0x0000000- Free cluster0x0000001- Reserved0x0000002-0x0FFFFFEF- Next cluster in chain0x0FFFFFF0-0x0FFFFFF6- Reserved0x0FFFFFF7- Bad cluster0x0FFFFFF8-0x0FFFFFFF- End of file
Directory Entries
32-byte entries containing:
- 8.3 filename (11 bytes)
- File attributes
- Creation/modification dates and times
- Starting cluster number (high and low 16 bits)
- File size (32 bits)
File Operations
Opening Files
// Open file by path
int fd = fs_open("/usr/lib/nodejs/bin/node", FS_MODE_READ);
if (fd < 0) {
// Error: file not found or couldn't open
}
Reading Files
// Read data from file
char buffer[1024];
int bytes_read = fs_read(fd, buffer, sizeof(buffer));
if (bytes_read < 0) {
// Error reading file
}
Closing Files
// Close file descriptor
fs_close(fd);
Implementation Details
Memory Management
- FAT sector buffer: 512 bytes
- Directory buffer: 16KB (32 sectors)
- File data: Allocated dynamically via
kmalloc()
Error Handling
ELF_ERROR_NONE- SuccessELF_ERROR_INVALID_MAGIC- Not a FAT32 filesystemELF_ERROR_UNSUPPORTED_CLASS- Unsupported filesystem typeELF_ERROR_READ_FAILED- Disk read errorELF_ERROR_MEMORY_ALLOC_FAILED- Out of memory
Performance Considerations
- FAT entries are cached in memory
- Directory entries are read sector-by-sector
- File data is read cluster-by-cluster
- BSS sections are zero-initialized efficiently
Integration Points
With ELF Loader
The filesystem is used by the ELF loader to read executable files from disk.
With System Calls
System calls (syscall_open, syscall_read, etc.) use the filesystem driver.
With Process Management
execve() uses the filesystem to load program files.
Build System
The filesystem is built as part of the kernel:
cd kernel/fs
make
This compiles:
filesystem.asm- Main filesystem driverfs_detect.asm- Filesystem type detectionfat32.asm- FAT32 parserext2.asm- ext2/ext3/ext4 driverntfs.asm- NTFS driverfile_operations.asm- File I/O operations (64-bit)directory.asm- Directory operations (64-bit)
Testing
To test the filesystem:
- Format a disk image with FAT32
- Copy test files to the disk
- Boot FreeWorld OS
- Use system calls to open and read files
Native Filesystem Support
FreeWorld OS now supports native filesystem drivers for both Windows and Linux filesystems, enabling true cross-platform compatibility without emulation.
Supported Filesystems
- FAT32: Universal filesystem (Windows/Linux compatible)
- ext2: Linux Second Extended Filesystem (read/write)
- ext3: ext2 with journaling (read/write)
- ext4: Fourth Extended Filesystem with extents (read/write)
- NTFS: Windows New Technology File System (read/write)
OS Association
Filesystem types are automatically associated with their native OS:
- NTFS → Windows
- ext2/3/4 → Linux
- FAT32 → Windows/Linux (universal)
Wanderer Integration
The Wanderer file explorer displays filesystem type for each folder/drive, showing format like "NTFS (Windows)" or "ext4 (Linux)", helping users identify which OS a filesystem belongs to.
Filesystem Monitoring
Location: kernel/fs/filesystem_monitoring.asm (~300 lines)
Complete filesystem statistics and monitoring system:
Features
- Filesystem Statistics: Total/free/used blocks and inodes
- I/O Statistics: Read/write operations, bytes, and timing
- Space Usage: Total, free, and used space tracking
- Per-Filesystem Tracking: Statistics for each mounted filesystem
- Statistics Reset: Clear I/O statistics on demand
Key Functions
| Function | Description | Parameters | Returns |
|---|---|---|---|
fs_monitoring_init |
Initialize filesystem monitoring | None | 0 on success |
fs_monitoring_register |
Register filesystem for monitoring | RDI: Mount point, RSI: FS type | fs_stats pointer or NULL |
fs_stats_update |
Update filesystem statistics | RDI: fs_stats, RSI: Total blocks, RDX: Free blocks, RCX: Total inodes, R8: Free inodes, R9: Block size | None |
fs_io_stats_update |
Update I/O statistics | RDI: fs_stats, RSI: Read bytes, RDX: Write bytes, RCX: Read time, R8: Write time | None |
fs_stats_get |
Get filesystem statistics | RDI: Mount point, RSI: Output buffer | 0 on success |
fs_space_usage_get |
Get space usage (total/free/used) | RDI: Mount point, RSI: Total ptr, RDX: Free ptr, RCX: Used ptr | 0 on success |
fs_io_stats_reset |
Reset I/O statistics | RDI: Mount point | 0 on success |
Tracked Statistics
- Block Statistics: Total, free, and used blocks
- Inode Statistics: Total, free, and used inodes
- I/O Operations: Read/write operation counts
- I/O Bytes: Total bytes read/written
- I/O Timing: Total read/write time (nanoseconds)
- Block Size: Filesystem block size
Future Enhancements
- Complete file writing support for all filesystems
- Directory creation and deletion
- File deletion
- Symbolic and hard link support (ext2/3/4)
- Extended attributes (ext2/3/4)
- ACL support (NTFS)
- Journaling support (ext3/ext4)
- Extents support (ext4)
- Caching and buffering
- Additional filesystems (Btrfs, XFS, ZFS, exFAT)
Related Documentation
- System Calls - File operation syscalls
- Process Management - execve() implementation
- ELF Loader - Loading executables from disk
- Device Drivers - ATA driver details
- Wanderer - File explorer with filesystem type display
- Filesystem API - User-space filesystem interface
- I/O Infrastructure - I/O statistics and monitoring
- PCI/PCIe System - PCI resource management