This project is a full implementation of a simplified Operating System as part of the FOS course.
It covers:
- Low-level memory management
- Process scheduling
- Page fault handling
- Synchronization mechanisms
- System calls
The project is divided into Milestones, Group Modules, and Individual Modules to simulate real OS development stages.
-
Handles dynamic allocation inside heap
-
Uses free lists and linked lists
-
Supports:
alloc_blockfree_block
-
Efficient allocation (O(1) best case)
-
Kernel-level memory management
-
Two strategies:
- Block Allocator (small sizes)
- Page Allocator (large sizes)
-
Uses CUSTOM FIT strategy
-
Functions:
kmalloc()kfree()- Address translation
- Handles page faults (missing pages)
- Loads pages from disk to memory
- Maintains Working Set
- Validates invalid memory access
-
Page replacement algorithms:
- Optimal (simulation)
- Clock
- LRU (Aging)
- Modified Clock
-
User-level memory allocation
-
Lazy allocation (on page fault)
-
Uses:
- Block allocator
- Page allocator
-
Functions:
malloc()free()
-
Allows processes to share data
-
Functions:
smalloc()sget()
-
Uses reference counting & frame tracking
-
Priority-based Round Robin Scheduler
-
Features:
- Multiple queues
- Starvation prevention
- Dynamic priority handling
-
Synchronization primitives:
- Sleep Locks
- Semaphores
-
Prevents race conditions
User Programs
↓
System Calls
↓
Kernel
├── Memory Management
├── Scheduler
├── Synchronization
└── Page Fault Handler
FOS_PROJECT_2025_TEMPLATE/
│
├── boot/ # Bootloader
├── kern/ # Kernel code
├── user/ # User programs
├── lib/ # Libraries
├── inc/ # Headers
├── conf/ # Config files
├── obj/ # Build output (ignored)
make
bochsThe project includes multiple test scenarios for:
- Memory allocation
- Page replacement
- Scheduling
- Synchronization
- Do NOT commit build files (
obj/,.o,.asm) - Always clean before rebuild:
make clean
make- Bassmala Ezzat
- Fatma Al Zahraa Ahmed
- Bassant Mohamed
- Nouran Mahmoud Mohamed
- Omar Badr
- Omar Gamal
This project provides hands-on experience in building core components of an operating system from scratch, including memory management, scheduling, and process synchronization.