Sistem Programlamaya Giriş
Sistem programlama kavramı temel olarak, uygulama geliştiricinin sistemle daha alt seviye bir katman üzerinden iletişim kurduğu dolayısıyla geliştirmelerin sisteme daha yakın bir noktada yapıldığı yazılım geliştirme modelini tarif eder.
Bununla birlikte herkesin bu kavramı ilk duyduğunda kafasında canlanan senaryo az çok farklılık gösterebilir ve muhtemelen bunların tümü de doğrudur.
2000 yılında üniversitede 3. sınıfa devam ederken, yeni dönemdeki ders seçeneklerinin birinin Sistem Programlama olduğunu gördüğümde çok sevindiğimi hatırlıyorum. O zamanlar da Linux ile yoğun biçimde ilgileniyor olduğumdan, şimdi bu kitabın konusu olan başlıkların işleneceğini düşünerek hemen bu dersi almıştım.
Fakat atladığım bir nokta vardı. Dersi veren hocamız emekliliğine çok az kalmış, yurt dışında yıllarca mainframe'ler üzerinde çalışmış, çok zaman delikli kartlarla (punched card) uygulama geliştirmiş, deneyimli biriydi. Farklı bir dersini de almıştım ve ders sırasında o eski punched card günlerinden örnekler verirken gözlerindeki parlamayı görmüş; vaktiyle nelerle uğraşıyorduk şimdi bu genç tıfıllara ne anlatacağız edasını sezmiştim.
Birikimli birinden mutlaka öğrenilecek çok şey vardır. Severek takip ettiğim nadir derslerdendi. Tahmin edilebileceği üzere sistem programlama dersinin içeriği, düşündüğümden oldukça farklı çıktı. Kendimizi bir anda IBM'in 1964 yılında piyasaya sürdüğü System/360 mainframe ailesi üzerinde makine dili çalışırken bulduk.
IBM System/360 Model 91 |
Elbette bu da sistem programlama kapsamındaydı. Fakat biz bu kitapta bunlardan bahsetmeyeceğiz. Bizim bahsedeceğimiz konulara da belki bundan 50 yıl sonra punched card muamelesi yapılıyor olabilir belki ama günümüzde oldukça önemliler ve dikkatle üzerlerine gidilmesi gerekmektedir.
Sistem programlamadan günümüzde pratik olarak, yüksek seviyeli dillerde uygulama geliştirmek yerine (Java, Ruby vb.) daha alt seviye dillerde (C vb.), işletim sistemi çekirdeği ile standart C kitaplığındaki fonksiyonlar ve sistem çağrıları yoluyla iletişim kurulmasını, nadiren de olsa daha spesifik ve performans gerektiren konular için işin içerisine biraz da platform spesifik makine dili kodlarının karıştırıldığı programlama metodunu algılıyoruz.
Sistem programlama eforunun daha alt seviyeli dillerde yapılıyor olması, bu konuda kazanılan deneyimlerin yüksek seviyeli dillerde işe yaramayacağı anlamına gelmez. Aksine pekiştirici bir etki yaratır. Bununla birlikte yüksek seviyeli bir dille çalışırken sistem programlama kısımları bizim için çoğunlukla görünmez veya zor görünür olur.
Anlatılacak konuların bir kısmı Linux platformuna spesifik olsa da büyük çoğunluğu tüm UNIX türevlerinde ve kısmen diğer platformlarda da geçerlidir.
Konuların daha iyi anlaşılması için öncelikle Unix/Linux platformlarının zaman içerisinde gelişimine, geliştirilen standartlara ve genel olarak sistem çağrıları konularına değineceğiz.