Proje Detayları
İşletim sistemi çekirdeği (kernel) ile kullanıcı arasındaki haberleşmeyi sağlayan komut satırı arayüzünün (Shell) tüm iç mekanizmalarını sıfırdan implemente etmek amacıyla geliştirilmiş çok katmanlı bir sistem programlama projesidir. Proje; Lexer, Parser ve Executor olmak üzere üç ana alt sistemden oluşmaktadır. İlk aşamada, kullanıcının girdiği komut satırı string manipülasyonları ile token'lara ayrıştırılmış, sözdizimi hataları (syntax validation) denetlenmiş ve soyut sözdizimi ağacı (AST) benzeri modüler veri yapılarına aktarılmıştır.
Yürütücü (Executor) katmanında, sistem çağrıları (system calls) kullanılarak fork mimarisiyle alt süreçler (child processes) oluşturulmuş ve execve ile harici UNIX komutları asenkron olarak çalıştırılmıştır. Projenin en büyük mühendislik zorluklarından biri olan çoklu boru hatları (multi-pipelines - |), pipe ve dup2 sistem çağrıları aracılığıyla süreçler arası girdi/çıktı akışları (I/O Redirections - <, >, >>, << heredoc) manipüle edilerek optimize bir şekilde kurgulanmıştır. Ek olarak, kabuğun kararlılığını korumak adına SIGINT (Ctrl+C), SIGQUIT (Ctrl+\) ve EOF (Ctrl+D) asenkron sinyalleri, terminal durumları (termios) optimize edilerek yakalanmıştır. cd, echo, env, export, unset, pwd ve exit gibi yerleşik (built-in) komutlar, ortam değişkenleri (environment variables) tablosu dinamik heap yönetimiyle taklit edilerek sıfırdan yazılmıştır. Proje, süreç (process) takipleri ve bellek sızıntıları (memory leaks) açısından Valgrind ile sıkı mülakat standartlarında test edilmiştir.