OS101 - İşletim Sistemleri Teknik Rehberi

GeceBekcisi

Asistan
Katılım
7 Ekim 2010
Mesajlar
210
Reaksiyon puanı
9
Puanları
0
Symbian işletim sistemi ile ilgili paylaşımlara başlamadan önce işletim sistemlerinin bazı temellerini anlatarak karanlıkta kalan detayları biraz aydınlatmak istiyorum, böylece yazılımsal bir çok kavramın birbirine karıştırılmasının önüne geçmeyi hedefliyorum.

Şu anda anlatacaklarımın hepsi kafamda bir çorba halinde yer aldığından anlatımım biraz karışık olabilir, bunun için yeterince açık olmadığını düşündüğünüz kısımları gösterip üzerinde tartışarak anlatımımı basitleştirmemi sağlayabilirsiniz :)

Bildiğiniz gibi bir ev sadece tuğlalardan oluşmaz, temel / kapı / pencere / kolon / kiriş / çatı vs gibi bir çok temel yapıtaşından oluşur; kullandığımız karmaşık cihazlar da bu açıdan bakıldığında evlerden farklı değildir, bir çok parçaları vardır. En yukarıdan (bize en çok görünen kısımdan) en aşağıya (bize en az görünen kısma) doğru sıralarsak:

Kullanıcı uygulamaları & Arayüz uygulamaları » İşletim sistemi servisleri » İşletim sistemi çekirdeği (Kernel) & Donanım sürücüleri » Donanımlar

şeklinde yer alırlar. Bir örnek olarak MeeGo işletim sisteminin mimari diyagramını inceleyelim:

MeeGo-Arch.png


Turkuaz kısım kullanıcı ve arayüz uygulamalarını
Turuncu kısım işletim sistemi servislerini
Yeşil kısım işletim sisteminin çekirdeğini (kernelini)
Gri kısım donanım sürücülerini

temsil ediyor. Şimdi işleyişi açıklamak için bir örnek verelim. Diyelim ki az önce çektiğiniz fotoğrafı görmek istiyorsunuz ve elinizdeki cihazda yüklü olan görüntü gösterme uygulamasını açtınız. (Not: Açtığınız uygulama sizin sonradan yüklediğiniz bir uygulama ise "kullanıcı uygulaması" sınıfına, işletim sistemiyle birlikte gelen bir uygulama ise "arayüz uygulaması" sınıfına girer). Bundan sonraki işlemler aşağı yukarı şu şekilde yürür:

(Not: > işareti servisten/kernelden dışarıya doğru giden komutları, » işareti servis/kernel içerisinde yönlendirilen/halledilen komutları simgeler)


  1. Görüntü gösterme uygulaması öncelikle kendisini ekranda gösterebilmek, açılması için ihtiyacı olan dosyaları belleğe yükleyebilmek ve benzeri diğer ihtiyaçlarını gidermek için gerekli komutları "işletim sistemi servisleri"ne iletir. Örnek:
    1. Uygulama > Arayüz servisi: Ekranın tamamını kaplayan içi siyah bir pencere çiz
    2. Uygulama > Arayüz servisi: Ortasına da adresi şu olan resmi oturt

  2. İşletim sistemi servisleri aldığı komutları işleyebilmek için onları mantıksal küçük parçalara ayırır ve her parçayı onu işleyebilecek (veriler üzerinde gerekli işlemleri yürütüp çıkan sonuçları yorumlayacak) servise (veya kendi içerisinde tanımlı olan fonksiyona) iletir. Örnek:
    1. Arayüz servisi > Donanım servisi: Ekranın ölçüleri lazım
    2. Arayüz servisi » Pencere fonksiyonu: Bu boyutta bir pencere çizmeli ve içini siyaha boyamalıyım
    3. Arayüz servisi > Dosya servisi: Adresi de bu olan resmi bulup bana getir
    4. Arayüz servisi > Görüntüleme servisi: Bu resim şu boyuttan büyük, resmi uyacak şekilde küçült
    5. Arayüz servisi » Pencere fonksiyonu: Bu küçülmüş resmi pencerenin ortasına oturtmalıyım

  3. Servisler (ve fonksiyonlar) kendilerine iletilen veriler üzerinde yapılması gereken işlemleri yürütmesi için gerekirse (o işlemi yapmayı kendileri bilmiyorsa) işletim sistemi çekirdeğine (kernel) başvurur. Örnek:
    1. Donanım servisi > Kernel: Ekranın ölçüleri lazım
    2. Dosya servisi > Kernel: Bana şu dosya lazım
    3. Görüntüleme servisi > Kernel: Bana şu hesapların sonuçları lazım

  4. Donanımlar bol miktarda kasa sahip ama zeka düşeyi düşük yaratıklar gibidir, bir işi yaptırmak için onun anlayacağı dilde (makine dili) konuşmak gerekir. Kernel burada devreye girerek işlemcinin ona gelen komutları gereken dilde ve sırayla anlatarak donanımların işlemesini sağlar, cevapları da soruyu soran servislere yollar. Kernel gereken dili bilmiyor olabilir, bu durumda sürücüler devreye girer.
    1. Kernel > Grafik sürücüsü: Ekranın ölçüleri lazım
    2. Kernel > Disk sürücüsü: Şu dosyanın okunması lazım
    3. Disk sürücüsü » Disk: Şu dosyayı diskten oku
    4. Kernel » İşlemci: Şu toplamları yap, sonra şunlarla çarp, bunlara böl, karekökünü al

  5. Gereken tüm cevaplar alındıktan sonra işlem tersine döner, kernel aldığı cevapları temel servislere iletir. Onlar aldıkları cevapların üzerinde yapacakları işlemi yaparlar ve sonucu arayüz servisine iletirler. Arayüz servisi de sağdan soldan aldığı cevapları birleştirir ve uygulamanın komutlarını işlemeye başlar. Sonuca ulaştığında uygulamanın istekleri yerine getirilmiş olur.

Yukarıda basitçe anlattığım işleyiş doğal olarak her platformda bazı değişiklikler gösterir. Bazı işletim sistemlerinin kerneli ayrı ayrı parçalar arasındaki iletişimi azaltıp işlemi hızlandırmak için bir çok sürücüyü ve servisi kendi içinde barındırırken (monolithic kernel), bazı işletim sistemlerinin kernelleri ise kernelin kendi başına hızını arttırmak için minimum miktarda sürücü ve servis barındırır (microkernel), bazılarıyla bu ikisinin arasında bir noktada yer alır (hybrid kernel). Bu anlattıklarımı gözünüzde canlandırmak için http://upload.wikimedia.org/wikipedia/commons/d/d0/OS-structure2.svg adresindeki diyagramı incelemenizi öneririm.

Bu değişik kernel tiplerinin her birinin kendilerine göre hem avantajları hem de dezavantajları mevcut, bu nedenle kullanım alanları da farklı. Bir çoğunuzun duyduğu Linux aslında bir işletim sistemi değil yalnızca monolithic bir kerneldir, işletim sisteminin gerisi bu kernel etrafında örülmüş servislerden ve bu kernele göre yazılmış uygulamalardan oluşur. Bu servis+uygulama paketlerinin en bilinenleri GNOME ile KDE'dir. Bir diğer örnek ise Symbian'dır, kendisi EKA2 microkerneli ve onun etrafında örülmüş servislerden oluşur, S60 ile UIQ ise (GNOME ile KDE gibi) Symbian üzerindeki arayüz uygulamaları ve platforma özel servisler topluluğudur.

Ve şimdi son bir nokta: Monolithic Linux kerneli devasa bir kernel olduğundan her türlü talebe hızlı cevap verebilmek için microkernel'lere kıyasla çok daha fazla işlemci gücü ve bellek gerektirir; bu nedenle cep telefonları gibi düşük sistem kaynaklarına sahip cihazlarda Linux kerneli kullanılacaksa kırpılmış bir sürümü kullanılır ve buna rağmen hem işletim sistemi fonksiyonlarını hem de GSM gibi radyo fonksiyonlarını aynı anda işleyebilmek için iki ayrı işlemciye ihtiyaç duyar. Buna en güzel örnek Android'dir, kendisi Linux kerneli temelli olmasına rağmen kırpılmış ve özelleştirilmiş kerneli artık Linux kerneli kabul edilmemektedir, daha çok bir Linux türevi olarak görülmektedir.

Fakat microkerneller çok daha ufak olduklarından her türlü talebe monolithic kernellerden daha hızlı cevap verebilirler ve bu nedenle düşük sistem kaynakları altında da yüksek performansla çalışabilirler. Buna en güzel örnek ise Symbian'ın EKA2 kernelidir, öyle verimlidir ki hem işletim sistemini hem de radyo fonksiyonlarını tek işlemci ile yürütebilir ve bu sırada monolithic kernellerde olduğu gibi taleplere cevap verme hızında bir yavaşlama görülmez, bu nedenle en düşük işlemci hızlarında bile kullanılabilir hızlarda çalışabilir.

Şimdilik yazımı burada sonlandırıyorum, gerekli eklemeleri ve düzenlemeleri aşağıda yer alacak tartışmalara ve paylaşımlara göre daha sonra yapacağım.

Saygılarımla,
GeceBekcisi
 
Üst