Flash Translation Layer Simulator
SSD flash translation layer with wear leveling and garbage collection
Virtual Memory Manager
Demand paging system with TLB simulation and page replacement
3D Printer Job Scheduler
Multi-threaded scheduler with concurrent job queue management
Thread Performance Analyzer
Benchmarking tool for thread behavior and scalability analysis
Process Management Toolkit
Command-line tool to execute, trace, and benchmark processes
Directory Watch Tool
Real-time Unix directory monitoring with responsive terminal UI
Crossword Anagram Generator
Puzzle generator with word placement algorithm and anagram clues
Conway's Game of Life
Interactive cellular automaton simulation with custom animations
Flash Translation Layer Simulator
Overview
Simulated an SSD flash translation layer (FTL) with logical-to-physical mapping, garbage collection, and wear leveling.
Key Features
- FTL Mapping: Translates logical to physical addresses
- Garbage Collection: Reclaims invalidated blocks
- Wear-Leveling: Balances write cycles across blocks
- Metrics: Tracks write amplification, erase counts, and wear distribution
Virtual Memory Manager
Overview
Implemented a virtual memory system with demand paging, page tables, and TLB simulation. Tracked page faults and optimized access time.
Key Features
- Page Table Management: Supports single- and two-level paging
- Address Translation: Converts virtual to physical addresses with TLB caching
- Statistics: Reports hit/miss rates, memory usage, and effective access time
- Replacement Policy: FIFO or LRU for page eviction
3D Printer Job Scheduler
Overview
Built a multi-threaded interactive scheduler for managing print jobs. Simulated real-world concurrency challenges with thread-safe job queues.
Key Features
- Producer-Consumer Pattern: Threads manage job arrival and execution
- Command Interface: Allows dynamic job submission and status checks
- Synchronization: Prevents race conditions via mutexes and condition vars
- Statistics: Tracks active jobs, wait times, and queue state
Screenshots
printsched> list ID Status Input File Output File Input Size Output Size Submit Time Start Time Complete Time ----------------------------------------------------------------------------------------------------------------------------------------- printsched> submit cube.gcode output.png Job 1 submitted. printsched> list ID Status Input File Output File Input Size Output Size Submit Time Start Time Complete Time ----------------------------------------------------------------------------------------------------------------------------------------- 1 PRINTING cube.gcode output.png 155692 0 20:10:38 20:10:38 N/A
printsched> submit cube.gcode output1.png Job 2 submitted. printsched> submit cube.gcode output2.png Job 3 submitted. printsched> submit cube.gcode output3.png Job 4 submitted. printsched> list ID Status Input File Output File Input Size Output Size Submit Time Start Time Complete Time ----------------------------------------------------------------------------------------------------------------------------------------- 1 COMPLETE cube.gcode output.png 155692 203124 20:10:38 20:10:38 20:10:40 2 COMPLETE cube.gcode output1.png 155692 203124 20:11:10 20:11:10 20:11:12 3 COMPLETE cube.gcode output2.png 155692 203124 20:11:13 20:11:13 20:11:14 4 PRINTING cube.gcode output3.png 155692 0 20:11:16 20:11:16 N/A Average Turnaround Time: 1.67 seconds Average Response Time : 0.00 seconds printsched> waitall All jobs completed.
Thread Performance Analyzer
Overview
Designed experiments to measure thread behavior under different workloads. Explored scheduling, parallelism, and synchronization overhead.
Key Features
- Multi-Threaded Experiments: Vary thread counts and CPU bindings
- Timing Analysis: Compare wall-clock and CPU time
- Scalability Insights: Evaluated speedup and contention
- Lightweight Code: Focused on measurement accuracy with minimal overhead
Screenshots
student11.cse.nd.edu lwardeh ~ OS project3 ./progressperf 5555555 1 100% [======================================================] size 5555555 threads 1 sum 1849684726792 time 156.99707ms student11.cse.nd.edu lwardeh ~ OS project3 ./progressperf 5555555 2 100% [======================================================] size 5555555 threads 2 sum 1849684726792 time 385.41602ms student11.cse.nd.edu lwardeh ~ OS project3 ./progressperf 5555555 3 100% [======================================================] size 5555555 threads 3 sum 1849684726792 time 434.48193ms student11.cse.nd.edu lwardeh ~ OS project3 ./progressperf 5555555 4 100% [======================================================] size 5555555 threads 4 sum 1849684726792 time 474.02222ms
student11.cse.nd.edu lwardeh ~ OS project3 ./seqperf 5555555 size 5555555 sum 1849684726792 time 13.484ms student11.cse.nd.edu lwardeh ~ OS project3 ./seqperf 5555555 size 5555555 sum 1849684726792 time 13.065ms student11.cse.nd.edu lwardeh ~ OS project3 ./seqperf 5555555 size 5555555 sum 1849684726792 time 13.034ms student11.cse.nd.edu lwardeh ~ OS project3 ./seqperf 1234567 size 1234567 sum 410729960324 time 2.880ms student11.cse.nd.edu lwardeh ~ OS project3 ./seqperf 1234567 size 1234567 sum 410729960324 time 2.897ms student11.cse.nd.edu lwardeh ~ OS project3 ./seqperf 1234567 size 1234567 sum 410729960324 time 2.957ms student11.cse.nd.edu lwardeh ~ OS project3 ./seqperf 1234567 size 1234567 sum 410729960324 time 2.869ms
student11.cse.nd.edu lwardeh ~ OS project3 ./syncperf 1234567 1 size 1234567 threads 1 sum 410729960324 time 21.89990ms student11.cse.nd.edu lwardeh ~ OS project3 ./syncperf 1234567 2 size 1234567 threads 2 sum 410729960324 time 134.96680ms student11.cse.nd.edu lwardeh ~ OS project3 ./syncperf 1234567 3 size 1234567 threads 3 sum 410729960324 time 138.56494ms student11.cse.nd.edu lwardeh ~ OS project3 ./syncperf 1234567 4 size 1234567 threads 4 sum 410729960324 time 190.76001ms
student11.cse.nd.edu lwardeh ~ OS project3 ./threadperf 5555555 1 size 5555555 threads 1 sum 1849684726792 time 16.00488ms student11.cse.nd.edu lwardeh ~ OS project3 ./threadperf 5555555 2 size 5555555 threads 2 sum 1849684726792 time 8.51392ms student11.cse.nd.edu lwardeh ~ OS project3 ./threadperf 5555555 3 size 5555555 threads 3 sum 1849684726792 time 5.86304ms student11.cse.nd.edu lwardeh ~ OS project3 ./threadperf 5555555 4 size 5555555 threads 4 sum 1849684726792 time 4.69092ms
Process Management Toolkit
Overview
Built a command-line tool to execute, trace, and benchmark processes in Unix. Demonstrated understanding of process creation, execution, and resource usage.
Key Features
- Custom Shell (psh): Executes commands with support for fork() and exec()
- Execution Tracing: Displays process exit status and signals
- Resource Measurement: Measures CPU time and wall-clock time
- Robust Handling: Catches failed commands and invalid usage gracefully
Shell in Action
myshell> list NAME SIZE TYPE MODE OWNER -------------------------------------------------------------------------------- . 157 B dir 0700 lwardeh .. 148 B dir 0700 lwardeh c2.txt 35 B file 0600 lwardeh commands.txt 61 B file 0600 lwardeh test 98 B dir 0700 lwardeh myshell_tests.txt 2232 B file 0600 lwardeh Makefile 239 B file 0600 lwardeh myshell.c 14892 B file 0600 lwardeh myshell 35880 B file 0700 lwardeh --------------------------------------------------------------------------------
myshell> chdir test myshell> list NAME SIZE TYPE MODE OWNER -------------------------------------------------------------------------------- . 98 B dir 0700 lwardeh .. 157 B dir 0700 lwardeh txt.txt 0 B file 0600 lwardeh hi 0 B file 0600 lwardeh as 0 B file 0600 lwardeh test2 18 B dir 0700 lwardeh commands.txt 61 B file 0600 lwardeh -------------------------------------------------------------------------------- myshell> pwd /escnfs/home/lwardeh/OS/project2/test
myshell> start test1 myshell: process 2612555 started myshell> start test2 myshell: process 2612565 started myshell> kill 2612555 myshell: process 2612555 has been killed
Directory Watch Tool
Overview
Developed a real-time Unix directory monitoring tool using C. Displays live file system updates with a responsive terminal UI and robust error handling.
Key Features
- Live Refresh: Auto-updates every 3 seconds
- Smart Layout: Dynamic column widths; truncates when terminal is too small
- Detailed Display: Shows file type, size, permissions, owner, and first-line content
- Edge-Case Ready: Handles symbolic links, special chars, empty files, and errors gracefully
- POSIX-Compliant: Clean system call usage and no memory leaks
Screenshots
Contents of /escnfs/home/lwardeh/OS/project1 on 21:25:24 on 06/23/2025 NAME SIZE TYPE MODE OWNER CONTENTS -------------------------------------------------------------------------------- . 123 B dir 0700 lwardeh (directory) .. 148 B dir 0700 lwardeh (directory) dirwatch.c 6188 B file 0600 lwardeh /*# example_link.txt 11 B link 0777 lwardeh --> example.txt example.txt 0 B file 0600 lwardeh (empty) Makefile 240 B file 0600 lwardeh # Configuration# dirwatch 26536 B file 0700 lwardeh #ELF### -------------------------------------------------------------------------------- total: 4 files, 2 directories, and 1 symlink
Window dimensions are too small
Contents of /escnfs/home/lwardeh/OS/project1 on 21:26:27 on 06/23/2025 NAME SIZE TYPE MODE OWNER CONTENTS -------------------------------------------------------------------------------- . 123 B dir 0700 lwardeh (directory) .. 148 B dir 0700 lwardeh (directory) dirwatch.c 6188 B file 0600 lwardeh /*# example_link.txt 11 B link 0777 lwardeh --> example.txt example.txt 0 B file 0600 lwardeh (empty) Makefile 240 B file 0600 lwardeh # Configuration# (truncated) -------------------------------------------------------------------------------- total: 3 files, 2 directories, and 1 symlink
Crossword Anagram Generator
Overview
Designed a crossword puzzle generator in C that arranges intersecting words on a 15×15 board and outputs playable anagram-based clues. Implemented full puzzle creation logic, error handling, and multiple I/O modes.
Key Features
- Word Processing: Reads up to 20 words (from user or file), filters invalid entries, and converts to uppercase
- Board Generation: Builds crossword with proper spacing and single-letter intersections using a placement algorithm
- Anagram Clues: Randomizes each valid word to produce clue hints
- Three Output Modes: Interactive input, file input, and file-to-file processing
- Puzzle Output:
- Solution View: Words placed, unused cells marked with .
- Puzzle View: Word spaces left blank, unused cells marked with #
- Clue List: Start coordinate, direction (Across/Down), and anagram
Screenshots
Enter a list of words followed by '.': notredame irish football computer engineering research boxing uganda . Solution: +---------------+ |......U........| |..C...G........| |.FOOTBALL......| |..M...N........| |..P...D..N.....| |..U...A.BOXING.| |..T.....T......| |..ENGINEERING..| |..R.....E...I..| |........D...R..| |........A...I..| |........M...S..| |.....RESEARCH..| |...............| |...............| +---------------+ Crossword Puzzle: +---------------+ |###### ########| |## ### ########| |# ###### ######| |## ### ########| |## ### ## #####| |## ### # ######| |## ##### ######| |## ##| |## ###### ### #| |######## ### #| |######## ### #| |######## ### #| |##### #| |###############| |###############| +---------------+ Clues: 8, 3 Across ENNIGNIREGE 5,10 Down ETEMRDNOA 13, 7 Across EHAERRSRC 2, 3 Down MCORETPU 3, 2 Across BAOTLLOF 1, 7 Down AAUNGD 6, 9 Across OXGIBN 9,14 Down IHRIS
Conway's Game of Life
Overview
Simulated Conway's Game of Life on a 40×40 grid with both interactive and batch modes. Practiced 2D array manipulation, command-line processing, and animation techniques in C.
Key Features
- Interactive Mode: Add/remove live cells, step through iterations, or animate continuously
- Batch Mode: Loads a predefined scene from a text file and plays it automatically
- Custom Animation: Used usleep() and system("clear") for visualizing cell evolution
- Scene Design: Created a custom scene (myscene.txt) with still lifes, oscillators, gliders, and explosive patterns
- Modular Architecture: Separated logic into multiple C files and used a Makefile for builds
Interactive Mode
Enter a followed by two integers to add a new live cell. Enter r followed by two integers to remove a live cell. Enter n to advance the simulation to the next iteration. Enter q to quit the game. Enter p to play the game continuously. Command: a 2 0 ---------------------------------------- | | | | |X | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ----------------------------------------