Bilgisayar ve Programlamaya Giriş · Ders Notu

Yazılım ve İşletim Sistemleri

Donanım ancak bir program ona ne yapacağını söylediğinde işe yarar. Bu programların en önemlisi, bilgisayar açılınca çalışmaya başlayan ve kapanana kadar bütün kaynakları yöneten işletim sistemidir. Not önce yazılımın ne olduğunu, hangi türlere ayrıldığını ve donanımla nasıl katman katman konuştuğunu anlatır. Ardından işletim sisteminin görevlerine, bilgisayarın açılış sürecine ve çekirdeğe geçer. Süreç, bellek, aygıt ve dosya yönetimi adım adım izlenen örneklerle ele alınır. Döner sıralı çizelgeleme, sanal adres çevirisi, sayfa değiştirme ve dosya okuma hesaplarının her ara adımı gösterilir. Son kesimler kullanıcı arayüzlerini, yetki yönetimini, işletim sistemi türlerini, yazılım lisanslarını, güncellemeleri ve sanallaştırmayı karşılaştırır.

Öğrenme çıktıları

Yazılım türleri
Sistem yazılımını, uygulama yazılımını, programlama araçlarını ve ürün yazılımını örnekleriyle ayırt etmek; yazılımla donanım arasındaki katmanları açıklamak.
İşletim sistemi
İşletim sisteminin kullanıcı, uygulama ve donanım arasındaki rolünü açıklamak; açılış sürecini, çekirdeği ve sistem çağrısını adım adım anlatmak.
Kaynak yönetimi
Süreç durumlarını ve çizelgelemeyi, bellek ayırma ve korumayı, sanal belleği, aygıt sürücülerini ve dosya sistemini yorumlamak; Gantt çizelgesi, adres çevirisi ve sayfa değiştirme hesaplarını yapmak.
Sistem seçimi
Kişisel, mobil, sunucu, gömülü ve gerçek zamanlı işletim sistemlerini gereksinimlere göre karşılaştırmak; lisans, güncelleme ve sanallaştırma seçeneklerini değerlendirmek.

2.1Yazılım

Donanım tek başına hiçbir iş yapmaz; işlemciye, belleğe ve diske adım adım ne yapacaklarını söyleyen komutlar gerekir. Bu komutların bütününe yazılım denir.

2.1.1Yazılım nedir?

Günlük dilde yazılım denince çoğunlukla yalnızca program akla gelir. Oysa bir yazılım ürünü programdan fazlasını içerir. Bir oyun, kodun yanında resim, ses ve harita dosyalarıyla gelir. Bir muhasebe programı vergi oranlarını bir tablo dosyasından okur. Her ikisinin de kurulum yönergesi ve kullanım kılavuzu vardır. Bu parçaların biri eksik olunca yazılım ya çalışmaz ya da doğru kullanılamaz.

Tanım 2.1

Yazılım (software), bir bilgisayarın yapacağı işlemleri tanımlayan programların, bu programların kullandığı verilerin ve ilgili belgelerin bütünüdür. Donanım (hardware) ise bilgisayarın elle tutulabilen fiziksel parçalarıdır: işlemci, bellek, disk, klavye, ekran.

Donanım ile yazılım arasındaki iş bölümü nettir. Donanım işlemi fiziksel olarak yürütür: işlemci toplar, bellek saklar, ekran gösterir. Yazılım ise hangi işlemin, ne zaman ve nasıl yapılacağını belirler. Aynı donanım, üzerine yüklenen yazılıma göre bir gün kelime işlemci, ertesi gün oyun makinesi olur. Bu esneklik bilgisayarı tek amaçlı makinelerden ayıran temel özelliktir.

Bir yazılımın ortaya çıkışı da bir zincir izler: kullanıcı gereksinimi → algoritma → program kodu → çalışan yazılım → sonuç. “Dönem ortalaması hesaplansın” gereksinimi, “notları al, ağırlığıyla çarp, topla” algoritmasına dönüşür; algoritma bir programlama dilinde yazılır ve derlenip çalıştırılınca ortalamayı verir. Bir halkadaki hata, örneğin yanlış anlaşılmış bir gereksinim, sonraki bütün halkalara taşınır.

2.1.2Yazılımın kalite özellikleri

Aynı işi yapan iki program arasında seçim yaparken yalnızca “çalışıyor mu?” sorusu yetmez. İki hesap makinesi uygulaması da doğru sonucu verebilir; ama biri her açılışta on saniye bekletir, öteki tuş yerlerini her sürümde değiştirir. Yazılım mühendisliğinde bir yazılımın ne kadar iyi olduğu altı temel özellikle değerlendirilir.

Tablo 2.1: Yazılımın kalite özellikleri ve bir bankacılık uygulamasından örnekler.
ÖzellikAnlamıBankacılık uygulamasında örnek
İşlevsellikBeklenen görevleri doğru yerine getirmeHavale tutarı hesaptan eksiksiz düşer
KullanılabilirlikKolay öğrenilme ve etkili kullanımPara gönderme üç dokunuşta biter
PerformansZamanı ve kaynakları verimli kullanmaHesap özeti bir saniyede açılır
GüvenilirlikHata durumunda öngörülebilir davranmaBağlantı koparsa işlem yarım kalmaz, ya tamamlanır ya iptal olur
GüvenlikYetkisiz erişime ve değişikliğe karşı korumaBaşkası şifreyi bilse bile telefona gelen kod olmadan giremez
Bakım kolaylığıDüzeltme ve geliştirmenin yönetilebilir olmasıYeni bir vergi kuralı birkaç günde eklenir

Tablo 2.1 bu özellikleri tanıdık bir uygulama üzerinde gösterir. Özellikler bazen çekişir: güvenlik için eklenen ek doğrulama adımı kullanılabilirliği azaltır. İyi tasarım, kullanım amacına göre doğru dengeyi kurar; bir uçak kontrol yazılımında güvenilirlik, bir fotoğraf uygulamasında kullanılabilirlik öndedir.

Sık yapılan hata

Güvenilirlik ile güvenliği aynı şey sanmak. Güvenilirlik, yazılımın hata karşısında tutarlı davranmasıdır: elektrik kesilince veri bozulmaz. Güvenlik ise kötü niyetli birine karşı korumadır: yetkisi olmayan biri veriye erişemez. Çok güvenilir bir program güvensiz olabilir; tersi de mümkündür.

2.1.3Yazılım ile donanım arasındaki katmanlar

Bir kullanıcı kelime işlemcide “Yazdır” düğmesine bastığında yazıcının mürekkep püskürtme kafasını hangi gerilimle süreceğini düşünmez. Kelime işlemci de bunu bilmez. Bu ayrıntılar alt katmanlarda saklıdır. Bilgisayar sistemi üst üste dizilmiş katmanlar biçiminde düzenlenir ve her katman yalnızca hemen altındakiyle konuşur.

KullanıcıUygulamalarİşletim sistemiSürücülerDonanımistekhizmet
Şekil 2.1: Kullanıcıdan donanıma beş katman. İstekler yukarıdan aşağı iner; sonuçlar, yani alt katmanın sunduğu hizmetler, aşağıdan yukarı döner.

Şekil 2.1 beş katmanı gösterir. En üstte kullanıcı vardır ve yalnızca uygulamalarla etkileşir. Uygulamalar işlerini işletim sisteminden ister. İşletim sistemi bu istekleri sürücülere iletir. Sürücüler de her donanım parçasına özgü komutları üretir. En altta, işi fiziksel olarak yapan donanım durur.

Tanım 2.2

Soyutlama (abstraction), bir katmanın altındaki ayrıntıları gizleyerek üstündeki katmana daha basit ve ortak bir hizmet sunmasıdır. Üst katman hizmeti nasıl kullanacağını bilir, hizmetin nasıl yapıldığını bilmek zorunda değildir.

Soyutlamanın en büyük kazancı taşınabilirliktir. Kelime işlemci yalnızca “bu sayfayı yazdır” der. Yazıcı ister mürekkep püskürtmeli ister lazer olsun, istek aynıdır. Farkı sürücü katmanı karşılar: her yazıcı üreticisi kendi aygıtı için bir sürücü yazar. Bu sayede aynı uygulama, sürücüler sayesinde binlerce farklı donanım bileşiminde çalışır. Uygulama yazan bir programcının her yazıcı modelini tanıması gerekmez.

2.1.4Yazılım türleri

Bilgisayarda çalışan yazılımlar görevlerine göre dört ana gruba ayrılır. Ayrımın ölçütü, yazılımın kime hizmet ettiğidir: donanıma ve öteki programlara mı, kullanıcının işine mi, yazılım geliştirene mi, yoksa tek bir cihazın kendisine mi?

Tanım 2.3

Sistem yazılımı (system software) donanımı yönetir ve öteki yazılımlara çalışma ortamı sağlar. Uygulama yazılımı (application software) kullanıcının belirli bir işini yapar. Programlama araçları kod yazmayı, kodu çevirmeyi, sınamayı ve hata ayıklamayı destekler. Ürün yazılımı (firmware) bir cihazın kalıcı belleğine gömülü olan ve cihazın temel işlevlerini yöneten yazılımdır.

YazılımSistem yazılımıişletim sistemi, sürücüUygulama yazılımıtarayıcı, kelime işlemciProgramlama araçlarıderleyici, IDEÜrün yazılımıUEFI, yönlendirici yazılımı
Şekil 2.2: Yazılım türleri ve örnekleri: sistem yazılımı (işletim sistemi, sürücü), uygulama yazılımı (tarayıcı, kelime işlemci), programlama araçları (derleyici, IDE) ve ürün yazılımı (UEFI, yönlendirici yazılımı).

Şekil 2.2 dört türü örnekleriyle bir ağaçta toplar. Sistem yazılımının en bilinen örneği işletim sistemidir; aygıt sürücüleri ve disk temizleme, yedekleme gibi yardımcı araçlar (utility) da bu gruba girer. Uygulama yazılımı kullanıcının asıl amacına hizmet eder: tarayıcıyla web sayfası açılır, kelime işlemciyle rapor yazılır.

Programlama araçları yeni yazılım üretmek için kullanılır. Derleyici (compiler) insanın yazdığı kaynak kodu işlemcinin çalıştırabileceği makine koduna çevirir. Tümleşik geliştirme ortamı (integrated development environment, IDE) kod düzenleyiciyi, derleyiciyi ve hata ayıklayıcıyı tek bir pencerede birleştirir.

Ürün yazılımı donanımla yazılımın kesiştiği yerde durur. Anakarttaki UEFI, bir yönlendiricinin menüsü, bir çamaşır makinesinin program düğmelerini yöneten kod bu türdendir. Ürün yazılımı diskte değil, cihazın kendi kalıcı belleğinde (ROM ya da flaş bellek) saklanır. Cihaz açılınca hiçbir şey yüklenmeden çalışmaya başlar. Kullanıcı onu çoğu zaman fark etmez; yalnızca üretici bir güncelleme yayımlayınca ondan haberdar olur.

Örnek 2.1

Bir bilgisayardaki şu yazılımlar hangi türe girer? Yazıcı sürücüsü, Java derleyicisi, hesap tablosu programı, akıllı saatin içindeki yazılım, disk birleştirme aracı.

  1. Yazıcı sürücüsü: işletim sistemiyle birlikte donanımı yönetir → sistem yazılımı.
  2. Java derleyicisi: kaynak kodu çevirerek yeni yazılım üretilmesini sağlar → programlama aracı.
  3. Hesap tablosu programı: kullanıcının hesap işini yapar → uygulama yazılımı.
  4. Akıllı saatin yazılımı: cihazın kalıcı belleğine gömülüdür ve onun temel işlevlerini yönetir → ürün yazılımı.
  5. Disk birleştirme aracı: kullanıcının bir belgesiyle değil, diskin düzeniyle uğraşır → sistem yazılımı (yardımcı araç).

2.1.5Sistem ve uygulama yazılımları

Dört türün arasında bir tür daha sık geçer: ara yazılım (middleware). Ara yazılım, uygulamaların işletim sistemiyle ve birbiriyle haberleşmesini kolaylaştırır. Örneğin bir okulun not sistemi, kayıtları tuttuğu veri tabanına bir bağlantı katmanı üzerinden ulaşır; programcı ağ bağlantısının ayrıntılarını yazmak zorunda kalmaz.

Tablo 2.2: Yazılım türlerinin örnekleri ve temel amaçları.
TürÖrneklerTemel amaç
Sistemİşletim sistemi, sürücü, yardımcı araçBilgisayarı ve kaynakları yönetmek
UygulamaKelime işlemci, tarayıcı, oyunKullanıcının görevini yapmak
Ara yazılımVeri tabanı bağlantı katmanı, mesaj kuyruğuUygulamaların sistemle ve birbiriyle haberleşmesini kolaylaştırmak
GeliştirmeDerleyici, tümleşik geliştirme ortamı (IDE), hata ayıklayıcıYeni yazılım üretmek

Tablo 2.2 ayrımı özetler. Sınırlar her zaman keskin değildir. Bir tarayıcı, web uygulamalarına çalışma ortamı sağladığı için kısmen bir platform gibi davranır. Yine de temel soru işe yarar: yazılım kullanıcının işini mi yapıyor, yoksa başka yazılımların çalışmasını mı sağlıyor? İlk durumda uygulama, ikincisinde sistem yazılımıdır.

2.2İşletim sistemi

Bir bilgisayarda aynı anda onlarca program çalışır ve hepsi aynı işlemciyi, belleği ve diski kullanmak ister. Bu kalabalığı düzene sokan yazılım işletim sistemidir.

2.2.1İşletim sistemi nedir?

Tanım 2.4

İşletim sistemi (operating system, OS), donanım kaynaklarını yöneten ve uygulamalara ortak hizmetler sunan temel sistem yazılımıdır. Bilgisayar açılınca ilk yüklenen büyük yazılımdır ve kapanana kadar çalışır.

TarayıcıKelime işlemciOyunİşletim sistemisüreç · bellek · dosya · aygıt · kullanıcı yönetimiCPURAMDiskAğ kartıuygulamalardonanım
Şekil 2.3: İşletim sistemi uygulamalar (tarayıcı, kelime işlemci, oyun) ile donanım (CPU, RAM, disk, ağ kartı) arasında durur. Süreç, bellek, dosya, aygıt ve kullanıcı yönetimi bu katmanın işidir.

Şekil 2.3 işletim sisteminin konumunu gösterir. Üstteki uygulamalar işletim sistemi olmadan donanıma ulaşamaz. Alttaki donanım da hangi uygulamaya hizmet edeceğini kendisi seçemez. İşletim sistemi bu iki dünyanın arasında üç temel iş yapar.

  • Donanım ayrıntılarını soyutlar. Bir uygulama “dosyayı aç” der; dosyanın SSD'de mi, USB bellekte mi, ağdaki bir sunucuda mı olduğunu bilmek zorunda değildir.
  • Kaynakları güvenli biçimde paylaştırır. Birden fazla program aynı işlemciyi ve belleği kullanır. İşletim sistemi her birine sıra ve alan verir; bir programın ötekinin belleğine yazmasını engeller.
  • Kullanıcıya bir arayüz sunar. Pencereli grafik arayüz ya da metin komutlarıyla çalışan komut satırı, kullanıcının bilgisayarla konuşma yoludur.

2.2.2İşletim sisteminin görevleri

İşletim sisteminin işi altı ana göreve ayrılır. Her görev bir kaynak türünü yönetir.

İşletimsistemiSüreç yönetimiÇalışan programlaraCPU zamanı ayırır.Bellek yönetimiProgramlara bellek verir,yalıtım sağlar.Dosya yönetimiVeriyi dosya veklasörlerde düzenler.Aygıt yönetimiSürücülerle çevrebirimlerini yönetir.Kullanıcı yönetimiHesap, kimlik doğrulamave yetkiler.Ağ hizmetleriBağlantı ve iletişimaltyapısı sağlar.
Şekil 2.4: İşletim sisteminin altı görevi: süreç, bellek, dosya, aygıt ve kullanıcı yönetimi ile ağ hizmetleri.

Şekil 2.4 bu görevleri bir arada gösterir.

  • Süreç yönetimi: çalışan programlara işlemci zamanı ayırır. Hangi programın ne zaman ve ne kadar süre işlemciyi kullanacağına karar verir.
  • Bellek yönetimi: programlara bellek verir ve onları birbirinden yalıtır. Bir programın çökmesi ötekinin verisini bozmaz.
  • Dosya yönetimi: veriyi dosya ve klasörlerde düzenler; dosyaların diskte nerede durduğunu ve kimin okuyabileceğini izler.
  • Aygıt yönetimi: klavye, yazıcı, ekran kartı gibi çevre birimlerini sürücüler aracılığıyla yönetir.
  • Kullanıcı yönetimi: hesapları, kimlik doğrulamayı ve yetkileri yönetir.
  • Ağ hizmetleri: bağlantı kurmak ve veri alışverişi yapmak için gereken altyapıyı sağlar.

2.2.3Önyükleme: bilgisayar nasıl açılır?

İşletim sistemi diskte durur, ama onu diskten belleğe kim yükler? Bilgisayar kapalıyken RAM boştur. Güç düğmesine basıldığı anda çalışacak hiçbir program bellekte yoktur. Bu “tavuk mu yumurtadan, yumurta mı tavuktan” sorununu çözen sürece önyükleme denir.

Tanım 2.5

Önyükleme (boot, booting), güç verildiği andan işletim sisteminin kullanıma hazır olduğu ana kadar geçen ve her aşamanın bir sonrakini yüklediği açılış sürecidir. İşletim sistemini diskten RAM'e taşıyan küçük programa önyükleyici (boot loader) denir.

Sorunun çözümü, kapalıyken de içeriğini koruyan küçük bir bellektir. Anakart üzerindeki kalıcı bellekte (ROM ya da flaş bellek), üreticinin yazdığı bir ürün yazılımı bulunur. İşlemci güç alınca her zaman bu belleğin belirli bir adresinden çalışmaya başlar. Açılış altı aşamada ilerler.

GüçdüğmeÜrün yazılımıUEFI / BIOSPOSTdonanım testiÖnyükleyicidisk → RAMÇekirdeksürücü, hizmetOturum açmamasaüstüÇalışan kod nerede?ROM (anakart)Denetim: ürün yazılımı
GüçdüğmeÜrün yazılımıUEFI / BIOSPOSTdonanım testiÖnyükleyicidisk → RAMÇekirdeksürücü, hizmetOturum açmamasaüstüÇalışan kod nerede?disk → RAMDenetim: işletim sistemi çekirdeği
Şekil 2.5: Önyükleme aşamaları. (a) Açılışın başında denetim ürün yazılımındadır ve çalışan kod anakarttaki ROM'dadır. (b) Önyükleyici çekirdeği diskten RAM'e yükleyip denetimi ona vermiştir; artık çalışan kod RAM'deki işletim sistemi çekirdeğidir.
Tablo 2.3: Önyükleme aşamalarında çalışan kodun yeri ve denetimin sahibi.
AşamaNe olur?Çalışan kod nerede?Denetim kimde?
1. GüçGüç kaynağı gerilimler kararlı olunca anakarta “güç hazır” sinyali verir. RAM boştur.—Kullanıcı
2. Ürün yazılımıİşlemci anakarttaki UEFI'yi (eski adıyla BIOS) çalıştırmaya başlar.ROM (anakart)Ürün yazılımı
3. POSTAçılışta öz sınama: bellek, klavye, disk gibi temel donanım denetlenir.ROM (anakart)Ürün yazılımı
4. ÖnyükleyiciÖnyükleme sırasındaki ilk uygun aygıttan önyükleyici RAM'e yüklenir.Disk → RAMÖnyükleyici
5. ÇekirdekÇekirdek RAM'e yüklenir; sürücüleri, ilk süreçleri ve sistem hizmetlerini başlatır.Disk → RAMİşletim sistemi çekirdeği
6. Oturum açmaKimlik doğrulanınca masaüstü ve başlangıç uygulamaları açılır.RAMİşletim sistemi

Tablo 2.3 altı aşamayı iki soruya göre izler: o anda çalışan kod nerededir ve denetim kimdedir? Şekil 2.5 bu yolculuğun iki ara anını gösterir.

Güç ve ürün yazılımı. Güç düğmesi, güç kaynağına çalışma sinyali verir. Güç kaynağı gerilimleri kararlı hâle gelince anakarta “güç hazır” sinyali gönderir. Sinyal gelince işlemci, anakarttaki kalıcı bellekte duran ürün yazılımını çalıştırır. Günümüz bilgisayarlarında bu yazılım UEFI'dir (Unified Extensible Firmware Interface, birleşik genişletilebilir ürün yazılımı arayüzü). Daha eski bilgisayarlarda aynı görevi BIOS (Basic Input/Output System, temel giriş/çıkış sistemi) görürdü.

POST. Ürün yazılımının ilk işi açılışta öz sınamadır (power-on self-test, POST). Bellek modüllerinin takılı ve çalışır olduğu, klavyenin ve disklerin bağlı olduğu denetlenir. Bir sorun varsa bilgisayar bir dizi bip sesi çıkarır ya da ekrana bir ileti yazar. RAM modülü hiç takılı değilse açılış burada durur, çünkü sonraki aşamaların hepsi RAM'e bir şey yüklemeyi gerektirir.

Önyükleyici. Ürün yazılımı ayarlarında bir önyükleme sırası (boot order) bulunur, örneğin “önce USB, sonra SSD”. Ürün yazılımı bu sıradaki aygıtları dener; takılı olmayanı atlar. Uygun aygıtı bulunca diskteki küçük EFI sistem bölümüne bakar. FAT32 ile biçimlendirilmiş bu bölümde önyükleyici programı durur. Windows'ta önyükleyicinin adı Windows Boot Manager'dır (dosya adı bootmgfw.efi); Linux'ta en yaygın önyükleyici GRUB'dur. Önyükleyici RAM'e yüklenir ve denetim ona geçer.

Çekirdek. Önyükleyici işletim sisteminin çekirdeğini bulur, RAM'e yükler ve denetimi ona verir. Windows'ta bu iş iki adımda olur: önyükleyici winload.efi programını çalıştırır, o da çekirdek dosyası ntoskrnl.exe'yi yükler. Çekirdek çalışmaya başlayınca aygıt sürücülerini yükler, ilk süreçleri ve arka planda çalışan sistem hizmetlerini başlatır.

2.2.4Güvenli Önyükleme, TPM ve disk bölümleme

Önyükleme zincirinin her halkası bir sonrakine güvenir. Ürün yazılımı diskte bulduğu önyükleyiciyi çalıştırır, önyükleyici çekirdeği çalıştırır. Kötü amaçlı bir program önyükleyicinin yerine kendini koyabilirse işletim sisteminden önce çalışır. O noktadan sonra virüs tarayıcıları bile onu göremez, çünkü onlar da ondan sonra yüklenir. Modern bilgisayarlar bu tehlikeye karşı iki araç kullanır.

Tanım 2.6

Güvenli Önyükleme (Secure Boot), UEFI'nin yalnızca güvenilir bir dijital imzası olan önyükleyiciyi ve çekirdeği çalıştırmasıdır. TPM (Trusted Platform Module, güvenilir platform modülü), şifreleme anahtarlarını ve açılış ölçümlerini saklayan bir güvenlik yongasıdır. TPM anakartta ayrı bir yonga, işlemcinin içinde bir birim ya da ürün yazılımı içinde bir bileşen olabilir.

UEFI ürün yazılımı✓Önyükleyici✓Çekirdek✓İşletim sistemiTPM 2.0: her aşamanın ölçümü kaydedilir · ölçümler doğruysa BitLocker anahtarı açılır
Şekil 2.6: Güven zinciri. UEFI ürün yazılımı önyükleyicinin, önyükleyici de çekirdeğin dijital imzasını denetler (✓). TPM her aşamanın ölçümünü kaydeder; ölçümler doğruysa disk şifreleme (BitLocker) anahtarı açılır.

Şekil 2.6 güven zincirini soldan sağa gösterir. Zincirin ilk halkası ürün yazılımıdır ve üretici onu fabrikada güvenilir anahtarlarla birlikte yazar. Her halka bir sonrakini çalıştırmadan önce onun imzasını denetler. Dijital imza, bir dosyayı belirli bir kuruluşun ürettiğini ve dosyanın sonradan değiştirilmediğini gösteren matematiksel bir damgadır. Dosyanın tek bir baytı değişse imza tutmaz. Değiştirilmiş bir önyükleyicinin imzası doğrulanamadığı için UEFI onu çalıştırmaz ve açılış durur.

TPM her aşamada yüklenen kodun içeriğinden kısa bir parmak izi hesaplar ve kaydeder. Disk şifreleme aracı BitLocker, şifre çözme anahtarını TPM'de saklar; TPM anahtarı yalnızca ölçümler beklenen değerlerle aynıysa verir. Disk başka bir bilgisayara takılsa ya da açılış zinciri değiştirilse veri okunamaz.

Örnek 2.2

Güvenli Önyükleme açık bir bilgisayarda bir zararlı yazılım, diskteki önyükleyici dosyasının birkaç baytını değiştiriyor. Bir sonraki açılışta ne olur?

  1. UEFI çalışır ve POST'u tamamlar.
  2. UEFI, EFI sistem bölümündeki önyükleyiciyi bulur ve çalıştırmadan önce imzasını denetler.
  3. Dosya değiştiği için hesaplanan değer imzadaki değerle tutmaz. İmza doğrulanamaz.
  4. UEFI önyükleyiciyi çalıştırmaz ve bir güvenlik ihlali iletisi gösterir. Zararlı kod hiç çalışma fırsatı bulamaz.

Windows 11 kurulumu için UEFI ile Güvenli Önyükleme desteği ve TPM 2.0 gerekir.

Önyükleme ile yakından ilgili bir konu da diskin nasıl bölündüğüdür. Bir disk, her biri ayrı bir sürücü gibi kullanılan bölümlere (partition) ayrılabilir. Bölümlerin yerini diskin başındaki bir tablo tutar. Bu tablonun biçimine bölümleme düzeni (partitioning scheme) denir ve iki düzen yaygındır.

Tablo 2.4: MBR ve GPT bölümleme düzenlerinin karşılaştırması.
ÖzellikMBRGPT
Birlikte kullanıldığı ürün yazılımıBIOSUEFI
En büyük disk2 TB'a kadar2 TB'ın çok üzeri
Bölüm sayısıEn çok 4 birincil bölümÇok sayıda bölüm

MBR (Master Boot Record, ana önyükleme kaydı) eski düzendir. Disk üzerindeki konumları 32 bitlik sektör numaralarıyla tutar. Bir sektör 512 bayt olduğundan adreslenebilecek en büyük alan şöyle hesaplanır:

232 × 512 bayt = 4.294.967.296 × 512 = 2.199.023.255.552 bayt ≈ 2,2 TB

Bu sayı 2 TiB'a, yani 2 × 1.0244 bayta eşittir; “2 TB sınırı” buradan gelir. GPT (GUID Partition Table, genel benzersiz kimlikli bölüm tablosu) 64 bitlik numaralar kullandığı için bu sınır pratikte ortadan kalkar. Tablo 2.4 iki düzeni karşılaştırır.

Örnek 2.3

4 TB'lık bir diske Windows 11 kurulacak ve disk sistem, programlar, veriler, yedek ve kurtarma için beş bölüme ayrılacak. Hangi bölümleme düzeni seçilmelidir?

  1. Disk boyutu: 4 TB, MBR'nin yaklaşık 2,2 TB'lık sınırını aşar. MBR ile diskin yarısından fazlası kullanılamaz.
  2. Bölüm sayısı: beş bölüm, MBR'nin dört birincil bölüm sınırını aşar.
  3. İşletim sistemi: Windows 11 UEFI ister; UEFI ile birlikte kullanılan düzen GPT'dir.

Üç ölçüt de aynı sonucu verir: GPT + UEFI.

2.3Çekirdek

İşletim sisteminin merkezinde, donanıma doğrudan dokunma yetkisi olan küçük ama kritik bir bölüm durur: çekirdek.

2.3.1Çekirdek ve ayrıcalıklı çalışma

Tanım 2.7

Çekirdek (kernel), işletim sisteminin ayrıcalıklı çalışan merkezi bölümüdür. İşlemci iki modda çalışabilir: çekirdek modunda (kernel mode) her komutu yürütebilir ve donanıma doğrudan erişebilir; kullanıcı modunda (user mode) donanıma erişen komutlar yasaktır. Uygulamalar kullanıcı modunda çalışır ve çekirdekten sistem çağrısıyla (system call) hizmet ister.

Kullanıcı moduMetin editörüTarayıcısistem çağrısı arayüzüÇekirdek modu (ayrıcalıklı)ÇekirdekSüreç yön.Bellek yön.Dosya sistemiAygıt sürücüleriDonanımCPURAMDisk
Şekil 2.7: Kullanıcı modundaki uygulamalar (metin editörü, tarayıcı) sistem çağrısı arayüzünden geçerek çekirdek moduna ulaşır. Çekirdeğin süreç, bellek, dosya sistemi ve aygıt sürücüsü alt sistemleri donanımı (CPU, RAM, disk) yönetir.

Şekil 2.7 iki modu iki kat gibi gösterir. Üst katta uygulamalar vardır ve aralarında bir sınır çizgisi bulunur. Uygulamalar bu çizgiyi yalnızca tek bir kapıdan, sistem çağrısı arayüzünden geçebilir. Alt katta çekirdeğin dört alt sistemi donanımla konuşur.

Bu ayrımın nedeni güvenlik ve kararlılıktır. Her program diske doğrudan yazabilseydi hatalı bir program başka bir programın dosyalarının üstüne yazabilir, kötü niyetli bir program başkalarının parolalarını okuyabilirdi. İşlemci kullanıcı modunda donanıma erişen bir komutla karşılaşınca komutu yürütmez ve denetimi çekirdeğe verir. Çekirdek de o programı çoğunlukla sonlandırır. Böylece bir uygulamanın hatası yalnızca kendisini etkiler.

Bedeli de vardır. Çekirdekteki bir hata bütün sistemi etkileyebilir, çünkü çekirdeğin üstünde onu durduracak bir yetki yoktur. Windows'taki mavi hata ekranı ve Linux'taki “kernel panic” iletisi, çekirdek düzeyinde düzeltilemeyen bir hata olduğunu gösterir. Bu yüzden çekirdeğe giren her kod, özellikle aygıt sürücüleri, dikkatle sınanır ve imzalanır.

Sık yapılan hata

“Yönetici hesabıyla açılan program çekirdek modunda çalışır” sanmak. Yönetici hesabı işletim sistemi içindeki yetkileri artırır: sistem dosyalarını değiştirmek, program kurmak. Ama yönetici olarak açılan bir program da işlemcinin kullanıcı modunda çalışır ve donanıma yine sistem çağrısı üzerinden ulaşır. Çekirdek modu yalnızca çekirdeğin ve sürücülerin kodu içindir.

2.3.2Sistem çağrısı adım adım

Sistem çağrısının işleyişini somut bir örnekte izlemek, çekirdeğin bütün alt sistemlerini bir arada görmeyi sağlar. Bir metin editörü, diskteki rapor.txt dosyasını okumak istiyor.

Kullanıcı moduMetin editörüTarayıcısistem çağrısı arayüzüÇekirdek modu (ayrıcalıklı)ÇekirdekSüreç yön.Bellek yön.Dosya sistemiAygıt sürücüleriDonanımCPURAMDisk
Kullanıcı moduMetin editörüTarayıcısistem çağrısı arayüzüÇekirdek modu (ayrıcalıklı)ÇekirdekSüreç yön.Bellek yön.Dosya sistemiAygıt sürücüleriDonanımCPURAMDisk
Şekil 2.8: Dosya okuma sistem çağrısının iki anı. (a) İşlemci kullanıcı modundan çekirdek moduna geçmiştir; artık yalnızca çekirdek kodu çalışır. (b) Disk sürücüsü diske okuma komutu vermiştir; disk işi bitince kesmeyle işlemciye haber verir.
Örnek 2.4

Metin editörü rapor.txt dosyasını okuyor. Her adımda işlemci hangi moddadır ve hangi alt sistem çalışır?

AdımNe olur?İşlemci moduÇalışan bölüm
1Editör diske kendisi erişemez; read sistem çağrısını yapar.KullanıcıEditör
2İşlemci çekirdek moduna geçer; denetim çekirdeğe verilir.ÇekirdekSistem çağrısı arayüzü
3Dosyanın diskteki yeri bulunur; kullanıcının okuma izni denetlenir.ÇekirdekDosya sistemi
4Diske okuma komutu verilir; disk işi bitince kesmeyle haber verir.ÇekirdekAygıt sürücüsü
5Okunan veri, RAM'de editörün kendi bellek alanına kopyalanır.ÇekirdekBellek yönetimi
6Çağrı döner; işlemci kullanıcı moduna geçer. Editör veriyi ekranda gösterir.KullanıcıEditör

Editör yalnızca birinci ve altıncı adımda çalışır. Aradaki dört adımın hepsi çekirdek modundadır. Editör donanımı hiç doğrudan görmez.

Şekil 2.8 bu adımların ikisini gösterir. Üçüncü adımdaki izin denetimi düzenin güvenlik değerini gösterir: editörün okumaya hakkı olmayan bir dosya istenirse çağrı bir hata koduyla döner ve diske hiç gidilmez.

Dördüncü adımda iki önemli kavram geçer. Disk, işlemciye göre çok yavaştır; bir SSD okuması on binlerce işlemci komutu kadar sürer. İşlemci bu sürede boş beklemez, başka işlere geçer. Disk işini bitirince işlemciye bir sinyal gönderir.

Tanım 2.8

Kesme (interrupt), bir aygıtın ya da zamanlayıcının işlemciye bir olayı bildiren sinyalidir. Kesme gelince işlemci o anki işini kısa bir süre bırakır, çekirdekteki ilgili kodu çalıştırır ve sonra kaldığı yerden devam eder.

Kesme sayesinde işlemci “disk bitti mi?” diye sürekli sormaz. Tuşa basmak, ağdan paket gelmesi ve zamanlayıcının “zaman dilimi doldu” bildirimi de birer kesmedir.

2.3.3Çekirdek türleri

Çekirdeğin içine neyin konacağı bir tasarım kararıdır. Her şeyi çekirdeğe koymak hızlıdır, çünkü alt sistemler arasında mod geçişi gerekmez. Ama çekirdek büyüdükçe içinde hata olma olasılığı da büyür. Çekirdeği küçük tutmak güvenliği artırır, ama sık mod geçişi hızı düşürür. Bu iki uç arasında üç tasarım yaygındır.

Tablo 2.5: Çekirdek türleri.
TürFikirÖrnek
Monolitik çekirdekSüreç, bellek, dosya sistemi ve sürücüler tek ayrıcalıklı çekirdekte; hızlı ama büyükLinux (modüller yüklenebilir)
Mikro çekirdekÇekirdekte yalnızca temel işler; sürücü ve dosya sistemi kullanıcı modunda; yalıtım güçlüMINIX 3, QNX
Hibrit çekirdekMikro çekirdek tasarımını alır, hız için bazı hizmetleri çekirdekte tutarWindows NT çekirdeği, macOS/iOS (XNU)

Tablo 2.5 üç tasarımı karşılaştırır. Monolitik çekirdekte (monolithic kernel) bütün alt sistemler tek büyük programdır. Linux bu yapıdadır, ama sürücülerin gerektiğinde çekirdeğe eklenip çıkarılabilen modüller olarak yüklenmesine izin verir. Mikro çekirdekte (microkernel) çekirdek yalnızca süreçler arası haberleşme, temel çizelgeleme ve bellek koruması gibi en temel işleri yapar. Sürücüler ve dosya sistemi sıradan programlar gibi kullanıcı modunda çalışır. Bir sürücü çökerse yalnızca o program yeniden başlatılır; sistem ayakta kalır. QNX bu yüzden otomobil ve tıbbi cihazlarda yaygındır. Hibrit çekirdek (hybrid kernel) ikisinin arasındadır. Windows ve Apple'ın sistemleri bu yolu izler.

Çekirdek ile işletim sistemi arasındaki farkı en iyi Linux ve Android örneği gösterir. Linux, tam anlamıyla yalnızca bir çekirdektir. Bir bilgisayara kurulan “Linux” aslında bir Linux dağıtımıdır (Linux distribution): Linux çekirdeğinin üstüne komut satırı araçları, bir masaüstü ortamı ve uygulamalar eklenmiş bir pakettir. Ubuntu, Fedora ve Debian böyle dağıtımlardır. Android de Linux çekirdeğini kullanır, ama üstündeki katmanlar tamamen Android'e özgüdür.

Tablo 2.6: Android yazılım yığını (yukarıdan aşağıya).
KatmanGörev
UygulamalarKullanıcının çalıştırdığı programlar: mesajlaşma, harita, oyun
Android çatısı ve çalışma zamanıUygulamaların kullandığı ortak hizmetler ve uygulama kodunu çalıştıran ortam
Linux çekirdeğiSüreç, bellek, sürücü ve güç yönetimi
Donanımİşlemci, dokunmatik ekran, kamera, sensörler

Tablo 2.6 Android'in katmanlarını sıralar. Bir Linux masaüstü programı Android telefonda çalışmaz, bir Android uygulaması da Ubuntu'da doğrudan açılmaz. İkisi aynı çekirdeği paylaşsa da üst katmanları farklıdır.

2.4Süreç yönetimi

Tek çekirdekli bir işlemci belirli bir anda yalnızca tek bir programın komutunu yürütür. Yine de böyle bir bilgisayarda müzik çalarken yazı yazmak mümkündür, çünkü işletim sistemi işlemciyi programlar arasında çok hızlı paylaştırır.

2.4.1Süreç yönetiminin kavramları

Süreç yönetimi altı kavram üzerine kurulur. İlk üçü yönetilen şeyleri, son üçü yönetimin yollarını anlatır.

Tanım 2.9

Program, diskte saklanan komut ve veri bütünüdür. Süreç (process), çalışmakta olan bir program örneğidir. İş parçacığı (thread), bir süreç içindeki tek bir yürütme akışıdır. Çizelgeleme (scheduling), işlemcinin hangi sürece ne zaman verileceğine karar verilmesidir; bu kararı veren çekirdek parçasına çizelgeleyici (scheduler) denir. Bağlam değiştirme (context switch), işlemcinin durumunu bir süreçten kaydedip başka bir sürecin durumunu yüklemektir. Eş zamanlılık (concurrency), birden fazla işin aynı zaman aralığında ilerlemesinin düzenlenmesidir.

Süreç P1İşletim sist.Süreç P2P1 çalışırP2 çalışırP1 kaldığı yerdenzamanbağlam değiştirmebağlam değiştirmekaydet P1yükle P2kaydet P2yükle P1
Şekil 2.9: Tek CPU'da bağlam değiştirme. P1 çalışır; işletim sistemi P1'in durumunu kaydeder ve P2'nin durumunu yükler; P2 çalışır; yeniden geçişle P1 kaldığı yerden devam eder.

Şekil 2.9 bağlam değiştirmeyi zaman ekseninde gösterir. Bir sürecin “bağlamı”, işlemcinin o süreç için tuttuğu bütün bilgidir: yazmaçların değerleri, sıradaki komutun adresi, sürecin bellek tablosunun yeri. P1'den P2'ye geçerken işletim sistemi P1'in bağlamını bellekte bu sürece ayrılmış bir kayda yazar. Ardından P2'nin daha önce kaydedilmiş bağlamını işlemciye yükler. P2 sanki hiç durmamış gibi kaldığı komuttan devam eder.

Bağlam değiştirme süresince işlemci hiçbir kullanıcı programını ilerletmez; yalnızca kayıt tutar. Tek bir geçiş birkaç mikrosaniye sürer, ama saniyede binlerce kez yapılınca kayıp hissedilir hâle gelir.

Sık yapılan hata

Eş zamanlılığı “aynı anda çalışma” sanmak. Tek çekirdekli bir işlemcide iki süreç hiçbir zaman aynı anda çalışmaz; yalnızca sırayla, çok kısa aralıklarla çalışır ve dışarıdan aynı anda çalışıyor gibi görünür. Gerçekten aynı anda çalışma, ancak birden fazla çekirdek varsa mümkündür ve buna paralellik denir.

2.4.2Program, süreç ve iş parçacığı

Program ile süreç arasındaki fark, yemek tarifi ile tencerede pişen yemek arasındaki farka benzer. Aynı tariften iki ayrı tencerede yemek pişebilir; her tencerenin kendi malzemesi ve aşaması vardır. Program diskte duran pasif bir dosyadır; süreç onun bellekte çalışan bir örneğidir.

Disktarayici.exeprogram (pasif)Bellek (RAM)Süreç (PID 101)kod + veri + yığınaçık dosyalar, izinleriş parçacığı 1iş parçacığı 2Süreç (PID 102)kod + veri + yığınaçık dosyalar, izinleriş parçacığı 12 kez çalıştırıldı→ 2 ayrı süreç
Şekil 2.10: Diskteki tarayici.exe programı iki kez çalıştırılınca bellekte iki ayrı süreç oluşur (PID 101 ve PID 102). Her sürecin kendi kodu, verisi, yığını, açık dosyaları ve izinleri vardır. Birinci sürecin iki, ikincisinin bir iş parçacığı vardır.

Şekil 2.10 bu ilişkiyi gösterir. İşletim sistemi her süreci bir süreç kimliğiyle (process ID, PID) tanır. PID, süreç yaşadığı sürece değişmeyen bir numaradır. Görev Yöneticisi'nde ya da Linux'taki ps komutunun çıktısında her satır bir süreçtir ve yanında PID'si yazar.

Her sürecin ayrı bir bellek alanı vardır. Bu alanda programın kodu, değişkenlerin tutulduğu veri bölgesi ve fonksiyon çağrılarının izlendiği yığın bulunur. Süreç ayrıca açtığı dosyaların ve izinlerinin bir listesini taşır. İki süreç birbirinin belleğini göremez. Bir tarayıcı penceresi çökünce öteki pencere çoğu zaman çalışmaya devam eder; modern tarayıcılar bu nedenle her sekmeyi ayrı bir süreçte açar.

İş parçacıkları ise aynı süreç içinde, o sürecin belleğini paylaşarak çalışan yürütme akışlarıdır. Bir kelime işlemci bir iş parçacığıyla klavyeden gelen harfleri işlerken öteki iş parçacığıyla arka planda yazım denetimi yapabilir. İkisi aynı belgeyi, yani aynı bellek alanını görür. Paylaşım haberleşmeyi kolaylaştırır, ama dikkat ister: iki iş parçacığı aynı veriyi aynı anda değiştirmeye kalkarsa veri bozulabilir.

2.4.3Süreç durumları

Bir süreç oluşturulduğu andan bitene kadar hep çalışmaz. Kimi zaman sırasını bekler, kimi zaman diskten veri gelmesini bekler. İşletim sistemi her süreç için “şu anda hangi durumdasın?” bilgisini tutar.

Tanım 2.10

Bir sürecin durumu (process state) şu beşinden biridir. Yeni: süreç oluşturuluyor. Hazır: çalışmaya hazır, işlemci sırası bekliyor. Çalışıyor: komutları şu anda işlemcide yürütülüyor. Bekliyor: bir olayın, örneğin disk okumasının ya da bir tuşa basılmasının bitmesini bekliyor. Sonlandı: işini bitirdi. Hazır süreçlerin sıralandığı listeye hazır kuyruğu (ready queue) denir.

kabul edildiçizelgeleyici seçtisüre doldu (kesme)G/Ç ya da olay bekliyorbekleme bittiçıkışYeniHazırÇalışıyorSonlandıBekliyor
Şekil 2.11: Süreç durum diyagramı. Oklar izin verilen geçişleri ve her geçişin nedenini gösterir: kabul edildi, çizelgeleyici seçti, süre doldu (kesme), G/Ç ya da olay bekliyor, bekleme bitti, çıkış.

Şekil 2.11 beş durumu ve aralarındaki altı geçişi gösterir. Diyagramda olmayan geçişler de en az olanlar kadar öğreticidir.

  • Yeni → Hazır (kabul edildi): işletim sistemi sürece bellek ayırır ve onu hazır kuyruğuna koyar.
  • Hazır → Çalışıyor (çizelgeleyici seçti): süreç işlemciyi alır.
  • Çalışıyor → Hazır (süre doldu): sürecin işlemci payı biter; bir zamanlayıcı kesmesi denetimi çekirdeğe verir ve süreç kuyruğun sonuna döner.
  • Çalışıyor → Bekliyor (G/Ç ya da olay bekliyor): süreç diskten veri, klavyeden tuş ya da ağdan paket ister.
  • Bekliyor → Hazır (bekleme bitti): beklenen olay gerçekleşir ve süreç yeniden kuyruğa girer.
  • Çalışıyor → Sonlandı (çıkış): süreç işini bitirir.

Burada G/Ç, giriş/çıkış (input/output, I/O) işlemlerinin kısaltmasıdır. Diyagramda Bekliyor → Çalışıyor oku yoktur. Beklemesi biten süreç işlemciyi doğrudan almaz; önce hazır kuyruğuna girer ve sırasını bekler. Hazır → Bekliyor oku da yoktur: bir süreç ancak çalışırken bir şey isteyebilir, dolayısıyla ancak çalışırken beklemeye geçebilir.

Tek çekirdekli bir sistemde belirli bir anda en çok bir süreç Çalışıyor durumundadır. Öteki hazır süreçler kuyrukta bekler. Bekliyor durumundaki bir süreç ise kuyrukta bile değildir; çizelgeleyici onu hiç seçmez, çünkü işlemciyi alsa bile yapabileceği bir şey yoktur.

Sık yapılan hata

Hazır ile Bekliyor durumlarını karıştırmak. İkisi de “çalışmıyor”dur, ama nedenleri farklıdır. Hazır süreç işlemci verilse hemen çalışabilir; eksiği yalnızca işlemcidir. Bekliyor durumundaki süreç ise işlemci verilse bile ilerleyemez, çünkü bir dış olayı bekler.

2.4.4Durum geçişleri adım adım

Durum diyagramını tek bir sürecin yaşamı boyunca izlemek, geçişlerin hangi olaylarla tetiklendiğini somutlaştırır.

Örnek 2.5

Kullanıcı bir programa çift tıklıyor ve P1 süreci oluşuyor. P1 bir süre hesap yapıyor, sonra diskten veri okuyor, sonra yine hesap yapıyor, bu arada zaman dilimi doluyor ve sonunda işini bitiriyor.

AdımOlayGeçişP1'in durumu
1Kullanıcı programa çift tıklar—Yeni
2İşletim sistemi süreci kabul eder, bellek ayırırYeni → HazırHazır
3Çizelgeleyici P1'i seçer, bağlam yüklenirHazır → ÇalışıyorÇalışıyor
4P1 diskten veri isterÇalışıyor → BekliyorBekliyor
5Disk işini bitirir, kesme gelirBekliyor → HazırHazır
6Sırası gelir, yeniden seçilirHazır → ÇalışıyorÇalışıyor
7Zaman dilimi dolar, zamanlayıcı kesmesiÇalışıyor → HazırHazır
8Tekrar seçilirHazır → ÇalışıyorÇalışıyor
9İşini bitirip çıkar; kaynakları geri alınırÇalışıyor → SonlandıSonlandı

P1 dokuz adımda üç kez Çalışıyor durumuna girer. Her girişten önce mutlaka Hazır durumundan geçer.

kabul edildiçizelgeleyici seçtisüre doldu (kesme)G/Ç ya da olay bekliyorbekleme bittiçıkışYeniHazırÇalışıyorSonlandıBekliyorP1
kabul edildiçizelgeleyici seçtisüre doldu (kesme)G/Ç ya da olay bekliyorbekleme bittiçıkışYeniHazırÇalışıyorSonlandıBekliyorP1
Şekil 2.12: Örnek 2.5'in iki adımı. (a) Adım 4: P1 diskten veri istediği için Çalışıyor'dan Bekliyor'a geçer. (b) Adım 5: disk işi bitince P1 hemen çalışmaz, önce Hazır durumuna döner.

Şekil 2.12 tablonun en çok karıştırılan iki adımını gösterir. Dördüncü adımda P1 işlemciyi kendi isteğiyle bırakır, çünkü veri gelene kadar yapacak işi yoktur. İşlemciyi boşuna tutsaydı başka süreçler de bekletilmiş olurdu. Beşinci adımda disk kesmesi gelir, ama o anda işlemcide başka bir süreç çalışıyor olabilir. P1 bu yüzden kuyruğa döner. Yedinci adımdaki geçiş ise P1'in isteğiyle olmaz: zamanlayıcı kesmesi P1'i işlemciden zorla alır. Bu ayrım, işlemciyi süreçten zorla alabilen sistemlerin temelidir.

2.4.5İki süreç, tek CPU

Bir sürecin Bekliyor durumuna geçmesi, işlemcinin boşa çıkması demektir. İşletim sistemi bu boşluğu başka bir süreçle doldurursa toplam iş daha kısa sürede biter. Bu fikre çoklu programlama (multiprogramming) denir. Etkisini bir zaman çizelgesinde ölçmek mümkündür.

Örnek 2.6

Tek çekirdekli bir işlemcide iki süreç var. P1 önce 3 ms hesap yapacak, sonra diskten okuyacak (disk 3 ms sürüyor), sonra 2 ms daha hesap yapacak. P2 yalnızca 4 ms hesap yapacak. İkisi de t = 0'da hazır; çizelgeleyici önce P1'i seçiyor. Her süreç işlemciyi ancak beklemeye geçince ya da işi bitince bırakıyor.

Zaman (ms)CPUDiskP1P2
0–3P1boşÇalışıyorHazır
3P1 okuma ister, bağlam değiştirilirBekliyorÇalışıyor
3–6P2P1'in verisiBekliyorÇalışıyor
6Disk biter, kesme gelirHazırÇalışıyor
6–7P2boşHazırÇalışıyor
7P2 4 ms'sini tamamlarÇalışıyorSonlandı
7–9P1boşÇalışıyorSonlandı
9P1 biterSonlandıSonlandı

İki süreç toplam 9 ms'de biter. 0–9 ms arasında işlemci hiç boş kalmaz: 3 ms P1, 4 ms P2, 2 ms yine P1 çalışır ve 3 + 4 + 2 = 9 eder.

CPUDisk0123456789msP1P2P1 G/ÇP2P1
Şekil 2.13: Örnek 2.6'nın zaman çizelgesi. Üst satır CPU'yu, alt satır diski gösterir. 3–6 ms arasında CPU P2'yi çalıştırırken disk P1'in verisini okur; ikisi paralel çalışır.

Şekil 2.13 örneğin can alıcı noktasını görünür kılar: 3–6 ms arasında iki ayrı donanım aynı anda iş yapar. CPU P2'yi çalıştırırken disk P1 için okuma yapar. İşletim sistemi bu örtüşmeyi kullanmasaydı ne olurdu? P1 diski beklerken CPU boş dursaydı, yani süreçler art arda çalışsaydı toplam süre şöyle olurdu:

3 (P1 hesap) + 3 (disk bekleme) + 2 (P1 hesap) + 4 (P2 hesap) = 12 ms

Çoklu programlama 3 ms kazandırır ve toplam süre 12 ms'den 9 ms'ye iner. Ardışık çalışmada CPU 12 ms'nin yalnızca 9 ms'sinde iş yapar, yani zamanın %75'inde doludur; örtüşmeli çalışmada bu oran %100'dür. Gerçek sistemlerde G/Ç beklemeleri çok daha uzun olduğu için kazanç da çok daha büyüktür.

Örnekte bir ayrıntı daha vardır. P1'in disk işi t = 6'da biter, ama P1 ancak t = 7'de çalışır. Aradaki 1 ms'yi hazır kuyruğunda geçirir, çünkü işlemcide P2 vardır ve bu çizelgelemede çalışan süreç işlemciden zorla alınmaz.

2.4.6Zaman paylaşımı ve döner sıralı çizelgeleme

Önceki örnekte süreçler işlemciyi yalnızca beklemeye geçince bırakıyordu. Hiç G/Ç yapmayan, uzun bir hesap yapan bir süreç bu düzende işlemciyi dakikalarca tutabilir; o sırada kullanıcı fareyi kıpırdatsa bile ekran tepki vermez. Etkileşimli sistemler bu yüzden işlemciyi süreçlere kısa dilimler hâlinde dağıtır.

Tanım 2.11

Zaman paylaşımı (time sharing), işlemcinin süreçler arasında kısa aralıklarla dönüşümlü dağıtılmasıdır. Döner sıralı çizelgeleme (round robin), hazır kuyruğundaki her sürece sırayla en çok bir zaman dilimi (time slice, quantum) kadar işlemci verir. Süreç dilim içinde bitmezse kuyruğun sonuna gider ve bağlam değiştirilir. Zaman dilimi çoğu zaman q harfiyle gösterilir.

Döner sıralı çizelgelemenin kuralı basittir: kuyruğun başındaki süreci al, en çok q kadar çalıştır, bitmediyse kuyruğun sonuna koy. Kuralın sonuçlarını görmek için hesabı adım adım yapmak gerekir. Bu tür hesaplarda bir Gantt çizelgesi (Gantt chart) kullanılır: zaman ekseni üzerinde işlemcinin her aralıkta hangi süreçte olduğunu gösteren yatay çubuklar.

Örnek 2.7

Üç süreç t = 0'da hazır kuyruğunda, sıra P1, P2, P3. İşlemci süreleri P1 = 5 ms, P2 = 3 ms, P3 = 2 ms. Zaman dilimi q = 2 ms. Her sürecin bitiş zamanını bulalım.

Aralık (ms)CPUNe olur?Kalan (P1, P2, P3)Kuyruk (sonra)
başlangıç—Üçü de hazır5, 3, 2P1, P2, P3
0–2P1Dilim doldu, P1 sona gider3, 3, 2P2, P3, P1
2–4P2Dilim doldu, P2 sona gider3, 1, 2P3, P1, P2
4–6P3P3 biter (t = 6)3, 1, 0P1, P2
6–8P1Dilim doldu, P1 sona gider1, 1, 0P2, P1
8–9P2P2 1 ms kullanır, biter (t = 9)1, 0, 0P1
9–10P1P1 1 ms kullanır, biter (t = 10)0, 0, 0boş

Bitiş zamanları: P3 = 6 ms, P2 = 9 ms, P1 = 10 ms. Toplam iş 5 + 3 + 2 = 10 ms olduğu için son süreç t = 10'da biter.

CPU zaman çizelgesi (Gantt)P1P2P3P1P2P1012345678910msHazır kuyruğu:boşKalan süre:P1: 0 (bitti t=10)P2: 0 (bitti t=9)P3: 0 (bitti t=6)
Şekil 2.14: Örnek 2.7'nin tamamlanmış Gantt çizelgesi: P1, P2, P3, P1, P2, P1. Hazır kuyruğu boştur; P3 t = 6'da, P2 t = 9'da, P1 t = 10'da bitmiştir.

Tablonun iki ayrıntısı dikkat ister. Birincisi, 8–9 ve 9–10 aralıkları birer milisaniyedir. İşi dilimden önce biten süreç dilimin geri kalanını beklemez; işlemci hemen sıradakine geçer. İkincisi, kuyruk sütunu her adımda kimin sona gittiğini gösterir ve hesabın doğruluğunu bu sütun belirler. Kuyruk sırası atlanırsa bütün sonraki satırlar yanlış çıkar.

Şekil 2.14 sonucu çizelge olarak verir. Çizelgede altı çubuk vardır, yani işlemci altı kez bir sürece verilmiştir. Ardışık iki çubuk farklı süreçlere ait olduğunda araya bir bağlam değiştirme girer; bu örnekte 5 bağlam değiştirme yapılır. Hızlı geçişler sayesinde üç süreç de “aynı anda” ilerliyor gibi görünür. Gerçek sistemlerde zaman dilimi birkaç milisaniye ile birkaç on milisaniye arasındadır; insan bu kadar kısa geçişleri fark etmez.

Zaman diliminin seçimi bir dengedir. Dilim küçüldükçe süreçler daha sık sıra bulur, ama bağlam değiştirme sayısı artar. Dilim çok büyük seçilirse (q = 5) her süreç ilk seferde biter ve kısa işler uzun işin arkasında bekler.

Tablo 2.7: Aynı üç sürecin (P1 = 5, P2 = 3, P3 = 2 ms) farklı zaman dilimleriyle çizelgelenmesi.
Zaman dilimiBitişler (P1, P2, P3)Bağlam değiştirme
q = 110, 8, 68
q = 210, 9, 65
q = 55, 8, 102

Tablo 2.7 etkiyi sayılarla gösterir; bağlam değiştirmenin süresi bu hesaplarda sıfır sayılmıştır.

Sık yapılan hata

Dilimi dolan sürecin kuyruğun başına döndüğünü varsaymak. Süreç her zaman kuyruğun sonuna gider; yoksa aynı süreç işlemciyi bırakmamış olurdu. İkinci yaygın hata da kalan süresi dilimden kısa olan sürece yine tam dilim vermektir: 8–9 aralığında P2'nin 1 ms'si kalmıştır ve işlemci t = 9'da P1'e geçer.

2.4.7Çizelgeleme algoritmalarını karşılaştırma

Döner sıralı çizelgeleme tek seçenek değildir. Süreç çizelgeleme simülatöründe dört algoritma karşılaştırılabilir. Bu kesim bunların üçünü aynı örnek üzerinde hesaplar. Karşılaştırma için iki ölçü kullanılır.

Tanım 2.12

Bir sürecin tamamlanma süresi (turnaround time), hazır kuyruğuna geldiği andan işini bitirdiği ana kadar geçen süredir: tamamlanma süresi = bitiş − varış. Bekleme süresi (waiting time), bu sürenin işlemcide çalışmadan, hazır kuyruğunda geçen kısmıdır: bekleme süresi = tamamlanma süresi − işlemci süresi.

Üç algoritma şöyle çalışır. FCFS (first come, first served, ilk gelen ilk hizmet alır) süreçleri geliş sırasıyla, her birini sonuna kadar çalıştırır. SJF (shortest job first, en kısa iş önce) işlemci boşalınca hazır süreçlerden süresi en kısa olanı seçer ve onu sonuna kadar çalıştırır. Döner sıralı çizelgeleme ise Örnek 2.7'deki gibi dilimlerle dağıtır.

Örnek 2.8

Yine P1 = 5, P2 = 3, P3 = 2 ms; üçü de t = 0'da gelmiş, kuyruk sırası P1, P2, P3. Her algoritma için ortalama bekleme süresini bulalım. Varış 0 olduğundan tamamlanma süresi bitiş zamanına eşittir.

  1. FCFS. Çizelge: P1 0–5, P2 5–8, P3 8–10. Bitişler 5, 8, 10. Beklemeler: P1 = 5 − 5 = 0, P2 = 8 − 3 = 5, P3 = 10 − 2 = 8. Ortalama (0 + 5 + 8) / 3 = 13 / 3 ≈ 4,33 ms.
  2. SJF. En kısa iş P3, sonra P2, sonra P1. Çizelge: P3 0–2, P2 2–5, P1 5–10. Beklemeler: P3 = 0, P2 = 5 − 3 = 2, P1 = 10 − 5 = 5. Ortalama (0 + 2 + 5) / 3 = 7 / 3 ≈ 2,33 ms.
  3. Döner sıralı (q = 2). Bitişler P1 = 10, P2 = 9, P3 = 6. Beklemeler: P1 = 10 − 5 = 5, P2 = 9 − 3 = 6, P3 = 6 − 2 = 4. Ortalama (5 + 6 + 4) / 3 = 15 / 3 = 5 ms.

Ortalama bekleme en düşük SJF'de (≈ 2,33 ms), en yüksek döner sıralı çizelgelemededir (5 ms).

Tablo 2.8: Üç algoritmanın aynı örnekteki sonuçları (P1 = 5, P2 = 3, P3 = 2 ms; hepsi t = 0'da).
AlgoritmaBitişler (P1, P2, P3)Ortalama tamamlanmaOrtalama bekleme
FCFS5, 8, 1023 / 3 ≈ 7,67 ms13 / 3 ≈ 4,33 ms
SJF10, 5, 217 / 3 ≈ 5,67 ms7 / 3 ≈ 2,33 ms
Döner sıralı (q = 2)10, 9, 625 / 3 ≈ 8,33 ms15 / 3 = 5 ms

Tablo 2.8 sonuçları yan yana koyar. Döner sıralı çizelgelemenin amacı ortalama süreyi küçültmek değil, hiçbir süreci uzun süre işlemcisiz bırakmamaktır. FCFS'de P3 ilk kez t = 8'de çalışır; döner sıralıda ise t = 4'te çalışmaya başlar. Etkileşimli bir sistemde kullanıcının tıklamasına hızlı tepki vermek, ortalama sürenin biraz uzamasından daha önemlidir.

SJF ortalama beklemeyi en aza indirir, ama iki sorunu vardır. Birincisi, bir işin ne kadar süreceği çoğu zaman önceden bilinmez; işletim sistemi bunu ancak geçmiş davranıştan tahmin edebilir. İkincisi, sürekli kısa işler gelirse uzun bir iş hiç sıra bulamayabilir. Bir sürecin sonsuza dek sıra bekleyebilmesine açlık denir.

Sık yapılan hata

Bekleme süresini “sürecin ilk kez çalışmaya başladığı an” sanmak. Bekleme süresi sürecin hazır kuyruğunda geçirdiği bütün aralıkların toplamıdır. Döner sıralı örnekte P1 0–2'de çalışır, sonra 2–6 arasında 4 ms ve 8–9 arasında 1 ms bekler; toplam bekleme 5 ms'dir ve bu değer 10 − 5 formülüyle aynıdır.

2.4.8Kilitlenme

Süreçler yalnızca işlemciyi değil, yazıcı, dosya ya da veri tabanı kaydı gibi kaynakları da paylaşır. Bu kaynakların çoğunu aynı anda yalnızca bir süreç kullanabilir. Bir yazıcıya iki süreç aynı anda yazsa sayfalara iki belgenin satırları karışık basılır. Süreçler bu yüzden kaynağı kullanmadan önce onu “tutar”, işi bitince bırakır. Bu düzen, belirli koşullarda süreçlerin birbirini sonsuza dek beklemesine yol açabilir.

Tanım 2.13

Kilitlenme (deadlock), bir grup sürecin her birinin, gruptaki başka bir sürecin tuttuğu kaynağı beklediği ve hiçbirinin ilerleyemediği durumdur.

Süreç ASüreç BYazıcıDosyatutuyortutuyoristiyoristiyordöngü = kilitlenmedüz ok: kaynak sürecin elinde · kesikli ok: süreç kaynağı bekliyor
Şekil 2.15: Kaynak tahsis grafiği. Düz ok kaynağın bir sürecin elinde olduğunu, kesikli ok sürecin o kaynağı beklediğini gösterir. A yazıcıyı tutup dosyayı, B dosyayı tutup yazıcıyı bekler; oklar bir döngü oluşturur.
Örnek 2.9

Süreç A bir raporu yazdıracak ve yazdırırken bir dosyaya kayıt düşecek. Süreç B dosyayı güncelleyecek ve sonra yazıcıdan bir özet alacak. Olaylar şu sırayla gerçekleşiyor:

  1. A yazıcıyı alır ve kullanır.
  2. B dosyayı kilitler ve kullanır.
  3. A, yazıcıyı bırakmadan dosyayı ister. Dosya B'de olduğu için A bekler.
  4. B de dosyayı bırakmadan yazıcıyı ister. Yazıcı A'da olduğu için B bekler.

Bekleme zinciri A → Dosya → B → Yazıcı → A biçiminde kapanır. İkisi de elindekini bırakmadığı için ikisi de sonsuza dek bekler.

Şekil 2.15 dördüncü adımdan sonraki durumu gösterir. Kilitlenmenin bir grafikte görünen işareti oklardaki döngüdür. Döngüdeki her süreç bir kaynağı tutar ve döngüdeki bir sonraki kaynağı bekler.

Kilitlenme ancak dört koşul aynı anda sağlanırsa oluşur. Bu koşulları 1971'de Coffman ve arkadaşları tanımlamıştır; kilitlenme bugün de bu dört koşulla açıklanır.

Teorem 2.1 (Kilitlenmenin dört koşulu)

Kilitlenme için şu dört koşulun hepsi gereklidir:

  1. Karşılıklı dışlama (mutual exclusion): kaynağın aynı anda tek sahibi olabilir.
  2. Tut ve bekle (hold and wait): süreç elindeki kaynağı bırakmadan başka bir kaynak bekler.
  3. Ön alınamazlık (no preemption): kaynak sahibinin elinden zorla alınamaz; ancak sahibi bırakınca boşalır.
  4. Döngüsel bekleme (circular wait): bekleyen süreçler halka biçiminde birbirine bağlıdır.

Koşullardan biri bile kırılırsa kilitlenme oluşamaz.

Teorem 2.1 çözümün de yolunu gösterir: dört koşuldan birini kırmak yeter. Pratikte en kolay kırılan koşul döngüsel beklemedir. Bütün süreçlerin kaynakları aynı sırayla istemesi kural hâline getirilir, örneğin önce Yazıcı, sonra Dosya. Örnek 2.9'daki B de önce yazıcıyı istemek zorunda kalırsa, yazıcı A'dayken B hiçbir şey tutmadan bekler. A dosyayı da alır, işini bitirir, iki kaynağı bırakır ve B devam eder. Halka kurulamaz.

Karşılıklı dışlamayı kırmak çoğu zaman mümkün değildir: bir yazıcı doğası gereği tek sahiplidir.

2.5Bellek yönetimi

İşlemci komutları ve verileri yalnızca RAM'den okur; bu yüzden her program çalışmak için belleğe yüklenmek zorundadır. İşletim sistemi her sürece yer bulmalı, süreçlerin birbirinin alanına girmesini engellemeli ve RAM yetmediğinde bir çıkış yolu sunmalıdır.

2.5.1Bellek yönetiminin görevleri

Tablo 2.9: Bellek yönetiminin altı görevi.
GörevAnlamı
AyırmaHer programa gereksinimine göre bellek alanı sağlamak
KorumaBir sürecin başka bir sürecin belleğini izinsiz değiştirmesini önlemek
Sanal bellekProgramlara fiziksel RAM'den bağımsız bir adres alanı sunmak
SayfalamaBelleği sabit boyutlu parçalarla yönetmek
TakasGerektiğinde bazı verileri geçici olarak diske taşımak
PaylaşımOrtak kodu ya da veriyi denetimli biçimde birden fazla sürece açmak

Tablo 2.9 görevleri listeler. İlk ikisi, ayırma ve koruma, her bellek yönetiminin olmazsa olmazıdır. Sanal bellek ve sayfalama, bu iki görevi esnek biçimde yapmanın bugünkü yoludur. Takas, RAM yetmeyince devreye girer. Paylaşım ise belleği verimli kullanmaya yarar. Örneğin aynı tarayıcıdan açılan beş süreç, programın kodunu RAM'de beş kez değil bir kez tutar; kod yalnızca okunduğu için paylaşmak güvenlidir. Her sürecin kendi verisi ise ayrı kalır.

2.5.2Ayırma, koruma ve takas adım adım

Bellek yönetiminin temel fikirleri, gerçek sistemlerden daha basit bir modelde açıkça görülür. Bu modelde her sürece RAM'de bitişik tek bir bölge verilir ve bölge iki sayıyla tanımlanır.

Tanım 2.14

Taban yazmacı (base register) sürecin bölgesinin RAM'deki başlangıç adresini, limit yazmacı (limit register) bölgenin uzunluğunu tutar. Süreç kendi bölgesinin başını 0 kabul eden mantıksal adreslerle çalışır. Donanım her erişimde mantıksal adresi limitle karşılaştırır. Adres limitten küçükse fiziksel adres = taban + mantıksal adres olur; değilse erişim engellenir.

Bu iki yazmaç işlemcinin içindedir ve donanım onları her bellek erişiminde kendiliğinden kullanır. Süreç değiştiğinde işletim sistemi, yeni sürecin taban ve limit değerlerini yazmaçlara yükler; bu iş bağlam değiştirmenin bir parçasıdır. Süreç bu yazmaçları kendisi değiştiremez, çünkü onlara yazan komutlar yalnızca çekirdek modunda çalışır.

Örnek 2.10

RAM 640 KB'dır ve ilk 100 KB'ı işletim sistemi kullanır. Sırayla A (200 KB) ve B (150 KB) süreçleri yükleniyor, A iki bellek erişimi yapıyor, sonra 250 KB isteyen C süreci geliyor. Adresler KB cinsindendir.

AdımOlayHesapSonuç
1Başlangıç640 − 100 = 5400–100 işletim sistemi, 540 KB boş
2A yüklenirtaban = 100, limit = 200; 100 + 200 = 300A: 100–300; 340 KB boş
3B yüklenirtaban = 300, limit = 150; 300 + 150 = 450B: 300–450; 640 − 450 = 190 KB boş
4A, 150 adresini ister150 < 200 ✓; 100 + 150 = 250Fiziksel adres 250'ye gidilir
5A, 250 adresini ister250 ≥ 200 ✗Erişim engellenir; A sonlandırılır
6C 250 KB ister190 < 250Yer yok; beklemedeki B diske yazılır, 640 − 300 = 340 KB bitişik boş alan
7C yüklenirtaban = 300, limit = 250; 300 + 250 = 550C: 300–550; 640 − 550 = 90 KB boş; B diskte
RAM (640 KB)Disk (takas alanı)İşletimsistemiSüreç A200 KBSüreç B150 KBboş 190 KB0100300450640150 → 100 + 150 = 250 ✓A çalışıyor, mantıksal adres 150 isteniyor150 < limit (200) → fiziksel adres = taban + 150 = 250 ✓
RAM (640 KB)Disk (takas alanı)İşletimsistemiSüreç A200 KBSüreç B150 KBboş 190 KB0100300450640250 → 100 + 250 = 350 ✗ (B’nin alanı)A çalışıyor, mantıksal adres 250 isteniyor250 ≥ limit (200) → ihlal ✗: donanım kesmesi, erişim engellenir
RAM (640 KB)Disk (takas alanı)Süreç B (150 KB)İşletimsistemiSüreç A200 KBSüreç C250 KBboş 90 KB0100300550640Süreç C → taban = 300, limit = 250B diskte bekler; çalışacağı zaman geri yüklenir (swap in).
Şekil 2.16: Örnek 2.10'un üç adımı. (a) Adım 4: A'nın 150 adresi limitin altındadır ve 250 fiziksel adresine çevrilir. (b) Adım 5: 250 adresi limiti aşar; izin verilseydi 350 ile B'nin alanına yazılırdı. (c) Adım 7: B diske yazılmış, C 300–550 arasına yüklenmiştir.

Şekil 2.16 tablonun önemli anlarını RAM şeridi üzerinde gösterir. Ayırmada (adım 1–3) her yeni süreç boş alanın başından yer alır ve bölgeler çakışmaz. Geçerli erişimde (adım 4) A kendi gözünden 150 adresini ister; A, bölgesinin RAM'de 100'den başladığını bilmez. Donanım önce 150'yi limitle karşılaştırır, sonra tabanı ekler: 100 + 150 = 250.

Koruma ihlali (adım 5). A bu kez 250 adresini ister. 250, 200'den küçük değildir; adres A'nın bölgesinin dışındadır. Donanım erişimi yapmaz, bir kesme üretir ve denetimi çekirdeğe verir. İşletim sistemi A'yı “erişim ihlali” (segmentation fault) hatasıyla sonlandırır. Donanım engellemeseydi fiziksel adres 100 + 250 = 350 olurdu, yani B'nin bölgesine yazılırdı. Koruma sayesinde B'nin belleği bozulmaz.

Takas (adım 6–7). C 250 KB ister. RAM'de 450–640 arasında 190 KB boş alan vardır; 190 < 250 olduğu için C sığmaz. O sırada B bir disk işini bekliyor ve bir süre çalışmayacak. İşletim sistemi B'nin belleğinin tamamını diskteki takas alanına (swap space) yazar. Bu işleme dışarı takas denir. 300–640 arasında 340 KB'lık bitişik boş alan oluşur ve C 300–550 arasına yüklenir; geriye 90 KB kalır. B yeniden çalışacağı zaman RAM'e geri alınır. Yer yoksa bu kez başka bir süreç diske yazılır.

Tanım 2.15

Takas (swapping), RAM'de yer açmak için bir sürecin ya da onun bir parçasının belleğini geçici olarak diske yazmak, gerektiğinde de geri okumaktır. Diskte bu iş için ayrılan alana takas alanı denir.

Takas kapasiteyi artırır, ama ağır bir bedeli vardır: disk RAM'den çok yavaştır. Bu fark sanal bellek kesiminde sayılarla verilir.

Sık yapılan hata

Limit yazmacının bölgenin bitiş adresini tuttuğunu düşünmek. Limit bölgenin uzunluğudur. A için limit 200'dür, bitiş adresi 300 değil. Bu yüzden karşılaştırma mantıksal adresle yapılır (150 < 200), fiziksel adresle değil. Geçerli mantıksal adresler 0'dan 199'a kadardır; 200 adresi bile bölgenin dışındadır.

Bu basit modelin bir zayıflığı vardır: süreçler gelip gittikçe RAM'de küçük boşluklar oluşur ve toplam boş alan yeterli olsa bile bitişik bir parça bulunamayabilir. Sanal bellek ve sayfalama bu sorunu çözer.

2.5.3Sanal bellek ve sayfalama

Tanım 2.16

Sanal bellek (virtual memory), her sürece 0'dan başlayan, fiziksel RAM'den bağımsız kendi sanal adres alanını sunan düzendir. Sayfalamada (paging) sanal adres alanı eşit boyutlu sayfalara (page), fiziksel RAM de aynı boyutta çerçevelere (frame) bölünür. Her sürecin bir sayfa tablosu (page table) vardır ve tablo, her sayfanın hangi çerçevede ya da diskte olduğunu tutar. Yaygın sayfa boyutu 4 KB'dır (4.096 bayt).

Süreç A (sanal)Süreç B (sanal)Fiziksel bellek (RAM)çerçeve 0: A3çerçeve 1: B0çerçeve 2: A0çerçeve 3: boşçerçeve 4: B1çerçeve 5: A1Disktakas alanı: A2, B2sayfa 0sayfa 1sayfa 2sayfa 3sayfa 0sayfa 1sayfa 2sayfa =çerçeve= 4 KB
Şekil 2.17: İki sürecin sanal sayfaları fiziksel çerçevelere ya da diske eşlenir. A'nın 0, 1 ve 3 numaralı sayfaları sırasıyla 2, 5 ve 0 numaralı çerçevelerde, 2 numaralı sayfası diskteki takas alanındadır. B'nin 0 ve 1 numaralı sayfaları 1 ve 4 numaralı çerçevelerde, 2 numaralı sayfası diskte durur. Çerçeve 3 boştur.

Şekil 2.17 sayfalamanın üç önemli sonucunu gösterir.

  • Her süreç kendi dünyasını görür. A da B de 0 numaralı sayfadan başlar. İki sürecin “0 numaralı adresi” RAM'de farklı yerlerdir: A'nınki çerçeve 2'de, B'ninki çerçeve 1'de. Bir süreç ötekinin sayfasına hiç adres üretemez, çünkü kendi tablosunda o çerçeve yoktur. Koruma kendiliğinden sağlanır.
  • Sayfalar RAM'de ardışık olmak zorunda değildir. A'nın sayfaları 2, 5 ve 0 numaralı çerçevelere dağılmıştır. Her boş çerçeve her sayfaya uyar; bitişik yer arama sorunu ortadan kalkar.
  • Az kullanılan sayfa diske çıkarılabilir. A2 ve B2 diskte bekler. Süreç onlara ihtiyaç duyana kadar RAM'de yer kaplamazlar. Takas artık sürecin tamamıyla değil, tek tek sayfalarla yapılır.

Takas alanı Windows'ta sayfa dosyası (page file), Linux ve macOS'ta swap adını alır. Sanal belleğin bedeli hızdır. Bir RAM erişimi yaklaşık 50–100 nanosaniye (ns) sürer; bir SSD'den okuma ise yaklaşık 0,1 milisaniyedir (ms). İki süreyi aynı birime çevirerek karşılaştıralım:

0,1 ms = 100.000 ns; 100.000 ÷ 100 = 1.000 ve 100.000 ÷ 50 = 2.000

Diskten bir sayfa okumak, bir RAM erişiminden 1.000 ile 2.000 kat daha uzun sürer. Takas az olduğu sürece bu fark hissedilmez. Ama RAM çok yetersizse işletim sistemi sürekli sayfa yazıp okumaya başlar, disk ışığı yanıp söner ve bilgisayar belirgin biçimde yavaşlar. Disk boş olsa bile RAM yetersizliği bu yüzden yavaşlığa yol açar.

2.5.4Adres çevirisi adım adım

Süreç bir sanal adres ürettiğinde, işlemcinin içindeki bellek yönetim birimi (memory management unit, MMU) bu adresi fiziksel adrese çevirir. Çeviri iki aşamadır: önce adres sayfa numarası ve sayfa içindeki bağıl konum (offset) olarak ikiye ayrılır, sonra sayfa numarası tabloda aranır.

sayfa = sanal adres ÷ sayfa boyutu (tam bölüm); bağıl konum = sanal adres mod sayfa boyutu

fiziksel adres = çerçeve × sayfa boyutu + bağıl konum

Burada “mod”, bölmeden kalanı gösterir. Bağıl konum çeviride hiç değişmez: sayfa bütün hâlinde bir çerçeveye taşındığı için, sayfanın 4. baytı çerçevenin de 4. baytıdır. Değişen yalnızca sayfa numarasının yerine çerçeve numarasının gelmesidir.

Örnek 2.11

Sayfa boyutu 4.096 bayt. Süreç A'nın sayfa tablosu: sayfa 0 → çerçeve 2, sayfa 1 → çerçeve 5, sayfa 2 → diskte, sayfa 3 → çerçeve 0. Çerçeve 3 boş. A önce 4100, sonra 8200 sanal adresini okuyor.

  1. Bölme. 4100 ÷ 4096 = 1, kalan 4. Yani 4100 = 1 × 4096 + 4: sayfa 1, bağıl konum 4.
  2. Tablo. Sayfa 1 → çerçeve 5. Sayfa RAM'dedir.
  3. Fiziksel adres. 5 × 4096 + 4 = 20.480 + 4 = 20.484. Okuma bu adresten yapılır.
  4. Bölme. 8200 ÷ 4096 = 2, kalan 8. Yani 8200 = 2 × 4096 + 8: sayfa 2, bağıl konum 8.
  5. Tablo. Sayfa 2 RAM'de değil, diskte. MMU bir sayfa hatası üretir; komut durdurulur ve işletim sistemi devreye girer.
  6. Yükleme. İşletim sistemi sayfa 2'yi diskten boş çerçeve 3'e okur ve tabloyu günceller: sayfa 2 → çerçeve 3.
  7. Yeniden deneme. 3 × 4096 + 8 = 12.288 + 8 = 12.296. Bu kez çeviri başarılıdır.
Sanal adres4100sayfa 1+44100 = 1×4096 + 4Sayfa tablosu (Süreç A)0çerçeve 21çerçeve 52diskte (yok)3çerçeve 0RAM0: A31: B02: A03: boş4: B15: A1Disk (takas)Fiziksel adres = 5 × 4096 + 4 = 20484
Sanal adres8200sayfa 2+88200 = 2×4096 + 8Sayfa tablosu (Süreç A)0çerçeve 21çerçeve 52diskte (yok)3çerçeve 0RAM0: A31: B02: A03: boş4: B15: A1Disk (takas)SAYFA HATASI (page fault)
Sanal adres8200sayfa 2+88200 = 2×4096 + 8Sayfa tablosu (Süreç A)0çerçeve 21çerçeve 52çerçeve 33çerçeve 0RAM0: A31: B02: A03: A24: B15: A1Disk (takas)Fiziksel adres = 3 × 4096 + 8 = 12296
Şekil 2.18: Örnek 2.11'in üç anı. (a) 4100 = 1 × 4096 + 4; sayfa 1 çerçeve 5'te, fiziksel adres 20484. (b) 8200 adresinin sayfası (2) diskte: sayfa hatası. (c) Sayfa 2 çerçeve 3'e yüklenmiş; fiziksel adres 3 × 4096 + 8 = 12296.
Tanım 2.17

Sayfa hatası (page fault), sürecin eriştiği sayfanın o anda RAM'de olmadığını MMU'nun bildirmesidir. İşletim sistemi sayfayı diskten bir çerçeveye yükler, sayfa tablosunu günceller ve kesilen komutu yeniden çalıştırır.

Şekil 2.18 çevirinin üç anını gösterir. Adının aksine sayfa hatası çoğunlukla bir programlama hatası değildir; sanal belleğin olağan işleyişidir. Bir program açılırken sayfalarının çoğu henüz diskte durur ve ilk erişimlerde sayfa hatalarıyla birer birer RAM'e gelir. Program bunu hiç fark etmez; yalnızca o erişim biraz uzun sürer. Gerçek bir hata ancak sürecin kendisine ait olmayan, tabloda hiç bulunmayan bir adrese erişmesiyle ortaya çıkar; o zaman işletim sistemi süreci erişim ihlaliyle sonlandırır.

Bölme ve kalan hesabı ikili sayılarla daha da kolaylaşır. 4096 = 212 olduğu için bir sanal adresin son 12 biti bağıl konumu, kalan bitleri sayfa numarasını verir. Donanım bölme yapmaz, yalnızca bitleri ikiye ayırır. Onaltılık yazımda her basamak 4 bit olduğundan son üç onaltılık basamak bağıl konumdur:

Tablo 2.10: Adres çevirisi onaltılık gösterimde: son üç basamak (12 bit) aynen korunur.
Sanal adresOnaltılıkSayfa · bağıl konumÇerçeveFiziksel adres (onaltılık)Fiziksel adres
41001004₁₆1 · 00455004₁₆20484
82002008₁₆2 · 00833008₁₆12296

Tablo 2.10 bu kısayolu gösterir. 4100 onaltılıkta 1004₁₆'dır. Baştaki 1 sayfa numarası, sondaki 004 bağıl konumdur. Sayfa 1 çerçeve 5'te olduğu için baştaki 1 yerine 5 yazılır: 5004₁₆ = 20484. Aynı sonucu onluk hesap da vermişti.

Sık yapılan hata

Fiziksel adresi bulurken çerçeve numarasına bağıl konumu doğrudan eklemek: 5 + 4 = 9. Çerçeve numarası bir sıra numarasıdır; çerçevenin başlangıç adresi için sayfa boyutuyla çarpılması gerekir: 5 × 4096 = 20.480. Bağıl konum bu başlangıca eklenir.

2.5.5Sayfa değiştirme: LRU ve FIFO

Sayfa hatası olduğunda boş çerçeve varsa iş kolaydır. RAM doluysa işletim sistemi bir sayfayı diske çıkarıp yerine yenisini yüklemek zorundadır. Hangi sayfanın çıkarılacağına karar vermeye sayfa değiştirme (page replacement) denir. Yanlış seçim, hemen ardından aynı sayfa için yeni bir sayfa hatası doğurur. Her hata da yavaş bir disk okuması demektir.

Tanım 2.18

LRU (least recently used, en uzun süredir kullanılmayan) kuralı, son kullanımı en eskiye dayanan sayfayı çıkarır. FIFO (first in, first out, ilk giren ilk çıkar) kuralı ise RAM'e en önce yüklenmiş sayfayı çıkarır. İstenen sayfanın zaten RAM'de olmasına isabet denir.

LRU'nun arkasındaki fikir şudur: programlar yakın zamanda kullandıkları sayfaları yakında yeniden kullanma eğilimindedir. Bir döngü aynı komutları tekrar tekrar çalıştırır; bir fonksiyon aynı değişkenlere tekrar tekrar erişir. Uzun süredir dokunulmamış bir sayfanın yakında gerekme olasılığı daha düşüktür.

Örnek 2.12

Sürecin RAM'de yalnızca 3 çerçevesi var. Süreç sayfaları sırayla 7, 0, 1, 2, 0, 3, 0, 4 diye istiyor. LRU kuralıyla kaç sayfa hatası olur?

İstek noSayfaSonuçÇıkarılanRAM'deki sayfalar (son kullanım)
17hata—7 (1)
20hata—7 (1), 0 (2)
31hata—7 (1), 0 (2), 1 (3)
42hata72 (4), 0 (2), 1 (3)
50isabet—2 (4), 0 (5), 1 (3)
63hata12 (4), 0 (5), 3 (6)
70isabet—2 (4), 0 (7), 3 (6)
84hata24 (8), 0 (7), 3 (6)

8 istekte 6 sayfa hatası, 2 isabet olur. İlk üç hata boş çerçevelere yüklemedir; sonraki üç hatada bir sayfa çıkarılır.

istekler70120304çerçevelersayfa 2son kullanım: 4. isteksayfa 0son kullanım: 2. isteksayfa 1son kullanım: 3. istekçıkarılan: sayfa 7sayfa hatası
istekler70120304çerçevelersayfa 2son kullanım: 4. isteksayfa 0son kullanım: 5. isteksayfa 3son kullanım: 6. istekçıkarılan: sayfa 1sayfa hatası
Şekil 2.19: Örnek 2.12'nin iki çıkarma anı. (a) 4. istek: sayfa 2 için yer yoktur; son kullanımı en eski olan sayfa 7 (1. istek) çıkarılır. (b) 6. istek: sayfa 3 için en eski kullanım sayfa 1'dedir (3. istek); sayfa 0 az önce, 5. istekte kullanıldığı için korunur.

Şekil 2.19 çıkarma kararlarının ikisini gösterir. Tablodaki parantez içindeki sayılar, LRU'nun karar için tuttuğu bilgidir: her sayfanın en son hangi istekte kullanıldığı. Çıkarılacak sayfa, bu sayısı en küçük olandır. Beşinci istekte sayfa 0 isabet ettiğinde yalnızca son kullanım zamanı 2'den 5'e güncellenir. Bu küçük güncelleme, altıncı istekte sayfa 0'ı çıkarılmaktan kurtarır.

Aynı istek dizisi FIFO ile işlenirse ne olur? FIFO yalnızca sayfaların RAM'e giriş sırasına bakar; isabetler sırayı değiştirmez.

Tablo 2.11: Aynı dizinin (7, 0, 1, 2, 0, 3, 0, 4; 3 çerçeve) FIFO ile işlenmesi. RAM sütunu giriş sırasını gösterir: soldaki en eskidir.
İstek noSayfaSonuçÇıkarılanRAM (eskiden yeniye)
1–37, 0, 13 hata—7, 0, 1
42hata70, 1, 2
50isabet—0, 1, 2
63hata01, 2, 3
70hata12, 3, 0
84hata23, 0, 4

Tablo 2.11 FIFO'nun 7 sayfa hatası verdiğini gösterir; LRU'dan bir fazla. Fark altıncı istekte doğar. FIFO, sayfa 0'ın az önce kullanıldığını dikkate almaz; 0 en eski giren sayfa olduğu için onu çıkarır. Hemen ardından yedinci istek yine sayfa 0'ı ister ve gereksiz bir hata oluşur. LRU ise sık kullanılan sayfa 0'ı korumuştu.

Her sayfa hatası yaklaşık 0,1 ms'lik bir SSD okuması gerektirirse LRU'nun 6 hatası yaklaşık 0,6 ms, FIFO'nun 7 hatası 0,7 ms tutar; isabetler ise nanosaniyeler içinde biter.

LRU her dizide FIFO'dan iyi değildir, ama gerçek programların çoğunda daha az hata verir. Kesin LRU her erişimde zaman kaydı gerektirdiği için pahalıdır; işletim sistemleri ona yaklaşan daha ucuz kurallar kullanır.

Sık yapılan hata

LRU ile FIFO'yu aynı sanmak, çünkü ikisi de “eski” sayfayı çıkarır. FIFO RAM'e girişi en eski olanı, LRU son kullanımı en eski olanı çıkarır. İsabet FIFO'da hiçbir şeyi değiştirmez, LRU'da ise sayfanın son kullanım zamanını yeniler.

2.6Aygıt ve dosya yönetimi

Kullanıcı bilgisayarla klavye, ekran, yazıcı ve diskler aracılığıyla konuşur. İşletim sistemi bu aygıtları sürücülerle yönetir, disk üzerindeki ham veriyi de adı, yeri ve sahibi olan dosyalar biçiminde düzenler.

2.6.1Aygıtlar ve sürücüler

Bir lazer yazıcı ile bir mürekkep püskürtmeli yazıcı, aynı “sayfa yazdır” isteği için tamamen farklı komutlar bekler. İki farklı üreticinin ekran kartları birbirinden farklı yazmaçlara sahiptir. İşletim sistemi bu farklılıkların hepsini kendi içinde tutsaydı her yeni aygıt için işletim sisteminin değişmesi gerekirdi.

Tanım 2.19

Aygıt sürücüsü (device driver), işletim sisteminin ortak isteklerini belirli bir donanıma özgü işlemlere çeviren yazılımdır. Sürücüyü çoğunlukla aygıtın üreticisi yazar; sürücü sonradan işletim sistemine eklenir.

Uygulama“yazdır”, “göster”İşletim sistemiortak arayüzYazıcı sürücüsüYazıcıEkran kartı sürücüsüEkran kartıUSB sürücüsüUSB bellekkesme: “iş bitti / veri geldi”
Şekil 2.20: Uygulama “yazdır” ya da “göster” gibi ortak istekler verir. İşletim sistemi bunları ortak bir arayüzle ilgili sürücüye (yazıcı, ekran kartı, USB) iletir. Aygıt işini bitirince kesmeyle “iş bitti / veri geldi” bildirir.

Şekil 2.20 sürücülerin yerini gösterir: işletim sistemiyle donanım arasında, her aygıt için ayrı bir çevirmen. Aygıt yönetimiyle ilgili üç kavram daha bu düzenin parçasıdır.

  • Tak ve çalıştır (plug and play): işletim sistemi yeni takılan uyumlu bir aygıtı algılar, kimliğini okur ve uygun sürücüyü kendiliğinden yükleyip yapılandırır. Bir USB bellek takıldığında birkaç saniye içinde Dosya Gezgini'nde görünmesi bu sayededir.
  • Kesme: aygıt bir olayı işlemciye bildirir. Klavyede tuşa basılması, yazıcının işi bitirmesi, ağdan paket gelmesi birer kesmedir.
  • Tampon (buffer): hızları farklı bileşenler arasında veriyi geçici olarak tutan bellek alanıdır.
Örnek 2.13

20 sayfalık bir belge, dakikada 10 sayfa basan bir yazıcıya gönderiliyor. Tampon olmasaydı kelime işlemci her sayfada yazıcıyı bekler ve 2 dakika boyunca donmuş gibi görünürdü. Tamponla işletim sistemi 20 sayfanın tamamını kısa sürede yazdırma kuyruğuna alır ve kelime işlemci hemen serbest kalır. Sürücü sayfaları tampondan yazıcının hızında gönderir; her sayfa bitince yazıcı bir kesmeyle hazır olduğunu bildirir. Yazdırma yine 2 dakika sürer, ama kullanıcı o sürede çalışmaya devam eder.

2.6.2Dosya sistemi

Bir disk, kendi başına numaralanmış milyonlarca bloktan oluşan büyük bir depodur. “Ödevim 18.452 numaralı blokta başlıyor” diye bir şey hatırlamak mümkün değildir. Kullanıcı ve programlar dosyaları adlarıyla anar. Ad ile blok numarası arasındaki köprüyü dosya sistemi kurar.

Tanım 2.20

Dosya sistemi (file system), verinin depolama aygıtında nasıl adlandırıldığını, düzenlendiğini ve bulunduğunu tanımlayan düzendir. Dosya adı ve içeriği olan veri birimidir. Klasör (folder, directory) dosyaları ve alt klasörleri gruplar. Yol (path) dosyanın klasör yapısındaki konumunu belirtir. Meta veri (metadata) dosyanın içeriği dışındaki özellikleridir: boyut, tarih, sahip ve izinler. İzinler (permission) okuma, yazma ve çalıştırma yetkilerini belirler. Günlükleme (journaling) beklenmeyen kesintilerden sonra dosya sisteminin tutarlı kalmasını destekler.

rapor.txtklasör girdisiMeta veriboyut: 9 KBdeğiştirme: 10.10.2026sahip: ayse · izin: rw-bloklar: 12, 13, 40Disk blokları (4 KB)891011121314154041424344454647⋮9 KB → 3 blok (12 KB yer)
Şekil 2.21: Klasördeki rapor.txt girdisi dosyanın meta verisini gösterir: boyut 9 KB, değiştirme 10.10.2026, sahip ayse, izin rw-, bloklar 12, 13 ve 40. Disk 4 KB'lık bloklara bölünmüştür; 9 KB'lık dosya 3 blok, yani 12 KB yer kaplar.

Şekil 2.21 bir dosyanın diskte nasıl bulunduğunu üç halkalı bir zincir olarak gösterir. Klasör, içindeki her dosyanın adını ve o dosyanın meta veri kaydının yerini tutar. Meta veri kaydında dosyanın bütün özellikleri ve içeriğin hangi disk bloklarında olduğu yazar. İçeriğin kendisi de o bloklardadır. Bloklar ardışık olmak zorunda değildir: rapor.txt'nin ilk iki parçası 12 ve 13 numaralı bloklarda, üçüncü parçası 40 numaralı bloktadır.

Örnek 2.14

Blok boyutu 4 KB'dır. 9 KB'lık rapor.txt diskte kaç blok ve ne kadar yer kaplar? Aynı diskte 1 baytlık bir dosya ne kadar yer kaplar?

  1. 9 ÷ 4 = 2,25. Kesirli blok olmadığı için yukarı yuvarlanır: 3 blok.
  2. Kaplanan yer: 3 × 4 = 12 KB. Son blokta 12 − 9 = 3 KB boş kalır; bu alan başka bir dosyaya verilemez.
  3. 1 baytlık dosya da en az bir blok ister: 4 KB yer kaplar.

Windows'ta bir dosyanın Özellikler penceresinde “Boyut” ve “Diskteki boyut” diye iki ayrı değer görünmesi bu yüzdendir.

Günlükleme, dosya sisteminin bir değişikliği yapmadan önce ne yapacağını ayrı bir günlük alanına yazmasıdır. Bir dosyayı kaydetmek birkaç adım ister: içerik bloklara yazılır, meta veri güncellenir, boş blok listesi değişir. Elektrik bu adımların ortasında kesilirse dosya sistemi tutarsız kalabilir: örneğin bir blok hem boş hem dolu görünür. Günlüklü bir dosya sistemi açılışta günlüğe bakar ve yarım kalan işi ya tamamlar ya geri alır. Böylece uzun süren bir disk taraması gerekmez.

2.6.3Dosya sistemi türleri

Her işletim sistemi ailesi kendi dosya sistemini geliştirmiştir. Bir USB belleğin hangi bilgisayarlarda okunup yazılabileceği, hangi dosya sistemiyle biçimlendirildiğine (format) bağlıdır. Biçimlendirme, bir bölüme boş bir dosya sistemi yapısı yazmaktır ve bölümdeki eski içeriği siler.

Tablo 2.12: Yaygın dosya sistemleri.
Dosya sistemiPlatformGünlüklemeNe zaman kullanılır?
NTFSWindows (macOS yalnızca okur)VarWindows sistem diski; büyük dosya, izin ve şifreleme gerektiğinde
FAT32Hemen her aygıt ve işletim sistemiYokEski aygıtlar, kamera, basit bellek kartı; tek dosya en çok 4 GB
exFATWindows, macOS ve güncel LinuxYokBüyük dosyalı USB bellek ve SD kart; platformlar arası taşıma
ext4LinuxVarLinux sistem ve veri diski
APFSmacOS, iOS, iPadOSKlasik günlük yok; yazınca kopyalama ile tutarlılıkApple cihazlarının varsayılan dosya sistemi

Tablo 2.12 beş yaygın dosya sistemini karşılaştırır. Tablodaki en pratik sınır FAT32'nin dosya boyutu sınırıdır. FAT32 bir dosyanın boyutunu 32 bitlik bir sayıyla tutar. 32 bitle yazılabilecek en büyük sayı 232 − 1 = 4.294.967.295'tir; bu yüzden tek bir dosya en çok 4 GiB'tan bir bayt eksik olabilir. APFS'nin “yazınca kopyalama” yöntemi ise değişen veriyi eski verinin üstüne değil, yeni bir yere yazar; işlem tamamlanınca işaretçiyi yeni yere çevirir. Kesinti olursa eski sürüm sağlam kalır.

Örnek 2.15

FAT32 biçimli bir USB belleğe 3 GB'lık bir film ve 5 GB'lık bir video (1 GB = 109 bayt) kopyalanacak. Sınır 4.294.967.295 bayttır. 3.000.000.000 bayt sınırın altında kaldığı için film kopyalanır; 5.000.000.000 bayt sınırı aştığı için video, bellekte yer olsa bile kopyalanamaz. Bellek hem Windows hem macOS'ta yazılacaksa exFAT seçilir, çünkü macOS NTFS'ye yalnızca okuyabilir. Biçimlendirme içeriği sileceği için önce yedek alınır.

2.6.4Dosya sistemi ağacı ve yol

Klasörlerin içinde klasörler bulunabildiği için dosya sistemi bir ağaç biçimindedir. Ağacın en üstünde kök (root) klasör durur. Klasörler ağacın dalları, dosyalar yapraklarıdır.

/binetchomeaysealibelgelerrapor.txtnotlar.txtresimlertmp
Şekil 2.22: Bir Linux dosya ağacı. Kök klasörden (/) rapor.txt'ye giden yol vurgulanmıştır: / → home → ali → belgeler → rapor.txt.

Şekil 2.22 bir Linux sistemindeki ağacı gösterir. Kökte bin, etc, home ve tmp klasörleri vardır. Kullanıcıların kişisel klasörleri home altındadır. Vurgulu yol, bir dosyanın adresinin klasör adlarının art arda yazılmasıyla nasıl oluştuğunu gösterir.

Tanım 2.21

Mutlak yol (absolute path) kökten başlar ve dosyanın tam adresini verir: /home/ali/belgeler/rapor.txt. Göreli yol (relative path) geçerli klasöre (current directory), yani o anda içinde bulunulan klasöre göre yazılır. .. bir üst klasörü, . geçerli klasörün kendisini gösterir.

Örnek 2.16

Şekil 2.22'deki ağaçta rapor.txt'ye üç farklı geçerli klasörden göreli yolla nasıl ulaşılır?

  1. Geçerli klasör /home/ali: belgeler/rapor.txt. Bir klasör aşağı inilir.
  2. Geçerli klasör /home/ali/belgeler: rapor.txt. Dosya zaten buradadır.
  3. Geçerli klasör /home/ayse: ../ali/belgeler/rapor.txt. Önce bir üst klasöre (home) çıkılır, sonra ali ve belgeler klasörlerine inilir.

Üç göreli yol da aynı dosyayı gösterir ve hepsinin mutlak karşılığı /home/ali/belgeler/rapor.txt'dir.

Windows'ta aynı fikir iki farkla yazılır. Kök tek değildir; her sürücünün kendi kökü vardır ve sürücü bir harfle gösterilir (C:, D:). Klasör ayırıcı olarak eğik çizgi yerine ters eğik çizgi kullanılır: C:\Users\Ali\Documents\rapor.txt. Linux ve macOS'ta büyük-küçük harf ayrımı vardır (Rapor.txt ile rapor.txt iki ayrı dosyadır); Windows'ta varsayılan olarak yoktur.

2.6.5Dosya açma ve okuma adım adım

Bir program bir dosyayı okurken arka planda çekirdekle bir dizi sistem çağrısı yapar: önce dosyayı açar, sonra parça parça okur, en sonda kapatır. Bu üç çağrı, dosya sistemi ile süreç yönetiminin nasıl birlikte çalıştığını gösterir.

Tanım 2.22

Dosya tanımlayıcı (file descriptor, fd), çekirdeğin açık bir dosya için sürece verdiği küçük tam sayıdır. Süreç daha sonraki okuma ve yazma çağrılarında dosyayı adıyla değil bu numarayla anar. Her süreçte 0 standart girdi, 1 standart çıktı, 2 standart hata için baştan açıktır. Windows'ta aynı fikrin adı tanıtıcıdır (handle).

Örnek 2.17

Bir editör 150 baytlık /home/ali/rapor.txt dosyasını açıyor ve 100'er baytlık parçalarla sonuna kadar okuyor. Her çağrıda ne olur?

ÇağrıÇekirdeğin yaptığıDönen değerKonum
openYolu parça parça çözer: / → home → ali → rapor.txt. Meta veriye bakar: boyut 150 bayt, okuma izni var. Açık dosya kaydı oluşturur.fd = 30
read (100)0–99 arası baytları okurn = 100100
read (100)Yalnızca 50 bayt kaldı; 100–149 arasını okurn = 50150
read (100)Okunacak bayt yokn = 0 (dosya sonu)150
closeKaydı siler; 3 numarası yeniden boşalır0 (başarılı)—

Editör üç read çağrısıyla 100 + 50 = 150 bayt alır. Üçüncü çağrının 0 döndürmesi, programın okumayı bitirmesi gerektiğini bildirir.

dosya tanımlayıcı tablosu0standart girdi1standart çıktı2standart hata3rapor.txt, konum 0yol çözümleme/homealirapor.txtrapor.txt (150 bayt)konum 00100150
dosya tanımlayıcı tablosu0standart girdi1standart çıktı2standart hata3rapor.txt, konum 150yol çözümleme/homealirapor.txtrapor.txt (150 bayt)konum 1500100150
Şekil 2.23: Örnek 2.17'nin iki anı. (a) open sonrası: dosya tanımlayıcı tablosunda 3 numaralı kayıt rapor.txt'yi gösterir, konum 0. (b) İkinci read sonrası: konum 150'ye, yani dosyanın sonuna gelmiştir.

Şekil 2.23 dosya tanımlayıcı tablosunu ve dosya içindeki konumu gösterir. Tabloyu adım adım izleyelim.

Yol çözümleme. Çekirdek open çağrısında yolu baştan sona tek tek çözer. Önce kök klasörü okur ve içinde home adını arar. Bulunca home klasörünü okur ve içinde ali'yi arar. Her klasör, içindeki adların ve bu adların diskteki yerlerinin bir listesidir. Sonunda rapor.txt bulunur ve meta verisine bakılır. Kullanıcının okuma izni yoksa open bir hata döndürür ve dosya açılmaz. Sonraki okumalarda yolun yeniden çözülmesi gerekmez; bu iş yalnızca açılışta yapılır.

Dosya tanımlayıcı ve konum. Çekirdek sürece kullanılmayan en küçük numarayı verir; 0, 1 ve 2 dolu olduğu için ilk açılan dosya 3'ü, ikincisi 4'ü alır. Her read konumu okuduğu bayt sayısı kadar kendiliğinden ilerletir; uygulama blok numaralarını hiç bilmez.

Kapatma. close kaydı siler ve numara boşalır. Süreç bittiğinde açık kalan dosyalarını işletim sistemi kendisi kapatır. Ama uzun süre çalışan bir sunucu programı açtığı dosyaları kapatmazsa her sürece izin verilen tanımlayıcı sayısı bir gün tükenir ve program yeni dosya açamaz hâle gelir.

2.7Kullanıcı arayüzleri

Kullanıcının işletim sistemiyle tanıştığı yer arayüzdür: pencereler, dokunmatik ekrandaki hareketler ya da bir komut satırı.

2.7.1Arayüz türleri

Tanım 2.23

Grafik kullanıcı arayüzü (graphical user interface, GUI) pencere, simge, menü ve fareyle etkileşime dayanır. Komut satırı arayüzü (command-line interface, CLI) kullanıcının metin komutları yazdığı ve sonuçları metin olarak gördüğü arayüzdür. Dokunmatik arayüz dokunma, kaydırma ve parmak hareketleriyle çalışır.

Komut İstemiC:\> dir rapor.docx notlar.txtC:\> copy rapor.docx E:\ 1 dosya kopyalandı.C:\> _Dosya Gezginirapornotlarresimler
Şekil 2.24: Aynı iş iki arayüzde. Solda Komut İstemi'nde dir ile klasör listelenir ve copy rapor.docx E:\ ile dosya kopyalanır. Sağda Dosya Gezgini aynı klasörü simgelerle gösterir.

Şekil 2.24 aynı klasörü iki arayüzde gösterir. Grafik arayüzde dosyalar simge olarak görünür ve kopyalamak için dosya sürüklenir. Komut satırında ise klasörün içeriği dir komutuyla listelenir ve dosya copy komutuyla kopyalanır. İki yol da aynı sistem çağrılarına varır; fark yalnızca kullanıcının isteği nasıl ilettiğindedir.

Grafik arayüzün öğrenmesi kolaydır: menüler ne yapılabileceğini gösterir. Komut satırı ise hızlı, tekrarlanabilir ve otomasyona uygundur. 500 fotoğrafın adını fareyle tek tek değiştirmek saatler sürer; komut satırında kısa bir betik bu işi saniyeler içinde bitirir ve her gece kendiliğinden çalıştırılabilir. Sunucuların çoğunda bu yüzden grafik arayüz hiç kurulmaz.

Her arayüz erişilebilirlik araçlarıyla da desteklenir: ekran okuyucu metni sesli okur, büyüteç ekranı büyütür, yüksek kontrast teması metni belirginleştirir.

2.7.2Komut satırı temelleri

Komut satırında her komut bir satırdır: önce komutun adı, ardından boşlukla ayrılmış argümanlar gelir. copy a.txt b.txt komutunda copy komutun adı, a.txt ve b.txt ise argümanlardır. Komutlar her zaman geçerli klasörde çalışır; göreli yollar o klasöre göre yorumlanır. Linux ve macOS'taki kabuk ile Windows'taki Komut İstemi (cmd) aynı işler için farklı komut adları kullanır.

Tablo 2.13: Temel komutların Linux/macOS ve Windows (cmd) karşılıkları.
İşLinux / macOSWindows (cmd)
Geçerli klasörü gösterpwdcd (parametresiz)
Klasör içeriğini listelelsdir
Klasör değiştircd klasörcd klasör
Klasör oluşturmkdir yenimkdir yeni
Dosya kopyalacp a.txt b.txtcopy a.txt b.txt
Dosya silrm a.txtdel a.txt

Tablo 2.13 en sık kullanılan altı işi iki dünyada karşılaştırır. pwd, adını “print working directory” (geçerli klasörü yazdır) sözünden alır. cd, “change directory” (klasör değiştir) demektir. Komutları ve yolları birlikte kullanınca dosya ağacında gezinmek mümkün olur.

Örnek 2.18

Linux'ta geçerli klasör /home/ali. Ağaçta /home/ali altında belgeler ve resimler, /home/ayse altında notlar.txt vardır. Aşağıdaki komutlar sırayla çalıştırılınca geçerli klasör nasıl değişir?

KomutAçıklamaSonraki geçerli klasörÇıktı
cd belgelerGöreli yol: bir klasör aşağı/home/ali/belgeler—
cd ../resimlerBir üst (ali), sonra resimler/home/ali/resimler—
cd ../../ayseİki üst (ali, home), sonra ayse/home/ayse—
lsİçeriği listeler/home/aysenotlar.txt
cd /tmp“/” ile başlar: mutlak yol/tmp—
pwdGeçerli klasörü yazar/tmp/tmp

Her .. bir klasör yukarı çıkar. / ile başlayan yol ise geçerli klasör ne olursa olsun kökten başlar.

Sık yapılan hata

rm ve del komutlarıyla silinen dosyanın Geri Dönüşüm Kutusu'na gittiğini sanmak. Bu komutlar dosyayı doğrudan siler; geri almanın kolay bir yolu yoktur. Komutu çalıştırmadan önce geçerli klasörün ve dosya adının doğru olduğundan emin olmak gerekir.

2.7.3Dosya izinleri ve chmod

Linux ve macOS'ta her dosyanın izinleri üç kullanıcı grubu için ayrı ayrı tutulur: dosyanın sahibi, sahibin dahil olduğu grup ve diğerleri. Her grup için üç izin vardır: r (read, oku), w (write, yaz) ve x (execute, çalıştır). Böylece bir dosyanın izinleri dokuz karakterle yazılır: rw-r--r--. Bir harf yerine kısa çizgi varsa o izin yoktur.

İzinler chmod komutuyla değiştirilir ve çoğunlukla üç basamaklı bir sayıyla verilir. Her basamak bir grubu gösterir. Basamağın değeri, o gruptaki izinlerin ağırlıkları toplanarak bulunur: r = 4, w = 2, x = 1.

sahipr14w12-014+2 = 6grupr14-02-014diğerr14-02-014izinbitdeğertoplam
Şekil 2.25: chmod 644: sahip rw- (110 → 4 + 2 = 6), grup r-- (100 → 4), diğer r-- (100 → 4).

Şekil 2.25 644'ün nereden geldiğini gösterir. Ağırlıklar 4, 2 ve 1 olduğu için her grubun üç izni aslında üç bitlik bir ikili sayıdır. Sahibin izni rw- ikili 110'dur ve 110₂ = 6'dır. r-- ise 100₂ = 4'tür. Üç bitle 0'dan 7'ye kadar sekiz değer yazılabildiği için her basamak 0–7 arasındadır.

Tablo 2.14: Sık kullanılan izin basamakları.
BasamakİkiliİzinAnlamı
7111rwxOku, yaz, çalıştır
6110rw-Oku, yaz
5101r-xOku, çalıştır
4100r--Yalnızca oku
0000---Hiçbir izin yok
Örnek 2.19

(a) chmod 755 yedekle.sh komutundan sonra izinler nedir? (b) Bir günlük dosyasını yalnızca sahibi okuyup yazabilsin, başka kimse erişemesin. Hangi sayı verilmelidir? (c) rw-rw-r-- izni hangi sayıyla yazılır?

  1. (a) 7 = 4 + 2 + 1 → rwx; 5 = 4 + 1 → r-x; 5 → r-x. Sonuç rwxr-xr-x: sahip her şeyi yapar, grup ve diğerleri okuyup çalıştırabilir ama değiştiremez.
  2. (b) Sahip: rw- = 4 + 2 = 6. Grup: --- = 0. Diğer: --- = 0. Sayı 600'dür.
  3. (c) rw- = 6, rw- = 6, r-- = 4. Sayı 664'tür.

Üç grup ve her grupta üç izin, toplam dokuz bit eder; bu yüzden 29 = 512 farklı izin bileşimi vardır. Her basamağın 8 değeri olduğu için aynı sayı 8 × 8 × 8 = 512 olarak da bulunur.

Sık yapılan hata

İzin basamaklarını onluk sayı gibi okumak: “644, 600'den büyüktür, o hâlde daha çok izin verir.” Her basamak ayrı bir grubu gösterir. 644'te grup ve diğerleri okuyabilir; 600'de okuyamaz. Ayrıca bir sorun çözülmüyor diye chmod 777 vermek, dosyayı herkesin değiştirebileceği hâle getirir ve ciddi bir güvenlik açığıdır.

2.8Kullanıcı ve yetki yönetimi

Bir bilgisayarı birden fazla kişi kullanabilir; bir sunucuya binlerce kişi bağlanabilir. İşletim sistemi her işlemde iki soru sorar: işlemi yapan kim ve bu kişinin bu işlemi yapmaya hakkı var mı? Bu iki soru iki ayrı aşamada cevaplanır.

Tanım 2.24

Kimlik doğrulama (authentication) kullanıcının iddia ettiği kişi olduğunu denetler: “Kim?” Parola, PIN ya da parmak izi gibi biyometrik veriyle yapılır. Yetkilendirme (authorization) kimliği doğrulanmış kullanıcının neler yapabileceğini belirler: “Ne yapabilir?” İzinler ve hesap türü bu aşamada denetlenir.

Kullanıcı1 · Kimlik doğrulama“Kim?” parola, PIN, biyometri2 · Yetkilendirme“Ne yapabilir?” izinler, hesap türü✓ kendi dosyaları✗ sistem ayarıolay kaydına yazılır
Şekil 2.26: Kimlik doğrulama ve yetkilendirme akışı. Standart kullanıcı kendi dosyalarını açabilir (✓), sistem ayarını değiştiremez (✗). İzin verilen ve reddedilen erişimler olay kaydına yazılır.

Şekil 2.26 iki aşamayı sırayla gösterir. Kullanıcı önce kimliğini kanıtlar. Ardından her işlem için ayrıca yetki denetimi yapılır. Örnekte aynı kullanıcı kendi dosyasını açabilir ama sistem ayarını değiştiremez. Her iki sonuç da olay kaydına yazılır.

Hesaplar genellikle iki türdür. Standart hesap günlük kullanım içindir ve sistemi etkileyen değişiklikleri sınırlar. Yönetici hesabı program kurmak, sistem ayarını değiştirmek ya da başka kullanıcıların dosyalarına erişmek gibi sistem genelindeki değişiklikleri yapabilir. Windows'ta yönetici hesabı bile bu tür bir işlemden önce onay penceresi gösterir; Linux'ta aynı işlem için komutun başına sudo yazılır ve parola istenir.

Tanım 2.25

En az ayrıcalık ilkesi (principle of least privilege): her kullanıcıya ve her programa yalnızca işini yapmak için gereken kadar yetki verilir; fazlası verilmez.

Bu ilkenin değeri bir saldırı anında ortaya çıkar. Standart hesapla açılmış bir e-posta ekindeki zararlı yazılım, yalnızca o kullanıcının yetkileriyle çalışır. Kullanıcının kendi dosyalarına zarar verebilir, ama sistem dosyalarını değiştiremez ve öteki kullanıcılara ulaşamaz. Aynı ek her zaman yönetici hesabıyla çalışan birinin bilgisayarında açılsaydı bütün sistemi ele geçirebilirdi.

Kayıt tutma, önemli olayların sonradan incelenebilmesini sağlar: gece yarısı yüzlerce başarısız parola denemesi kayıtta görülürse yönetici saldırıdan haberdar olur.

Örnek 2.20

Standart hesaplı bir öğrenci parolasıyla oturum açıyor, kendi ödev dosyasını açıyor, sonra sistem saatini değiştirmeye çalışıyor ve engelleniyor. Her adım hangi aşamadadır?

  1. Oturum açma: parola doğrudur → kimlik doğrulama başarılı.
  2. Ödev dosyasını açma: dosyanın sahibi öğrencidir ve okuma izni vardır → yetkilendirme başarılı (✓).
  3. Saati değiştirme: sistem genelindeki bir ayar standart hesaba kapalıdır → yetkilendirme reddedildi (✗); olay kaydına yazılır.

Engel kimlik doğrulamada değil, yetkilendirmededir. Öğrenci kim olduğunu kanıtlamıştır; yalnızca o işlem için yetkisi yoktur.

2.9İşletim sistemi türleri

Bir akıllı telefon, bir web sunucusu ve bir otomobilin fren birimi aynı temel görevleri yapan işletim sistemleri kullanır, ama öncelikleri farklıdır: telefonda pil ömrü, sunucuda kesintisiz çalışma, fren biriminde zamanında tepki öne çıkar.

2.9.1Kişisel bilgisayar sistemleri

Masaüstü ve dizüstü bilgisayarlarda dört aile öne çıkar.

  • Windows: donanım ve uygulama yelpazesi en geniş olan sistemdir. Çok sayıda üreticinin bilgisayarında çalışır; oyunların ve iş yazılımlarının çoğu önce Windows için yazılır.
  • macOS: yalnızca Apple bilgisayarlarında çalışır. Donanımı ve yazılımı aynı şirket ürettiği için ikisi sıkı biçimde bütünleşiktir.
  • Linux dağıtımları: farklı masaüstü ortamları ve kullanım amaçlarına göre özelleştirilebilir. Çoğu ücretsizdir ve eski donanımda da iyi çalışabilir.
  • ChromeOS: web ve bulut tabanlı kullanıma odaklanır. Uygulamaların ve verinin çoğu internette durduğu için düşük donanımlı cihazlarda da hızlı açılır; çevrim dışı kullanımı ise sınırlıdır.

2.9.2Mobil işletim sistemleri

Mobil dünyada iki sistem vardır. Android, farklı üreticilerin cihazlarında çalışan geniş bir ekosistemdir. iOS ve iPadOS, Apple'ın telefon ve tabletleri için geliştirdiği bütünleşik sistemlerdir. Mobil sistemlerin öncelikleri masaüstünden ayrılır: dokunmatik arayüz, pil ömrünü uzatan enerji yönetimi, konum ve ivme gibi sensörler ve sürekli değişen kablosuz bağlantılar. Arka planda çalışan uygulamalar sıkı biçimde sınırlanır, çünkü her çalışan süreç pil harcar.

Tanım 2.26

Korumalı alan (sandbox), bir uygulamanın yalnızca kendi verisine erişebildiği yalıtılmış çalışma ortamıdır. Konum, kamera, mikrofon ve kişiler gibi kaynaklara erişim için işletim sisteminin izin denetiminden ve çoğu zaman kullanıcının onayından geçmek gerekir.

Haritakorumalı alan · kendi verisiNot defterikorumalı alan · kendi verisiOyunkorumalı alan · kendi verisi✕✕konum isterkişiler isterİzin denetimi (işletim sistemi) · kullanıcı onayıKonumKameraMikrofonKişilerizin verildi ✓reddedildi ✕
Şekil 2.27: Harita, not defteri ve oyun uygulamaları kendi korumalı alanlarında çalışır ve birbirinin verisine erişemez (✕). Harita konum, oyun kişiler listesi ister; istekler işletim sisteminin izin denetiminden ve kullanıcı onayından geçer.

Şekil 2.27 uygulama yalıtımını gösterir. Her uygulama kendi kutusunda yaşar. Not defteri uygulaması harita uygulamasının kayıtlı adreslerini okuyamaz. Bir uygulama telefonun ortak kaynaklarına erişmek istediğinde işletim sistemi araya girer ve kullanıcıya sorar. Haritanın konum istemesi beklenen bir istektir ve kullanıcı izin verir. Bir oyunun kişiler listesini istemesi ise şüphelidir ve kullanıcı reddedebilir. Böylece kötü niyetli bir uygulama, kullanıcı fark etmeden kişisel verileri toplayamaz.

2.9.3Sunucu işletim sistemleri

Sunucu, ağ üzerinden başka bilgisayarlara hizmet veren bilgisayardır. Sunucu işletim sistemleri bu işe göre biçimlenir.

TarayıcıMobil uygulamaOfis bilgisayarıistekistekistekSunucu işletim sistemiWeb hizmetiVeri tabanıDosya paylaşımıKimlik doğrulamaçok kullanıcı · sürekli çalışma · kayıt ve yetki
Şekil 2.28: Tarayıcı, mobil uygulama ve ofis bilgisayarı gibi istemcilerin istekleri sunucu işletim sistemindeki web, veri tabanı, dosya paylaşımı ve kimlik doğrulama hizmetlerine gider. Sunucu çok kullanıcılı ve sürekli çalışır; kayıt ve yetki denetimi tutar.

Şekil 2.28 bir sunucunun aynı anda birçok istemciye hizmet verdiğini gösterir. Sunucu işletim sistemlerinin öncelikleri şunlardır:

  • Çok kullanıcılı çalışma: çok sayıda kullanıcının ve hizmetin aynı anda yönetilmesi.
  • Ağ hizmetleri: web, veri tabanı, dosya paylaşımı ve kimlik doğrulama hizmetleri.
  • Süreklilik: aylarca kesintisiz çalışma ve uzaktan yönetim. Bir sunucu yeniden başlatıldığında ona bağlı bütün hizmetler kesilir.
  • Güvenlik: yetki, kayıt, güncelleme ve ağ denetimi.
  • Otomasyon: komut satırı ve yapılandırma araçlarıyla tekrarlanabilir yönetim. Yüz sunucuyu tek tek elle ayarlamak yerine aynı betik hepsinde çalıştırılır.

Yaygın örnekler Linux dağıtımları, Windows Server ve Unix türevleridir. İnternetteki web sunucularının büyük çoğunluğu Linux kullanır.

2.9.4Gömülü ve gerçek zamanlı sistemler

Tanım 2.27

Gömülü işletim sistemi, belirli bir cihaz görevi için sınırlı işlemci, bellek ve enerjiyle çalışan işletim sistemidir; yönlendiricilerde, otomobil denetim birimlerinde ve tıbbi cihazlarda bulunur. Gerçek zamanlı işletim sistemi (real-time operating system) bir işlemin yalnızca doğru sonucu değil, sonucu belirlenen süre içinde, yani son tarihten (deadline) önce üretmesini hedefler.

Sistem A6 mszamanında ✓Sistem B14 msgeç: hata sayılır ✗son tarih: 10 mst = 0: fren sinyali
Şekil 2.29: Gerçek zamanlı sistemde son tarih. t = 0'da fren sinyali gelir ve son tarih 10 ms'dir. Sistem A 6 ms'de tepki verir (zamanında ✓); sistem B 14 ms'de tepki verir (geç: hata sayılır ✗).

Şekil 2.29 gerçek zamanlı sistemin temel kuralını gösterir: geç gelen doğru sonuç da yanlıştır. İki sistem de doğru fren komutunu üretir, ama B son tarihi kaçırdığı için başarısız sayılır. Masaüstü bir işletim sisteminde bir pencerenin 4 ms geç açılmasını kimse fark etmez. Bir fren sisteminde ise aynı gecikme mesafe demektir.

Örnek 2.21

Saatte 100 km hızla giden bir otomobilde fren sinyali t = 0'da geliyor. Sistem A 6 ms, sistem B 14 ms sonra tepki veriyor. Otomobil bu sürelerde ne kadar yol alır?

  1. Hız metre/saniyeye çevrilir: 100 km/sa = 100.000 m ÷ 3.600 s ≈ 27,78 m/s.
  2. Sistem A: 27,78 × 0,006 ≈ 0,17 m.
  3. Son tarih 10 ms: 27,78 × 0,010 ≈ 0,28 m.
  4. Sistem B: 27,78 × 0,014 ≈ 0,39 m.

B, son tarihi 4 ms aşar ve fren başlamadan önce A'dan yaklaşık 0,39 − 0,17 = 0,22 m daha fazla yol alınır. Gerçek zamanlı bir sistem, en kötü durumda bile 10 ms'yi aşmayacağını garanti etmek zorundadır.

Gerçek zamanlı sistemlerde ortalama olarak hızlı olmak yetmez; en kötü durumdaki tepki süresi de bilinmeli ve sınırlı olmalıdır. Bu yüzden gerçek zamanlı çizelgeleyiciler acil bir iş gelince daha az önemli işi hemen keser.

Sık yapılan hata

“Gerçek zamanlı” sözünü “çok hızlı” anlamında kullanmak. Gerçek zamanlı bir sistem çok hızlı olmak zorunda değildir; zamanında olmak zorundadır. Son tarihi 1 saniye olan ve onu her zaman tutan bir sistem gerçek zamanlıdır. Ortalama 1 ms'de tepki veren ama arada bir 50 ms gecikebilen bir sistem ise değildir.

2.9.5İşletim sistemi seçimi

Bir okul laboratuvarı, bir yazılım şirketi ya da bir fabrika için işletim sistemi seçerken tek bir ölçüt yetmez. “En iyi işletim sistemi” diye bir şey yoktur; gereksinimlere en uygun olan vardır.

Tablo 2.15: İşletim sistemi seçiminde değerlendirilecek ölçütler.
GereksinimDeğerlendirilecek ölçüt
UygulamaGerekli yazılımların ve sürümlerinin bulunması
DonanımSürücü ve işlemci mimarisi desteği
GüvenlikGüncelleme süresi, yetki modeli ve yönetim araçları
KullanılabilirlikArayüz, erişilebilirlik ve öğrenme gereksinimi
MaliyetLisans, destek, eğitim ve bakımın toplamı

2.10Lisanslama

Bir yazılım satın alındığında çoğu zaman yazılımın kendisi değil, onu belirli koşullarla kullanma hakkı alınır. Bu koşulları lisans belirler.

Tanım 2.28

Lisans (license), yazılımın sahibinin kullanıcıya hangi hakları hangi koşullarla verdiğini belirleyen hukuki metindir. Kaynak kod (source code), programın insanın okuyup değiştirebileceği, bir programlama dilinde yazılmış hâlidir.

2.10.1Açık kaynak yazılım

Açık kaynak (open source) yazılımda kaynak kod herkese açıktır ve lisans dört konuda hak tanır.

  • Kaynak kodu: lisans koşulları çerçevesinde incelenebilir.
  • Değiştirme: lisans izin veriyorsa ihtiyaca göre uyarlanabilir.
  • Dağıtım: özgün ya da değiştirilmiş sürüm paylaşılabilir; koşullarını lisans belirler.
  • Topluluk: geliştirme ve destek; bireyler, kurumlar ve şirketler birlikte yürütebilir.
Kaynağı inceleDeğiştirDağıt / paylaşTopluluğa katkıgeliştirilmiş sürüm herkese döner · her adımın koşulunu lisans belirler
Şekil 2.30: Açık kaynak döngüsü: kaynağı incele, değiştir, dağıt ve topluluğa katkıda bulun. Geliştirilmiş sürüm herkese döner; her adımın koşulunu lisans belirler.

Şekil 2.30 açık kaynağın nasıl büyüdüğünü bir döngü olarak gösterir. Bir geliştirici kodu inceler, bir hatayı düzeltir ya da bir özellik ekler ve değişikliği geri gönderir. Değişiklik kabul edilirse bir sonraki sürümle herkese ulaşır. Linux çekirdeği bu yolla binlerce geliştiricinin katkısıyla büyümüştür.

Açık kaynak lisansları iki ana gruba ayrılır. GPL (GNU General Public License) gibi lisanslar, değiştirilmiş sürüm dağıtılırsa onun da aynı lisansla ve kaynak koduyla birlikte dağıtılmasını şart koşar; bu yaklaşıma copyleft denir. MIT ve Apache gibi serbest lisanslar ise yazılımın kapalı bir ürünün içinde bile kullanılmasına izin verir; genellikle yalnızca özgün lisans metninin ve telif bildiriminin korunmasını ister.

Sık yapılan hata

“Açık kaynak” ile “ücretsiz” ve “desteksiz”i aynı saymak. Açık kaynak bir yazılımın lisansı genellikle ücretsizdir, ama birçok şirket açık kaynak ürünler için ücretli destek, eğitim ve bakım hizmeti satar. Tersine, ücretsiz dağıtılan her program da açık kaynak değildir: ücretsiz bir oyunun kaynak kodu kapalı olabilir. Belirleyici olan fiyat değil, lisansın verdiği haklardır.

2.10.2Ticari ve kapalı kaynak yazılım

Kapalı kaynak (closed source, proprietary) yazılımda kaynak kodu geliştirici kuruluşta kalır. Kullanıcıya yalnızca derlenmiş, çalıştırılabilir program verilir.

üretici kuruluş (kaynak kod kapalı)Kaynak kodgizliDerlemeProgram (.exe)+ lisans sözleşmesiKullanıcıkullanım hakkısatın alma / abonelik
Şekil 2.31: Kapalı kaynak modeli. Üretici kaynak kodu gizli tutar ve derler; derlenmiş program (.exe) lisans sözleşmesiyle kullanıcıya verilir. Kullanıcı satın alma ya da abonelikle yalnızca kullanım hakkı edinir.

Şekil 2.31 bu modeli gösterir. Ticari yazılımın dört özelliği öne çıkar.

  • Kullanım hakkı: yazılım satın alınmaz; çoğunlukla belirli koşullarla bir kullanım lisansı alınır. Koşullar son kullanıcı lisans sözleşmesinde (end-user license agreement, EULA) yazar: kaç cihaza kurulabileceği, ticari işte kullanılıp kullanılamayacağı, tersine mühendisliğin yasak olup olmadığı.
  • Kaynak kodu: genellikle geliştirici kuruluşta kapalı tutulur. Kullanıcı bir hatayı kendisi düzeltemez; üreticinin düzeltmesini bekler.
  • Destek: resmî destek ve hizmet düzeyi sözleşmeleri sunulabilir. Örneğin bir sorun bildirildiğinde kaç saat içinde cevap verileceği sözleşmeyle güvenceye alınır.
  • Maliyet: lisans, abonelik, bakım ve yükseltme ücretleri olabilir.

2.10.3Lisans modellerinin karşılaştırması

Tablo 2.16: Açık kaynak ve ticari/kapalı kaynak lisans modellerinin karşılaştırması.
ÖlçütAçık kaynakTicari / kapalı kaynak
Kaynak erişimiLisansla açıkGenellikle kapalı
ÖzelleştirmeLisans kapsamında mümkünÜreticinin sunduğu seçeneklerle sınırlı
DestekTopluluk ya da ücretli sağlayıcıÜretici ya da yetkili iş ortağı
MaliyetLisans ücretsiz olabilir; işletme maliyeti sürerLisans ya da abonelik gerekebilir
Lisans örneğiGPL, MIT, ApacheSon kullanıcı lisans sözleşmesi
Ürün örneğiLinux, Firefox, LibreOfficeWindows, Microsoft Office, Adobe Photoshop

Tablo 2.16 iki modeli altı ölçütle karşılaştırır. İkisinin de güçlü yanları vardır. Açık kaynak, kodun herkesçe incelenebilmesi sayesinde şeffaftır ve bir üreticiye bağımlılığı azaltır. Kapalı kaynak ise tek bir sorumlu üretici ve sözleşmeli destek sunar. Birçok kurum ikisini birlikte kullanır: sunucularda Linux, masaüstünde Windows ve Office.

Örnek 2.22

Bir öğrenci topluluğu, MIT lisanslı bir kütüphaneyi ve GPL lisanslı başka bir kütüphaneyi kullanarak bir program yazıyor ve programı dağıtmak istiyor. Hangi yükümlülükler doğar?

  1. MIT kütüphanesi: program istenen lisansla dağıtılabilir. Yalnızca kütüphanenin telif bildirimi ve lisans metni dağıtıma eklenmelidir.
  2. GPL kütüphanesi: GPL kodu içeren bir program dağıtılıyorsa programın tamamı GPL ile ve kaynak koduyla birlikte sunulmalıdır.
  3. Sonuç: topluluk programın kaynak kodunu kapalı tutmak isterse GPL kütüphanesini kullanamaz; yerine serbest lisanslı bir seçenek aramalıdır.

“Açık kaynak” olmak yükümlülük doğurmadığı anlamına gelmez. Hakları ve yükümlülükleri her durumda lisans metni belirler.

2.11Güncelleme ve destek

Bir işletim sistemi kurulduğu günkü hâliyle kalmaz. Yeni güvenlik açıkları bulunur, donanımlar değişir, kullanıcılar yeni özellikler ister. Üretici bunlara güncellemelerle karşılık verir.

Tablo 2.17: Güncelleme türleri ve bakımla ilgili kavramlar.
KavramAnlamı
Güvenlik güncellemesiBilinen açıkları kapatır
Özellik güncellemesiYeni işlevler ve arayüz değişiklikleri getirir
Sürücü güncellemesiDonanım uyumluluğunu ya da kararlılığını iyileştirebilir
Destek süresiÜreticinin güncelleme sağladığı zaman aralığı
YedeklemeBüyük bir değişiklikten önce geri dönüş imkânı sağlar
TestKurumsal ortamlarda güncellemeler yaygın dağıtımdan önce denenir
destek süresi: üretici güncelleme yayımlardestek sonugüncelleme yokaçıklar kapanmazyayımzamangüvenlik güncellemesiözellik güncellemesiör. Windows 10: 14 Ekim 2025
Şekil 2.32: Destek süresi boyunca düzenli güvenlik güncellemeleri ve ara sıra özellik güncellemeleri gelir. Destek sonundan sonra güncelleme gelmez ve yeni bulunan açıklar kapanmaz. Örnek: Windows 10'un desteği 14 Ekim 2025'te sona erdi.

Şekil 2.32 bir sürümün yaşam süresini gösterir. Güvenlik güncellemeleri sık ve düzenlidir; Microsoft bunları her ayın ikinci salı günü yayımlar. Özellik güncellemeleri daha seyrektir.

Destek sonu, bilgisayarın çalışmayı bırakacağı anlamına gelmez. Windows 10 yüklü bir bilgisayar 14 Ekim 2025'ten sonra da açılır, ama o tarihten sonra bulunan güvenlik açıkları kapatılmaz. Desteksiz bir sistem her geçen ay daha savunmasız hâle gelir. Büyük bir güncellemeden önce yedek alınır; kurumlar güncellemeyi önce birkaç test bilgisayarında dener, sonra aşamalı olarak dağıtır.

2.12Sanallaştırma ve konteynerler

Aynı bilgisayarda hem Windows hem Linux denemek ya da tek bir güçlü sunucuyu onlarca müşteriye paylaştırmak için iki teknoloji kullanılır: sanal makineler ve konteynerler. İkisi de yalıtım sağlar, ama yalıtımı farklı katmanlarda kurar.

2.12.1Sanal makine ve hipervizör

Tanım 2.29

Sanallaştırma (virtualization), tek bir fiziksel bilgisayarın kaynaklarını birden fazla yalıtılmış ortama paylaştırmaktır. Sanal makine (virtual machine, VM), fiziksel bir bilgisayarda yazılımla oluşturulmuş ve içinde tam bir işletim sistemi çalışan sanal bilgisayardır. Sanal makinede çalışan sisteme misafir işletim sistemi (guest operating system) denir. Hipervizör (hypervisor), sanal makinelere işlemci, bellek ve aygıt kaynaklarını sağlayan ve onları birbirinden yalıtan yazılımdır.

Hipervizör, işletim sisteminin süreçlere yaptığını bir kat yukarıda işletim sistemlerine yapar. Her misafir sistem kendine ait bir işlemcisi, belleği ve diski olduğunu sanır. Gerçekte hipervizör fiziksel kaynakları paylaştırır: 32 GB RAM'li bir sunucuda dört sanal makineye 8'er GB verilebilir. Bir sanal makine çökerse ya da bir zararlı yazılıma yakalanırsa ötekiler etkilenmez.

2.12.2Konteyner

Tanım 2.30

Konteyner (container), bir uygulamayı ve onun bağımlılıklarını (dependency), yani çalışması için gereken kütüphane ve ayarları, süreç düzeyinde yalıtan pakettir. Konteynerler ana işletim sisteminin çekirdeğini paylaşır. Konteynerleri başlatan ve yöneten yazılıma konteyner motoru (container engine) denir; en bilinen örneği Docker'dır.

Konteyner, “benim bilgisayarımda çalışıyordu” sorununa bir çözümdür. Uygulama, gereken kütüphane sürümleriyle birlikte paketlenir; paket nerede çalıştırılırsa çalıştırılsın içindeki ortam aynıdır. Konteynerlerin kendi çekirdekleri olmadığı için saniyeler içinde başlarlar ve az bellek harcarlar.

Sanallaştırma ve konteynerler dört alanda yaygındır: farklı sistemlerde yazılım testi, çok sayıda az kullanılan sunucunun tek bir fiziksel makinede birleştirilmesi, bulut hizmetleri ve uygulamaların her ortama aynı biçimde taşınabilir olarak dağıtılması.

2.12.3Sanal makine ile konteynerin karşılaştırması

Sanal makinelerDonanımHipervizörMisafir İS 1Misafir İS 2Misafir İS 3kütüphanelerkütüphanelerkütüphanelerUygulama 1Uygulama 2Uygulama 3KonteynerlerDonanımAna işletim sistemi (tek çekirdek)Konteyner motorukütüphanelerkütüphanelerkütüphanelerUygulama 1Uygulama 2Uygulama 3
Şekil 2.33: Solda sanal makineler: hipervizörün üstünde her uygulamanın kendi misafir işletim sistemi ve kütüphaneleri vardır. Sağda konteynerler: tek çekirdekli ana işletim sisteminin üstünde konteyner motoru çalışır; her konteyner yalnızca kütüphanelerini ve uygulamasını taşır.

Şekil 2.33 iki yaklaşımın katmanlarını yan yana gösterir. Fark, yalıtımın hangi katmanda kurulduğundadır.

Tablo 2.18: Sanal makine ile konteynerin karşılaştırması.
ÖzellikSanal makineKonteyner
Ne taşır?Tam bir misafir işletim sistemi ve uygulamaYalnızca uygulama ve bağımlılıkları
ÇekirdekHer sanal makinenin kendi çekirdeğiAna işletim sisteminin çekirdeği ortak
YalıtımGüçlüDaha zayıf
Kaynak kullanımıDaha çok bellek, daha yavaş açılışHafif, hızlı açılış
Farklı işletim sistemiÇalıştırabilir (Linux üstünde Windows)Ana sistemle aynı çekirdeği gerektirir
Örnek 2.23

Linux çalışan bir sunucuda iki ihtiyaç var: (a) bir web uygulamasının aynı Linux sürümünde çalışan 20 kopyası, (b) yalnızca Windows'ta çalışan bir muhasebe programı. Her ihtiyaç için hangi teknoloji uygundur?

  1. (a) Web uygulaması: uygulama Linux çekirdeğinde çalışır; ana sistemin çekirdeğini paylaşabilir. 20 kopya için 20 tam işletim sistemi kurmak bellek israfı olur. Konteyner uygundur: her kopya hafiftir ve saniyeler içinde başlar.
  2. (b) Muhasebe programı: program Windows çekirdeği ister. Konteynerler ana sistemin Linux çekirdeğini paylaştığı için bu programı çalıştıramaz. Sanal makine uygundur: hipervizör üstünde tam bir Windows misafir sistemi kurulur.

2.13Özet

  • Yazılım programların, verilerin ve belgelerin bütünüdür. Sistem yazılımı donanımı yönetir, uygulama yazılımı kullanıcının işini yapar, programlama araçları yazılım üretir, ürün yazılımı cihaza gömülüdür. Her katman altındakini soyutlar.
  • İşletim sistemi süreç, bellek, dosya, aygıt ve kullanıcıları yönetir, ağ hizmeti sunar. Önyükleme: güç → UEFI → POST → önyükleyici → çekirdek → oturum açma. Güvenli Önyükleme imzaları denetler, TPM ölçümleri saklar; MBR 2 TB ve 4 birincil bölümle sınırlıdır, GPT değildir.
  • Çekirdek ayrıcalıklı modda çalışır; uygulamalar ondan sistem çağrısıyla hizmet ister. Çekirdekler monolitik, mikro ya da hibrittir.
  • Süreç Yeni, Hazır, Çalışıyor, Bekliyor ve Sonlandı durumlarından geçer; bekleyen süreç önce Hazır olur. Çoklu programlama G/Ç beklerken başka süreci çalıştırır. Döner sıralı çizelgeleme her sürece en çok bir zaman dilimi verir; SJF ortalama beklemeyi en aza indirir.
  • Kilitlenme için karşılıklı dışlama, tut ve bekle, ön alınamazlık ve döngüsel beklemenin hepsi gerekir.
  • Taban/limit modeli belleği korur; takas yer açar ama yavaştır. Sanal bellekte adres sayfa ve bağıl konuma ayrılır; sayfa RAM'de değilse sayfa hatası olur. LRU son kullanımı, FIFO girişi en eski sayfayı çıkarır.
  • Sürücüler ortak istekleri donanıma çevirir; aygıtlar kesmeyle haber verir. Dosya sistemi adları, meta veriyi ve blokları yönetir; açılan dosyaya bir dosya tanımlayıcı verilir.
  • Komut satırı otomasyona uygundur; chmod izinleri r = 4, w = 2, x = 1 ağırlıklarıyla yazar. Kimlik doğrulama “kim?”, yetkilendirme “ne yapabilir?” sorusunu cevaplar.
  • Kişisel, mobil, sunucu, gömülü ve gerçek zamanlı sistemlerin öncelikleri farklıdır. Hakları lisans belirler; destek bitince güvenlik güncellemesi gelmez. Sanal makine kendi çekirdeğiyle güçlü yalıtım, konteyner ortak çekirdekle hafiflik sağlar.
Tablo 2.19: Notta kullanılan hesap kuralları.
SoruKuralÖrnek
Tamamlanma süresibitiş − varışRR'de P2: 9 − 0 = 9 ms
Bekleme süresitamamlanma süresi − işlemci süresiRR'de P2: 9 − 3 = 6 ms
Taban/limitadres < limit ise taban + adres150 < 200 → 100 + 150 = 250
Sayfa ve bağıl konumadres ÷ 4096 ve adres mod 40964100 → sayfa 1, konum 4
Fiziksel adresçerçeve × 4096 + bağıl konum5 × 4096 + 4 = 20484
Disk bloklarıboyut ÷ blok boyutu, yukarı yuvarlanır9 KB, 4 KB blok → 3 blok
chmod basamağır = 4, w = 2, x = 1 toplanırrw- → 6; rw-r--r-- → 644
MBR sınırı232 sektör × 512 bayt≈ 2,2 TB

2.14Kavram listesi

Terimlerin İngilizce karşılıkları ve öteki sunumlardaki kullanımları terim sözlüğünde bulunur.

2.15Kendini Dene

  1. Üç süreç t = 0'da hazır; sıra P1, P2, P3; süreler P1 = 3, P2 = 4, P3 = 1 ms. Döner sıralı çizelgelemede zaman dilimi 2 ms'dir. Gantt çizelgesi, bitiş zamanları ve bağlam değiştirme sayısı nedir?

    Cevap

    0–2 P1 (kalan 1), 2–4 P2 (kalan 2), 4–5 P3 (biter), 5–6 P1 (biter), 6–8 P2 (biter). Bitişler: P3 = 5, P1 = 6, P2 = 8 ms. 4 bağlam değiştirme yapılır. Bekleme süreleri P1 = 6 − 3 = 3, P2 = 8 − 4 = 4, P3 = 5 − 1 = 4 ms'dir.

  2. Sayfa boyutu 4.096 bayt; sayfa tablosu: 0 → çerçeve 2, 1 → çerçeve 5, 2 → diskte, 3 → çerçeve 0. 13000 sanal adresi hangi sayfada, hangi bağıl konumdadır? Fiziksel adres nedir?

    Cevap

    13000 ÷ 4096 = 3, kalan 13000 − 12288 = 712: sayfa 3, bağıl konum 712. Sayfa 3 çerçeve 0'dadır: 0 × 4096 + 712 = 712. Çerçeve 0 RAM'in en başı olduğu için fiziksel adres bağıl konuma eşittir.

  3. Bir sürecin 3 çerçevesi var ve sayfaları 1, 2, 3, 1, 4, 2, 5 sırasıyla istiyor. LRU ve FIFO ile kaçar sayfa hatası olur?

    Cevap

    LRU: 1, 2, 3 hata; 1 isabet; 4 hata (son kullanımı en eski 2 çıkar); 2 hata (3 çıkar); 5 hata (1 çıkar) → 6 hata. FIFO: 1, 2, 3 hata; 1 isabet; 4 hata (ilk giren 1 çıkar); 2 isabet; 5 hata (2 çıkar) → 5 hata. Bu dizide FIFO daha iyi sonuç verir; LRU her durumda üstün değildir.

  4. C sürecinin taban yazmacı 300, limit yazmacı 250'dir (KB). C, 249 ve 250 mantıksal adreslerine erişmek istiyor. Donanım her biri için ne yapar?

    Cevap

    249 < 250 olduğu için erişim geçerlidir: fiziksel adres 300 + 249 = 549, yani C'nin bölgesinin son adresi. 250 ≥ 250 olduğu için erişim engellenir, kesme üretilir ve işletim sistemi C'yi erişim ihlaliyle sonlandırır.

  5. Bir işletim sistemi, her sürecin ihtiyaç duyduğu bütün kaynakları çalışmaya başlamadan önce tek seferde istemesini zorunlu kılıyor. Kilitlenmenin dört koşulundan hangisi ortadan kalkar? Bu yöntemin bedeli nedir?

    Cevap

    Tut ve bekle ortadan kalkar: süreç ya hepsini alır ya hiçbirini almadan bekler; elinde kaynak tutarken başka kaynak beklemez. Bedeli, kaynakların gerçekte kullanılmadığı sürelerde de tutulmasıdır; örneğin işinin sonunda yazıcıya ihtiyaç duyan bir süreç yazıcıyı en baştan meşgul eder.

  6. Blok boyutu 4.096 bayt olan bir diske 10.000 baytlık bir dosya yazılıyor. Dosya kaç blok kaplar ve kaç bayt boşa gider?

    Cevap

    10000 ÷ 4096 ≈ 2,44; yukarı yuvarlanır: 3 blok. 3 × 4096 = 12288 bayt yer kaplar; 12288 − 10000 = 2288 bayt boşa gider.

  7. (a) chmod 700 anahtar.txt sonrası izinler nedir? (b) rwxr-xr-x izni hangi sayıyla verilir?

    Cevap

    (a) 7 = rwx, 0 = ---, 0 = --- → rwx------: yalnızca sahip her şeyi yapabilir. (b) rwx = 4 + 2 + 1 = 7, r-x = 4 + 1 = 5, r-x = 5 → 755.

  8. Bir web uygulamasının aynı Linux sürümünde çalışan 50 kopyası gerekiyor. Sanal makine mi konteyner mi daha uygundur? Neden?

    Cevap

    Konteyner. Uygulama ana sistemin Linux çekirdeğini paylaşabilir; her kopya yalnızca uygulamayı ve kütüphanelerini taşır, saniyeler içinde başlar ve az bellek harcar. 50 sanal makine ise 50 tam işletim sistemi demektir ve çok daha fazla bellek ve açılış süresi ister.

2.16İleri okuma

  • R. H. Arpaci-Dusseau ve A. C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces (Arpaci-Dusseau Books, 2018; ostep.org adresinde ücretsiz): sanallaştırma, eş zamanlılık ve kalıcılık başlıkları altında süreçleri, çizelgelemeyi, sanal belleği ve dosya sistemlerini sade bir dille ve bol örnekle anlatır.
  • A. Silberschatz, P. B. Galvin ve G. Gagne, Operating System Concepts (10. baskı, Wiley, 2018): işletim sistemlerinin standart ders kitabıdır; bu nottaki her konu, özellikle çizelgeleme, kilitlenme ve sayfa değiştirme daha ayrıntılı işlenir.
  • A. S. Tanenbaum ve H. Bos, Modern Operating Systems (5. baskı, Pearson, 2022): Linux, Windows ve Android'in iç yapısını örnek olaylarla inceler; çekirdek türleri ve sanallaştırma bölümleri güçlüdür.
  • W. Shotts, The Linux Command Line (2. baskı, No Starch Press, 2019): komut satırını, dosya izinlerini ve kabuk betiklerini sıfırdan başlayarak öğretir.

2.17Kaynaklar

  1. A. Silberschatz, P. B. Galvin, G. Gagne, Operating System Concepts, Wiley.
  2. A. S. Tanenbaum, H. Bos, Modern Operating Systems, Pearson.
  3. The Linux Foundation ve Free Software Foundation lisans kaynakları.
  4. R. H. Arpaci-Dusseau, A. C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces, Arpaci-Dusseau Books.
  5. E. G. Coffman, M. Elphick, A. Shoshani, “System Deadlocks”, ACM Computing Surveys 3(2), 1971.

İlgili sayfalar: Yazılım ve İşletim Sistemleri sunumu · Çalışma soruları · Süreç çizelgeleme simülatörü · Terim sözlüğü · © Sercan Külcü. Tüm hakları saklıdır.