İşletim Sistemi Nedir?
İşletim sistemi (Operating System, OS) için, bir bilgisayarın kaynaklarının programlar arasında paylaştırılmasından ve bu programların çalıştırılmasından sorumlu "maestro" olarak bahsedebiliriz.
Bilgisayarınızda var olan çalıştırılabilir kod setleri birer programdır. Gerekli etkileşimleri sağlarsanız - çift tıklama, komut satırı arayüzü (CLI) üzerinden girdiler ya da zamanlanmış görevler gibi - bu programları çalıştırırsınız. Programlar çalıştırdıklarında birer işleme (süreç, process) dönüşürler. Diyelim ki bir video görüntüleme ve/veya müzik dinleme uygulaması kurdunuz. Depolama biriminizde bir yer tutuyor. Sonrasında çalıştırdınız, bir process oldu. Bu process şunları yapabilir:
- Diskinizden veri okuyabilir. Bunu yapmazsa zaten ne videoları ekranınızda gösterebilir, ne de sesleri çalabilir.
- Kendi bileşenlerinin ve okuduğu verinin bir kısmını ya da tamamını RAM'e yazabilir. Bunu yapamazsa zaten çalışamaz. İsmini John von Neumann'dan alan "von Neumann" mimarisini inceleyiniz.
- Veriyi işlemek için CPU'nuzu kullanabilir.
- Görüntüyü ekrana verebilmek için GPU'nuzu kullanabilir.
- Medya bilgilerini Internet üzerinden çekmek ya da kendi güncellemelerini denetlemek için ağ kartlarınızı kullanabilir.
- Sesi dışarıya vermek için ses kartınızı kullanabilir.
Örnekleri artırabiliriz. Bu sadece bir video izlemek için yaşadığımız süreç. Günümüz bilgisayarlarında bir video klibi izlerken oyun oynamak, bu sırada oyunun görüntüsünü ve seslerini kaydetmek, aynı zamanda Internet üzerinden hem oyun görüntüsü hem de web cam'den alınan görüntüyü yayınlamak, tüm bunlar olurken de arkaplanda bazı uygulamaları güncellemek ya da bazı dokümanları indirmek sıradan bir etkinlik olarak görülüyor.
Hatırlarsanız, işletim sisteminin görevi olarak "kaynakların programlar arasında paylaştırılması" demiştik. Sanırım şimdi daha anlamlı olmuştur.
İşletim Sistemleri
İşletim sistemine örnek olarak GNU/Linux, AmigaOS, Android, macOS, Windows, iOS verilebilir. Bu işletim sistemleri; her ne kadar farklı üreticilerden çıkmış ve farklı amaçlar için tasarlanmış olsalar da, hepsinin ortak bir amacı vardır: Kullanıcıların, bilgisayarı kullanabilmesini sağlamak.
Şimdi kullandığınız herhangi bir yazılımı düşünün. Bir dosyayı hazırladınız ve kaydetmek istediniz. Kaydetme başarısız oldu. Çünkü diskiniz dolu. Ne kadar hoş bir yaklaşım. Bunu yapmak yerine rastgele bazı dosyaları silip kendine yer açabilirdi değil mi?
Ya da herhangi bir program, kendi hâlinde çok iyi çalışıyorken yanında farklı programlar çalıştırıldığında biraz zorlanmaya başlayabilir. "Kasıyor" değil mi? Halbuki madem bu kaynakları kullanabiliyor, neden hepsini kendine ayırmıyor?
Günümüzde geliştirilen programların donanıma doğrudan müdahale etmesi söz konusu değildir. Sistem yazılımlarını, sürücüleri vs. ayrı tutuyorum tabii ki. Sıradan bir kullanıcı olarak açıp çalıştırdığımız, "uygulama yazılımı" olarak anılan programlardan bahsediyorum. Bu "donanıma müdahale" olayı, bizler için sıradan bir olay olsaydı, Chernobyl / CIH gibi yazılımların önünü alamazdık herhalde. Eğer doğrudan müdahale etmemiz gerekseydi de, her donanıma ayrı yazılım geliştirmek zorunda kalacaktık. İşte işletim sistemi burada devreye giriyor.
Donanım vs. İşletim Sistemi
Herhangi bir yazılımı indirmek istediğinizde, karşınıza 2 temel ayrım çıkar. 32-bit & 64-bit (ve hatta bazen de ARM) ile işletim sistemi tipi. Yazılımları, kendi CPU mimarinize ve kendi işletim sisteminize uygun olarak indirir veya satın alırsınız.
Benzer durumu, oyun konsollarında da yaşarız. Siz bir Xbox ya da PlayStation oyunu alırsınız. Ancak Xbox için aldığınız oyunu, PlayStation'da oynayamazsınız. Bazı durumlarda size sunulan "geriye uyumluluk" seçenekleri sayesinde - örneğin - bir PlayStation 4 oyununu, PlayStation 5 üzerinde de çalıştırabilirsiniz. Fakat tersini yapamazsınız.
İşletim sistemi, donanım ile yazılımlar arasında bir katman olarak düşünülebilir. Bilgisayarınızda koşan yazılımlar, donanım ile etkileşime geçmek istediklerinde bunu işletim sisteminden talep ederler. Ve eğer talep karşılanabilir bir durumdaysa, yerine getirilebilir. Hani bazen aynı anda 1-2 işi yürütmeye çalışırken izlediğiniz videonun sesi bir titrer, sonra toparlanır. Ya da bir programı çalıştırırken bazen her zamankinden daha yavaş açılır ya. Alakası var mı dersiniz?
Kabuk (Shell)
Yukarıdaki katmanlı yapıda, işletim sistemi ile kullanıcı iletişimi için olmazsa olmaz bir araca ihtiyaç duyuluyor: Kabuk. İşletim sistemini; merkezinde bir çekirdek, etrafında sürücüler ve sistem yazılımları, onun etrafında kullanıcı yazılımları, devamında ise kabuk gibi düşünebilirsiniz. Kabuk, kullanıcı ile işletim sistemi arasındaki iletişimi sağlar. Kitabın ilerleyen bölümlerinde - aslında kitap boyunca da - bu konuya değineceğiz.
İşletim Sistemini Özel Kılan Nedir?
İşletim sistemini diğer yazılımlardan ayıran bazı özellikleri şu şekilde sıralayabiliriz. Burada yazacağım özellikler, işletim sisteminin yalnızca bazı parçalarına ait olsa da (kernel gibi), genele baktığımızda işletim sisteminin özelliği diyebiliriz:
- Donanıma müdahale eder.
- Bilgisayarın açılışından itibaren çalışmaya başlar. Bilgisayar kapanıncaya kadar çalışmaya devam eder (Bu tehlikeli bir cümle, bir bilgisayarın nasıl açıldığı ve kapandığı apayrı bir konu. Yeri ve zamanı geldiğinde çalışmaya başlar desek daha doğru olur.). Eğer çalışmaya devam edemezse, bilgisayarınızı kullanamaz hâle gelirsiniz.
- Donanımın büyük çoğunluğunu, kendini korumak için kullanır. Bilgisayarınızı kullanırken, şayet işletim sisteminin öncelikli bir işi varsa, önce bunu yapar. Size yanıt vermez. Başka bir deyişle, sistem kalp krizi geçiriyorken kolunu kaşımakla vakit harcamaz.
- Kullanıcıdan ve diğer programlardan gelen istekleri alır ve uygun gördüğü takdirde işler. Yani aslında siz sadece işletim sistemini kullanıyorsunuz. Kalan bütün uygulamaları işletim sistemi kendisi kullanıyor.
- İçerdiği - ya da sonradan eklenebilen - sürücüler sayesinde donanımınızı tanır ve kullanılabilir hâle getirir. Örneğin standart bir Android işletim sistemini alıp kişisel bilgisayarınıza kuramazsınız. Ya da kişisel bilgisayarınıza kurabildiğiniz Windows'u, Nokia 3310'a kuramazsınız. "Standart" kelimesini tekrar vurgulamak istiyorum.
İşletim sisteminin görevleri konusunda da şu örnekleri verebiliriz:
- Kullanıcı yazılımlarının çalıştırılması.
- Yazılımlar arasında CPU, RAM gibi kaynakların paylaştırılması.
- Yazılımların önceliklerinin ve çalıştırılma sıralarının belirlenmesi.
- Hard disk, SSD gibi ortamlarda saklanan verinin yönetilmesi.
- Çok çekirdekli, çok thread'li sistemlerde iş paylaşımının yapılması.
- Klavye, fare, mikrofon, hoparlör, ekran gibi donanımlar üzerinden gelen girdilerin ya da bu donanımlar sayesinde verilen çıktıların yönetilmesi.
İşletim Sistemi
İşletim sistemi konusu, bu şekilde birkaç satır ile ifade edilebilecek bir konu değildir. Üzerinde yıllarca çalışılabilecek bir konudur. Bu nedenle, şayet işletim sistemleri ile ilgili detaylı bir bilgi edinmek istiyorsanız, mutlaka ve mutlaka bir ya da birkaç işletim sistemi kitabı temin edip onlar üzerinden çalışmaya başlamalısınız.


