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.
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.
| Özellik | Anlamı | Bankacılık uygulamasında örnek |
|---|---|---|
| İşlevsellik | Beklenen görevleri doğru yerine getirme | Havale tutarı hesaptan eksiksiz düşer |
| Kullanılabilirlik | Kolay öğrenilme ve etkili kullanım | Para gönderme üç dokunuşta biter |
| Performans | Zamanı ve kaynakları verimli kullanma | Hesap özeti bir saniyede açılır |
| Güvenilirlik | Hata durumunda öngörülebilir davranma | Bağlantı koparsa işlem yarım kalmaz, ya tamamlanır ya iptal olur |
| Güvenlik | Yetkisiz erişime ve değişikliğe karşı koruma | Baş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.
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.
Ş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.
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?
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.
Ş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.
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ı.
- Yazıcı sürücüsü: işletim sistemiyle birlikte donanımı yönetir → sistem yazılımı.
- Java derleyicisi: kaynak kodu çevirerek yeni yazılım üretilmesini sağlar → programlama aracı.
- Hesap tablosu programı: kullanıcının hesap işini yapar → uygulama yazılımı.
- 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ı.
- 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.
| Tür | Örnekler | Temel amaç |
|---|---|---|
| Sistem | İşletim sistemi, sürücü, yardımcı araç | Bilgisayarı ve kaynakları yönetmek |
| Uygulama | Kelime işlemci, tarayıcı, oyun | Kullanıcının görevini yapmak |
| Ara yazılım | Veri tabanı bağlantı katmanı, mesaj kuyruğu | Uygulamaların sistemle ve birbiriyle haberleşmesini kolaylaştırmak |
| Geliştirme | Derleyici, 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?
İş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.
Ş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.
Ş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.
Ö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.
| Aşama | Ne 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. POST | Açı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çma | Kimlik 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.
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.
Ş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.
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?
- UEFI çalışır ve POST'u tamamlar.
- UEFI, EFI sistem bölümündeki önyükleyiciyi bulur ve çalıştırmadan önce imzasını denetler.
- Dosya değiştiği için hesaplanan değer imzadaki değerle tutmaz. İmza doğrulanamaz.
- 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.
| Özellik | MBR | GPT |
|---|---|---|
| Birlikte kullanıldığı ürün yazılımı | BIOS | UEFI |
| En büyük disk | 2 TB'a kadar | 2 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.
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?
- 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.
- Bölüm sayısı: beş bölüm, MBR'nin dört birincil bölüm sınırını aşar.
- İş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
Ç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.
Ş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.
“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.
Metin editörü rapor.txt dosyasını okuyor. Her adımda işlemci hangi moddadır ve hangi alt sistem çalışır?
| Adım | Ne olur? | İşlemci modu | Çalışan bölüm |
|---|---|---|---|
| 1 | Editö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. | Çekirdek | Sistem çağrısı arayüzü |
| 3 | Dosyanın diskteki yeri bulunur; kullanıcının okuma izni denetlenir. | Çekirdek | Dosya sistemi |
| 4 | Diske okuma komutu verilir; disk işi bitince kesmeyle haber verir. | Çekirdek | Aygıt sürücüsü |
| 5 | Okunan veri, RAM'de editörün kendi bellek alanına kopyalanır. | Çekirdek | Bellek 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.
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.
| Tür | Fikir | Örnek |
|---|---|---|
| Monolitik çekirdek | Süreç, bellek, dosya sistemi ve sürücüler tek ayrıcalıklı çekirdekte; hızlı ama büyük | Linux (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 çekirdek | Mikro çekirdek tasarımını alır, hız için bazı hizmetleri çekirdekte tutar | Windows 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.
| Katman | Görev |
|---|---|
| Uygulamalar | Kullanı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ği | Sü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.
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.
Ş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.
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.
Ş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.
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.
Ş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.
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.
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ım | Olay | Geçiş | P1'in durumu |
|---|---|---|---|
| 1 | Kullanıcı programa çift tıklar | — | Yeni |
| 2 | İşletim sistemi süreci kabul eder, bellek ayırır | Yeni → Hazır | Hazır |
| 3 | Çizelgeleyici P1'i seçer, bağlam yüklenir | Hazır → Çalışıyor | Çalışıyor |
| 4 | P1 diskten veri ister | Çalışıyor → Bekliyor | Bekliyor |
| 5 | Disk işini bitirir, kesme gelir | Bekliyor → Hazır | Hazır |
| 6 | Sırası gelir, yeniden seçilir | Hazır → Çalışıyor | Çalışıyor |
| 7 | Zaman dilimi dolar, zamanlayıcı kesmesi | Çalışıyor → Hazır | Hazır |
| 8 | Tekrar seçilir | Hazı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.
Ş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.
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) | CPU | Disk | P1 | P2 |
|---|---|---|---|---|
| 0–3 | P1 | boş | Çalışıyor | Hazır |
| 3 | P1 okuma ister, bağlam değiştirilir | Bekliyor | Çalışıyor | |
| 3–6 | P2 | P1'in verisi | Bekliyor | Çalışıyor |
| 6 | Disk biter, kesme gelir | Hazır | Çalışıyor | |
| 6–7 | P2 | boş | Hazır | Çalışıyor |
| 7 | P2 4 ms'sini tamamlar | Çalışıyor | Sonlandı | |
| 7–9 | P1 | boş | Çalışıyor | Sonlandı |
| 9 | P1 biter | Sonlandı | 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.
Ş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.
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.
Üç 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) | CPU | Ne olur? | Kalan (P1, P2, P3) | Kuyruk (sonra) |
|---|---|---|---|---|
| başlangıç | — | Üçü de hazır | 5, 3, 2 | P1, P2, P3 |
| 0–2 | P1 | Dilim doldu, P1 sona gider | 3, 3, 2 | P2, P3, P1 |
| 2–4 | P2 | Dilim doldu, P2 sona gider | 3, 1, 2 | P3, P1, P2 |
| 4–6 | P3 | P3 biter (t = 6) | 3, 1, 0 | P1, P2 |
| 6–8 | P1 | Dilim doldu, P1 sona gider | 1, 1, 0 | P2, P1 |
| 8–9 | P2 | P2 1 ms kullanır, biter (t = 9) | 1, 0, 0 | P1 |
| 9–10 | P1 | P1 1 ms kullanır, biter (t = 10) | 0, 0, 0 | boş |
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.
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.
| Zaman dilimi | Bitişler (P1, P2, P3) | Bağlam değiştirme |
|---|---|---|
| q = 1 | 10, 8, 6 | 8 |
| q = 2 | 10, 9, 6 | 5 |
| q = 5 | 5, 8, 10 | 2 |
Tablo 2.7 etkiyi sayılarla gösterir; bağlam değiştirmenin süresi bu hesaplarda sıfır sayılmıştır.
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.
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.
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.
- 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.
- 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.
- 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).
| Algoritma | Bitişler (P1, P2, P3) | Ortalama tamamlanma | Ortalama bekleme |
|---|---|---|---|
| FCFS | 5, 8, 10 | 23 / 3 ≈ 7,67 ms | 13 / 3 ≈ 4,33 ms |
| SJF | 10, 5, 2 | 17 / 3 ≈ 5,67 ms | 7 / 3 ≈ 2,33 ms |
| Döner sıralı (q = 2) | 10, 9, 6 | 25 / 3 ≈ 8,33 ms | 15 / 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.
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.
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ç 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:
- A yazıcıyı alır ve kullanır.
- B dosyayı kilitler ve kullanır.
- A, yazıcıyı bırakmadan dosyayı ister. Dosya B'de olduğu için A bekler.
- 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.
Kilitlenme için şu dört koşulun hepsi gereklidir:
- Karşılıklı dışlama (mutual exclusion): kaynağın aynı anda tek sahibi olabilir.
- Tut ve bekle (hold and wait): süreç elindeki kaynağı bırakmadan başka bir kaynak bekler.
- Ön alınamazlık (no preemption): kaynak sahibinin elinden zorla alınamaz; ancak sahibi bırakınca boşalır.
- 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
| Görev | Anlamı |
|---|---|
| Ayırma | Her programa gereksinimine göre bellek alanı sağlamak |
| Koruma | Bir sürecin başka bir sürecin belleğini izinsiz değiştirmesini önlemek |
| Sanal bellek | Programlara fiziksel RAM'den bağımsız bir adres alanı sunmak |
| Sayfalama | Belleği sabit boyutlu parçalarla yönetmek |
| Takas | Gerektiğinde bazı verileri geçici olarak diske taşımak |
| Paylaşım | Ortak 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.
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.
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ım | Olay | Hesap | Sonuç |
|---|---|---|---|
| 1 | Başlangıç | 640 − 100 = 540 | 0–100 işletim sistemi, 540 KB boş |
| 2 | A yüklenir | taban = 100, limit = 200; 100 + 200 = 300 | A: 100–300; 340 KB boş |
| 3 | B yüklenir | taban = 300, limit = 150; 300 + 150 = 450 | B: 300–450; 640 − 450 = 190 KB boş |
| 4 | A, 150 adresini ister | 150 < 200 ✓; 100 + 150 = 250 | Fiziksel adres 250'ye gidilir |
| 5 | A, 250 adresini ister | 250 ≥ 200 ✗ | Erişim engellenir; A sonlandırılır |
| 6 | C 250 KB ister | 190 < 250 | Yer yok; beklemedeki B diske yazılır, 640 − 300 = 340 KB bitişik boş alan |
| 7 | C yüklenir | taban = 300, limit = 250; 300 + 250 = 550 | C: 300–550; 640 − 550 = 90 KB boş; B diskte |
Ş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.
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.
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
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).
Ş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.
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.
- Bölme. 4100 ÷ 4096 = 1, kalan 4. Yani 4100 = 1 × 4096 + 4: sayfa 1, bağıl konum 4.
- Tablo. Sayfa 1 → çerçeve 5. Sayfa RAM'dedir.
- Fiziksel adres. 5 × 4096 + 4 = 20.480 + 4 = 20.484. Okuma bu adresten yapılır.
- Bölme. 8200 ÷ 4096 = 2, kalan 8. Yani 8200 = 2 × 4096 + 8: sayfa 2, bağıl konum 8.
- Tablo. Sayfa 2 RAM'de değil, diskte. MMU bir sayfa hatası üretir; komut durdurulur ve işletim sistemi devreye girer.
- Yükleme. İşletim sistemi sayfa 2'yi diskten boş çerçeve 3'e okur ve tabloyu günceller: sayfa 2 → çerçeve 3.
- Yeniden deneme. 3 × 4096 + 8 = 12.288 + 8 = 12.296. Bu kez çeviri başarılıdır.
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:
| Sanal adres | Onaltılık | Sayfa · bağıl konum | Çerçeve | Fiziksel adres (onaltılık) | Fiziksel adres |
|---|---|---|---|---|---|
| 4100 | 1004₁₆ | 1 · 004 | 5 | 5004₁₆ | 20484 |
| 8200 | 2008₁₆ | 2 · 008 | 3 | 3008₁₆ | 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.
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.
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.
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 no | Sayfa | Sonuç | Çıkarılan | RAM'deki sayfalar (son kullanım) |
|---|---|---|---|---|
| 1 | 7 | hata | — | 7 (1) |
| 2 | 0 | hata | — | 7 (1), 0 (2) |
| 3 | 1 | hata | — | 7 (1), 0 (2), 1 (3) |
| 4 | 2 | hata | 7 | 2 (4), 0 (2), 1 (3) |
| 5 | 0 | isabet | — | 2 (4), 0 (5), 1 (3) |
| 6 | 3 | hata | 1 | 2 (4), 0 (5), 3 (6) |
| 7 | 0 | isabet | — | 2 (4), 0 (7), 3 (6) |
| 8 | 4 | hata | 2 | 4 (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.
Ş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.
| İstek no | Sayfa | Sonuç | Çıkarılan | RAM (eskiden yeniye) |
|---|---|---|---|---|
| 1–3 | 7, 0, 1 | 3 hata | — | 7, 0, 1 |
| 4 | 2 | hata | 7 | 0, 1, 2 |
| 5 | 0 | isabet | — | 0, 1, 2 |
| 6 | 3 | hata | 0 | 1, 2, 3 |
| 7 | 0 | hata | 1 | 2, 3, 0 |
| 8 | 4 | hata | 2 | 3, 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.
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.
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.
Ş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.
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.
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.
Ş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.
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?
- 9 ÷ 4 = 2,25. Kesirli blok olmadığı için yukarı yuvarlanır: 3 blok.
- Kaplanan yer: 3 × 4 = 12 KB. Son blokta 12 − 9 = 3 KB boş kalır; bu alan başka bir dosyaya verilemez.
- 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.
| Dosya sistemi | Platform | Günlükleme | Ne zaman kullanılır? |
|---|---|---|---|
| NTFS | Windows (macOS yalnızca okur) | Var | Windows sistem diski; büyük dosya, izin ve şifreleme gerektiğinde |
| FAT32 | Hemen her aygıt ve işletim sistemi | Yok | Eski aygıtlar, kamera, basit bellek kartı; tek dosya en çok 4 GB |
| exFAT | Windows, macOS ve güncel Linux | Yok | Büyük dosyalı USB bellek ve SD kart; platformlar arası taşıma |
| ext4 | Linux | Var | Linux sistem ve veri diski |
| APFS | macOS, iOS, iPadOS | Klasik günlük yok; yazınca kopyalama ile tutarlılık | Apple 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.
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.
Ş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.
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.
Şekil 2.22'deki ağaçta rapor.txt'ye üç farklı geçerli klasörden göreli yolla nasıl ulaşılır?
- Geçerli klasör /home/ali:
belgeler/rapor.txt. Bir klasör aşağı inilir. - Geçerli klasör /home/ali/belgeler:
rapor.txt. Dosya zaten buradadır. - 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.
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).
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ğer | Konum |
|---|---|---|---|
open | Yolu 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 = 3 | 0 |
read (100) | 0–99 arası baytları okur | n = 100 | 100 |
read (100) | Yalnızca 50 bayt kaldı; 100–149 arasını okur | n = 50 | 150 |
read (100) | Okunacak bayt yok | n = 0 (dosya sonu) | 150 |
close | Kaydı siler; 3 numarası yeniden boşalır | 0 (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.
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
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.
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.
| İş | Linux / macOS | Windows (cmd) |
|---|---|---|
| Geçerli klasörü göster | pwd | cd (parametresiz) |
| Klasör içeriğini listele | ls | dir |
| Klasör değiştir | cd klasör | cd klasör |
| Klasör oluştur | mkdir yeni | mkdir yeni |
| Dosya kopyala | cp a.txt b.txt | copy a.txt b.txt |
| Dosya sil | rm a.txt | del 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.
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?
| Komut | Açıklama | Sonraki geçerli klasör | Çıktı |
|---|---|---|---|
cd belgeler | Göreli yol: bir klasör aşağı | /home/ali/belgeler | — |
cd ../resimler | Bir üst (ali), sonra resimler | /home/ali/resimler | — |
cd ../../ayse | İki üst (ali, home), sonra ayse | /home/ayse | — |
ls | İçeriği listeler | /home/ayse | notlar.txt |
cd /tmp | “/” ile başlar: mutlak yol | /tmp | — |
pwd | Geç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.
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.
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.
| Basamak | İkili | İzin | Anlamı |
|---|---|---|---|
| 7 | 111 | rwx | Oku, yaz, çalıştır |
| 6 | 110 | rw- | Oku, yaz |
| 5 | 101 | r-x | Oku, çalıştır |
| 4 | 100 | r-- | Yalnızca oku |
| 0 | 000 | --- | Hiçbir izin yok |
(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?
- (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. - (b) Sahip: rw- = 4 + 2 = 6. Grup: --- = 0. Diğer: --- = 0. Sayı
600'dür. - (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.
İ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.
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.
Ş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.
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.
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?
- Oturum açma: parola doğrudur → kimlik doğrulama başarılı.
- Ödev dosyasını açma: dosyanın sahibi öğrencidir ve okuma izni vardır → yetkilendirme başarılı (✓).
- 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.
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.
Ş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.
Ş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
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.
Ş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.
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?
- Hız metre/saniyeye çevrilir: 100 km/sa = 100.000 m ÷ 3.600 s ≈ 27,78 m/s.
- Sistem A: 27,78 × 0,006 ≈ 0,17 m.
- Son tarih 10 ms: 27,78 × 0,010 ≈ 0,28 m.
- 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.
“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.
| Gereksinim | Değerlendirilecek ölçüt |
|---|---|
| Uygulama | Gerekli yazılımların ve sürümlerinin bulunması |
| Donanım | Sürücü ve işlemci mimarisi desteği |
| Güvenlik | Güncelleme süresi, yetki modeli ve yönetim araçları |
| Kullanılabilirlik | Arayüz, erişilebilirlik ve öğrenme gereksinimi |
| Maliyet | Lisans, 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.
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.
Ş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.
“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.
Ş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ı
| Ölçüt | Açık kaynak | Ticari / kapalı kaynak |
|---|---|---|
| Kaynak erişimi | Lisansla açık | Genellikle kapalı |
| Özelleştirme | Lisans kapsamında mümkün | Üreticinin sunduğu seçeneklerle sınırlı |
| Destek | Topluluk ya da ücretli sağlayıcı | Üretici ya da yetkili iş ortağı |
| Maliyet | Lisans ücretsiz olabilir; işletme maliyeti sürer | Lisans ya da abonelik gerekebilir |
| Lisans örneği | GPL, MIT, Apache | Son kullanıcı lisans sözleşmesi |
| Ürün örneği | Linux, Firefox, LibreOffice | Windows, 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.
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?
- MIT kütüphanesi: program istenen lisansla dağıtılabilir. Yalnızca kütüphanenin telif bildirimi ve lisans metni dağıtıma eklenmelidir.
- 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.
- 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.
| Kavram | Anlamı |
|---|---|
| Güvenlik güncellemesi | Bilinen açıkları kapatır |
| Özellik güncellemesi | Yeni işlevler ve arayüz değişiklikleri getirir |
| Sürücü güncellemesi | Donanım uyumluluğunu ya da kararlılığını iyileştirebilir |
| Destek süresi | Üreticinin güncelleme sağladığı zaman aralığı |
| Yedekleme | Büyük bir değişiklikten önce geri dönüş imkânı sağlar |
| Test | Kurumsal ortamlarda güncellemeler yaygın dağıtımdan önce denenir |
Ş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
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
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ı
Şekil 2.33 iki yaklaşımın katmanlarını yan yana gösterir. Fark, yalıtımın hangi katmanda kurulduğundadır.
| Özellik | Sanal makine | Konteyner |
|---|---|---|
| Ne taşır? | Tam bir misafir işletim sistemi ve uygulama | Yalnızca uygulama ve bağımlılıkları |
| Çekirdek | Her sanal makinenin kendi çekirdeği | Ana işletim sisteminin çekirdeği ortak |
| Yalıtım | Güç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 |
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?
- (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.
- (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;
chmodizinleri 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.
| Soru | Kural | Örnek |
|---|---|---|
| Tamamlanma süresi | bitiş − varış | RR'de P2: 9 − 0 = 9 ms |
| Bekleme süresi | tamamlanma süresi − işlemci süresi | RR'de P2: 9 − 3 = 6 ms |
| Taban/limit | adres < limit ise taban + adres | 150 < 200 → 100 + 150 = 250 |
| Sayfa ve bağıl konum | adres ÷ 4096 ve adres mod 4096 | 4100 → sayfa 1, konum 4 |
| Fiziksel adres | çerçeve × 4096 + bağıl konum | 5 × 4096 + 4 = 20484 |
| Disk blokları | boyut ÷ blok boyutu, yukarı yuvarlanır | 9 KB, 4 KB blok → 3 blok |
| chmod basamağı | r = 4, w = 2, x = 1 toplanır | rw- → 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.
- yazılım software
- sistem yazılımı system software
- uygulama yazılımı application software
- ürün yazılımı firmware
- yardımcı araç utility
- ara yazılım middleware
- işletim sistemi operating system
- önyükleme boot
- önyükleyici boot loader
- önyükleme sırası boot order
- UEFI / BIOS UEFI / BIOS
- açılışta öz sınama (POST) power-on self-test
- EFI sistem bölümü EFI system partition
- Güvenli Önyükleme Secure Boot
- TPM Trusted Platform Module
- bölüm / bölümleme düzeni partition / partitioning scheme
- çekirdek kernel
- çekirdek modu / kullanıcı modu kernel mode / user mode
- sistem çağrısı system call
- kesme interrupt
- monolitik / mikro / hibrit çekirdek monolithic / micro / hybrid kernel
- Linux dağıtımı Linux distribution
- süreç process
- süreç kimliği (PID) process ID
- iş parçacığı thread
- süreç durumu process state
- hazır kuyruğu ready queue
- çizelgeleme / çizelgeleyici scheduling / scheduler
- bağlam değiştirme context switch
- eş zamanlılık concurrency
- çoklu programlama multiprogramming
- zaman paylaşımı time sharing
- döner sıralı çizelgeleme round robin
- zaman dilimi time slice, quantum
- Gantt çizelgesi Gantt chart
- kilitlenme deadlock
- karşılıklı dışlama mutual exclusion
- tut ve bekle hold and wait
- ön alınamazlık no preemption
- döngüsel bekleme circular wait
- takas / takas alanı swapping / swap space
- sanal bellek virtual memory
- sanal adres virtual address
- sayfa / çerçeve page / frame
- sayfa tablosu page table
- bağıl konum offset
- bellek yönetim birimi (MMU) memory management unit
- sayfa hatası page fault
- sayfa dosyası page file
- sayfa değiştirme page replacement
- LRU least recently used
- erişim ihlali segmentation fault
- aygıt sürücüsü device driver
- tak ve çalıştır plug and play
- tampon buffer
- dosya sistemi file system
- meta veri metadata
- günlükleme journaling
- biçimlendirme format
- kök / klasör / alt klasör root / folder / subfolder
- yol / mutlak yol / göreli yol path / absolute / relative path
- geçerli klasör current directory
- dosya tanımlayıcı file descriptor
- tanıtıcı handle
- dosya sonu end of file
- grafik kullanıcı arayüzü (GUI) graphical user interface
- komut satırı arayüzü (CLI) command-line interface
- izin permission
- kimlik doğrulama authentication
- yetkilendirme authorization
- en az ayrıcalık principle of least privilege
- korumalı alan sandbox
- gerçek zamanlı sistem real-time system
- lisans license
- açık kaynak / kapalı kaynak open source / closed source
- güncelleme update
- sanallaştırma virtualization
- sanal makine virtual machine
- hipervizör hypervisor
- misafir / ana işletim sistemi guest / host operating system
- konteyner / konteyner motoru container / container engine
- bağımlılık dependency
2.15Kendini Dene
Üç 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.
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.
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.
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.
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.
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.
(a)
chmod 700 anahtar.txtsonrası izinler nedir? (b)rwxr-xr-xizni 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.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
- A. Silberschatz, P. B. Galvin, G. Gagne, Operating System Concepts, Wiley.
- A. S. Tanenbaum, H. Bos, Modern Operating Systems, Pearson.
- The Linux Foundation ve Free Software Foundation lisans kaynakları.
- R. H. Arpaci-Dusseau, A. C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces, Arpaci-Dusseau Books.
- 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.