İşletim sistemleri, bilgisayarların donanımsal kaynaklarının yazılımlar tarafından sorunsuz bir şekilde kullanılmasını sağlamakla birlikte bu kaynakların yönetilmesinden de sorumludur. İşletim sistemleri de birer bilgisayar yazılımıdır. Fakat diğer yazılımlardan farklı olarak makineyle iletişimi en fazla olan bir yazılım çeşididir. İşletim sistemini aslında yazılımlar ve donanım birimleri arasındaki bir köprüye benzetebiliriz.
İşletim sistemleri her türlü bilgisayarlaşmış cihazın içerisinde bulunmaktadır. Bu cihazlara örnek vermek gerekirse: cep telefonları, video oyun konsolları, kişisel bilgisayarlar, tablet bilgisayarlar, her türlü sunucu, süper bilgisayarlar ve hatta en küçük boyutlarda karşımıza çıkan gömülü cihazlar.
1940’lı yıllarda daha bilgisayar kavramı daha yeni yeni ortaya çıkmaya başlamış iken en eski elektronik dijital sistemlerde herhangi bir işletim sistemi bulunmuyordu. Eski bilgisayarlara yakından baktığımızda sadece bir görevi gerçekleştirmek için tasarlanmış oldukları gözümüze çarpıyor. Bu görev genellikle hesap makinelerinin yaptığı işlemlerden sorumludur. Hesap makinelerine ihtiyacın neden gerekli olduğu zaten bilim ve teknoloji alanlarında karşımıza çıkıyor.
En basit işletim sistemi 1950’li yıllarda geliştirilmiştir. Fakat günümüzdeki işletim sistemlerinin modern ve karmaşık yapısı daha söz konusu bile değildi. Tarihler 1960’ları gösterdiğinde daha modern yapıdaki işletim sistemleri karşımıza çıkmaya başladı. Bu modern yapı bizlere donanımsal özelliklerin daha da gelişmesi ile birlikte geldi. Donanım birimleri daha kompleks bir yapıya büründüğünde runtime libraries (Çalışma zamanı kütüphaneleri), interrupts (İşletim sistemlerinde bir işlemin yapılması için sistem çağrısı gibi düşünülebilir) ve parallel processing (Paralel işleme) konuları gibi modern işletim sistemlerinin önemli parçaları artık görülmeye başlandı.
Genel amaçlar için kullanılan bilgisayarların programlanabilir bir yapıya kavuşması ile birlikte programlama süreçlerinin hızı daha da artmıştır.
1950’li yıllardaki bilgisayarların sadece bir işlevi yerine getirdiğinden bahsetmiştim. Peki bu işlemin nasıl olduğuna biraz değineyim. Programlar bilgisayara yüklenir (O zamanlarda programlar kartlar üzerine yazılıyordu.) ve bilgisayarın yüklenen programı herhangi bir çökme olana kadar çalıştırması beklenirdi.
Modern işletim sistemlerinin temellerinin atılmasının ardından bile hala yeni geliştirilen işletim sistemleri sadece bir program çalıştırabiliyordu. Fakat Atlas Supervisor ile birlikte modern işletim sistemlerinin mimarisine bir iyileştirme yapıldı. Atlas Supervisor 1962 yılında ilk modern işletim sistemi olarak düşünülerek ortaya atıldı. Brinch Hansen (Danimarkalı, Amerikan, bilgisayar bilimci; işletim sistemleri, eş zamanlı programlama, paralel ve dağıtılmış işletim sistemleri üzerinde çalışmıştır.), Atlas Supervisor’ı “the most significant breakthrough in the history of operating systems” (İşletim sistemleri tarihindeki en etkili kırılma noktası) olarak tanımlamıştır.
(Per Brinch Hansen) Fotograf kaynak: Wikipedi
1. Single-tasking and multitasking (Tek görevli ve çok görevli) İşletim Sistemleri
Single-tasking (Tek görevli) işletim sistemleri sadece bir işlevi yerine getirebiliyor iken, multitasking (Çok görevli) işletim sistemleri ise birden fazla işlevi eş zamanlı (Concurrent) olarak yerine getirebilmektedir. Eş zamanlı çalışmanın gerçekleştirebilmesi için time-sharing (Zaman paylaşımı) adı ile bilinen bir algoritma kullanılır. Bu algoritmanın çalışma prensibine bakacak olursak işlemci zamanının çoklu işlemlere bölündüğünü görüyoruz.
Multitasking (Çok görevli) karakteristik olarak ikiye ayrılır: preemptive (Sonsuz öncelikli) ve co-operative (Birlikte çalışan).
Preemptive Multitasking
İşletim sistemlerinin CPU zamanını slotlar şeklinde her programa bölmesi ile gerçekleşir.
Unix tabanlı işletim sistemlerinden Solaris ve Linux bu yöntemi kullanır. Ayrıca Unix tabanlı olmayan AmigaOS da bu sistemi kullanmaktadır.
Co-operative Multitasking
Her işlem referans alınarak zaman diğer amaçlar için ayrılır. 16-bit Microsoft Windows’a bir bakış attığımızda karşımıza bu yöntem çıkar. Fakat 32-bit mimari üzerine inşa edilmiş Windows NT ve Win9x çok görevlilik sistemlerinden preemptive (Sonsuz öncelikli) olanını kullanır.
2. Tek Kullanıcılı ve Çok Kullanıcılı İşletim Sistemleri
Çok kullanıcılı işletim sistemleri adından dolayı kafa karışıklığına sebebiyet verebilir. Çok kullanıcılı denildiği zaman aklımıza evlerimizde kullandığımız bilgisayarlarımızdaki yeni kullanıcı oluşturma özelliği gelebilir. Fakat aslında iki durum birbirinden çok farklıdır. Çoklu kullanıcı desteği veren işletim sistemleri donanımın aynı anda sistemde bulunan kullanıcılar tarafından eşit bir şekilde kullanılmasını sağlamak üzerine tasarlanmıştır.
Tek kullanıcılı işletim sistemlerine gelecek olursak aslında işletim sisteminin anlık olarak sadece tek bir kullanıcının istekleri üzerine çalıştığını görürüz. Bu tarz işletim sistemlerine örnek vermek gerekirse tabii ki kişisel bilgisayarlarımızda kullandıklarımızı düşünebiliriz.
3. Distributed (Dağıtılmış) İşletim Sistemleri
Dağıtılmış işletim sistemleri bir ağ üzerinde birbiriyle bağlanmış bilgisayarların yönetilmesinden sorumludur. Dağıtılmış işletim sistemlerinin en büyük gereksinim noktası işlem hacminin arttığı sektörlerde (Bilim, matematik, arama motorları vs.) karşımıza çıkıyor.
4. Templated (Şablon) İşletim Sistemleri
Misafir işletim sistemleri için tek bir sanal makine imajı oluşturur. Bu teknik genellikle sanallaştırma ve bulut bilişiminde geniş sunucu depolarında kullanılır.
5. Embedded (Gömülü) Cihazlar İçin İşletim Sistemleri
Bu tarz işletim sistemleri gömülü cihaz olarak adlandırılan küçük boyutlardaki cihazlar için tasarlanmıştır. Limitli kaynakları daha etkili kullanmak için tasarlanmış ve geliştirilmiştir. Windows CE ve Minix 3 bu işlevdeki işletim sistemlerine örnek olarak verilebilir.
6. Real-time (Gerçek zamanlı) İşletim Sistemleri
Gerçek zamanlı işletim sistemleri aksiyonları ya da verileri belirli bir zamanda işleme alma üzerine tasarlanmıştır. Gerçek zamanlı işletim sistemleri hem single-tasking (Tek görevli) hem de multitasking (Çoklu görevli) olarak tasarlanabilir.
Windows, Linux, Android (Linux tabanlıdır.) ve macOS en yaygın işletim sistemlerinden bazılarıdır..