Operating system 5 ana bileşenden oluşur:
Main Memory (RAM) Manager: Bellek isteğinin uygunluğunu kontrol eder, uygunsa bellekte gerekli alanı ayırır. Bellekteki bölümleri (section) takip eder, yani section meşgulmü, boş mu gibi. OS ‘i çalıştıracak kadar yeterli bellek alanında sağlanmasına önem verir.
Process Manager: CPU’da allocation’i nasıl yapılacağına, tabloların ve register’ların oluşturulmasına karar verir, process’lerin statülerini takip eder. İşleri iki bileşene ayırabiliriz. Gelen job isteklerini kabul etmek veya etmemek ve bunu Job Scheduler gerçekleştirir. Bu high-level component olarak olarakta düşünebiliriz. Diğeri ise ne kadar süreyle hangi job hangi process ne kadar süreylenin kararını veren Process Scheduler’dır. Bu daha low level ‘dir.
Device Manager : Aygıtları, control unit’leri, kanalları izler. En verimli şekilde kaynak yönetimi yapmayı amaçlar.
File Manager : Sistemdeki tüm dosyaları izler. Access control listleri yönetir ve uygular.
Network Manager : Network bileşenleri ve yazılımlarını yönetir.
—
kernel: işletim sisteminin temelidir. Ve kernel memory ‘de tutulur. OS ‘deki önemli memory allocation, cpu scheduling gibi taskleri gerçekleştirir. İşletim birimde kernel dışında da bir çok birim olduğundan her şeyi kernel yapar diye bir şey yok.
cpu: Chip ‘de diyebiliriz. kendisine verilen alt seviye komutları işler.
core : cpu’nun bir parçası diyebiliriz. Control unit ve alu işlemlerini gerçekler.
multiprocessing : 2 veya daha fazla cpu’nun aynı ortak belleği kullanarak aynı job’ı iki farklı core ‘da eşzamanlı yapmasıdır.
thread : programın bir parçasını düşünelim ve bu parçanın diğer parçalardan bağımsız çalışmasıdır.
firmware: firma tarafından genellikle ROM üzerindeki yazılım.
—
Memory management’da en basit mantık ana bellek çalıştırılacak işteki her komutu tek tek okur. Bunları bellekte adreslerde depolar. Her komutun bellekteki yeri register’larda tutulur ve ne kadar yer tuttuğu da acumalatör ile belirlenir. Komutlar bitene dek de bellekte yer tutmaya devam eder.
Çok eskiden bellek yönetimi iyi yapılmazmış. Her job ‘ın bitmesi beklenirmiş. Daha sonradan da çoklu job çalıştırma için static partition’lı bellek şemaları çıkmış ve bellek yönetimi bu şekilde yapılmış. Bununda sıkıntısı da bellek yönetiminin çok zor olmasıymış. Şimdilerse en meşhuru dinamik bellek yönetimi. İşletim sistemi boşalan belleği istediği zaman rahatlıkla kullanabilmesini sağlamış.
Bellek yönetiminde genelde free partition’lara atama iki şekilde yapılır. Best-fit ve first-fit memory allocation. Best-fit’de bellekte en azdan en çoka şekilde kalacak şekilde boş kısımlar sıralanır. Gelecek job sığabilecek en küçük parçaya atanır. First-fit’de ise ilk sıradaki uygun boş belleğe uygun job atanır. Farkı biri bellek alanı yönetimini yaparken, diğeri ise hız olarak avantajlıdır.
Belleğin ayrılması gibi geri bırakıllaması (deallocation)’ını da önemlidir. Static partition’lı yapılarda deallocation basit. Sadece statü olarak free olduğunu bildirmesi yeterli. Dinamiklerde ise bu süreç biraz daha zor. Devreye allocation algoritması giriyor.
Dinamik belleklerde de fazladan fragmantation alanı deneilen boş alanların olması ve boş kısımlarıda kaldırarak compact hale getirmek için ise garbage collection kullanılır. Diğer adıyla defragmantation yapılır. Bu işleme relocation da denir.
Bir job belleğe yüklenmeden evvel page’lere bölünür ve o şekilde memory’de allocate edilir. Memory’deki bu konumlarına da page frame denir.Bu page size’lerin boyutu ‘da genellikle disk sektörleri yani block’ları kadardır. Page’li yapının avantajı herhangi bir job bir page’i kullanabilir. Page’lere bölmek fragmentation’ı doğal olarak azaltmış olacaktır. Ancak sorun page’ler her job için Ram’de istediği kullanabilecek ve bunun içinde bir izleme mekanizması gerekecek. Bu da manager’a ek bir yük demek olacaktır.
Bu izleme mekanizması genellikle job table, page map table, memory page table’larla sağlanır.
Ofset kavramı ise bir byte’ın kendi page’in den ne kadar uzakta olduğunu gösterir. Yani göreceli bir uzaklık söz konusudur. Her page’in ilk byte doğal olarak offset 0 ‘dır.
Demand Paging konsepti bir programın sadece bir kısmının process edilmek için memory’e yüklenmesidir. Bu konsepte joblar yine page’lere ayrılır . Bu page’ler bir ikincil depolama alanına atılır ve gerektiğinde memory’e yüklenir. Mantığı programlar belli bir sırayla yazılır ve her kısmına aynı anda erişmeye gerek olunmamasıdır. En basit örnek olarak error-handling’de verilebilir. Kodun bir kısmında hata alırsanız kalan kısmı çalışmaz. Bu sebeptenki herşeyi memory’de aynı anda tutmak da maliyetli olacaktır. Buradaki püf noktalardan biri de ikincil bir storage idi. Bu storage bir flash memory veya hard drive olabilir. Bunlarında CPU ile çalışabilmesi gerekir.
Bir process’in işletilmesi sırasında page bellekte mi diye kontrol edilir, değilse page fault handler devreye girer ve page ikincil depolama alanından kopyalanır. Tabi demand paging’inde sıkıntısı page fault’un çok alınması risk ve fazla işlem gerçekleştirmesi.
Page fault sayısını azaltmak için ise Segmentation Memory Allocation kullanılabilir. Segment’leri modül gibi düşünebilirsiniz. Segment boyutları farklı olabilir. Programın yapısına göre segment boyutları değişebilir. Page map yerine Segment Map table vardır bura da. Segment’lerde demand paging’deki gibi sürekli memory’de olmak zorunda değildirler.
Demand paging ve segmentation memory allocation birlikte de kullanılabilir.
Demand paging’de bir programın bir parçasını sadece memory’de allocate ettirebiliyorduk. Virtual Memory’de ise Demand paging’deki maksimum program boyutu kısıtı yoktur. Segmentation hali de bulunmaktadır. Çoklu programlarda idealdir.
Cache memory’de söz konusu olan hızdır. Sürekli tekrar eden datalar memory yerine genel amaçlı register’larda tutulabilirdi ancak kapasiteleri yeterli olamayacakları için cache memory birimi oluşturuldu.
—
Program, diskte depolanan çalıştırılmamış pasif haldeki dosyadır.
Job çalıştırılmak için seçilen program. Job çalıştırıldığında process olmuş denilir.
Process aktif bir varlıktır. programın, job’ın çalışmış halidir. Process, task olarakta ifade edilir. Her process’inde bir kimliği , data structure’ı bulunur. Buna PCB (process control block) denilir.
Thread process’in bir parçası ve bağımsız çalışabilir. Her thrad’inde bir kimliği bulur. Buna TCB (thrad control block) denilir. Thread ‘ler concurrent progrraming için önemli bir yapı taşıdır. Şimdiki bir çok program dili thrad oluşturmayı destekliyor.
Processor programı çalıştırandır, core olarakta ifade edebiliriz.
Process Manager genelde ikiye ayrılır. Job ve Process Scheduler. Job scheduler, job’ları önceliklerine göre sıralar ve hazır olduğunda process scheduler değerlendirip process’i yürütecektir. Job kabul edildiğinde Hold durumunda olur, ve kuyruğa alınır ve Ready durumuna geçer. CPU beklenir, daha sonra da process running moda geçer. Eğerki running state durumundayken başka bir işlem bekleniyorsa waiting durumuna geçer. Daha sonra da process tamamlanır.
Process Scheduler için bir çok algoritma kullanılabilir. Günümüz de batch’ler yerine interactive kullanım daha önde olduğu için response time hızlı olan algoritmalar tercih edilir. Batchler için First-come-First-served (FCFS), Shortest Next/Remaining Job, Priority Scheduling kullanılabilir. Interactive sistemlerde Round Robin kullanılabilir.
Round Robin’de mantık çok basit zaman çok küçük dilimlere bölünür. CPU ‘da bu job’lar çok küçük zaman dilimlerinde (cpu cycle) belirli bir sırayla gerçekleşir. Bu da sanki aynı anda çalışan bir çok job çalışır gibi gözlemlenir.
Bu algoritmaların yanı sıra process policy’de öncelikle ilgili de bazı algortimalar bulunur. Örneğin önce yüksek öncelikli job’lar tamamlansın, sonra düşük öncelikliler başlasın denilebilir. Ya da yine job’lar zamanlara ayrılır kuyruğa konulur ve process edilir, Her cycle da da kuyruğun başına yüksek öncelikli olan geçebilir. Ya da beklenenler içinde en çok olanı en öncelikli yapabilir.
Paralel Processing, iki ya da daha fazla processor’un paralel çalışabilmesidir. CPU’da işlemler simultene gerçekleşir. Eğer aynı anda birden fazla processor kullanabilen bir kod ise bu doğal olarak process hızını artıracaktır. Processor’ler arasındaki iletişimi orkestre eden ise process manager’dır.
Multi-core processor, bir çipte birden fazla processor olma durumudur. CPU tasarımı nano seviyelere geldi. Örneğin 7 nanometre işlemciler bulunuyor şuanda piyasada. Bu transistörlerin birbiriyle çok yakın olması çeşitli sıkıntılarıda doğuruyor. Transistörlerin yakın olması elektronların yaklaşması bir transistörden diğerine bilgi kaçağı olması olasılığını artırıyor. Küçük olması hız demek ve ayrıca ısı da demek. Bu da sıkıntı. Bu sebeptenki multi-core’lar özellikle önem kazanıyor. Ancak tabi multi-core daki core’lar tek core’lu yapıdan doğal olarak daha yavaş çalışacaktır. Dual core’un avatantajından yararlanmak için ise yazılımında multi-core’u iyi kullanabilmesi önemli.
—
Sistem çevresel değişkenleri karekteristik olarak 3 kategoriye ayırabiliriz. Dedicated, shared, virtual olarak. Bunlar device manager tarafından yönetilir.
Dedicated cihazlar belirli bir zamanda sadece bir job’a dedike hizmet sağlarlar. Örneğin printer’lar.
Shared cihazlar bir çok process’e assign edilebilirler. Örneğin diskler.
Virtual cihazlar, dedicated ve shared’in kombinasyonudur. Örneğin printer’lar. Dedicated bu cihazlar, shared cihazlara dönüştürülür.
USB’ler aygıtlarla OS arasında bir interface sağlar. Her cihaz USB host controller tarafından bir id ile kimliklendirilir. USB host controller ‘lar her cihazda bandwidth’i bir önceliğe göre belirler. Ses ve video gibi realtime data değişimleri yüksek önceliklidirler, klavye gibi interupt olabilen cihazlar orta öncelikli, printer gibi bulk transfer yapanlar ise düşük önceliklidir.
Depolama cihazları ikiye ayırabiliriz. Sequential Access Media ve Direct Access Storage Media. Sequential’da adından da anlaşılacağı üzere kayıtlar seri tutulur. Bir kayıta gidilmek istenildiğinde baştan o noktaya gitmek gerekir. Zamansal olarak çok uzun süre tüketen işlemlerdir. Direct access ‘de ise bildiğimiz bir lokasyona direkt erişilebileceğimiz aygıtlardır. Bunlar magnetic diskler, optical diskler veya flash memory’ler olabilirler. Magnetic disklere bildiğimiz hard diskleri örnek verebiliriz. Optical disklere cd/dvd örnek verilebilir. Flash memory ise silinebilir, kaldırılabilir read only belleklerdir. RAM gibidir ancak Ram ‘in aksine içindeki data silinmedikçe kalıcıdır. Kullanıcılarına veri depolama hizmetide verir.
IO Channels denilen kanallar CPU ile diğer birimler arasında programlanabilir bir birimdir. İşi hızlı cpu ile yavaş IO cihazlarını senkronize etmektir.
Buffer, CPU ile IO cihaz arasındaki senkronun oluşulmasına katkı sağlayan bir yapıdır. Buffer geçicidir. Main memory’de, channel’da, control unit’de geçici kalabilir.
RAID, bir çok fiziksel cihazın işletim sistemi tarafından tek bir birim olarak algılanmasının sağlanmasıdır. RAID, IO performansı veya recovery için kullanılabilir. 0 ‘dan 6’ya 7 seviye raid vardır.
Raid 0:
Raid 1:
Raid 5:
İçi içe raid’ler de yapılabilmektedir. Örneğin Raid 10:
—
File Manager, dosyaları oluşturma, silme, düzenleme, erişim kontrollerini gerçekleştirir. Dosyaları izler,
Her depolama birimi ki bu kaldırılabilir veya olmasın bir volume olarak düşünülür. Her volume’a da bir isim atanır. Volume ‘da ayrıca dizinler bulunur. File Manager, MFD (master file directory) de volume içerisindeki dosyalar ve alt dizinlerle ilgili bilgililer depolanır.