İşletim Sistemi (Operating System) nedir?

Serimizin önceki yazılarında, bir backend geliştiricisi adayı olarak geliştirme yapacağımız web ortamını tanımaya ve nasıl çalıştığını anlamaya yönelmiştik. Web’in nasıl çalıştığını anlatırken web sunucularından söz etmiştik. Bir backend geliştiricisi olarak zamanımızın büyük kısmını sunucu üstünde çalışan uygulamalar üzerinde harcayacağız. Biliyoruz ki sunucular aslında evimizdeki bilgisayarlardan çok da farklı değiller, dolayısıyla serimizin bu anından itibaren sunucuları, yani bilgisayarları nasıl programlayacağımızı, nasıl web üzerinde hizmet veren bir servis haline getireceğimizi irdeleceğiz.

Peki başlığımız neden işletim sistemi? Madem ki bir bilgisayarı web üzerinde çalışan bir servis haline getirmeye çalışıyoruz, öncelikle en temelden bir yazılımın bir bilgisayar üstünde nasıl çalıştığını anlamamız gerekiyor.

İşletim Sistemi (Operating System) nedir?#

İşletim sistemi en temel anlamıyla, bilgisayarınızın kaynaklarını(fiziksel donanımını) yöneterek uygulamalarınızı zahmetsizce çalıştırmaya yarayan bir yazılımdır. Dolayısıyla kullanıcı ile bilgisayar donanımı arasında bir arayüz görevi görür. Bilgisayar üzerinde yapmak istediğiniz işlemleri, donanımsal ayrıntıları ve problemleri düşünmeden yapmanızı sağlar.

İşletim sistemlerinin sahip olduğu bazı özelliklere göre çeşitli türleri bulunur. Örneğin bazı işletim sistemleri sadece tek bir kullanıcıyla çalışabilirken, bazıları bir çok kullanıcının aynı anda aynı bilgisayarı kullanmasına izin verir. Bazı işletim sistemleri saniyelerin, hatta saliselerin çok önemli olduğu platformlarda, örneğin uçuş sistemlerinde veya askeri yazılımlarda çok kısa sürede cevap vermesi için özellikle tasarlanmış olabilir. Henüz bu türleri ayrıntılı bir şekilde incelememize gerek yok, ama genel olarak bilgi edinmek isterseniz şuraya bakabilirsiniz.

İşletim sistemi fonksiyonları nelerdir?#

Bizim için önemli olan kısım, işletim sisteminin hangi görevleri üstlendiği, hangi problemleri çözdüğü ve bize nasıl bir avantaj sağladığıdır.

İşlem Yönetimi (Process Management)#

Türkçe çevirisini kullandığımızda kelime karşılığı tam oturmasa da yazımızda işlem (process) deyince çalıştırılmaya hazır bir programın, çalışma sürecini düşünebilirsiniz.

İşletim sistemi, bilgisayar açıldığı andan itibaren hem kendi görevlerini yerine getirebilmek için kendi uygulamalarını hem de sizin çalıştırmak istediğiniz uygulamaları koordine eder. Bir evdeki tüm çocuklar evdeki değerli bir oyuncak ile aynı anda oynamak istediğinde karmaşa olur ve anneler her bir çocuğa sırasıyla o oyuncakla oynamasına izin verdiğinde problem çözülür. Bir çocuk o oyuncakla oynarken, diğerleri sıranın kendisine gelmesini bekler. Çünkü anne öyle telkin etmiştir. İşte annenin burda yaptığı aslında bir süreç yönetimidir. Bilgisayar mimarisi konularına çok detaylı bir şekilde değinmeyeceğiz ancak, bir uygulamanın da oyuncakları çok değerli olan işlemci (CPU) ve hafızadır(memory). İşletim sistemi ise bu değerli olan işlemci ve hafızayı sırasıyla hangi uygulamanın kullanabileceğini belirler ve bu süreci yönetir.

Hafıza Yönetimi (Memory Management)#

Önceki başlıkta belirttiğimiz gibi bilgisayar kaynaklarından en önemlileri işlemci(CPU) ve hafızadır(memory). Günümüz bilgisayalarında bu kaynaklar eskiye nazaran çok daha geniş olduğu için bilgisayar aynı anda birçok uygulamayı çalıştırabiliyor. İşletim sisteminin bu anlamda işlemin(process’in) hafızanın hangi bölgesine erişebileceğini, ne kadarlık bir hafıza kullanabileceğini yönetmesine hafıza yönetimi diyoruz.

İkincil Hafıza Yönetimi (Secondary-Storage Management)#

İşlemci ve hafızanın yanında bir başka kaynak olarak ikincil hafızaları (secondary storage, harddisk) söyleyebiliriz. Bu hafızalar aslında bilgisayarın kapansa bile tekrar açıldığında saklı kalan sizin dosyalarınızı içinde tutan kaynaklardır. İşletim sistemi aynı şekilde, bu dosyalara erişimden, düzenlenmesinden ve korunmasından sorumludur.

Sürücü Yönetimi (Device Management)#

Bilgisayarın olmazsa olmaz kaynaklarının yanı sıra, bilgisayarı daha efektif kullanabilmek için dışardan dahil ettiğimiz bazı cihazlarımız bulunuyor. Bunlar ekran kartları, ses kartları, ağ cihazları, klavye, mouse, hoparlör, kamera gibi birçok cihaz olabilir. İşte bu cihazların da uygulamalarımız tarafından yönetilebilmesi için, işletim sistemi yine bize bir arayüz sağlıyor.

Bunların yanında, çok kullanıcılı sistemlerde kullanıcı kontrolleri, hangi kullanıcının hangi işlemleri ne kadar süre çalıştırdığı, ne zaman giriş yapıldığı ve benzeri konularda işletim sisteminin sorumluluğunda olabilir. Yukarda belirttiklerimiz bizim için önemli olan ve hemen hemen işletim sistemlerinin temel olarak desteklediği fonksiyonlardır.

011819_0753_OperatingSy4.webp

Görsel kaynak

Kernel nedir?#

İşletim sistemi söz konusu olduğunda, kernel konusuna değinmezsek olmaz. İşletim sistemini tanımlarken donanım ile yazılım arasında duran ve işlemlerimizi donanım yönetimini düşünmeden yapmamızı sağlayan yazılım olarak tanımlamıştık. Günümüz işletim sistemlerini düşündüğümüzde sadece donanımı yönetmekten öte, içerisinde son kullanıcılar (bizler) için bir çok uygulamayı içinde barındırıyor. Ancak “kernel” dediğimiz zaman tam anlamıyla işletim sisteminin çekirdeği diyebileceğimiz, işletim sisteminin asıl görevi olan donanım yönetimi kısmından söz ettiğimizi düşünebilirsiniz.

Linux işletim sistemidir veya değildir diye uzunca bir zamandır süren bir tartışma söz konusu. Linux, Linus Torvalds tarafından geliştirmeye başlanan bir işletim sistemi çekirdeğidir. Ancak bu çekirdek tek başına kullanılabilir bir yapı değildir. Bu çekirdek daha sonradan Richard Stallman’ın öncü olduğu GNU hareketiyle birleştirilerek GNU/Linux işletim sistemi oluşturulmuştur. Ancak insanlar bu GNU/Linux demek yerine sadece Linux demeye devam ediyorlar. Bugün bir çok işletim sisteminin temelinde(örneğin Android OS) bu hareket neticesinde oluşturulan GNU/Linux işletim sistemi bulunuyor. Daha sonradan Debian-Linux, SUSE-Linux gibi bir çok farklı işletim sistemi ortaya çıktığı için, şahsen ben de Linux’un bir işletim sistemi çekirdeğini ifade ettiğini ve Linux dağıtımların bu çekirdeği kullanan işletim sistemleri olduğunu düşünüyorum.

Kabul (Shell) nedir?#

Kabuk, aslında adından da anlaşılacağı üzere işletim sistemini kullanabilmemiz için bize sunduğu alet çantası olarak düşünebilirsiniz. Kabuk sayesinde işlemlerimizi ve dosyalarımızı yönetebilir, diğer programlara veya kernel’e komutlar gönderebiliriz. Kabuk onu kullanacak kişiler için bir programlama dili içerir. Örneğin Linux çekirdeğinin kabuğu “bash” programlama dilini yorumlar ve çalıştırır. Kabuk ile bu programlama dilini kullanarak anlaşabilir, kabuğun üstüne uygulamalar geliştirebiliriz.

Terminal nedir?#

Terminal ise işletim sistemi kabuğunu kullanabilmemiz için yazılan, genelde filmlerin hacker sahnelerinde siyah bir pencere içerisinde yeşil yazıların aktığı, uygulamalardır. Büyük sunucuları düşündüğünüzde veya eski fotoğraflardan da görebileceğiniz, makinelerin yanlarında ufak bir klavye ve ekran bulunur ve içerisinde de sunucuyu yönetmek için komutlar gönderilebilen bir terminal(uçbirim) uygulaması çalışır. Netice itibariyle terminal kullanıcıdan aldığı komutları işletim sistemi kabuğuna aktaran bir yazılımdır.

https://media.giphy.com/media/iGpHt2H22k1orjgT9b/giphy.gif

Sonuç#

İşletim sistemleri bizim ilerde yazacağımız uygulamalara tabiri caizse annelik yapacağı için, uygulamamızın çalışırken geçirdiği süreçleri anlamak açısından önem kazanıyor. Bizim buradaki amacımız kavramları oturtmak ve işletim sisteminin nasıl çalıştığına dair (olağanüstü yüzeysel bir şekilde) bilgi sahibi olmak.

Bir sonraki yazımızda, bir terminalde deneyebileceğimiz basit komutları ve nasıl kullanıldıklarını göreceğiz.

Kaynaklar#