Bölüm 1: Giriş

İşletim Sistemleri
İşletim sistemi nedir?Kullanıcı ve çekirdek moduGenişletilmiş makine Kaynak yöneticisiTarihçeİşlemci ve bellek hiyerarşisi Disk ve SSDSorgulama, kesme, DMAVeri yolları ÖnyüklemeİS çeşitleriPolitika ve mekanizma
Sercan KÜLCÜ · Giresun Üniversitesi · Bilgisayar Mühendisliği

Giriş

Öğrenme Çıktıları

Tanım ve konum

İşletim sisteminin donanım ile uygulamalar arasındaki yerini ve iki temel rolünü (genişletilmiş makine, kaynak yöneticisi) açıklamak.

Koruma

Çekirdek modu ile kullanıcı modunu ve aralarındaki kontrollü geçişi (sistem çağrısı, kesme, istisna) açıklamak.

Tarihsel gelişim

Toplu iş, çoklu programlama ve zaman paylaşımı fikirlerinin hangi sorunları çözdüğünü anlatmak.

Donanım temelleri

İşlemci, bellek hiyerarşisi, önbellek, disk/SSD ve veri yollarının İS'yi nasıl etkilediğini yorumlamak.

G/Ç yöntemleri

Sorgulama, kesme ve DMA'yı karşılaştırmak; açılış (önyükleme) sırasını izlemek.

Kavramlar

İS çeşitlerini, İS hizmetlerini ve politika–mekanizma ayrımını örneklerle açıklamak.

Giriş

İşletim Sistemi Nedir?

  • Modern bir bilgisayar; çok çekirdekli işlemci, GB'larca bellek, SSD, ağ kartı, GPU ve onlarca aygıttan oluşur.
  • Uygulama geliştiricinin bu donanımın her ayrıntısını bilmesi ve doğrudan programlaması imkânsızdır.
  • İşletim sistemi (İS): donanımı yöneten, uygulamalara basit, güvenli ve ortak bir arayüz sunan yazılım katmanı.
  • Çekirdek (kernel): her zaman bellekte duran, ayrıcalıklı kısım; dar anlamda "işletim sistemi" budur.
  • Kullanıcılar bilgisayarla kabuk (shell, komut satırı) ya da GKA (grafik kullanıcı arayüzü, GUI) üzerinden etkileşir.
MasaüstüWindows 11, macOS, Linux dağıtımları (Ubuntu, Fedora), ChromeOS
MobilAndroid, iOS / iPadOS, HarmonyOS
Sunucu ve bulutLinux, Windows Server, FreeBSD
Gömülü ve IoTZephyr, FreeRTOS, Contiki-NG, VxWorks, QNX

Giriş

Bilgisayar Sisteminin Bileşenleri

KullanıcımoduÇekirdekmoduDonanımWeb tarayıcıE-posta istemcisiMüzik çalarKabuk / GKA (kullanıcı arayüzü programı)İşletim sistemi (çekirdek)İşlemciBellekSSD/DiskAğ kartıKlavye/FareEkranYazıcı
Donanım: işlemci, bellek, depolama ve G/Ç aygıtları. Yazılım: çekirdek modunda çalışan işletim sistemi ve kullanıcı modunda çalışan her şey; kabuk/GKA bile sıradan bir kullanıcı programıdır.

Giriş

Kabuk ve GKA

● ● ●Terminal: bash$ ls ~/notlarbolum1.md bolum2.md$ ps aux | grep firefoxsercan 4211 2.1 firefox$ uname -srLinux 6.12.8$ _Masaüstü (GKA)BelgelerAyarlarTarayıcıDosya Gezginipencere · simge · menü · işaretçi
  • Kabuk (shell): komut satırı arayüzü (CLI) · bash, zsh, fish, PowerShell, cmd.exe.
  • GKA (GUI): pencere, simge, menü ve işaretçi (WIMP) ile görsel etkileşim · Windows Gezgini, macOS Finder, GNOME, KDE Plasma.
  • İkisi de çekirdeğin parçası değildir: kullanıcı modunda çalışan programlardır ve çekirdek hizmetlerini sistem çağrılarıyla isterler. Bu yüzden değiştirilebilir, kişiselleştirilebilir; aynı anda birden çoğu çalışabilir.

Giriş

Kabuk mu, GKA mı?

Kabuk

  • Betiklerle (script) otomasyon: aynı işi binlerce kez tekrarlamak kolay.
  • Boru hattı: ps aux | grep ssh | wc -l gibi küçük araçları birleştirme.
  • Az kaynak; SSH ile uzaktan sunucu yönetimi.
  • Belirli görevleri hızlı ve kesin biçimde yapar.

GKA

  • Sezgisel ve keşfedilebilir: komut ezberlemek gerekmez.
  • Görsel içerik (fotoğraf, harita, tasarım) için doğal.
  • Geniş bir kullanıcı kitlesine ulaşır; erişilebilirlik araçları.
  • Dokunmatik ve sesli arayüzler de bu ailededir.
İkisi birbirinin rakibi değil, tamamlayıcısıdır: günlük işler için GKA, tekrarlı ve uzaktan işler için kabuk. Her ikisi de aynı çekirdek hizmetlerini kullanır; çekirdek, isteğin hangi arayüzden geldiğini bilmez.

Giriş

Aygıt Yöneticisi

  • Windows'ta bilgisayara bağlı donanım aygıtlarını ve sürücülerini listeleyen yönetim aracıdır (devmgmt.msc, bir MMC eklentisi).
  • Aygıtın türünü, üreticisini, sürücü sürümünü ve kullandığı kaynakları (kesme, bellek aralığı) gösterir.
  • Sürücüyü güncelleme / geri alma, aygıtı devre dışı bırakma; sorunlu aygıtlar uyarı simgesiyle işaretlenir.
  • Asıl işi çekirdekteki Tak-Çalıştır (PnP) yöneticisi ve aygıt sürücüleri yapar; araç onların bir görünümüdür.
  • Linux karşılıkları: lspci, lsusb, lsblk, lsmod, /sys ve udev.
BILGISAYAR-01Disk sürücüleriNVMe SSD 1 TBEkran bağdaştırıcılarıGPU (ayrık)Ağ bağdaştırıcılarıWi-Fi 7Ethernet 2.5 GbEUSB denetleyicileriUSB kök hub (USB 3.2)Diğer aygıtlarBilinmeyen aygıt!

Konum ve Modlar

İşletim Sisteminin Konumu

  • İS, donanım (fiziksel bileşenler: CPU, RAM, disk) ile yazılım (bilgisayarın yapacağı işleri tarif eden kod) arasındaki arayüzdür.
  • Uygulamalar donanıma doğrudan değil, İS'nin sunduğu sistem çağrıları üzerinden erişir.
KullanıcılarUygulamalar (tarayıcı, ofis, oyun, derleyici)Sistem çağrısı arayüzüİşletim sistemi (çekirdek)Donanım (CPU, RAM, SSD, aygıtlar)• yazılımın donanımı kullanmasını kontrol eder• donanım kullanımını optimize eder• sistem güvenliğini ve yalıtımı sağlar

Konum ve Modlar

Çekirdek Modu ve Kullanıcı Modu

  • İşlemcide bir mod biti / ayrıcalık seviyesi vardır: x86 ring 0–3, ARMv8 EL0–EL3, RISC-V U/S/M.
  • Çekirdek modu: tüm komutlar ve tüm bellek kullanılabilir; G/Ç, kesmeleri kapatma, sayfa tablosunu değiştirme gibi ayrıcalıklı komutlar serbesttir.
  • Kullanıcı modu: ayrıcalıklı komutlar yasaktır; denenirse işlemci bir istisna (trap) üretir ve çekirdek süreci sonlandırabilir.
  • Kabuk ve GKA, kullanıcı modu yazılımının en alt seviyesidir.
  • Kullanıcıdan çekirdeğe yalnızca kontrollü kapılardan geçilir: sistem çağrısı, kesme, istisna.
Ring 0çekirdekRing 1Ring 2Ring 3 · uygulamalarx86: ring 1–2 pratikte kullanılmaz

Konum ve Modlar · Animasyon

Mod Geçişi Adım Adım: read() Sistem Çağrısı

Kullanıcı moduÇekirdek moduKullanıcı sürecin = read(fd, buf, 100);libc: read() sarmalayıcısırax=0, rdi=fd, …; syscallSistem çağrısı tablosu[0] → sys_read()sys_read(): argümanlarıdenetle, veriyi kopyalatrap (syscall)sysret (dönüş)mod biti1kullanıcı

Süreç kullanıcı modunda çalışıyor (mod biti = 1). Bir dosyadan okumak istiyor; diske kendisi erişemez.

Kullanıcı moduÇekirdek moduKullanıcı sürecin = read(fd, buf, 100);libc: read() sarmalayıcısırax=0, rdi=fd, …; syscallSistem çağrısı tablosu[0] → sys_read()sys_read(): argümanlarıdenetle, veriyi kopyalatrap (syscall)sysret (dönüş)mod biti1kullanıcı

C kütüphanesindeki read() sarmalayıcısı çağrı numarasını (x86-64 Linux: read = 0, rax) ve argümanları yazmaçlara koyar, syscall komutunu çalıştırır.

Kullanıcı moduÇekirdek moduKullanıcı sürecin = read(fd, buf, 100);libc: read() sarmalayıcısırax=0, rdi=fd, …; syscallSistem çağrısı tablosu[0] → sys_read()sys_read(): argümanlarıdenetle, veriyi kopyalatrap (syscall)sysret (dönüş)mod biti0çekirdek

Trap: donanım mod bitini 0 yapar, dönüş adresini kaydeder ve çekirdeğin sabit giriş noktasına atlar. Süreç nereye atlanacağını seçemez.

Kullanıcı moduÇekirdek moduKullanıcı sürecin = read(fd, buf, 100);libc: read() sarmalayıcısırax=0, rdi=fd, …; syscallSistem çağrısı tablosu[0] → sys_read()sys_read(): argümanlarıdenetle, veriyi kopyalatrap (syscall)sysret (dönüş)mod biti0çekirdek

Çekirdek, numarayla sistem çağrısı tablosundan sys_read()'i bulur; argümanları doğrular (buf gerçekten sürecin mi?) ve işi yapar.

Kullanıcı moduÇekirdek moduKullanıcı sürecin = read(fd, buf, 100);libc: read() sarmalayıcısırax=0, rdi=fd, …; syscallSistem çağrısı tablosu[0] → sys_read()sys_read(): argümanlarıdenetle, veriyi kopyalatrap (syscall)sysret (dönüş)mod biti1kullanıcı

Sonuç (okunan bayt sayısı) rax'a yazılır; sysret mod bitini 1 yapar ve süreç read()'ten sonraki komuttan devam eder.

Konum ve Modlar

Fiziksel Aygıtlar, Mikro Mimari, Makine Dili

BankaRezervasyonTarayıcıDerleyiciEditörKabukİşletim sistemiMakine dili (ISA)Mikro mimariFiziksel aygıtlarUygulamaSistemDonanımYazılım
Fiziksel aygıtlarYongalar, bellek modülleri, SSD, G/Ç aygıtları.
Mikro mimariİşlemcinin iç tasarımı: veri yolu, yazmaçlar, ALU, önbellekler, denetim birimi.
Makine dili (ISA)Donanımın doğrudan yürüttüğü ikili komutlar: x86-64, ARM64, RISC-V.
İS'nin işiSürücüler, üst katmanın isteklerini aygıtın anlayacağı düşük düzeyli komutlara çevirir.

Düzeltme: Programı makine diline derleyici çevirir, İS değil. İS, derlenmiş programı yükler, çalıştırır ve donanıma erişimine aracılık eder.

İS'nin Rolleri

Genişletilmiş Makine Olarak İS

  • Donanımın üstüne inşa edilmiş bir yazılımdır; donanımı kullanmayı kolaylaştırır.
  • Donanımın yeteneklerini kullanılabilir hâle getirir, karmaşık ayrıntılarını gizler.
  • Uygulamaların donanıma doğrudan erişmesini engeller: hem kolaylık hem koruma için.
  • Örnek: SSD'ye blok yazmak için NVMe kuyrukları, LBA, hata kodları… Uygulama ise yalnızca write(fd, buf, n) der.
  • Tanenbaum'un ifadesiyle: İS, çirkin donanımı güzel soyutlamalara dönüştürür.
Uygulama programlarıGüzel arayüzopen, read, write, fork …İşletim sistemiÇirkin arayüzyazmaçlar, kesmeler, zamanlamaDonanım

İS'nin Rolleri

Soyutlamalar ve Roller

DonanımİS soyutlaması
İşlemci (CPU)Süreç ve iş parçacığı
Bellek (RAM)Adres uzayı (sanal bellek)
Depolama (SSD/disk)Dosya ve dizin
Ağ kartıSoket
Ekran, klavyePencere, terminal

Her soyutlama, donanımın sınırlı ve paylaşılan kaynağını her programa "kendine ait" gibi gösterir.

Donanım tasarımcısıISA'yı, aygıtları ve arayüzlerini tasarlar.
Çekirdek geliştiriciSoyutlamaları donanım üzerinde gerçekler.
Uygulama geliştiriciSoyutlamaları sistem çağrıları ve API'lerle kullanır.
Son kullanıcıYalnızca uygulamaları ve arayüzü görür.

İS'nin Rolleri · Animasyon

Bir write() Çağrısının Yolculuğu

Uygulamawrite(fd, "Merhaba", 7)C kütüphanesi (libc)write() sarmalayıcısı → syscallSistem çağrısı arayüzükullanıcı → çekirdek moduVFS (sanal dosya sistemi)fd → açık dosya → inodeDosya sistemi (ext4, NTFS, APFS)dosya ofseti → blok adresiSayfa önbelleği + blok katmanıkirli sayfa, G/Ç kuyruğuAygıt sürücüsü (NVMe)NVMe yazma komutu, DMASSD denetleyicisiflash sayfasına yazarkullanıcı modu ↑çekirdek modu ↓

Uygulama yalnızca dosya tanımlayıcısı (fd), bir tampon ve uzunluk verir; diskin türünü bile bilmez.

Uygulamawrite(fd, "Merhaba", 7)C kütüphanesi (libc)write() sarmalayıcısı → syscallSistem çağrısı arayüzükullanıcı → çekirdek moduVFS (sanal dosya sistemi)fd → açık dosya → inodeDosya sistemi (ext4, NTFS, APFS)dosya ofseti → blok adresiSayfa önbelleği + blok katmanıkirli sayfa, G/Ç kuyruğuAygıt sürücüsü (NVMe)NVMe yazma komutu, DMASSD denetleyicisiflash sayfasına yazarkullanıcı modu ↑çekirdek modu ↓

libc sarmalayıcısı argümanları yazmaçlara koyar ve syscall ile çekirdeğe geçer (önceki slayttaki mod geçişi).

Uygulamawrite(fd, "Merhaba", 7)C kütüphanesi (libc)write() sarmalayıcısı → syscallSistem çağrısı arayüzükullanıcı → çekirdek moduVFS (sanal dosya sistemi)fd → açık dosya → inodeDosya sistemi (ext4, NTFS, APFS)dosya ofseti → blok adresiSayfa önbelleği + blok katmanıkirli sayfa, G/Ç kuyruğuAygıt sürücüsü (NVMe)NVMe yazma komutu, DMASSD denetleyicisiflash sayfasına yazarkullanıcı modu ↑çekirdek modu ↓

VFS: fd, sürecin açık dosya tablosundan bir dosya nesnesine ve inode'a çözülür. Tüm dosya sistemleri için ortak katman.

Uygulamawrite(fd, "Merhaba", 7)C kütüphanesi (libc)write() sarmalayıcısı → syscallSistem çağrısı arayüzükullanıcı → çekirdek moduVFS (sanal dosya sistemi)fd → açık dosya → inodeDosya sistemi (ext4, NTFS, APFS)dosya ofseti → blok adresiSayfa önbelleği + blok katmanıkirli sayfa, G/Ç kuyruğuAygıt sürücüsü (NVMe)NVMe yazma komutu, DMASSD denetleyicisiflash sayfasına yazarkullanıcı modu ↑çekirdek modu ↓

Dosya sistemi, dosyadaki konumu (ofset) diskteki blok adresine çevirir; gerekirse yeni blok ayırır.

Uygulamawrite(fd, "Merhaba", 7)C kütüphanesi (libc)write() sarmalayıcısı → syscallSistem çağrısı arayüzükullanıcı → çekirdek moduVFS (sanal dosya sistemi)fd → açık dosya → inodeDosya sistemi (ext4, NTFS, APFS)dosya ofseti → blok adresiSayfa önbelleği + blok katmanıkirli sayfa, G/Ç kuyruğuAygıt sürücüsü (NVMe)NVMe yazma komutu, DMASSD denetleyicisiflash sayfasına yazarkullanıcı modu ↑çekirdek modu ↓

Veri genelde önce sayfa önbelleğine yazılır ve write() hemen döner; diske yazma sonra yapılır (kalıcılık için fsync()).

Uygulamawrite(fd, "Merhaba", 7)C kütüphanesi (libc)write() sarmalayıcısı → syscallSistem çağrısı arayüzükullanıcı → çekirdek moduVFS (sanal dosya sistemi)fd → açık dosya → inodeDosya sistemi (ext4, NTFS, APFS)dosya ofseti → blok adresiSayfa önbelleği + blok katmanıkirli sayfa, G/Ç kuyruğuAygıt sürücüsü (NVMe)NVMe yazma komutu, DMASSD denetleyicisiflash sayfasına yazarkullanıcı modu ↑çekirdek modu ↓

Sürücü bir NVMe komutu hazırlar; SSD veriyi DMA ile bellekten alıp flash'a yazar ve bitince kesme üretir.

İS'nin Rolleri

Kaynak Yöneticisi Olarak İS

  • Birden çok programın aynı anda çalışmasına izin verir; CPU, bellek, G/Ç aygıtları gibi kaynakları dağıtır ve korur.
  • Hedef: kaynakları verimli kullanmak ve programlar arasında adil paylaştırmak.
  • Yukarıdan aşağı bakış: uygulamalara soyutlamalar sağlar. Aşağıdan yukarı bakış: karmaşık sistemin parçalarını yönetir.
  • Kaynaklar iki biçimde paylaştırılır: zamanda (sırayla) ve alanda (parçalara bölerek).
Sorular: Birçok program aynı anda yazdırmak isterse? Her sürecin kaynak kullanımı nasıl ölçülür? Kaynaklar çoğaldığında adalet ve verimlilik nasıl sağlanır?
Zamanda çoklama: tek CPUABCABCAzamanAlanda çoklama: bellekİSABCboşYazıcı → zamanda · disk blokları → alanda

İS'nin Rolleri · Animasyon

Birçok Program Aynı Anda Yazdırmak İsterse

Kelime işlemciPDF görüntüleyiciTarayıcıYazıcıçıktılar karışır!

Üç program neredeyse aynı anda yazdırmak istiyor; yazıcı tek. Hepsi yazıcıya doğrudan yazabilseydi sayfalar birbirine karışırdı.

Kelime işlemciPDF görüntüleyiciTarayıcıbiriktirme kuyruğu (disk)iş 1: rapor.pdfiş 2: foto.jpgiş 3: not.txtYazıcı

Programlar işlerini yazıcıya değil, İS'nin diskteki biriktirme (spool) kuyruğuna yazar ve hemen kendi işlerine döner.

Kelime işlemciPDF görüntüleyiciTarayıcıbiriktirme kuyruğu (disk)iş 1: rapor.pdfiş 2: foto.jpgiş 3: not.txtBiriktirmehizmetiCUPS / Print SpoolerYazıcı

Yazıcıyı kullanan tek süreç biriktirme hizmetidir (Linux: CUPS, Windows: Print Spooler); karışıklık bu tekellikle önlenir.

Kelime işlemciPDF görüntüleyiciTarayıcıbiriktirme kuyruğu (disk)iş 1: rapor.pdfiş 2: foto.jpgiş 3: not.txtBiriktirmehizmetiCUPS / Print SpoolerYazıcışu an: rapor.pdf

Hizmet işleri genellikle geliş sırasıyla (FCFS) gönderir; yönetici öncelik ya da duraklatma uygulayabilir. Şimdi iş 1 basılıyor.

Kelime işlemciPDF görüntüleyiciTarayıcıbiriktirme kuyruğu (disk)iş 1: rapor.pdfiş 2: foto.jpgiş 3: not.txtBiriktirmehizmetiCUPS / Print SpoolerYazıcışu an: foto.jpg

İş 1 bitti, sıradaki iş 2. Yavaş yazıcı beklenirken programlar ve CPU başka işler yapabildi: G/Ç ile hesaplama örtüşür.

İS'nin Rolleri

Kaynak Kullanımını Ölçmek

KaynakÖlçütLinuxWindows
CPUKullanıcı / çekirdek modu CPU zamanı, kullanım yüzdesi/proc/[pid]/stat, top, timeGörev Yöneticisi, Performans İzleyicisi
BellekYerleşik küme (RSS), sanal boyut, çalışma kümesi; ayırma/serbest bırakma örüntüsü/proc/[pid]/status, smem"Çalışma kümesi" sütunu
G/ÇOkunan/yazılan bayt, sistem çağrısı ve G/Ç isteği sayısı/proc/[pid]/io, iotop, strace -cKaynak İzleyicisi
$ grep -E 'VmRSS|Threads' /proc/4211/status
VmRSS:    412360 kB
Threads:  57
Ölçümün kaynağı çekirdektir: her bağlam değişiminde, sistem çağrısında ve sayfa hatasında süreç başına sayaçları günceller.

İS'nin Rolleri

Adalet ve Verimlilik

Kaynakların çoğalması (çok çekirdek, büyük bellek) performans ve tepki süresi kazandırır; ama onları adil ve verimli paylaştırmayı zorlaştırır.

ÇizelgelemeHangi süreç ne zaman, hangi çekirdekte çalışacak? Linux 6.6 (2023) ile CFS yerine EEVDF çizelgeleyicisi geldi.
Önceliklendirmenice değerleri, Windows öncelik sınıfları, gerçek zamanlı sınıflar.
Kotalar ve sınırlarLinux cgroups v2 (konteynerler), ulimit, disk kotaları, Windows Job nesneleri.
ÖdünleşimToplam iş hacmi ↔ tepki süresi ↔ adalet: biri iyileşirken diğeri kötüleşebilir.
Doğru yaklaşım iş yüküne bağlıdır: sunucuda iş hacmi, masaüstünde tepki süresi, gerçek zamanlı sistemde son tarihlere uymak önceliklidir.

Tarihçe

İşletim Sistemlerinin Tarihi

1945–55Vakum tüpleriİS yok; kablo panoları1. nesil1955–65TransistörlerToplu iş (batch)2. nesil1965–80TümleşikdevrelerÇoklu programlama,zaman paylaşımı3. nesil1980–Kişisel bilgisayarMS-DOS, Mac, Windows,Linux4. nesil1990–Mobil cihazlarSymbian, iOS,Android5. nesil2000–Sanallaştırmave bulutHipervizör, konteyner,IoTgünümüz
  • Nesiller, donanım teknolojisindeki sıçramalarla (tüp → transistör → tümleşik devre → mikroişlemci) birlikte değişir.
  • Her nesilde aynı soru yeniden sorulur: pahalı kaynağı (CPU, bellek, insan zamanı) nasıl daha iyi kullanırız?
  • Son satır Tanenbaum'un nesillerinden biri değildir; bugünkü sistemleri anlamak için eklenmiştir.

Tarihçe

1. ve 2. Nesil

1. nesil (1945–55): vakum tüpleri
  • Oda büyüklüğünde, yavaş, sık arızalanan makineler (ENIAC, 1945).
  • Aynı mühendis grubu tasarlar, kurar, programlar, bakımını yapar.
  • Makine diliyle ya da kablo panolarıyla programlama; 1950'lerin başında delikli kartlar.
  • Programlama dili ve işletim sistemi yok; çoğunlukla sayısal tablolar hesaplanır.
2. nesil (1955–65): transistör ve toplu iş
  • Transistörler tüplerin yerini aldı: daha küçük, güvenilir, enerji verimli.
  • Ana bilgisayarlar klimalı odalarda; programcı ile makine arasında operatör.
  • Toplu iş: işler teybe toplanır, küçük bir monitör programı onları sırayla, otomatik çalıştırır; operatör yalnızca teypleri taşır.
  • Bellekte tek iş: G/Ç sırasında CPU boşta; etkileşim yok.
Toplu işin amacı işler arasındaki el ile geçiş süresini ortadan kaldırmaktı. Etkileşimli ve gerçek zamanlı kullanıma ise uygun değildi.

Tarihçe · Animasyon

Erken Bir Toplu İş Sistemi

Kartokuyucu1401Girişteybi7094Çıkışteybi1401YazıcıSistemteybioperatör taşıroperatör taşır(a)(b)(c)(d)(e)(f)

(a) Programcılar delikli kart destelerini 1401'in kart okuyucusuna getirir.

Kartokuyucu1401Girişteybi7094Çıkışteybi1401YazıcıSistemteybioperatör taşıroperatör taşır(a)(b)(c)(d)(e)(f)

(b) Ucuz 1401, bir grup işin kartlarını okuyup giriş teybine yazar (yavaş kart okumayı pahalı makineden ayırır).

Kartokuyucu1401Girişteybi7094Çıkışteybi1401YazıcıSistemteybioperatör taşıroperatör taşır(a)(b)(c)(d)(e)(f)

(c) Operatör giriş teybini pahalı 7094'e taşır.

Kartokuyucu1401Girişteybi7094Çıkışteybi1401YazıcıSistemteybioperatör taşıroperatör taşır(a)(b)(c)(d)(e)(f)

(d) 7094, sistem teybindeki monitör programıyla işleri sırayla hesaplar; çıktıları çıkış teybine yazar.

Kartokuyucu1401Girişteybi7094Çıkışteybi1401YazıcıSistemteybioperatör taşıroperatör taşır(a)(b)(c)(d)(e)(f)

(e) Operatör çıkış teybini yeniden 1401'e taşır.

Kartokuyucu1401Girişteybi7094Çıkışteybi1401YazıcıSistemteybioperatör taşıroperatör taşır(a)(b)(c)(d)(e)(f)

(f) 1401 çıktıları yazıcıdan basar (çevrim dışı yazdırma). Pahalı 7094 hiç kart okumak ya da yazdırmakla uğraşmadı.

Tarihçe

IBM 1401, 7094 ve System/360

MakineYılÖzellik
IBM 14011959Ticari veri işleme; karakter tabanlı, görece ucuz. Kart okuma, teybe kopyalama, yazdırma gibi G/Ç işlerinde de kullanıldı. 1960'ların en yaygın bilgisayarlarından.
IBM 70941962Bilimsel hesaplama; 36 bit sözcüklü, 1401'den tamamen farklı bir mimari. IBSYS / FMS altında toplu iş çalıştırdı. MIT'de değiştirilmiş bir 7094 üzerinde CTSS ile zaman paylaşımı denendi.
System/3601964Küçükten büyüğe aynı mimariyi paylaşan bir aile. İşletim sistemi OS/360: çoklu programlama, biriktirme; milyonlarca satırlık, hatalarla dolu dev bir proje (Brooks, The Mythical Man-Month).
Düzeltme: 1401 ve 7094, OS/360 altında çalışmadı; OS/360, 1964'te duyurulan System/360 ailesi için yazıldı. 7094 de 1401'in "güçlü sürümü" değildi; iki makine birbirini tamamlıyordu (bkz. önceki slayt).

Tarihçe

Tipik Bir FMS İşi

$ENDProgram verisi$RUN$LOADFORTRAN programı$FORTRAN$JOB, 10,7710802, OGRENCI
  • FMS = Fortran Monitor System: IBM 709/7094 için bir toplu iş izleme (monitör) programı.
  • $ ile başlayan denetim kartları monitöre ne yapacağını söyler: işi başlat, derleyiciyi yükle, programı bağla, çalıştır, bitir.
  • Bu kartlar bugünkü kabuk betiklerinin ve IBM JCL'nin atasıdır.
Düzeltme: Buradaki FMS, "Esnek Üretim Sistemi" (Flexible Manufacturing System) değildir. Fabrika otomasyonuyla ilgili o kavramın bu bölümle bağlantısı yoktur; o slayt çıkarıldı.

Tarihçe

3. Nesil: Tümleşik Devreler ve Çoklu Programlama

  • Tümleşik devreler (1965–80): System/360 gibi uyumlu aileler; daha küçük, ucuz, güvenilir.
  • Çoklu programlama: bellek bölümlere ayrılır, her bölümde bir iş. Bir iş G/Ç beklerken CPU başka işe geçer.
  • Tek CPU'da işler iç içe ilerler: gerçek paralellik değil, eşzamanlılıktır (concurrency).
  • İşlerin birbirinin belleğine dokunmaması için koruma donanımı gerekir.
  • Biriktirme: kartlar doğrudan diske; bir iş bitince sıradaki diskten yüklenir.
  • Zaman paylaşımı: CTSS (MIT, 1961) → MULTICS → UNIX (Bell Labs, 1969) → BSD, POSIX, MINIX, Linux (1991).
İş 3İş 2İş 1İşletim sistemibellek bölümleriBellekte üç iş

Tarihçe · Animasyon

Çoklu Programlama: CPU Neden Boş Kalmaz?

Tek programlıCPUG/ÇÇoklu programlıCPUG/Ç (A)G/Ç (B)A: CPU 2 · G/Ç 4 · CPU 2B: CPU 3 · G/Ç 3 · CPU 10123456789101112131415

İki iş (birim zaman): A = CPU 2, G/Ç 4, CPU 2 · B = CPU 3, G/Ç 3, CPU 1. Toplam CPU ihtiyacı 8 birim.

Tek programlıCPUG/ÇÇoklu programlıCPUG/Ç (A)G/Ç (B)AABBABboştaboşta0123456789101112131415bitiş t=15 · CPU %53

Tek programlı: önce A (t = 0–8), sonra B (t = 8–15). G/Ç sırasında CPU boşta: kullanım 8 / 15 ≈ %53.

Tek programlıCPUG/ÇÇoklu programlıCPUG/Ç (A)G/Ç (B)AABBABboştaboştaABA0123456789101112131415bitiş t=15 · CPU %53

Çoklu programlı: A t = 2'de G/Ç'ye gidince CPU hemen B'ye geçer (t = 2–5). A'nın G/Ç'si arka planda sürer.

Tek programlıCPUG/ÇÇoklu programlıCPUG/Ç (A)G/Ç (B)AABBABboştaboştaABAABB0123456789101112131415bitiş t=15 · CPU %53

B t = 5'te G/Ç'ye gider (5–8). A'nın G/Ç'si t = 6'da biter: CPU yalnız 5–6 arasında boşta; A 6–8, B 8–9 çalışır.

Tek programlıCPUG/ÇÇoklu programlıCPUG/Ç (A)G/Ç (B)AABBABboştaboştaABAABB0123456789101112131415bitiş t=15 · CPU %53bitiş t=9 · CPU %89

Aynı iki iş 15 yerine 9 birimde bitti; CPU kullanımı 8 / 9 ≈ %89. Çoklu programlamanın kazancı, CPU ile G/Ç'nin örtüşmesidir.

Tarihçe

4. Nesil: Kişisel Bilgisayarlar

YılGelişme
1974Intel 8080 için CP/M (Gary Kildall): mikrobilgisayarlar için disk tabanlı ilk yaygın İS.
1981IBM PC ve MS-DOS (86-DOS'tan türetildi); BASIC yorumlayıcı ROM'da.
1973–84Xerox PARC'ın GKA fikirleri → Apple Lisa (1983) ve Macintosh (1984): kullanıcı dostu arayüz.
1985–2000Windows 1.0 … 3.x MS-DOS üzerinde grafik ortamdı; Windows 95/98/ME hâlâ MS-DOS tabanlıydı.
1993–Sıfırdan yazılan Windows NT → 2000, XP, 7, 10, 11: bugünkü Windows'un çekirdeği.
1991–Linus Torvalds'ın Linux çekirdeği; 2001'de UNIX tabanlı Mac OS X (Darwin/XNU) → bugünkü macOS.

Fiyatların hızla düşmesi bilgisayarı herkese açtı; İS'nin hedefi "makineyi verimli kullan"dan "kullanıcıya kolaylık"a kaydı.

Tarihçe

5. Nesil: Mobil ve Günümüz

Mobil cihazlar (1990–)

  • 1990'lar: PDA'lar, Palm OS; 2000'ler: Symbian, BlackBerry OS.
  • 2007 iOS (iPhone), 2008 Android (Linux çekirdeği üzerinde).
  • Windows Phone 2010'da çıktı, 2017'de geliştirmesi durduruldu.
  • Bugün pazarı Android ve iOS paylaşır; dokunmatik arayüz, pil yönetimi, izin modeli öne çıkar.
Sanallaştırma ve bulutHipervizörler (KVM, Hyper-V, Xen); tek sunucuda çok sayıda sanal makine.
KonteynerlerDocker, Kubernetes: aynı çekirdeği paylaşan yalıtılmış ortamlar (namespaces, cgroups).
Heterojen donanımCPU + GPU + NPU; büyük ve küçük çekirdekli hibrit işlemciler.
GüvenlikBellek güvenli diller: Linux 6.1'den beri çekirdekte Rust desteği.

Donanım

Kişisel Bilgisayarın Bileşenleri

CPUBellekEkrandenetleyicisiKlavyedenetleyicisiUSBdenetleyicisiDiskdenetleyicisiMMUVeri yoluMonitörKlavyeYazıcı (USB)SSD / diskAygıtlar →
  • CPU, bellek ve G/Ç aygıtları bir veri yolu üzerinden haberleşir; her aygıtın bir denetleyicisi vardır.
  • MMU (bellek yönetim birimi) CPU içindedir ve sanal adresleri fiziksel adrese çevirir.
  • Gerçek sistemlerde tek ortak hat yerine noktadan noktaya bağlantılar (PCIe) kullanılır; ama kavramsal model aynıdır.

Donanım

Von Neumann Mimarisi

CPUDenetim birimiALU (aritmetik-mantık)Yazmaçlar (PC, IR, …)Bellekprogram+veriG/Ç aygıtlarıveri yolu
  • Program ve veri aynı bellekte durur; komutlar da veri gibi okunur (saklı program fikri, 1945).
  • Komutlar bellekten sırayla getirilir ve yürütülür.
  • Von Neumann darboğazı: CPU, bellekten çok daha hızlıdır; aradaki dar yol performansı sınırlar → önbellekler.
  • Harvard mimarisi komut ve veri için ayrı yollar kullanır. Modern CPU'lar "değiştirilmiş Harvard"dır: L1 önbellek komut (L1i) ve veri (L1d) olarak ayrılır.

Donanım

İşlemci ve Yazmaçlar

  • Bilgisayarın "beyni": tüm komutları işlemci (CPU) yürütür.
  • Temel döngü: komutu getir (fetch), çöz (decode), yürüt (execute).
  • Bellek yavaş olduğu için değişkenler ve ara sonuçlar yazmaçlarda tutulur: yükle (bellek → yazmaç), sakla (yazmaç → bellek).
  • Her işlemci ailesinin kendi komut kümesi vardır: x86-64 programı ARM'da doğrudan çalışmaz.
  • Performans: saat hızı, çekirdek sayısı, önbellek boyutu, boru hattı derinliği, bellek bant genişliği.
  • İS, bağlam değiştirirken (süreç değişimi) tüm yazmaçları kaydeder ve geri yükler.
Yazmaçx86-64ARM64
Program sayacı: sıradaki komutRIPPC
Yığıt işaretçisi: yığıtın üstüRSPSP
PSW: koşul bitleri, mod, kesme izniRFLAGSPSTATE
Genel amaçlı16 adet31 adet

Donanım · Animasyon

Getir–Çöz–Yürüt Döngüsü

CPU · BaşlangıçPC100IR—R1—ALUveri yoluBellek100LOAD R1, [200]← PC104ADD R1, R1, #5108STORE R1, [204]20072040

Program bellekte 100. adresten başlıyor; PC = 100. Bellek[200] = 7, bellek[204] = 0.

CPU · GetirPC104IRLOAD R1, [200]R1—ALUveri yoluBellek100LOAD R1, [200]104ADD R1, R1, #5← PC108STORE R1, [204]20072040

Getir: PC'nin gösterdiği komut IR'ye okunur: LOAD R1, [200]. PC bir sonraki komuta ilerler: 104 (komutlar 4 bayt).

CPU · Çöz + yürütPC104IRLOAD R1, [200]R17ALUveri yoluBellek100LOAD R1, [200]104ADD R1, R1, #5← PC108STORE R1, [204]20072040

Çöz + yürüt: bellek[200] okunur, R1 = 7.

CPU · GetirPC108IRADD R1, R1, #5R17ALUveri yoluBellek100LOAD R1, [200]104ADD R1, R1, #5108STORE R1, [204]← PC20072040

Getir: IR = ADD R1, R1, #5, PC = 108.

CPU · Çöz + yürütPC108IRADD R1, R1, #5R112ALUveri yoluBellek100LOAD R1, [200]104ADD R1, R1, #5108STORE R1, [204]← PC20072040

Yürüt: ALU toplar: R1 = 7 + 5 = 12. Belleğe hiç gidilmedi; yazmaç işlemi hızlıdır.

CPU · GetirPC112IRSTORE R1, [204]R112ALUveri yoluBellek100LOAD R1, [200]104ADD R1, R1, #5108STORE R1, [204]20072040

Getir: IR = STORE R1, [204], PC = 112.

CPU · Çöz + yürütPC112IRSTORE R1, [204]R112ALUveri yoluBellek100LOAD R1, [200]104ADD R1, R1, #5108STORE R1, [204]200720412

Yürüt: R1 belleğe saklanır: bellek[204] = 12. Döngü PC = 112'den sürer.

Donanım

Boru Hattı ve Süperskalar

(a) Üç aşamalı boru hattıGetirmebirimiÇözmebirimiYürütmebirimi(b) Süperskalar işlemciGetirmeÇözmeGetirmeÇözmetamponYürütYürütYürüt
Boru hattıKomutların aşamaları üst üste bindirilir: biri yürütülürken sonraki çözülür, ondan sonraki getirilir.
SüperskalarBirden çok yürütme birimi; tampondaki komutlar sırası dışında (out-of-order) yürütülebilir.
İS'ye etkisiDallanmada boru hattı boşaltılır; kesmede "hangi komut bitti?" sorusu karmaşıklaşır. Spectre gibi açıklar bu tahminlerden doğdu.

Donanım · Animasyon

Boru Hattı Adım Adım

çevrim 1çevrim 2çevrim 3çevrim 4çevrim 5çevrim 6Komut 1GetirKomut 2Komut 3Komut 4

Çevrim 1: Komut 1 getiriliyor. Diğer birimler boş.

çevrim 1çevrim 2çevrim 3çevrim 4çevrim 5çevrim 6Komut 1GetirÇözKomut 2GetirKomut 3Komut 4

Çevrim 2: Komut 1 çözülüyor, aynı anda Komut 2 getiriliyor.

çevrim 1çevrim 2çevrim 3çevrim 4çevrim 5çevrim 6Komut 1GetirÇözYürütKomut 2GetirÇözKomut 3GetirKomut 4

Çevrim 3: boru hattı dolu: üç komut üç farklı aşamada. Bundan sonra her çevrimde bir komut tamamlanır.

çevrim 1çevrim 2çevrim 3çevrim 4çevrim 5çevrim 6Komut 1GetirÇözYürütKomut 2GetirÇözYürütKomut 3GetirÇözKomut 4Getir

Çevrim 4: Komut 1 bitti; Komut 2 yürütülüyor, 3 çözülüyor, 4 getiriliyor.

çevrim 1çevrim 2çevrim 3çevrim 4çevrim 5çevrim 6Komut 1GetirÇözYürütKomut 2GetirÇözYürütKomut 3GetirÇözYürütKomut 4GetirÇöz

Çevrim 5: Komut 3 yürütülüyor, Komut 4 çözülüyor.

çevrim 1çevrim 2çevrim 3çevrim 4çevrim 5çevrim 6Komut 1GetirÇözYürütKomut 2GetirÇözYürütKomut 3GetirÇözYürütKomut 4GetirÇözYürüt

Çevrim 6: 4 komut 6 çevrimde bitti; boru hattı olmasaydı 4 × 3 = 12 çevrim sürerdi. Bir dallanma yanlış tahmin edilirse sonraki aşamalar boşaltılır.

Donanım

Çok Çekirdekli Yongalar

(a) Paylaşımlı L2Çekirdek 1L1Çekirdek 2L1Çekirdek 3L1Çekirdek 4L1Paylaşımlı L2(b) Çekirdeğe özel L2Çekirdek 1L2Çekirdek 2L2Çekirdek 3L2Çekirdek 4L2(c) Günümüz: özel L1+L2, ortak L3Çekirdek 1L1L2Çekirdek 2L1L2Çekirdek 3L1L2Çekirdek 4L1L2Paylaşımlı L3 (LLC)
Çok çekirdekBir yongada birden çok bağımsız CPU; İS her birini ayrı işlemci olarak görür ve çizelgeler.
SMT / Hyper-ThreadingBir çekirdek iki donanım iş parçacığı çalıştırır; İS'ye iki "mantıksal CPU" görünür ama kaynakları paylaşırlar.
Hibrit çekirdeklerPerformans (P) ve verimlilik (E) çekirdekleri (ARM big.LITTLE, Intel 2021+): çizelgeleyici hangisini seçeceğini bilmelidir.

İS açısından sonuç: paralellik, senkronizasyon ve önbellek tutarlılığı sorunları (Bölüm 6 ve 12).

Donanım

Bellek Hiyerarşisi

YazmaçlarÖnbellek L1/L2/L3Ana bellek (DRAM)SSD (NVMe)Sabit disk (HDD)Arşiv: teyp, buluthızlıpahalıbüyükucuz
DüzeyErişim (yakl.)Kapasite (tipik)
Yazmaçlar< 1 ns< 1 KB
L1 önbellek~1 ns32–64 KB
L2 / L33–20 ns1–100+ MB
DRAM60–100 ns8–64 GB
NVMe SSD20–100 µs0,5–4 TB
HDD5–10 ms2–24 TB

DRAM ve üstü uçucudur (güç gidince silinir); SSD ve HDD kalıcıdır. Değerler 2026 itibarıyla yaklaşık büyüklüklerdir.

Donanım · Animasyon

Bir Okuma Hiyerarşide Nasıl İlerler?

CPU(yazmaç)L1~1 nsL2~4 nsL3~15 nsDRAM~80 nstoplam gecikme: 0 ns

CPU x değişkenini okumak istiyor (LOAD R1, [x]). Önce en yakın ve en hızlı düzeye bakılır.

CPU(yazmaç)L1~1 nsıskaL2~4 nsL3~15 nsDRAM~80 nstoplam gecikme: ~1 ns

L1'de yok: ıska (miss). ~1 ns kaybedildi; aramaya bir alt düzeyde devam edilir.

CPU(yazmaç)L1~1 nsıskaL2~4 nsıskaL3~15 nsıskaDRAM~80 nstoplam gecikme: ~20 ns

L2 ve L3'te de ıska. Her düzey biraz daha büyük ama daha yavaştır; toplam ~20 ns.

CPU(yazmaç)L1~1 nsıskasatırL2~4 nsıskasatırL3~15 nsıskasatırDRAM~80 nstoplam gecikme: ~100 ns

Veri DRAM'den gelir (~80 ns). Tek bir sözcük değil, 64 baytlık satırın tamamı L3, L2 ve L1'e yerleştirilir.

CPU(yazmaç)L1~1 nssatırL2~4 nssatırL3~15 nssatırDRAM~80 nsisabet!toplam gecikme: ~1 ns

Aynı satırdaki bir veriye ikinci erişim artık L1 isabeti (hit): ~1 ns. Önbellek, yerellik sayesinde işe yarar.

Donanım

Önbellek Satırları

  • Bellek, önbellek satırlarına (cache line, genelde 64 bayt) bölünür: satır 0 = 0–63, satır 1 = 64–127, …
  • Adres a için satır numarası ⌊a / 64⌋, satır içi konum a mod 64.
  • CPU bir sözcük okurken donanım önce önbelleğe bakar: isabet (hit) → L1'de ~4–5 çevrim; ıska (miss) → alt düzey ya da DRAM, yüzlerce çevrim.
  • Önbellek pahalı olduğundan küçüktür; bu yüzden düzeyler (L1, L2, L3) hâlinde kurulur.
  • Neden işe yarar? Zamansal yerellik (az önce kullanılan yine kullanılır) ve uzamsal yerellik (komşu adresler birlikte kullanılır).
Adres 200 (64 B satır):11001000satır no = 3satır içi ofset = 8 (6 bit)satır 00–63satır 164–127satır 2128–191satır 3192–255

Donanım · Kodu adım adım çalıştır

Kod İzleme: Doğrudan Eşlemeli Önbellek

Erişim sırası0864256072Önbellek (4 küme)kümeblok (etiket)0—1—2—3—

Başlangıçta önbellek boş (−1). 64 B satır, 4 küme, doğrudan eşleme: her blok tek bir kümeye gidebilir.

Erişim sırası0864256072Önbellek (4 küme)kümeblok (etiket)0—1—2—3—

adres[0] = 0 → blok = 0 / 64 = 0, küme = 0 mod 4 = 0.

Erişim sırası0M864256072Önbellek (4 küme)kümeblok (etiket)0blok 01—2—3—

Küme 0 boş → ıska; blok 0 yüklenir.

Erişim sırası0M864256072Önbellek (4 küme)kümeblok (etiket)0blok 01—2—3—

adres[1] = 8 → blok = 8 / 64 = 0, küme = 0 mod 4 = 0.

Erişim sırası0M8H64256072Önbellek (4 küme)kümeblok (etiket)0blok 01—2—3—

etiket[0] = 0 = blok → isabet. 8, 0 ile aynı 64 baytlık satırda: uzamsal yerellik.

Erişim sırası0M8H64256072Önbellek (4 küme)kümeblok (etiket)0blok 01—2—3—

adres[2] = 64 → blok = 64 / 64 = 1, küme = 1 mod 4 = 1.

Erişim sırası0M8H64M256072Önbellek (4 küme)kümeblok (etiket)0blok 01blok 12—3—

Küme 1 boş → ıska; blok 1 yüklenir.

Erişim sırası0M8H64M256072Önbellek (4 küme)kümeblok (etiket)0blok 01blok 12—3—

adres[3] = 256 → blok = 256 / 64 = 4, küme = 4 mod 4 = 0.

Erişim sırası0M8H64M256M072Önbellek (4 küme)kümeblok (etiket)0blok 41blok 12—3—

Küme 0'de blok 0 var → ıska; blok 4 onu dışarı atar (çakışma ıskası).

Erişim sırası0M8H64M256M072Önbellek (4 küme)kümeblok (etiket)0blok 41blok 12—3—

adres[4] = 0 → blok = 0 / 64 = 0, küme = 0 mod 4 = 0.

Erişim sırası0M8H64M256M0M72Önbellek (4 küme)kümeblok (etiket)0blok 01blok 12—3—

Küme 0'de blok 4 var → ıska; blok 0 onu dışarı atar (çakışma ıskası).

Erişim sırası0M8H64M256M0M72Önbellek (4 küme)kümeblok (etiket)0blok 01blok 12—3—

adres[5] = 72 → blok = 72 / 64 = 1, küme = 1 mod 4 = 1.

Erişim sırası0M8H64M256M0M72HÖnbellek (4 küme)kümeblok (etiket)0blok 01blok 12—3—

etiket[1] = 1 = blok → isabet. 72, 64 ile aynı satırda.

Erişim sırası0M8H64M256M0M72HÖnbellek (4 küme)kümeblok (etiket)0blok 01blok 12—3—

Döngü bitti: 2 isabet, 4 ıska (isabet oranı %33). 0 ve 256 aynı kümeye düştüğü için birbirini kovdu; 2 yollu küme ilişkili önbellek bunu önlerdi. (Burada etiket yerine blok numarasının tamamı saklandı.)

int adres[6] = {0, 8, 64, 256, 0, 72};
int etiket[4] = {-1, -1, -1, -1};
int isabet = 0, iska = 0;
for (int i = 0; i < 6; i++) {
  int blok = adres[i] / 64;
  int kume = blok % 4;
  if (etiket[kume] == blok) isabet++;
  else { etiket[kume] = blok; iska++; }
}

Donanım

Önbellek Tasarım Soruları

1. Ne zaman yerleştirilir?Genelde ıskada; donanım ayrıca sıradaki satırları önceden getirir (prefetch).
2. Hangi satıra konur?Eşleme: doğrudan eşlemeli, k yollu küme ilişkili ya da tam ilişkili.
3. Yer gerekince hangisi çıkar?Değiştirme ilkesi: LRU'ya yakın yaklaşımlar, rastgele, FIFO.
4. Çıkan nereye gider?Değiştirilmişse ("kirli") alt düzeye yazılır (write-back); ya da her yazma hemen aşağı iletilir (write-through).
BoyutBüyük önbellek daha çok isabet ama daha yavaş ve pahalı.
DeğiştirmePerformans ile donanım karmaşıklığı arasında denge.
TutarlılıkÇok çekirdekte aynı satırın kopyaları güncel kalmalı (MESI gibi protokoller).

Aynı dört soru İS'nin yönettiği "önbelleklerde" de karşımıza çıkar: sayfa önbelleği, sanal bellek, TLB.

Donanım

Ana Bellek Türleri

TürÖzellikKullanım
RAM (rastgele erişimli)Okunur ve yazılır, hızlı, uçucu. DRAM yenileme ister; SRAM daha hızlı ve pahalı.Ana bellek (DRAM: DDR5, LPDDR5X), önbellekler (SRAM)
ROM (salt okunur)Üretimde yazılır, değiştirilemez, kalıcı, ucuz.Basit cihazlar, mikrodenetleyicilerde sabit kod
EEPROM / FlashElektrikle silinip yeniden yazılabilir, kalıcı; yazma yavaş ve yazma ömrü sınırlı.UEFI/BIOS donanım yazılımı (SPI flash), SSD, USB bellek, telefon ve müzik çalar depolaması (NAND flash)
CMOS / NVRAMPil ya da flash ile korunan küçük alan.Saat, önyükleme ayarları
Düzeltme: Bugünkü bilgisayarlarda BIOS/UEFI kodu ROM'da değil flash bellekte durur; bu yüzden güncellenebilir. Taşınabilir müzik çalarlar da disk değil NAND flash kullanır.

Donanım

Disk (HDD) Yapısı

Okuma/yazma kafasıKol (arm)İz (track)SektörSilindirPlaka (platter)Mil ve motor
  • Veriyi kalıcı saklar; ucuz ve büyük ama mekanik olduğu için yavaştır.
  • Her plaka yüzeyinde eş merkezli izler, izler de sektörlere (512 B / 4 KB) bölünür; aynı konumdaki izlerin kümesi silindirdir.
  • Tüm kafalar tek bir kola bağlıdır; motor plakaları 5400–7200 (sunucuda 10 000+) devir/dakika döndürür, denetleyici işlemleri yönetir.

Donanım · Animasyon

Diskten Bir Sektör Okumak

KomutLBA 1234 okuArama~5 msDönmeort. 4,17 msAktarım + ECC~0,01 msDMA + kesmebitti

Sürücü denetleyiciye "LBA 1234'ü oku" der. Bugün diskler mantıksal blok adresi (LBA) kullanır; denetleyici bunu kendi iç (silindir, kafa, sektör) geometrisine çevirir.

KomutLBA 1234 okuArama~5 msDönmeort. 4,17 msAktarım + ECC~0,01 msDMA + kesmebitti

Arama (seek): kol, kafaları doğru silindire taşır. Mekanik hareket: birkaç milisaniye.

KomutLBA 1234 okuArama~5 msDönmeort. 4,17 msAktarım + ECC~0,01 msDMA + kesmebitti

Dönme gecikmesi: hedef sektör kafanın altına gelene kadar beklenir. 7200 dev/dk → tur 8,33 ms, ortalama yarım tur 4,17 ms.

KomutLBA 1234 okuArama~5 msDönmeort. 4,17 msAktarım + ECC~0,01 msDMA + kesmebitti

Aktarım: sektör kafanın altından geçerken bitler okunur; ECC (hata düzeltme kodu) ile denetlenir, gerekirse düzeltilir.

KomutLBA 1234 okuArama~5 msDönmeort. 4,17 msAktarım + ECC~0,01 msDMA + kesmebitti

Veri DMA ile belleğe yazılır, denetleyici kesme üretir. Toplam ~9 ms: CPU bu sürede milyonlarca komut çalıştırabilir, bu yüzden İS beklemez, başka süreç çalıştırır.

Donanım

HDD, SSD ve Sanal Bellek

HDDSATA SSDNVMe SSD
Rastgele erişim5–10 ms~0,1 ms0,02–0,1 ms
Rastgele okuma (IOPS)100–200~90 000500 000–1 000 000+
Sıralı okuma~250 MB/s~550 MB/s3–14 GB/s
ArayüzSATA / SASSATAPCIe (×4)
Hareketli parçavaryokyok
SSD: arama ve dönme gecikmesi yoktur; ama flash yerinde yazılamaz, blok blok silinir. Denetleyicideki FTL katmanı ve İS'nin TRIM komutu bunu yönetir.
Sanal bellek: RAM yetmediğinde az kullanılan sayfalar diske/SSD'ye (takas alanı, pagefile.sys) yazılır; MMU sanal adresleri fiziksel adrese çevirir (Bölüm 8–9).

G/Ç

G/Ç Aygıtları: Denetleyici ve Sürücü

CPU · çekirdek moduİS çekirdeğiAygıt sürücüsüveri yoluDenetleyicidurum yazmacıkomut yazmacıveri yazmacı / tamponAygıt(SSD, yazıcı,ağ, kamera)
  • G/Ç aygıtı iki parçadır: aygıtın kendisi ve ona İS'ye basit bir arayüz sunan denetleyicisi.
  • Aygıt sürücüsü denetleyicinin yazmaçlarına komut yazar, durumunu okur. Yazmaçlara G/Ç portlarıyla (x86 in/out) ya da bellek eşlemeli G/Ç (MMIO) ile erişilir.
  • Sürücüleri genellikle üretici her İS için yazar; çoğu çekirdek modunda çalışır (Windows .sys, Linux modülleri). Kullanıcı modu sürücüleri de vardır: Windows UMDF, Linux VFIO/UIO.
  • Sürücü çekirdeğe derlenebilir, açılışta ya da aygıt takıldığında (tak-çalıştır) yüklenebilir.

G/Ç

Üç G/Ç Yöntemi

YöntemNasıl çalışır?ArtıEksi
Sorgulama (polling, meşgul bekleme)CPU, aygıt hazır olana kadar durum yazmacını döngüde okur.Basit; çok kısa beklemelerde en düşük gecikme.Beklerken CPU başka iş yapamaz.
Kesme (interrupt)Aygıt işi bitince CPU'ya sinyal gönderir; CPU o arada başka iş yapar.CPU serbest; duyarlı.Her kesmenin bağlam kaydetme maliyeti; çok sık kesme yük olur.
DMA (doğrudan bellek erişimi)Özel denetleyici bloğu aygıt ile bellek arasında taşır; bitince tek kesme.Büyük veride çok verimli.Ek donanım; küçük aktarımda kurulum maliyeti.
Düzeltme: Sorgulama "artık kullanılmıyor" değildir. Çok hızlı aygıtlarda kesme yükü pahalı olduğundan bilerek kullanılır: Linux ağ yığınındaki NAPI (kesme + sorgulama karışımı), NVMe/io_uring sorgulama kipi, DPDK; ayrıca basit gömülü sistemler.

G/Ç · Kodu adım adım çalıştır

Kod İzleme: Programlı G/Ç (Sorgulama)

CPU (sürücü)yoklama: 0YazıcıHAZIR

Çekirdek, kullanıcının "OS" dizesini çekirdek tamponuna kopyalar (n = 2).

CPU (sürücü)yoklama: 0YazıcıHAZIR

Döngü başlar: i = 0, 0 < 2.

CPU (sürücü)yoklama: 1YazıcıHAZIR

Durum yazmacı okunur: HAZIR → bekleme döngüsünden hemen çıkılır.

CPU (sürücü)yoklama: 1YazıcıMEŞGULO

buf[0] = 'O' veri yazmacına yazılır; yazıcı karakteri basarken MEŞGUL olur.

CPU (sürücü)yoklama: 1YazıcıMEŞGULO

i = 1, 1 < 2: sıradaki karakter.

CPU (sürücü)yoklama: 2başka iş yapamazYazıcıMEŞGULO

Durum MEŞGUL → boş döngü. CPU yalnızca yazmacı yeniden okur.

CPU (sürücü)yoklama: 3başka iş yapamazYazıcıMEŞGULO

Yine MEŞGUL. Gerçekte bu döngü binlerce kez dönebilir: CPU zamanı boşa gider.

CPU (sürücü)yoklama: 4YazıcıHAZIRO

Yazıcı hazır: HAZIR → döngüden çıkılır.

CPU (sürücü)yoklama: 4YazıcıMEŞGULOS

buf[1] = 'S' gönderilir.

CPU (sürücü)yoklama: 4YazıcıMEŞGULOS

i = 2, 2 < 2 yanlış → döngü biter.

CPU (sürücü)yoklama: 4YazıcıMEŞGULOS

Kullanıcı moduna dönülür. 2 karakter için 4 yoklama yapıldı; tüm süre boyunca CPU bu işe kilitlendi.

copy_from_user(buf, p, n);
for (i = 0; i < n; i++) {
  while (*durum_yaz != HAZIR)
    ;                /* meşgul bekle */
  *veri_yaz = buf[i];
}
return_to_user();

G/Ç · Animasyon

G/Ç Aygıtları: Kesme

CPUkullanıcı modumod: kullanıcıKesmedenetleyicisi(APIC)DiskdenetleyicisiDiskKesme vektörtablosuKesme işleyicisi(sürücünün parçası)1. sürücü komut yazar2. bitti3. kesme4. vektör no

1. Sürücü, disk denetleyicisinin yazmaçlarına "sektör oku" komutunu yazar. Süreç bloke olur; CPU başka bir süreci çalıştırmaya döner.

CPUbaşka süreçmod: kullanıcıKesmedenetleyicisi(APIC)DiskdenetleyicisiDiskKesme vektörtablosuKesme işleyicisi(sürücünün parçası)1. sürücü komut yazar2. bitti3. kesme4. vektör no

2. Okuma bitince disk denetleyicisi, veri yolu hatları üzerinden kesme denetleyicisine sinyal verir.

CPUbaşka süreçmod: kullanıcıKesmedenetleyicisi(APIC)DiskdenetleyicisiDiskKesme vektörtablosuKesme işleyicisi(sürücünün parçası)1. sürücü komut yazar2. bitti3. kesme4. vektör no

3–4. Kesme denetleyicisi (kesme kabul edilebiliyorsa) CPU'nun kesme hattını etkinleştirir ve hangi aygıt olduğunu belirten vektör numarasını verir.

CPUPC, PSW kaydetmod: çekirdekKesmedenetleyicisi(APIC)DiskdenetleyicisiDiskKesme vektörtablosuKesme işleyicisi(sürücünün parçası)1. sürücü komut yazar2. bitti3. kesme4. vektör no

CPU o anki komutu bitirir, PC ve PSW'yi (çekirdek) yığına kaydeder, çekirdek moduna geçer; vektör tablosundan işleyicinin adresini alır.

CPUişleyici çalışıyormod: çekirdekKesmedenetleyicisi(APIC)DiskdenetleyicisiDiskKesme vektörtablosuKesme işleyicisi(sürücünün parçası)1. sürücü komut yazar2. bitti3. kesme4. vektör no

Kesme işleyicisi denetleyicinin durumunu okur, veriyi alır, bekleyen süreci "hazır" yapar ve kesme denetleyicisine EOI (işlem bitti) bildirir.

CPUiret → dönüşmod: kullanıcıKesmedenetleyicisi(APIC)DiskdenetleyicisiDiskKesme vektörtablosuKesme işleyicisi(sürücünün parçası)1. sürücü komut yazar2. bitti3. kesme4. vektör no

iret: kaydedilen PSW ve PC geri yüklenir, kullanıcı moduna dönülür. Kesilen program (ya da çizelgeleyicinin seçtiği başka bir süreç) kaldığı yerden sürer.

G/Ç

Kesme Türleri

Kullanıcı programıKesme işleyicisikomut n, n+1 …n+2, n+3 … (devam)işleyicikesmedönüşzaman
Donanım kesmesiDış olay: G/Ç tamamlandı, tuşa basıldı, ağ paketi geldi. Zamanlayıcı kesmesi İS'ye düzenli olarak denetimi geri verir → kesintili (preemptive) çoklu görev.
İstisna (trap)Komutun kendisinden doğar: sıfıra bölme, geçersiz komut, sayfa hatası, kullanıcı modunda ayrıcalıklı komut.
Sistem çağrısıBilerek üretilen trap: syscall, svc, ecall. Kullanıcı programının çekirdekten hizmet isteme yolu.

Kesmeler maskelenebilir ve önceliklendirilebilir; maskelenemeyen kesme (NMI) ciddi donanım hataları içindir.

G/Ç · Animasyon

G/Ç Aygıtları: DMA

CPUDMA denetleyicisiadres0x8000sayaç4096yönokumaDiskdenetleyicisi[tampon]DiskAna bellek0x8000 …boşveri yolu1. CPU, DMA'yı ve diski programlar

1. CPU, DMA denetleyicisine bellek adresini (0x8000), bayt sayısını (4096) ve yönü yazar; diske "oku" komutu verir. Sonra başka işe döner.

CPUbaşka işDMA denetleyicisiadres0x8000sayaç4096yönokumaDiskdenetleyicisi[tampon]DiskAna bellek0x8000 …boşveri yolu2. disk bloğu tampona okur, ECC doğrular

2. Disk denetleyicisi bloğu diskten kendi tamponuna okur ve ECC ile doğrular.

CPUbaşka işDMA denetleyicisiadres0x8000sayaç4096yönokumaDiskdenetleyicisi[tampon]DiskAna bellek0x8000 …boşveri yolu3. DMA aktarım isteği yollar

3. DMA denetleyicisi, veri yolu üzerinden disk denetleyicisine aktarım isteği gönderir (hedef: 0x8000).

CPUbaşka işDMA denetleyicisiadres0x8040sayaç4032yönokumaDiskdenetleyicisi[tampon]DiskAna bellek0x8000 …dolmaktaveri yolu4. veri belleğe yazılır, ACK → sayaç azalır

4. Disk denetleyicisi veriyi doğrudan belleğe yazar ve DMA'ya onay (ACK) gönderir; DMA adresi artırır, sayacı azaltır. Bu, 4096 bayt bitene kadar tekrarlanır (burada 64 baytlık bir parçadan sonra).

CPUDMA denetleyicisiadres0x9000sayaç0yönokumaDiskdenetleyicisi[tampon]DiskAna bellek0x8000 …4096 B doluveri yolu5. sayaç = 0 → CPU'ya kesme

5. Sayaç 0 olunca DMA CPU'ya tek bir kesme gönderir. CPU yalnızca başta ve sonda devreye girdi. Bugün çoğu aygıt (NVMe, ağ kartı) kendi DMA motoruna sahiptir ve IOMMU erişimi denetler.

G/Ç

Veri Yolları

Veri yoluÖzellik (2026)Tipik kullanım
PCIeSeri, noktadan noktaya "hatlar" (×1, ×4, ×16). 5.0: 32 GT/s/hat (~4 GB/s), 6.0: 64 GT/s.Ekran kartı (×16), NVMe SSD (×4), ağ kartı
USB2.0: 480 Mb/s · 3.2: 5–20 Gb/s · USB4: 40/80 Gb/s. Tak-çalıştır, güç taşır.Klavye, fare, bellek, kamera, harici ekran
SATA / SASSATA 6 Gb/s; SAS, SCSI'nin seri sürümü (sunucular).HDD ve eski SSD'ler
DDR5CPU'daki bellek denetleyicisine doğrudan bağlı bellek kanalları.Ana bellek
Eski: ISA, PCI, IDE (PATA), paralel SCSIParalel, paylaşımlı ve yavaş hatlar; yerlerini PCIe ve SATA aldı.1980–2000'lerin PC'leri
İS açılışta veri yollarını tarar (PCIe yapılandırma alanı, USB tanımlayıcıları), her aygıtın kimliğini okur ve uygun sürücüyü yükler: tak-çalıştır bu sayede mümkündür.

G/Ç

x86 Sistem Yapısı

CPU paketiÇekirdeklerL3Tümleşik GPUBellekdenetleyicisiPCIe kökkompleksiDDR5 bellekEkran kartıNVMe SSDPCIe ×16PCIe ×4Yonga seti (PCH)DMI / bağlantıSATAUSBEthernet / Wi-FiSesPCIe yuvalarıUEFI flash (SPI)

Düzeltme / güncelleme: Pentium dönemindeki kuzey köprüsü (northbridge), PCI, ISA ve IDE yolları artık yok. Bellek denetleyicisi CPU'nun içine taşındı (AMD 2003, Intel 2008); hızlı aygıtlar PCIe ile doğrudan CPU'ya, yavaşlar yonga setine bağlanır.

Önyükleme · Animasyon

Bilgisayarın Ayağa Kalkması (UEFI)

Güç düğmesigüç kararlı → CPUsıfırlanırUEFI donanım yazılımıPOST: bellek, temel aygıttestiÖnyükleme yöneticisiNVRAM'deki önyüklemegirdileriÖnyükleyici (ESP)GRUB / systemd-boot /Windows Boot ManagerÇekirdek + initramfsbellek yönetimi,sürücüler, kök dosyasistemiinit / systemd (PID 1)hizmetleri başlatırOturum açma / GKAkullanıcı oturumuSecure Boother aşama sonrakininimzasını doğrular

Güç verildiğinde CPU sıfırlanır ve donanımın belirlediği sabit bir adresten (flash'taki donanım yazılımı) komut getirmeye başlar.

Güç düğmesigüç kararlı → CPUsıfırlanırUEFI donanım yazılımıPOST: bellek, temel aygıttestiÖnyükleme yöneticisiNVRAM'deki önyüklemegirdileriÖnyükleyici (ESP)GRUB / systemd-boot /Windows Boot ManagerÇekirdek + initramfsbellek yönetimi,sürücüler, kök dosyasistemiinit / systemd (PID 1)hizmetleri başlatırOturum açma / GKAkullanıcı oturumuSecure Boother aşama sonrakininimzasını doğrular

UEFI donanım yazılımı POST (açılış öz-sınaması) yapar: belleği ve temel aygıtları dener, PCIe/USB aygıtlarını bulur.

Güç düğmesigüç kararlı → CPUsıfırlanırUEFI donanım yazılımıPOST: bellek, temel aygıttestiÖnyükleme yöneticisiNVRAM'deki önyüklemegirdileriÖnyükleyici (ESP)GRUB / systemd-boot /Windows Boot ManagerÇekirdek + initramfsbellek yönetimi,sürücüler, kök dosyasistemiinit / systemd (PID 1)hizmetleri başlatırOturum açma / GKAkullanıcı oturumuSecure Boother aşama sonrakininimzasını doğrular

Önyükleme yöneticisi NVRAM'deki sırayı okur: hangi diskteki hangi .efi dosyası? (NVMe, USB, ağ/PXE).

Güç düğmesigüç kararlı → CPUsıfırlanırUEFI donanım yazılımıPOST: bellek, temel aygıttestiÖnyükleme yöneticisiNVRAM'deki önyüklemegirdileriÖnyükleyici (ESP)GRUB / systemd-boot /Windows Boot ManagerÇekirdek + initramfsbellek yönetimi,sürücüler, kök dosyasistemiinit / systemd (PID 1)hizmetleri başlatırOturum açma / GKAkullanıcı oturumuSecure Boother aşama sonrakininimzasını doğrular

GPT diskteki EFI Sistem Bölümünden (FAT32) önyükleyici yüklenir. Secure Boot açıksa imzası doğrulanır.

Güç düğmesigüç kararlı → CPUsıfırlanırUEFI donanım yazılımıPOST: bellek, temel aygıttestiÖnyükleme yöneticisiNVRAM'deki önyüklemegirdileriÖnyükleyici (ESP)GRUB / systemd-boot /Windows Boot ManagerÇekirdek + initramfsbellek yönetimi,sürücüler, kök dosyasistemiinit / systemd (PID 1)hizmetleri başlatırOturum açma / GKAkullanıcı oturumuSecure Boother aşama sonrakininimzasını doğrular

Önyükleyici çekirdeği ve initramfs'i belleğe yükleyip denetimi verir. Çekirdek bellek yönetimini kurar, aygıtları tanır, sürücüleri yükler, kök dosya sistemini bağlar.

Güç düğmesigüç kararlı → CPUsıfırlanırUEFI donanım yazılımıPOST: bellek, temel aygıttestiÖnyükleme yöneticisiNVRAM'deki önyüklemegirdileriÖnyükleyici (ESP)GRUB / systemd-boot /Windows Boot ManagerÇekirdek + initramfsbellek yönetimi,sürücüler, kök dosyasistemiinit / systemd (PID 1)hizmetleri başlatırOturum açma / GKAkullanıcı oturumuSecure Boother aşama sonrakininimzasını doğrular

Çekirdek ilk kullanıcı sürecini başlatır: init / systemd (PID 1). O da ağ, günlük, oturum yöneticisi gibi hizmetleri başlatır.

Güç düğmesigüç kararlı → CPUsıfırlanırUEFI donanım yazılımıPOST: bellek, temel aygıttestiÖnyükleme yöneticisiNVRAM'deki önyüklemegirdileriÖnyükleyici (ESP)GRUB / systemd-boot /Windows Boot ManagerÇekirdek + initramfsbellek yönetimi,sürücüler, kök dosyasistemiinit / systemd (PID 1)hizmetleri başlatırOturum açma / GKAkullanıcı oturumuSecure Boother aşama sonrakininimzasını doğrular

Oturum açma ekranı ya da GKA gelir; sistem kullanıma hazır. Windows'ta karşılıkları: winload.efi → ntoskrnl.exe → smss.exe → winlogon.exe.

Önyükleme

Eski BIOS ve UEFI

Eski (legacy) BIOS akışı

  1. Bellek, klavye ve temel aygıtları dener (POST).
  2. Önyükleme aygıtını seçer (eskiden disket, CD-ROM, disk).
  3. Aygıtın ilk sektörünü (512 B MBR) belleğe okur ve çalıştırır.
  4. MBR kodu bölüm tablosunda etkin bölümü bulur, onun ilk sektöründeki ikincil önyükleyiciyi okur.
  5. Önyükleyici İS'yi o bölümden yükler.
BIOSUEFI
Ortaya çıkış1981 (IBM PC)2000'ler; bugün standart
Çalışma kipi16 bit gerçek kip32/64 bit
Bölüm tablosuMBR: 4 birincil bölüm, 2 TiB sınırıGPT: 128+ bölüm, devasa diskler
ÖnyükleyiciSektörlerdeki ham kodESP'de .efi dosyası
GüvenlikYokSecure Boot (imza denetimi)

Birçok UEFI hâlâ eski BIOS'u taklit eden bir uyumluluk kipi (CSM) sunar; yeni sistemlerde bu kip kaldırılmaktadır.

İS Çeşitleri

İşletim Sistemi Çeşitleri (1)

Anabilgisayar (mainframe)Çok yüksek G/Ç kapasitesi, güvenilirlik ve erişilebilirlik; toplu iş, işlem (transaction) ve zaman paylaşımı. Bankalar, havayolları. IBM z/OS, z/VM, Linux on Z, Unisys MCP, Fujitsu BS2000.
Sunucu (server)Ağ üzerinden çok kullanıcıya web, veritabanı, dosya, e-posta hizmeti. Veri merkezleri, bulut, sanallaştırma (KVM, Hyper-V), konteynerler. Linux, Windows Server, FreeBSD.
Çok işlemcili (multiprocessor)Birden çok çekirdek/soket; işleri paralel yürütür, senkronizasyon ve NUMA ile uğraşır. Bugün tüm genel amaçlı İS'ler bu sınıftadır. Linux, Windows, macOS.
Kişisel (personal)Tek kullanıcı, iyi GKA, çoklu görev; tarayıcı, ofis, oyun, dosya yönetimi. Windows 11, macOS, Linux dağıtımları, ChromeOS.

İS Çeşitleri

İşletim Sistemi Çeşitleri (2)

Mobil (handheld)Dokunmatik arayüz, pil ve ısı yönetimi, sensörler, uygulama mağazası ve izin modeli. Android, iOS/iPadOS, HarmonyOS. (Windows Phone 2017'de sona erdi.)
Gömülü (embedded)Araçlar, ev aletleri, ağ cihazları, uçaklar; genellikle kullanıcı yazılım yüklemez, sistem flash'ta sabittir. Gömülü Linux (Yocto), Zephyr, FreeRTOS, QNX, VxWorks.
Algılayıcı düğümü (sensor node)Birkaç on KB RAM, pil ile yıllarca çalışma, olay güdümlü yapı, düşük güçlü radyo (802.15.4, BLE). IoT ve M2M ağları. Contiki-NG, RIOT, Zephyr; TinyOS artık tarihsel.
Akıllı kart (smart card)Çok kısıtlı CPU ve bellek; kimlik doğrulama, ödeme, kriptografi, güvenli saklama. Banka kartı, SIM/eSIM, kimlik kartı. Java Card, MULTOS.

İS Çeşitleri

Gerçek Zamanlı İşletim Sistemleri

Katı: fren denetimiher 5 ms, 2 ms işYumuşak: video karesison tarih ~16,7 msgecikti → kare atlandıson tarih0 ms5 ms10 ms15 ms20 ms
  • Önemli olan hız değil, öngörülebilirlik: iş belirli bir son tarihten (deadline) önce bitmelidir.
  • Katı (hard): son tarihi kaçırmak felakettir (fren, hava yastığı, uçuş kontrolü, endüstriyel robot).
  • Yumuşak (soft): ara sıra kaçırmak kabul edilir, kalite düşer (ses/video akışı, oyun).
  • Örnekler: VxWorks (Mars gezginleri), QNX (araç sistemleri), FreeRTOS, Zephyr.
  • Linux'un PREEMPT_RT yamaları 2024'te (6.12) ana çekirdeğe katıldı; eski RTLinux projesi sona erdi.
  • Ses, video, hareket ve algılayıcı verisi işleyen; tren kontrolü, savunma gibi alanlarda kullanılır.

Temel Kavramlar

İşletim Sistemi Hizmetleri

Kullanıcılar ve diğer sistem programlarıKullanıcı arayüzleri:GKADokunmatikToplu işKomut satırıSistem çağrılarıProgram yürütmeG/Ç işlemleriDosya sistemleriİletişimHata algılamaKaynak ayırmaHesap tutmaKoruma ve güvenlikİşletim sistemi · Donanım

Yeşil hizmetler doğrudan kullanıcıya yardım eder; kırmızı olanlar sistemin verimli ve güvenli çalışmasını sağlar (Silberschatz, Şekil 2.1).

Temel Kavramlar

Politika ve Mekanizma

  • Politika (policy): ne yapılacak?
  • Mekanizma (mechanism): nasıl yapılacak?
  • İkisini ayırmak temel bir tasarım ilkesidir: politika kararları sonradan değiştiğinde mekanizmayı yeniden yazmak gerekmez → en yüksek esneklik.
Örnek: Linux'ta çizelgeleme sınıfı sched_setscheduler() ile, G/Ç zamanlayıcısı /sys üzerinden çalışırken değiştirilebilir; çekirdek kodu değişmez.
MekanizmaPolitika
Zamanlayıcı kesmesiZaman dilimi kaç ms olmalı?
Öncelikli çizelgeleyiciHangi süreç yüksek öncelikli?
Dosya izin bitleri (rwx)Kime hangi izin verilecek?
Sayfa değiştirme altyapısıHangi sayfa dışarı atılacak?
cgroupsHangi konteynere ne kadar CPU/bellek?

İS tasarımı, bu dengeleri kurmak için mühendislik kadar yaratıcılık da gerektirir.

Temel Kavramlar

MS-DOS ve FreeBSD

(a) MS-DOS açılıştaserbest bellekkomut yorumlayıcıçekirdek(b) MS-DOS program çalışırkenserbest belleksüreçyorumlayıcı (kalıcı kısım)çekirdek(c) FreeBSD: çoklu süreçsüreç Dserbest belleksüreç Cyorumlayıcısüreç Bçekirdek

MS-DOS: tek görevli, tek bellek alanı. Açılışta kabuk (COMMAND.COM) yüklenir; program onun geçici kısmının üzerine yazılarak yüklenir; bitince kabuk kendini diskten yeniden yükler. Çoklu görev ve koruma yoktur.

FreeBSD (UNIX türevi): çok görevli. Kullanıcı giriş yapınca kabuk başlar; kabuk fork() ile yeni süreç yaratır, exec() ile programı o sürece yükler; sonra programı bekler ya da (& ile) arka planda çalıştırıp komut almaya devam eder.

Temel Kavramlar · Kodu adım adım çalıştır

Kod İzleme: Kabuk Gibi fork + exec + wait

Ebeveyn · PID 1234main() çalışıyor

Program (PID 1234) fork()'u çağırır. Çekirdek sürecin bir kopyasını çıkaracak.

Ebeveyn · PID 1234fork() döndü: pid = 1235Çocuk · PID 1235fork() döndü: pid = 0

fork() bir kez çağrılır, iki kez döner: ebeveyne çocuğun PID'si (1235), çocuğa 0. Hangisinin önce çalışacağına çizelgeleyici karar verir.

Ebeveyn · PID 1234pid ≠ 0 → elseÇocuk · PID 1235hazır

Ebeveynde pid == 0 yanlış → else dalı.

Ebeveyn · PID 1234waitpid: blokeÇocuk · PID 1235hazır

Ebeveyn waitpid() ile çocuğun bitmesini bekler: bloke olur, CPU başkasına geçer.

Ebeveyn · PID 1234blokeÇocuk · PID 1235pid == 0 → doğru

Çocukta pid == 0 doğru → if dalı.

Ebeveyn · PID 1234blokeÇocuk · PID 1235exec: artık ls

execlp() çocuğun adres uzayını ls programıyla değiştirir (PID aynı kalır). Başarılıysa satır 5'e hiç dönülmez. ls dizini listeler.

Ebeveyn · PID 1234uyandıÇocuk · PID 1235sonlandı

ls exit(0) ile biter; çocuk ebeveyn onu toplayana kadar kısa süre zombi kalır. waitpid() döner, ebeveyn uyanır.

Ebeveyn · PID 1234printfÇocuk · PID 1235sonlandı

Ebeveyn "bitti" yazar. waitpid sayesinde çıktı sırası garanti: önce ls, sonra bitti.

Ebeveyn · PID 1234return 0Çocuk · PID 1235sonlandı

Ebeveyn de sonlanır. Kabuk her komutta tam olarak bu fork → exec → wait döngüsünü uygular.

int main(void) {
  pid_t pid = fork();
  if (pid == 0) {              /* çocuk */
    execlp("ls", "ls", NULL);
    perror("exec");            /* yalnız hata olursa */
  } else {                     /* ebeveyn */
    waitpid(pid, NULL, 0);
    printf("bitti\n");
  }
  return 0;
}

Temel Kavramlar

Standart C Kütüphanesi

printf("Merhaba\n")uygulamalibc: biçimlendir, stdout tamponukullanıcı moduwrite(1, buf, 8) sarmalayıcısısyscallmod geçişisys_write() → tty / terminal sürücüsüçekirdek moduEkran / terminal penceresiaygıt
BaşlıkÖrnek işlevler
stdio.hprintf, fopen, fread, fclose
stdlib.hmalloc, free, exit, qsort
string.hstrlen, strcpy, memcpy
math.h · time.hsqrt, sin · time, clock
unistd.h (POSIX)fork, read, write, close

C kütüphanesi (glibc, musl; Windows'ta UCRT) kullanıcı modunda çalışır. Bir kısmı tamamen kütüphane içindedir (strlen), bir kısmı sistem çağrılarını sarmalar (write). "Merhaba\n" 8 bayttır.

Temel Kavramlar · Animasyon

Yürütülebilir Dosya Oluşturma

kod.cÖnişlemcikod.iDerleyicikod.sAssemblerkod.oBağlayıcıprog (ELF)Yükleyicisüreçlibc.so, diğer.o

Kaynak dosya kod.c: insanın okuduğu C kodu.

kod.cÖnişlemcikod.iDerleyicikod.sAssemblerkod.oBağlayıcıprog (ELF)Yükleyicisüreçlibc.so, diğer.o

Önişlemci (gcc -E): #include ile başlık dosyalarını ekler, makroları genişletir, #ifdef ile koşullu derlemeyi çözer → kod.i.

kod.cÖnişlemcikod.iDerleyicikod.sAssemblerkod.oBağlayıcıprog (ELF)Yükleyicisüreçlibc.so, diğer.o

Derleyici (gcc -S): C kodunu hedef işlemcinin assembly diline çevirir, eniyileme yapar → kod.s.

kod.cÖnişlemcikod.iDerleyicikod.sAssemblerkod.oBağlayıcıprog (ELF)Yükleyicisüreçlibc.so, diğer.o

Assembler (gcc -c): assembly'yi makine koduna çevirir → nesne dosyası kod.o. Dış işlevlerin (printf) adresleri henüz belli değildir.

kod.cÖnişlemcikod.iDerleyicikod.sAssemblerkod.oBağlayıcıprog (ELF)Yükleyicisüreçlibc.so, diğer.o

Bağlayıcı (gcc kod.o diger.o -o prog): nesne dosyalarını ve kütüphaneleri birleştirir, adresleri çözer → yürütülebilir dosya (Linux: ELF, Windows: PE/.exe).

kod.cÖnişlemcikod.iDerleyicikod.sAssemblerkod.oBağlayıcıprog (ELF)Yükleyicisüreçlibc.so, diğer.o

./prog: kabuk fork + exec yapar; çekirdeğin yükleyicisi ELF'i belleğe eşler, dinamik bağlayıcı libc.so'yu bağlar ve program bir süreç olarak çalışır.

Temel Kavramlar

Metrik Birimler

ÜsAdSembolÜsAdSembol
10−3milim103kilok
10−6mikroµ106megaM
10−9nanon109gigaG
10−12pikop1012teraT
10−15femtof1015petaP
10−18attoa1018eksaE
İkili (IEC)Değer
1 KiB (kibibayt)210 = 1024 B
1 MiB220 B
1 GiB230 B
1 TiB240 B
Bellek genelde ikili (16 GiB RAM), disk ve ağ ondalık ölçülür: 1 TB = 1012 B ≈ 0,91 TiB; 1 Gb/s = 109 bit/s. Bayt B, bit b.

Özet

Kontrol Soruları

  1. Kullanıcı programı ayrıcalıklı bir komut çalıştırırsa ne olur?
  2. Çoklu programlama CPU kullanımını neden artırır? Gerçek paralellikten farkı nedir?
  3. 4 KB'lık bir disk bloğunu belleğe almak için sorgulama, kesme ve DMA'dan hangisi uygundur? Neden?
  4. 7200 dev/dk dönen bir diskte ortalama dönme gecikmesi kaç ms'dir?
  5. 4 kümeli, 64 B satırlı doğrudan eşlemeli boş önbellekte 0, 128, 256, 0 adreslerine erişiliyor. Kaç isabet olur?
  6. fork() kaç kez döner, çocukta ne döndürür? Politika ile mekanizmayı bir örnekle ayırın.
Cevapları göster
  1. İşlemci istisna (trap) üretir; çekirdek genelde süreci sonlandırır.
  2. G/Ç beklenirken CPU başka işi çalıştırır; tek CPU'da işler iç içe ilerler, aynı anda değil.
  3. DMA: tüm blok CPU'yu meşgul etmeden taşınır, sonunda tek kesme gelir.
  4. 60 000 / 7200 = 8,33 ms tur; ortalama yarım tur ≈ 4,17 ms.
  5. Bloklar 0, 2, 4, 0 → kümeler 0, 2, 0, 0. 256 bloğu 0'ı kovar → 0 isabet, 4 ıska.
  6. Bir kez çağrılır, iki kez döner; çocukta 0. Zamanlayıcı kesmesi mekanizma, zaman dilimi uzunluğu politikadır.

Özet

Kaynaklar

  • A. Silberschatz, P. B. Galvin, G. Gagne, Operating System Concepts, 10. baskı, Wiley, 2018.
  • A. S. Tanenbaum, H. Bos, Modern Operating Systems, 4. baskı, Pearson, 2014; 5. baskı, 2023.
  • R. H. Arpaci-Dusseau, A. C. Arpaci-Dusseau, Operating Systems: Three Easy Pieces (OSTEP), sürüm 1.10, pages.cs.wisc.edu/~remzi/OSTEP.
  • Linux kılavuz sayfaları: syscall(2), fork(2), execve(2), proc(5); UEFI Forum, UEFI Specification.
  • Bu sunum, Sercan KÜLCÜ'nün Tanenbaum Modern Operating Systems 3. baskıdan faydalanarak hazırladığı ders notlarının güncellenmiş sürümüdür.

Son

Bölüm 1: Giriş
Sonraki bölüm: İşletim Sistemi Yapıları
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.