---
title: 'Çekirdek Arayüzleri ve İzolasyon'
source: 'https://academia.sh/tr/kurslar/cekirdek-arayuzleri'
language: tr
updated: '2026-08-17T04:41:48+00:00'
license: 'CC BY-SA 4.0'
lessons: 9
outcomes:
    - 'Ad alanları ve denetim gruplarıyla kurulan izolasyonun açık bıraktığı olguları sayar'
    - 'Sistem çağrısı düzeyinde bir programın davranışını inceler ve bedelini ölçer'
    - 'Konteyner çalışma zamanının çekirdek parçalarına dayanışını ölçüyle gösterir'
---

# Çekirdek Arayüzleri ve İzolasyon

Ad alanları, denetim grupları, yetkiler ve zorunlu erişim denetiminin açık bıraktığı yüzeyin sayılması ve gözlem araçlarının o yüzeyi ne kadar geri açtığı.

## İzolasyon Mekanizmaları

Süreç, takma, ağ, kullanıcı ve makine ad alanları, denetim grupları, yetkiler, zorunlu erişim denetimi ve bunların bir konteyner çalışma zamanında bir araya gelişi.

### Ad Alanları

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/ad-alanlari

Bir sürecin 24 gözlenebilir olgusu dokuz eksene dağılıyor; beş ad alanı bunların dokuzunu kapatıyor, 15'ini açık bırakıyor ve dokuz eksenden yalnız ikisini tam kapatabiliyor.

Linux Ağ Yönetimi ve Sorun Giderme kursu son dersinde bir söz bıraktı: orada bir makinenin
tek bir ağ yığını vardı, burada aynı makinede birden çok yığın kurulacak ve her arayüz, her
yönlendirme tablosu, her kural zinciri çoğalacaktı. Sistem Yönetimi kursu da iki ayrı yerde
aynı adrese işaret etmişti. Servis yöneticisi dersinde birim, yöneticinin defterindeki bir
kayıttı ve süreçlerin birbirinden yalıtılması açıkça bu kursa bırakılmıştı; kaynak
sınırları dersinde ise süreç başına konan kısıt ölçüldü ve bir süreç öbeğinin **toplamına**
konan kısıt yine buraya havale edildi. İki borç da aynı iki adı taşıyor: **ad alanı** ve
**denetim grubu**. Bu ders birincisini öder, sonraki ders ikincisini.

Ödeme biçimi alışıldık olmayacak. Önceki kurslar bir aracın ne göremediğini ve bir sınamanın
kaç adayı elediğini saydı; bu kurs bir **izolasyonun ne kadarını kapatamadığını** sayar.
Kuralı şudur: bir izolasyonun sayısı **kapattığı yüzey değil, açık bıraktığı yüzeydir**;
**neyin hâlâ görüldüğü yazılmayan izolasyon ölçülmemiş sayılır.**

#### Kursun Ölçüsü ve Güvenlik Sınırı

Ölçüm üç sayıyı yan yana koyar. **Kâhin**, bir sürecin bütün gözlenebilir olgularıdır; kurguyu
biz yazdığımız için tamamı biliniyor. **İzolasyon**, düzeneklerin kapattığı olgu sayısıdır.
**Açık kalan yüzey** ise geriye kalan, sürecin hâlâ görebildiği olgulardır. Üçüncü sayı bu
kursun asıl konusudur ve hiçbir derste atlanmaz.

Bu bir **savunma ölçümüdür** ve sınırı baştan yazılır. Kurs boyunca kaçış, yetki yükseltme,
atlatma ya da sömürü yordamı yazılmaz; çalışan sömürü kodu, kavram kanıtı ya da hazır komut
dizisi verilmez. Ölçülen şey **hangi olgunun görünür kaldığıdır**, o görünürlüğün nasıl kötüye
kullanılacağı değil. Buna karşılık her açık yüzeyin yanına bir **daraltma yolu** yazılır:
bir boşluk sayıldıysa aynı derste onu küçülten düzenek de gösterilir. En az yetki ilkesi,
erişim denetimi modelleri ve tehdit modelleme yordamı Siber Güvenliğe Giriş ile Güvenli
Geliştirme Yaşam Döngüsü kurslarında kuruldu; burada yalnız **çekirdek düzeyindeki karşılığı**
ölçülür.

Model üzerindeki bütün sayılar kurgu üzerinden **tam sayımdır**, gerçek bir makinede yapılmış
ölçüm değildir. Gerçek komutlar bu derste **çalıştırılmaz**; örnek dökümler biçimi göstermek
içindir ve içlerindeki kimlik numaraları kurgudur. Hiçbir sayı iddiası örnek dökümden gelmez.

#### Ad Alanı: Çekirdek Tablosunun Üzerine Konan Süzgeç

Bir makinede süreç tablosu tektir, takma noktası listesi tektir, ağ arayüzü listesi tektir.
Ad alanı ikinci bir tablo üretmez; **var olan tablonun üzerine bir görünürlük süzgeci** koyar
ve süreç o süzgecin arkasından bakar. Aynı kayıt iki ayrı ad taşıyabilir, bir kayıt bir
görünümde bulunup ötekinde bulunmayabilir, ama silinmiş olmaz.

Türler ayrı ayrı açılır ve bağımsızdır. **Süreç ad alanı** süreç numaralarını yeniden
numaralandırır: içerideki ilk süreç 1 numarayı alır ve dışarıdaki numarasından farklıdır.
**Takma ad alanı** takma noktası listesini ayırır. **Ağ ad alanı** arayüzleri, yönlendirme
tablosunu ve dinlenen bağlantı noktalarını ayırır. **Kullanıcı ad alanı** kimlikleri eşler.
**Makine ad alanı** makine adını ayırır. Bunların yanında süreçler arası iletişim nesnelerini
ve denetim grubu ağacının kökünü ayıran türler de vardır; bu ders beş türü ölçer, kalanları
adlandırıp geçer.

Bir sürecin hangi ad alanlarında olduğu süreç dosya sisteminde sembolik bağlar olarak durur.
Aşağıdaki döküm **çalıştırılmamıştır**; kimlik numaraları kurgudur ve gerçek bir makinede
başka değerler görülür.

```text
# ornek dokum — calistirilmamistir
$ ls -l /proc/self/ns
cgroup -> 'cgroup:[40001]'
ipc    -> 'ipc:[40002]'
mnt    -> 'mnt:[40003]'
net    -> 'net:[40004]'
pid    -> 'pid:[40005]'
user   -> 'user:[40006]'
uts    -> 'uts:[40007]'
```

İki sürecin aynı ad alanında olup olmadığı bu bağların gösterdiği kimliklerin eşitliğiyle
anlaşılır. Ad alanı **nesnedir**: kendisine bağlı süreç kaldığı ya da bir dosya yoluna
sabitlendiği sürece yaşar, ikisi de bitince yok olur.

Ad alanı iki yolla girilir. Yeni bir ad alanı yaratmak için süreç kendini ayırır; var olan bir
ad alanına katılmak için hedefin bağı açılır. İkisinin kabuk karşılıkları ayrı araçlardır:

```text
# ornek dokum — calistirilmamistir
$ unshare --user --pid --fork --mount-proc --uts --net ornek-komut
$ nsenter --target 8140 --pid --mount --net -- ornek-komut
$ cat /proc/8140/uid_map
         0       1000          1
```

Birinci satır yeni ad alanları yaratır. Kullanıcı ad alanının önce gelmesinin bir nedeni
vardır: yetkisiz bir kullanıcının öteki türleri açabilmesini sağlayan tek tür odur ve
içeride görünen kimlik dışarıda hiçbir yetki taşımaz. Üçüncü satırdaki eşleme tablosu bunu
gösterir — içerideki 0, dışarıdaki bir kullanıcıya karşılık gelir ve eşleme bir kez yazılıp
kapanır. İkinci satır ise tersini yapar: var olan bir ad alanına dışarıdan girer. Bu araç bir
izolasyon düzeneği değil, bir **gözlem kanalıdır** ve makine üzerinde yetki gerektirir; kursun
ikinci konusu bu tür kanalların izolasyonu ne kadar deldiğini sayar.

#### Yirmi Dört Olgu, Dokuz Eksen

Ölçüm için bir sürecin görebildikleri sayılabilir bir kümeye indirilir. Kurgu, bir ölçüm
sunucusunda çalışan `olcum-toplayici` sürecidir.

- **IZ1** — Sürecin **24 gözlenebilir olgusu** vardır ve her olgu bir **eksene** aittir:
  süreç, takma, ağ, kullanıcı, makine, kaynak, çekirdek, yetki, etiket. Eksen sayısı **9**.
- **IZ2** — **Kâhin sürecin bütün olgularıdır**; kurguyu kuran taraf hepsini bilir.
- **IZ3** — Bir izolasyon düzeneği bir **süzgeçtir**: belirli bir ekseni kapatır ama o eksende
  **bir şey açık bırakabilir**.
- **IZ4** — Bir düzenek yalnız tek bir ekseni kapatır; eksenler arası yan etki modellenmez.
- **IZ5** — Bütün sayılar **tam sayımdır**; rastgelelik yoktur ve ikinci tohum kullanılmaz.
- **IZ6** — Olgular gözlenebilirlik bakımından eşit ağırlıklıdır; bir olgunun ötekinden daha
  değerli olması modellenmez.

```python
"""M03/K05 ortak tanim , bu dersin kullandigi parcalar.

Kahin = surecin butun olgulari (kurgu , biliniyor).
Izolasyon = olgularin bir altkumesini GORUNMEZ kilar.
Olculen sey: ACIK KALAN YUZEY , yani hala gorulebilen olgu sayisi.
"""

OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]

# Her ad alani BIR ekseni kapatir ve o eksende bir sey ACIK BIRAKIR.
DUZENEK = {
    "surec-ad-alani":     {"eksen": "surec", "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": "takma", "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": "ag", "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": "kullanici", "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": "makine", "acik_kalan": []},
}
BES = list(DUZENEK)


def gorunen(duzenekler, olgular=None):
    """Duzenekler uygulandiginda hala gorulen olgular."""
    olgular = OLGULAR if olgular is None else olgular
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        kapali |= {o for o, e in olgular if e == v["eksen"]}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def acik_eksen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    g = set(gorunen(duzenekler, olgular))
    return sorted({e for o, e in olgular if o in g})


eksen = sorted({e for _, e in OLGULAR})
print("KAHIN  olgu:", len(OLGULAR), "| eksen:", len(eksen), eksen)
print()
print("ad alani             eksende  kapatti  acik kalan  gorunen")
for d in BES:
    g = gorunen([d])
    n = sum(1 for _, e in OLGULAR if e == DUZENEK[d]["eksen"])
    print(f"  {d:20s} {n:7d}  {len(OLGULAR) - len(g):7d}"
          f"  {len(DUZENEK[d]['acik_kalan']):10d}  {len(g):7d}")
print()
g5 = gorunen(BES)
print("bes ad alani birlikte")
print("  gorunen olgu:", len(g5), "| acik eksen:", len(acik_eksen(BES)),
      acik_eksen(BES))
print("  tam kapanan eksen:",
      [DUZENEK[d]["eksen"] for d in BES if not DUZENEK[d]["acik_kalan"]])
```

```
KAHIN  olgu: 24 | eksen: 9 ['ag', 'cekirdek', 'etiket', 'kaynak', 'kullanici', 'makine', 'surec', 'takma', 'yetki']

ad alani             eksende  kapatti  acik kalan  gorunen
  surec-ad-alani             3        2           1       22
  takma-ad-alani             3        2           1       22
  ag-ad-alani                3        3           0       21
  kullanici-ad-alani         2        1           1       23
  makine-ad-alani            1        1           0       23

bes ad alani birlikte
  gorunen olgu: 15 | acik eksen: 7 ['cekirdek', 'etiket', 'kaynak', 'kullanici', 'surec', 'takma', 'yetki']
  tam kapanan eksen: ['ag', 'makine']
```

#### İzolasyon İkili Değil, Kısmi

Üç sayı yan yana duruyor. **Kâhin:** 24 olgu, 9 eksen. **İzolasyon:** beş ad alanı birlikte
**9 olgu** kapatıyor. **Açık kalan yüzey:** **15 olgu** ve **7 eksen**.

Tablonun ilk okuması tek tek düzeneklerle ilgili. Süreç ad alanı üç olgudan ikisini kapatıp
birini açık bırakıyor: süreç öteki süreçlerin listesini ve ata zincirini göremiyor ama **kendi
numarasını** görüyor. Takma ad alanı aynı biçimde çalışıyor; öteki takmalar ve paylaşılan
geçici dizin kapanıyor, **kök dosya ağacının kendisi** görünür kalıyor. Kullanıcı ad alanı iki
olgudan yalnız birini kapatıyor: kimlik eşlemesi ayrılıyor, **dosya sahipliği** açık kalıyor.

Dokuz eksenden yalnız **ikisi tam kapanıyor** ve bu ikisi ağ ile makine ad alanıdır. Ağ ad
alanı kendi ekseninin üç olgusunu da kapatır; makine ad alanı tek olgusunu kapatır. Neden bu
ikisi olduğu modelin keyfi bir seçimi değil, kapattıkları şeyin yapısıyla ilgilidir: ağ yığını
ve makine adı, sürecin kendisine ait olmayan **dış** niteliklerdir. Süreç numarası, kök dizin
ve dosya sahipliği ise sürecin kendisinde durur; süreç kendini görmeden çalışamaz.

Bu, ortak tanımın birinci okumasıdır: **izolasyon ikili değil, kısmidir.** Bir düzeneği açmak
bir ekseni "kapattı" saymaya yetmez; her düzeneğin yanına açık bıraktığı olgu yazılmalıdır.

#### Olgu Kümesi Süpürmesi

Modelde rastgelelik olmadığı için ikinci bir tohumla ölçüm tekrarlanamaz. Sonucun kurguya ne
kadar bağlı olduğu **olgu kümesini süpürerek** görülür: listeye bir olgu eklenir, bir olgu
çıkarılır ve açık yüzeyin nasıl değiştiği okunur.

- **IZ7** — Eklenen olgu `oturum-kimligi`, süreç eksenine aittir ve süreç ad alanının açık
  bıraktıklarında değildir.
- **IZ8** — Çıkarılan `dosya-sahipligi`, kullanıcı ekseninin açık kalan tek olgusudur.
- **IZ9** — İkinci çıkarma `makine-adi`, makine ekseninin tek olgusudur; çıkarıldığında eksen
  de listeden düşer.

```python
# --- Bu blok bir onceki blogun uzerine kurulur: OLGULAR, DUZENEK, BES,
# gorunen ve acik_eksen oradan gelir.
EK = OLGULAR + [("oturum-kimligi", "surec")]
EKSIK_SAHIPLIK = [(o, e) for o, e in OLGULAR if o != "dosya-sahipligi"]
EKSIK_MAKINE = [(o, e) for o, e in OLGULAR if o != "makine-adi"]

print("olgu kumesi supurmesi (bes ad alani uygulanmis halde)")
print("kume                       olgu  eksen  gorunen  acik eksen")
for ad, kume in (("temel", OLGULAR),
                 ("+oturum-kimligi/surec", EK),
                 ("-dosya-sahipligi", EKSIK_SAHIPLIK),
                 ("-makine-adi", EKSIK_MAKINE)):
    g = gorunen(BES, kume)
    e = acik_eksen(BES, kume)
    print(f"  {ad:24s} {len(kume):4d}  {len({x for _, x in kume}):5d}"
          f"  {len(g):7d}  {len(e):10d}")
```

```
olgu kumesi supurmesi (bes ad alani uygulanmis halde)
kume                       olgu  eksen  gorunen  acik eksen
  temel                      24      9       15           7
  +oturum-kimligi/surec      25      9       15           7
  -dosya-sahipligi           23      9       14           6
  -makine-adi                23      8       15           7
```

Süpürme iki ayrı şey söylüyor. Birincisi: kapatılan bir eksene olgu **eklemek** açık yüzeyi
büyütmüyor. Süreç ekseni yirmi beşinci olguyla dört olguya çıktı, süreç ad alanı üçünü birden
kapattı ve görünen olgu 15'te kaldı. İkincisi ve önemlisi: **açık kalan tek olguyu çıkarmak
bütün ekseni kapatıyor.** Dosya sahipliği listeden düştüğünde kullanıcı ad alanı kendi
ekseninin tamamını kapatıyor, açık eksen 7'den **6'ya** iniyor ve görünen olgu 14'e düşüyor.

Bu, ölçünün nereye duyarlı olduğunu gösteriyor: açık yüzeyi belirleyen şey olgu sayısı değil,
hangi olguların **açık kalan** olarak işaretlendiğidir. Üçüncü satır bunu tersinden doğruluyor;
makine adı çıkarıldığında eksen listeden düşüyor, makine ad alanı hiçbir şey kapatmayan bir
düzeneğe dönüşüyor ve görünen olgu yine 15 oluyor. Kapatacak şeyi olmayan bir düzenek yüzeyi
daraltmaz, yalnız yapılandırmayı büyütür.

#### Açık Kalan Üçü ve Daraltma Yolları

Beş ad alanının açık bıraktığı 15 olgunun üçü doğrudan bu derse aittir; kalan on ikisi kaynak,
çekirdek, yetki ve etiket eksenlerindedir ve sonraki dört dersin konusudur. Üçünün her birinin
yanına bir daraltma yolu yazılır.

**Kendi süreç numarası** açık kalır ve kapatılamaz; süreç kendi numarasını bilmeden sinyal
alamaz, çocuk toplayamaz. Buradaki daraltma sayıyı gizlemek değil, **sayının anlamını
sızdırmamaktır**: süreç dosya sistemi içeride yeniden takılır ve dışarıdaki numaralara açılan
bir yol bırakılmaz; günlüklere yazılan numaraların hangi ad alanına ait olduğu ayrıca yazılır.
Aynı sürecin içeride 1, dışarıda başka bir numara taşıması bir arıza değil, ölçmenin kuralıdır.

**Kök dosya ağacı** açık kalır, çünkü sürecin bir kökü olmak zorundadır. Daraltma yolu kökün
**neyi içerdiğini** küçültmektir: kök salt okunur takılır, yazılabilir alan ayrı ve geçici bir
takmaya verilir, gereksiz aygıt düğümleri ve yardımcı programlar konmaz. Takma seçeneklerinden
`nosuid`, `nodev` ve `noexec` bu daraltmanın en ucuz üç adımıdır ve Sistem Yönetimi kursundaki
kalıcı takma girdisiyle aynı yerde yazılır.

**Dosya sahipliği** açık kalır, çünkü kimlik eşlemesi sürecin gördüğü sayıları değiştirir ama
diskteki sahiplik alanlarını değiştirmez. Daraltma yolu eşlemeyi dosya sistemine kadar
taşımaktır: kök dosya ağacının sahipliği eşlenen aralığa göre normalleştirilir, paylaşılan
dizinler ya salt okunur verilir ya da hiç verilmez. Bu ders bir yüzeyi saymakla kalmaz; her
satırında onu küçülten bir yapılandırma kararı da bırakır.

#### Özet

- Bu kurs bir izolasyonun **açık bıraktığı yüzeyi** ölçer; neyin hâlâ görüldüğü yazılmayan
  izolasyon ölçülmemiş sayılır. Ölçüm bir savunma ölçümüdür ve her açık yüzeyin yanına bir
  daraltma yolu yazılır.
- Ad alanı ikinci bir tablo üretmez; var olan çekirdek tablosunun üzerine bir **görünürlük
  süzgeci** koyar ve süreç o süzgecin arkasından bakar.
- Kâhin **24 olgu ve 9 eksendir**; beş ad alanı birlikte **9 olgu** kapatır, **15 olgu** ve
  **7 eksen** açık kalır.
- Tek başına hiçbir ad alanı kendi eksenini tam kapatmaz; **ağ ve makine ad alanı** bunu
  yapabilen tek ikilidir. Süreç ad alanı `kendi-surec-numarasi`, takma ad alanı
  `kok-dosya-agaci`, kullanıcı ad alanı `dosya-sahipligi` olgusunu açık bırakır.
- Olgu kümesi süpürmesi ölçünün duyarlı olduğu yeri gösteriyor: kapalı bir eksene olgu eklemek
  yüzeyi büyütmüyor, açık kalan tek olguyu çıkarmak ekseni kapatıp açık ekseni **7'den 6'ya**
  indiriyor.
- Sistem Yönetimi ile Linux Ağ Yönetimi ve Sorun Giderme kurslarında bu kursa bırakılan
  borcun birinci yarısı ödendi; ikinci yarısı denetim grubudur.

#### Sonraki Adım

Beş ad alanı görünürlüğü daralttı ama tüketimi hiç sınırlamadı: içerideki süreç makinenin
işlemcisini, belleğini ve girdi/çıktı bant genişliğini olduğu gibi kullanabilir. Kaynak ekseni
bu yüzden dört olgusuyla tümüyle açık duruyor. Sonraki ders bu ekseni kapatan düzeneği,
denetim grubunu ele alır: kaynak sınırlandırmayı muhasebeden ayırır, Sistem Yönetimi kursunda
ölçülen süreç başına kısıttan farkını yazar ve dört kaynak olgusundan üçünü kapatıp
`islemci-sayisi` olgusunu neden açık bıraktığını sayar. Açık kalan o tek olgu, kendi iş
parçacığı havuzunu makinenin işlemci sayısına göre boyutlandıran her programın sessizce yanlış
hesap yapmasına yeter.

### Denetim Grupları

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/denetim-gruplari

Denetim grubu kaynak ekseninin dört olgusundan üçünü kapatıyor ve işlemci sayısını açık bırakıyor; altı düzenekli demette görünen olgu 15'ten 12'ye iniyor, açık eksen yine 7'de duruyor.

Önceki ders beş ad alanının görünürlüğü daralttığını, tüketimi hiç sınırlamadığını yazdı. Kaynak
ekseninin dört olgusu — işlemci payı, bellek sınırı, kullanılan bellek ve işlemci sayısı — beş
ad alanı açıldıktan sonra da olduğu gibi duruyordu. Ad alanı bir görünürlük süzgecidir ve
görünürlük tüketimi durdurmaz: kendi süreç tablosunu gören bir süreç, makinenin bütün
işlemcisini yine de meşgul edebilir.

Bu ders o ekseni kapatan düzeneği ele alır ve Sistem Yönetimi kursunun bıraktığı borcun ikinci
yarısını öder. Servis yöneticisi dersinde birim, yöneticinin defterindeki bir kayıttı ve
kaynak muhasebesinin çekirdek tarafı açıkça bu kursa bırakılmıştı. Soru yine aynı: denetim
grubu kaynak eksenini kapatıyor mu, yoksa geriye bir şey mi bırakıyor.

#### Ağaç, Denetleyici ve İki İş

Denetim grubu bir **süreç öbeğidir** ve öbekler bir ağaç oluşturur. Ağacın her düğümü bir
dizindir; bir sürecin numarası bir düğümün üye dosyasına yazıldığında süreç o gruba geçer ve
çocukları grubu devralır. Bir süreç aynı anda tek bir grupta bulunur; grup değiştirmek bir
yazma işlemidir ve süreç çalışırken yapılabilir.

Ağacın üzerinde **denetleyiciler** çalışır: işlemci, bellek, girdi/çıktı, süreç sayısı gibi
kaynak türlerinin her biri ayrı bir denetleyicidir. Bir denetleyici bir düğümde etkinleştirilir
ve o düğümün altındaki bütün alt ağaç için geçerli olur. Üstteki bir düğümde etkin olmayan bir
denetleyici altta da etkinleştirilemez; bu kural, ağacın bir bölümünü başka bir yöneticiye
yetki devriyi güvenli kılan şeydir.

Her denetleyici iki ayrı iş yapar ve ikisi karıştırıldığında yanlış beklenti üretir.
**Sınırlandırma** bir tavan ya da bir ağırlık koyar: tavan aşılamaz, ağırlık ise rekabet
hâlinde payı belirler. **Muhasebe** ise hiçbir şeyi sınırlamaz, yalnız sayar — kullanılan
bellek, harcanan işlemci zamanı, beklemede geçen süre. Bir grupta muhasebe açık olup hiçbir
sınır konmamış olabilir; bu durumda grup bir ölçüm birimidir, bir kısıt değil.

Denetim grubu ağacındaki yol, sürecin kendisi tarafından okunabilir. Bu yolu gizleyen ayrı bir
ad alanı türü vardır ve önceki derste adlandırılıp geçilmişti: denetim grubu ad alanı, sürecin
gördüğü yolun kökünü kendi grubuna kaydırır. Yolun gizlenmesi sınırın gizlenmesi demek
değildir; sınır dosyaları yine okunur.

```text
# ornek dokum — calistirilmamistir; yollar ve degerler kurgudur
$ cat /sys/fs/cgroup/olcum.slice/cgroup.controllers
cpu io memory pids
$ cat /sys/fs/cgroup/olcum.slice/cpu.max
20000 100000
$ cat /sys/fs/cgroup/olcum.slice/memory.max
536870912
$ cat /sys/fs/cgroup/olcum.slice/memory.current
331350016
$ nproc
8
```

Dökümdeki ilk sayı çifti bir kotadır: yüz bin birimlik pencerede yirmi bin birim, yani
**0,2 işlemci**. Son satır ise makinenin işlemci sayısını veriyor. İki satır aynı makinede,
aynı süreç için doğrudur ve birbirini yalanlamaz; yalnız aynı soruya iki ayrı yanıt verirler.
Bu dersin ölçtüğü şey tam olarak bu iki satır arasındaki açıktır. Döküm çalıştırılmamıştır ve
buradan hiçbir sayı iddiası çıkarılmaz.

#### Süreç Başına Kısıttan Farkı

Sistem Yönetimi kursunda süreç başına kaynak sınırları ölçüldü: yumuşak ve katı değerler,
çatallanmada devralma ve çalışan bir sürecin sınırının kabuktan değiştirilememesi. O ders
burada tekrarlanmaz, ama iki mekanizmanın farkı yazılmadan denetim grubu anlaşılmaz.

Süreç başına sınır **tek bir sürecin** tavanıdır. Aynı sınıra sahip yüz süreç, makineyi yüz kat
tüketebilir; sınır hiçbirini aşmadan makine biter. Denetim grubu ise **öbeğin toplamına**
bakar: gruptaki süreç sayısı ne olursa olsun toplam tüketim tavanla karşılaştırılır. İkinci
fark zamandadır. Süreç başına sınır çatallanma anında donar ve sonradan dışarıdan
değiştirilemez; denetim grubunun sınırı bir dosyaya yazılır ve süreç koşarken yürürlüğe girer.
Üçüncü fark muhasebedir: süreç başına sınırın bir sayacı yoktur, aşıldığında bir arıza üretir;
denetim grubu ise aşılmasa da sayar.

İki mekanizma birbirinin yerine geçmez, üst üste biner. Aynı süreç hem kendi tavanına hem de
grubunun tavanına tabidir ve hangisine önce çarptığı ikisinin değerine bağlıdır. Tanıda bu
üst üste binme bir tuzaktır: sürecin kendi sınır okuması grubun tavanını göstermez, grubun
sayacı da tek bir sürecin kendi tavanını göstermez. İki okuma ayrı yerlerdedir ve biri
ötekinin yerine geçmez.

- **IZ10** — Denetim grubu **kaynak eksenini** kapatan tek düzenektir; kaynak ekseninde
  **4 olgu** vardır.
- **IZ11** — Denetim grubu kaynak ekseninin **3 olgusunu** kapatır ve `islemci-sayisi`
  olgusunu **açık bırakır**.
- **IZ12** — Kapatmak, olgunun yok olması değil, sürecin gördüğü değerin **makinenin değeri
  olmaktan çıkıp grubun değeri olması** demektir.
- **IZ13** — Ölçüm süreç başına sınırları modellemez; Sistem Yönetimi kursunda ölçülen katman
  buraya taşınmaz.

```python
"""Ortak tanimin bu derste kullanilan parcasi: 24 olgu , 9 eksen ve
kaynak eksenini kapatan denetim grubu. Olculen sey ACIK KALAN YUZEY."""

OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": "surec", "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": "takma", "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": "ag", "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": "kullanici", "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": "makine", "acik_kalan": []},
    "denetim-grubu":      {"eksen": "kaynak", "acik_kalan": ["islemci-sayisi"]},
}
BES = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani",
       "kullanici-ad-alani", "makine-ad-alani"]


def gorunen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        kapali |= {o for o, e in olgular if e == v["eksen"]}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def acik_eksen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    g = set(gorunen(duzenekler, olgular))
    return sorted({e for o, e in olgular if o in g})


kaynak = [o for o, e in OLGULAR if e == "kaynak"]
acik = set(gorunen(["denetim-grubu"]))
print("KAHIN  olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}))
print("kaynak ekseninde", len(kaynak), "olgu")
print()
print("olgu                 denetim grubu")
for o in kaynak:
    print(f"  {o:20s} {'ACIK BIRAKIR' if o in acik else 'kapatir'}")
print()
g = gorunen(["denetim-grubu"])
print("denetim grubu tek basina: kapatti", len(OLGULAR) - len(g),
      "| acik kalan 1 | gorunen", len(g),
      "| acik eksen", len(acik_eksen(["denetim-grubu"])))
```

```
KAHIN  olgu: 24 | eksen: 9
kaynak ekseninde 4 olgu

olgu                 denetim grubu
  islemci-payi         kapatir
  bellek-siniri        kapatir
  kullanilan-bellek    kapatir
  islemci-sayisi       ACIK BIRAKIR

denetim grubu tek basina: kapatti 3 | acik kalan 1 | gorunen 21 | acik eksen 9
```

Üç sayı yan yana duruyor. **Kâhin:** 24 olgu, 9 eksen; kaynak ekseninde 4 olgu. **İzolasyon:**
denetim grubu tek başına **3 olgu** kapatıyor. **Açık kalan yüzey:** **21 olgu** ve **9 eksen** —
tek düzenek hiçbir ekseni listeden düşürmüyor, çünkü kaynak ekseninde bir olgu ayakta kalıyor.

#### Açık Kalan Olgu: İşlemci Sayısı

Kapanan üç olgu grubun kendi ölçüleriyle yer değiştiriyor. Süreç işlemci payını sorduğunda
grubun kotasını, bellek sınırını sorduğunda grubun tavanını, kullanılan belleği sorduğunda
grubun sayacını görüyor. Dördüncüsünde bu ikame yok: **makinenin işlemci sayısı olduğu gibi
görünüyor.** Kotası 0,2 işlemci olan bir süreç, sekiz işlemcili bir makinede sekiz yanıtını
alır.

Bunun bedeli soyut değildir. Çalışma zamanlarının çoğu, iş parçacığı havuzunu, koşut çalışan
işçi sayısını, çöp toplayıcı iş parçacığı sayısını ve bağlantı havuzu boyunu **başlangıçta bir
kez**, makinenin işlemci sayısına bakarak seçer. Kotanın kırk katı büyüklükte bir havuz açan
süreç daha hızlı çalışmaz; çizelgeleyici ona yine 0,2 işlemcilik pay verir ve fazladan iş
parçacıkları bekleme, bağlam değiştirme ve bellek olarak ödenir. Arıza da sessizdir: hiçbir
sınır aşılmaz, hiçbir hata iletisi çıkmaz, yalnız gecikme büyür.

Daraltma yolu üç adımdır ve üçü de bu dersteki tabloya doğrudan karşılık gelir. Birincisi,
boyutlandırma kararının kaynağını değiştirmektir: makinenin işlemci sayısı yerine grubun
kotası okunur; kota dosyası zaten sürecin görebildiği bir yerdedir. İkincisi, kotayı sürece
açık bir değer olarak geçirmektir — çalışma zamanı bir ayar okuyabiliyorsa, koşut çalışan işçi
sayısı yapılandırmadan verilir ve tahmine bırakılmaz. Üçüncüsü, kotayla birlikte bir de
**işlemci kümesi** kısıtı koymaktır: sürecin koşabileceği işlemciler daraltıldığında görünen
sayı da daralır ve iki yanıt birbirine yaklaşır. Üçü de olguyu tümüyle kapatmaz; açık yüzeyi
bir olgudan bir **yanlış hesaba** indirmeyi bırakır.

#### Sınırı Kim Yazar

Denetim grubu dosyalarına elle yazmak nadiren doğru yoldur, çünkü ağacı yöneten başka bir taraf
vardır. Servis yöneticisi her birim için bir düğüm açar, birimleri dilimlere toplar ve birim
dosyasındaki kaynak ayarlarını bu düğümlerin dosyalarına çevirir. Elle yazılan bir değer,
yönetici ağacı yeniden kurduğunda kaybolur; kalıcı olan yer birim tanımıdır.

```text
# ornek birim dosyasi parcasi — calistirilmamistir
[Service]
CPUQuota=20%
AllowedCPUs=2-3
MemoryMax=512M
MemoryAccounting=yes
TasksMax=64
```

Parçadaki ilk iki satır bu dersin ölçtüğü açığa doğrudan dokunur: birincisi kotayı yazar,
ikincisi sürecin koşabileceği işlemcileri daraltır. Dördüncü satır ise yalnız muhasebeyi açar
ve hiçbir şeyi sınırlamaz. Ayarların adları ve yazımı servis yöneticisine göre değişir; burada
gösterilen biçim değil, **ayrımdır**: sınır koyan satır ile yalnız sayan satır ayrı satırlardır.

Ağacın bir dalı başka bir yöneticiye **devredilebilir**. Devretme, o dalın altındaki düğümleri
açma ve süreç taşıma yetkisini vermek demektir; devralan taraf kendi alt ağacını istediği gibi
böler ama üstteki tavanın üzerine çıkamaz. Bir konteyner çalışma zamanının çalışma biçimi tam
budur ve beşinci derste ölçülür. Devretmenin sınırı da yazılmalıdır: devredilen dalda açılan
düğüm sayısı ve o düğümlere taşınan süreç sayısı üstten sınırlanmazsa, tavan tutulurken ağaç
büyümeye devam eder.

Muhasebenin kendisi bu kursun ikinci konusuna bakan bir yüzdür. Denetim grubu kapattığı üç
olgunun yerine grubun kendi ölçülerini koyar ve bu ölçüler **okunabilir** dosyalardır: grubun
harcadığı işlemci zamanı, o an tuttuğu bellek, tavana kaç kez dayandığı. Bu, izolasyonun bir
kusuru değil, işletmenin gereğidir — sınırın tutup tutmadığı ancak sayılarak bilinir. Ama aynı
sayılar içerideki süreç tarafından da okunur ve grubun yükü hakkında bilgi taşır. Kursun ikinci
konusu bu türden okuma yollarını **gözlem kanalı** olarak ele alır ve her birinin izolasyonu ne
kadar deldiğini sayar.

Bellek tavanına dayanıldığında verilen karar da grubun içinde kalır: çekirdek, tavanı aşan
grubun **kendi** süreçlerinden birini seçer. Sistem Yönetimi kursunda ölçülen makine geneli
bellek tükenmesinden farkı budur ve tanıda önemlidir — grubun içindeki bir ölüm, makinenin
belleğinin tükendiği anlamına gelmez. Grup sınırlarının toplamı makinenin belleğinden büyük
konabildiği için iki durum aynı makinede ayrı ayrı görülebilir.

#### Büyüyen Demet ve Olgu Kümesi Süpürmesi

Kurs boyunca aynı süreç üzerinde düzenek eklenir ve yüzeyin nasıl daraldığı sayılır. Önceki
ders beş ad alanıyla bitmişti; bu ders altıncı düzeneği ekler. Süpürme yine olgu kümesi
üzerinde yapılır, çünkü modelde rastgelelik ve ikinci tohum yoktur.

- **IZ14** — Eklenen olgu `girdi-cikti-payi`, kaynak eksenine aittir ve denetim grubunun açık
  bıraktıklarında değildir.
- **IZ15** — Çıkarılan `islemci-sayisi`, kaynak ekseninin açık kalan tek olgusudur.
- **IZ16** — Demet sırası bağlayıcıdır: beş ad alanı, sonra denetim grubu.

```python
# --- Onceki blogun uzerine kurulur: OLGULAR, DUZENEK, BES, gorunen, acik_eksen.
DEMET = BES + ["denetim-grubu"]
print("kurs boyunca buyuyen demet")
print("asama                      duzenek  gorunen  acik eksen")
for ad, d in (("bes ad alani", BES), ("+denetim grubu", DEMET)):
    print(f"  {ad:24s} {len(d):7d}  {len(gorunen(d)):7d}  {len(acik_eksen(d)):10d}")
print()
EK = OLGULAR + [("girdi-cikti-payi", "kaynak")]
EKSIK = [(o, e) for o, e in OLGULAR if o != "islemci-sayisi"]
print("olgu kumesi supurmesi (alti duzenek uygulanmis halde)")
print("kume                       olgu  eksen  gorunen  acik eksen  kaynak acik")
for ad, kume in (("temel", OLGULAR), ("+girdi-cikti-payi", EK),
                 ("-islemci-sayisi", EKSIK)):
    g = gorunen(DEMET, kume)
    e = acik_eksen(DEMET, kume)
    ka = sum(1 for o, ek in kume if ek == "kaynak" and o in set(g))
    print(f"  {ad:24s} {len(kume):4d}  {len({x for _, x in kume}):5d}"
          f"  {len(g):7d}  {len(e):10d}  {ka:11d}")
```

```
kurs boyunca buyuyen demet
asama                      duzenek  gorunen  acik eksen
  bes ad alani                   5       15           7
  +denetim grubu                 6       12           7

olgu kumesi supurmesi (alti duzenek uygulanmis halde)
kume                       olgu  eksen  gorunen  acik eksen  kaynak acik
  temel                      24      9       12           7            1
  +girdi-cikti-payi          25      9       12           7            1
  -islemci-sayisi            23      9       11           6            0
```

Birinci tablo kursun ikinci iddiasının ilk ödemesidir. Altıncı düzenek görünen olguyu 15'ten
**12'ye** indiriyor — üç olguluk bir kazanç — ama **açık eksen 7'de kalıyor**. Kaynak ekseni
kapanmadı, yalnız inceldi. Düzenek eklemek olguyu azaltıyor, ekseni azaltmıyor.

Süpürme aynı örüntüyü doğruluyor. Kaynak eksenine yirmi beşinci olgu eklendiğinde denetim
grubu onu da kapatıyor ve açık yüzey 12'de kalıyor: kapalı bir eksene olgu eklemek yüzeyi
büyütmüyor. Buna karşılık açık kalan tek olgu listeden çıkarıldığında eksen tamamen kapanıyor,
görünen olgu **11'e**, açık eksen **6'ya** iniyor. Ölçünün duyarlı olduğu yer yine aynı: açık
yüzeyi belirleyen şey eksendeki olgu sayısı değil, **hangi olgunun açık kaldığıdır.**

Modeldeki bütün sayılar kurgu üzerinden tam sayımdır; bir makinede yapılmış ölçüm değildir.
Kaynak ekseninin gerçek bir sistemde kaç olgu taşıdığı, hangi denetleyicilerin etkin olduğuna
ve süreç dosya sisteminin nasıl takıldığına göre değişir.

#### Özet

- Denetim grubu bir süreç öbeğidir; öbekler ağaç oluşturur, üzerlerinde denetleyiciler çalışır
  ve her denetleyici iki ayrı iş yapar: **sınırlandırma** ve **muhasebe**.
- Süreç başına kaynak sınırından üç noktada ayrılır: **öbeğin toplamına** bakar, süreç
  koşarken **değiştirilebilir** ve aşılmasa da **sayar**.
- Kaynak ekseninde **4 olgu** vardır; denetim grubu **3'ünü** kapatır, `islemci-sayisi`
  olgusunu **açık bırakır** ve tek başına 24 olgudan **21'ini** görünür bırakır.
- Açık kalan olgu somut bir yanlış hesap üretir: kotası bir işlemcinin beşte biri olan süreç
  makinenin işlemci sayısını görür ve havuzlarını ona göre boyutlandırır. Daraltma yolu kotayı
  okumak, koşut işçi sayısını yapılandırmadan vermek ve işlemci kümesini daraltmaktır.
- Altı düzenekli demette görünen olgu **15'ten 12'ye** iner, **açık eksen 7'de durur**;
  süpürmede açık kalan tek olgu çıkarıldığında eksen kapanır ve yüzey **11'e** düşer.

#### Sonraki Adım

Kaynak ekseni inceldi, ama sürecin ne yapabileceği hâlâ ölçülmedi. Görünürlüğü daraltmak ve
tüketimi sınırlamak, bir sürecin çekirdekten **hangi ayrıcalıklı işlemi** isteyebileceğini
belirlemez: aynı grup içindeki bir süreç ağ yapılandırmasını değiştirmeye, takma noktası
açmaya ya da başka bir kullanıcının dosyasına dokunmaya kalkışabilir. Sonraki ders süper
kullanıcı yetkisinin ayrı ayrı verilebilen parçalara bölünmesini ele alır, yetenek kümelerini ve
kırpmayı ölçer ve yetenek ekseninin iki olgusundan yalnız birinin kapandığını sayar. Açık kalan
olgu dosya yetkileridir ve nedeni beklenmediktir: süreçten kırpılan yetenek, dosyanın üzerinde
yazılı olanı değiştirmez.

### Yetenekler

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/yetenekler

Süper kullanıcı ayrıcalığı ayrı ayrı verilebilen parçalara bölünür; yetenek kırpma iki olgudan yalnız birini kapatır ve dosya yetkileri açık kalır, yedi düzenekli demette görünen olgu 11'e iner.

Önceki iki ders sürecin **ne gördüğünü** ve **ne kadar tükettiğini** daralttı. Üçüncü soru
başka bir eksene aittir: süreç çekirdekten **hangi ayrıcalıklı işlemi** isteyebilir. Kendi
süreç tablosunu gören, kotası kırpılmış bir süreç yine de bir takma noktası açmaya, ağ
yapılandırmasını değiştirmeye ya da başka bir kullanıcının dosyasına dokunmaya kalkışabilir.
Bu istekleri kabul edip etmemek görünürlükle de tüketimle de ilgili değildir.

Bu ders o kararı veren düzeneği ölçer. Katalogdaki başlık "Yetenekler" idi ve bu
müfredatta `capability` karşılığı **yetenek** olarak kapatıldığı için ders adı da
**Yetenekler**dir; kurs boyunca tek biçim kullanılır.

#### Süper Kullanıcı Ayrıcalığının Parçalanması

Klasik model ikilidir: bir süreç ya sıfır numaralı kullanıcıya aittir ve çekirdeğin bütün
denetimlerinden muaftır, ya da değildir ve hiçbirinden muaf değildir. Bin ayrıcalıklı işlemin
tamamı tek bir bayrağa bağlıdır. Ağın bir bağlantı noktasını dinlemek isteyen bir program, bu
model altında aynı zamanda çekirdek modülü yükleme ve herhangi bir dosyanın sahipliğini
değiştirme hakkını da alır.

**Yetki**, bu tek bayrağın ayrı ayrı verilebilen parçalara bölünmesidir. Her ayrıcalıklı işlem
sınıfı bir yetkiye bağlanır: düşük numaralı bağlantı noktasına bağlanma, ham yuva açma, ağ
yapılandırmasını değiştirme, dosya sahipliğini değiştirme, dosya izin denetimini atlama, süreç
önceliğini yükseltme, sistem saatini değiştirme, çekirdek modülü yükleme ve takma yapma ayrı
yetkilerdir. Bir süreç yalnız kendisine verilen yetkilerin kapsadığı işlemleri isteyebilir;
kalanları için sıfır numaralı kullanıcıya ait olması bile yetmez.

Parçalanma eşit değildir ve bu kursun ilgilendiği bir ayrıntı taşır. Yetkilerin bir bölümü dar
kapsamlıdır ve tek bir işlem sınıfını açar; bir bölümü ise geniştir ve kendi başına başka
yetkilerin kapısını aralayacak kadar çok işlem sınıfını kapsar. Takma yapmayı, ad alanı
yönetimini ve pek çok yönetim işlemini tek başına toplayan yetki bunların en bilinenidir.
Uygulamadaki kural bu yüzden kısadır: **geniş yetki verilmez.** Bir programın gerçekten
ihtiyacı varsa, ihtiyaç duyulan işlemi ayrı bir yardımcıya taşımak, o yetkiyi bütün sürece
vermekten daha dar bir çözümdür.

#### Beş Küme ve Geçiş Kuralı

Bir sürecin yetkileri tek bir liste değil, **beş kümedir** ve her kümenin ayrı bir işi vardır.
**Etkin küme** o an denetimde kullanılan yetkileri taşır. **İzinli küme** sürecin etkin kümeye
alabileceklerinin havuzudur. **Devralınabilir küme** program değiştirmede taşınabilecekleri
gösterir. **Sınırlayıcı küme** bir tavandır: içinde olmayan bir yetki hiçbir yolla geri
kazanılamaz. **Ortam kümesi** ise devralınabilir yetkilerin yeni programa taşınmasını sağlayan
köprüdür.

Ayrı bir bayrak bu kümelerin üzerinde durur: **yeni ayrıcalık yok** bayrağı açıldığında süreç
ve bütün çocukları, program değiştirmeyle yeni yetki kazanamaz. Bayrak bir kez açılır ve
kapatılamaz. Yetenek kırpmanın kalıcı olması bu bayrağa bağlıdır; bayrak açılmadan yapılan
kırpma, dosya üzerinde yazılı yetkilerle geri alınabilir.

```text
# ornek dokum — calistirilmamistir; maske degerleri kurgudur
$ grep -E '^(Cap|NoNewPrivs)' /proc/self/status
CapInh: 0000000000000000
CapPrm: 000000000000cc00
CapEff: 000000000000cc00
CapBnd: 000000000000cc00
CapAmb: 0000000000000000
NoNewPrivs: 1
```

Dökümdeki maskeler bit kümeleridir; her bit bir yetkiye karşılık gelir. Okunması gereken şey
tek tek bitler değil, **kümeler arasındaki ilişkidir**: sınırlayıcı küme izinli kümeye eşitse
kırpma yapılmamış demektir, ortam kümesi boşsa program değiştirmede yetki taşınmıyor demektir.

Yetkiler süreçlerin yanında **dosyaların** üzerinde de durur. Bir çalıştırılabilir dosyaya
yetki işaretlenebilir ve o dosya çalıştırıldığında süreç, çağıranın sahip olmadığı bir yetkiyle
başlar. Bu, eski sahiplik bayrağının dar bir alternatifidir: dosya bütün ayrıcalığı değil,
yalnız işaretlenmiş yetkiyi verir.

```text
# ornek dokum — calistirilmamistir
$ getcap /usr/local/bin/olcum-toplayici
/usr/local/bin/olcum-toplayici cap_net_bind_service=ep
$ setcap -r /usr/local/bin/olcum-toplayici
$ find /kok-agaci -perm /6000 -type f
/kok-agaci/usr/bin/eski-yardimci
```

Son satır bir denetim adımıdır: kök ağacında sahiplik bayrağı taşıyan dosyaları listeler. Bu
liste boş değilse, süreçten kırpılan yetenek dosya üzerinden geri gelebilir. Dökümler
çalıştırılmamıştır ve buradan hiçbir sayı iddiası çıkmaz.

#### Yetkinin Kapsamı ve Yazıldığı Yer

Bir yetkinin nerede geçerli olduğu, ad alanları hesaba katılmadan söylenemez. Kullanıcı ad
alanı açan bir süreç, o ad alanının içinde geniş bir yetenek kümesiyle başlar; ama bu kümenin
kapsamı **yalnız o ad alanı ve altındaki nesnelerdir**. Aynı yetki, ad alanının dışındaki bir
nesne üzerinde hiçbir şey yapmaz. Birinci dersteki eşleme tablosunun anlamı burada tamamlanır:
içeride görünen sıfır numaralı kullanıcı, dışarıda eşlenmiş sıradan bir kimliktir ve
yetkilerinin sınırı eşlemenin sınırıdır.

Bunun iki pratik sonucu vardır. Birincisi, "içeride yetkili görünmek" ile "makinede yetkili
olmak" ayrı iki durumdur ve tanıda karıştırılırsa yanlış sonuç verir. İkincisi, ad alanı
dışındaki bir kaynağa erişim gerektiğinde — bir aygıt düğümü, bir takma noktası, bir çekirdek
ayarı — yetki tek başına yetmez; o kaynağın ad alanının içine açıkça getirilmesi gerekir.
Getirilmediği sürece açık yüzey büyümez.

Yetkiler süreci başlatan tarafça yazılır ve kalıcı yeri bir yapılandırma dosyasıdır.

```text
# ornek birim dosyasi parcasi — calistirilmamistir
[Service]
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=yes
ProtectSystem=strict
ReadWritePaths=/veri/olcum
```

Parçadaki ilk satır sınırlayıcı kümeyi tek bir yetkiye indirir: listede olmayan hiçbir yetki
bu birim altında geri kazanılamaz. İkinci satır o yetkinin program değiştirmede taşınmasını
sağlar. Üçüncü satır bayrağı açar. Son iki satır ise bu dersin açık bıraktığı olguya dokunur —
dosya sistemini salt okunur yapıp yalnız gereken dizini yazılabilir bırakır. Ayarların adları
servis yöneticisine göre değişir; değişmeyen şey **sıradır**: önce tavan indirilir, sonra
gereken tek yetki geri verilir.

Bir programın hangi yetkiye gerçekten ihtiyacı olduğu tahminle bulunmaz. Sertleştirme
alışkanlığı tersinden çalışır: sınırlayıcı küme boşaltılarak başlanır, program bir sınama
ortamında çalıştırılır, reddedilen işlemler kaydedilir ve kayda düşen her işlem için **tek bir
yetki** geri verilir. Bu yol iki şey kazandırır. Verilen yetkiler gerçekten kullanılanlardır ve
liste, programın ne yaptığının yazılı bir belgesine dönüşür; sürüm değiştiğinde listenin
büyümesi de görünür bir olay olur. En az yetki ilkesi Siber Güvenliğe Giriş kursunda
kurulmuştu; buradaki karşılığı bu listedir.

#### Yetki Ekseni: İki Olgu, Bir Kapanış

- **IZ17** — Yetki ekseninde **2 olgu** vardır: `yetenek-kumesi` ve `dosya-yetkileri`.
- **IZ18** — Yetenek kırpma yetenek eksenini kapatan tek düzenektir; **1 olgu** kapatır ve
  `dosya-yetkileri` olgusunu **açık bırakır**.
- **IZ19** — Beş kümenin ayrımı modelde tek bir olguya indirilmiştir; bu, modelin bilinçli bir
  sınırıdır ve süpürmede tam bu sınır zorlanır.
- **IZ20** — Dosya üzerindeki yetkiler ile dosya izin bitleri modelde aynı olguda toplanır.

```python
"""Ortak tanimin bu derste kullanilan parcasi: 24 olgu , 9 eksen ve
yetenek eksenini kapatan yetenek kirpma. Olculen sey ACIK KALAN YUZEY."""

OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": "surec", "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": "takma", "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": "ag", "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": "kullanici", "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": "makine", "acik_kalan": []},
    "denetim-grubu":      {"eksen": "kaynak", "acik_kalan": ["islemci-sayisi"]},
    "yetenek-kirpma":       {"eksen": "yetki", "acik_kalan": ["dosya-yetkileri"]},
}
ALTI = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani", "kullanici-ad-alani",
        "makine-ad-alani", "denetim-grubu"]


def gorunen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        kapali |= {o for o, e in olgular if e == v["eksen"]}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def acik_eksen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    g = set(gorunen(duzenekler, olgular))
    return sorted({e for o, e in olgular if o in g})


acik = set(gorunen(["yetenek-kirpma"]))
print("KAHIN  olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}))
print("yetenek ekseninde", sum(1 for _, e in OLGULAR if e == "yetki"), "olgu")
print()
print("olgu                 yetenek kirpma")
for o, e in OLGULAR:
    if e == "yetki":
        print(f"  {o:20s} {'ACIK BIRAKIR' if o in acik else 'kapatir'}")
print()
g = gorunen(["yetenek-kirpma"])
print("yetenek kirpma tek basina: kapatti", len(OLGULAR) - len(g),
      "| acik kalan 1 | gorunen", len(g),
      "| acik eksen", len(acik_eksen(["yetenek-kirpma"])))
```

```
KAHIN  olgu: 24 | eksen: 9
yetenek ekseninde 2 olgu

olgu                 yetenek kirpma
  yetenek-kumesi       kapatir
  dosya-yetkileri      ACIK BIRAKIR

yetenek kirpma tek basina: kapatti 1 | acik kalan 1 | gorunen 23 | acik eksen 9
```

Üç sayı yan yana duruyor. **Kâhin:** 24 olgu, 9 eksen; yetenek ekseninde 2 olgu. **İzolasyon:**
yetenek kırpma **1 olgu** kapatıyor. **Açık kalan yüzey:** **23 olgu** ve **9 eksen**. Bu, tek
başına ölçülen düzenekler arasında en az kapatanlardan biridir ve sayı yanıltıcı değildir:
yetenek kırpma sürecin **isteyebileceklerini** daraltır, gördüklerini daraltmaz.

Bu, ölçünün bir sınırıdır ve açıkça yazılmalıdır. Kurs görünürlüğü sayar; bir düzeneğin
işletmedeki değeri yalnız kapattığı olgu sayısıyla ölçülmez. Yetenek kırpma, tablodaki tek
olgusuna karşılık, sürecin çekirdekten isteyebileceği ayrıcalıklı işlem sınıflarının büyük
bölümünü kapatır. İki ölçü ayrı sorulara yanıt verir ve biri ötekinin yerine geçmez.

#### Açık Kalan Olgu: Dosya Yetkileri

Kapanmayan olgu beklenmedik bir yerdedir. Süreçten kırpılan yetenek, **dosyanın üzerinde yazılı
olanı değiştirmez.** Kök ağacındaki bir dosyada sahiplik bayrağı ya da işaretlenmiş bir yetki
varsa, o dosya çalıştırıldığında yeni sürecin başlangıç kümesi dosyadan hesaplanır. Kırpma
süreçte yapılmıştır, dosya sisteminde yapılmamıştır ve iki taraf birbirini bilmez.

Aynı ayrım dosya izin bitleri için de geçerlidir. İzin denetimini atlayan yetki kırpıldığında
süreç artık her dosyaya erişemez; ama dosyaların üzerinde yazılı olan izinler yerinde durur ve
herkese açık yazılabilir bir dizin, yetkisi kırpılmış bir süreç için de yazılabilir kalır.
Yetenek kırpma bir **istek süzgecidir**, bir dosya sistemi işlemi değil.

Daraltma yolu bu yüzden dosya sisteminden geçer ve dört adımdır. Birincisi, kök ağacı
**salt okunur** takılır; yazılabilir alan ayrı ve dar bir takmaya verilir. İkincisi, yazılabilir
takmalara `nosuid`, `nodev` ve `noexec` seçenekleri konur — birincisi dosya üzerinden yetki
kazanmayı, ikincisi aygıt düğümü üretmeyi, üçüncüsü o alandan program çalıştırmayı keser.
Üçüncüsü, kök ağacı hazırlanırken sahiplik bayrağı taşıyan dosyalar aranır ve gerekmeyenlerin
bayrağı temizlenir; bu, dersin örnek dökümündeki son satırın işidir. Dördüncüsü, **yeni
ayrıcalık yok** bayrağı açılır ve sınırlayıcı küme kırpılır; ikisi birlikte yapıldığında
kırpılan yetenek hiçbir program değiştirmeyle geri gelmez.

Dördünün ortak yanı şudur: hiçbiri süreçte değil, **sürecin dünyasında** yapılır. Model bu
ayrımı tek bir açık olguyla temsil ediyor ve o olgunun kapanması için gereken şey ikinci bir
yetki ayarı değil, kök ağacının kendisinin daraltılmasıdır.

#### Büyüyen Demet ve Olgu Kümesi Süpürmesi

- **IZ21** — Demet sırası bağlayıcıdır: beş ad alanı, denetim grubu, sonra yetenek kırpma.
- **IZ22** — Eklenen olgu `ortam-yetenekleri`, yetenek eksenine aittir ve yetenek kırpmanın açık
  bıraktıklarında değildir.
- **IZ23** — Çıkarılan `dosya-yetkileri`, yetenek ekseninin açık kalan tek olgusudur.

```python
# --- Onceki blogun uzerine kurulur: OLGULAR, DUZENEK, ALTI, gorunen, acik_eksen.
YEDI = ALTI + ["yetenek-kirpma"]
print("kurs boyunca buyuyen demet")
print("asama                      duzenek  gorunen  acik eksen")
for ad, d in (("alti duzenek", ALTI), ("+yetenek kirpma", YEDI)):
    print(f"  {ad:24s} {len(d):7d}  {len(gorunen(d)):7d}  {len(acik_eksen(d)):10d}")
print()
EK = OLGULAR + [("ortam-yetenekleri", "yetki")]
EKSIK = [(o, e) for o, e in OLGULAR if o != "dosya-yetkileri"]
print("olgu kumesi supurmesi (yedi duzenek uygulanmis halde)")
print("kume                       olgu  eksen  gorunen  acik eksen  yetki acik")
for ad, kume in (("temel", OLGULAR), ("+ortam-yetenekleri", EK),
                 ("-dosya-yetkileri", EKSIK)):
    g = set(gorunen(YEDI, kume))
    e = acik_eksen(YEDI, kume)
    ya = sum(1 for o, ek in kume if ek == "yetki" and o in g)
    print(f"  {ad:24s} {len(kume):4d}  {len({x for _, x in kume}):5d}"
          f"  {len(g):7d}  {len(e):10d}  {ya:10d}")
```

```
kurs boyunca buyuyen demet
asama                      duzenek  gorunen  acik eksen
  alti duzenek                   6       12           7
  +yetenek kirpma                7       11           7

olgu kumesi supurmesi (yedi duzenek uygulanmis halde)
kume                       olgu  eksen  gorunen  acik eksen  yetki acik
  temel                      24      9       11           7           1
  +ortam-yetenekleri         25      9       11           7           1
  -dosya-yetkileri           23      9       10           6           0
```

Yedinci düzenek görünen olguyu 12'den **11'e** indiriyor: bir olgu. Açık eksen yine **7'de**
duruyor ve bu, üçüncü kez aynı sonucu veriyor. Düzenek eklemek yüzeyi daraltıyor, ekseni
daraltmıyor; her eksende bir şey açık kalıyor.

Süpürme modelin sınırını da gösteriyor. Yetki eksenine sekizinci düzenekten bağımsız bir olgu
eklendiğinde yetenek kırpma onu da kapatıyor ve yüzey 11'de kalıyor: beş kümeyi ayrı ayrı
modellemek sonucu değiştirmezdi. Buna karşılık açık kalan tek olgu çıkarıldığında eksen
kapanıyor, yüzey **10'a** ve açık eksen **6'ya** iniyor. Sonuç önceki iki dersle aynı yöne
bakıyor: yüzeyi belirleyen şey eksendeki olgu sayısı değil, **açık kalan olgunun varlığıdır.**
Modeldeki bütün sayılar kurgu üzerinden tam sayımdır, bir makinede yapılmış ölçüm değildir.

#### Özet

- Yetki, süper kullanıcı ayrıcalığının ayrı ayrı verilebilen parçalara bölünmesidir; yetkiler
  eşit kapsamda değildir ve **geniş yetki verilmez**.
- Bir sürecin **beş yetenek kümesi** vardır — etkin, izinli, devralınabilir, sınırlayıcı ve
  ortam — ve üzerlerinde bir kez açılıp kapatılamayan **yeni ayrıcalık yok** bayrağı durur.
- Yetki ekseninde **2 olgu** vardır; yetenek kırpma **1'ini** kapatır, `dosya-yetkileri`
  olgusunu **açık bırakır** ve tek başına 24 olgunun **23'ünü** görünür bırakır.
- Açık kalan olgunun nedeni yapısaldır: kırpma süreçte yapılır, dosyaların üzerinde yazılı
  olan değişmez. Daraltma yolu dosya sistemindedir — salt okunur kök, `nosuid`, `nodev` ve
  `noexec` seçenekleri, sahiplik bayraklarının temizlenmesi ve sınırlayıcı kümenin kırpılması.
- Yedi düzenekli demette görünen olgu **12'den 11'e** iner, **açık eksen 7'de durur**;
  süpürmede açık kalan tek olgu çıkarıldığında yüzey **10'a**, eksen **6'ya** düşer.

#### Sonraki Adım

Yetenek kırpma sürecin çekirdekten ne isteyebileceğini daralttı, ama isteğin **kime** yöneldiğini
hiç sormadı. İzin denetimi hâlâ dosyanın sahibinin verdiği kararlara dayanıyor: bir dizin
herkese açık yazılabilir işaretlenmişse, kırpılmış bir süreç de oraya yazar. Sonraki ders bu
kararı sahibin elinden alıp bir politikaya bağlayan katmanı ele alır. Özneye ve nesneye erişim
etiketi verilir, aralarındaki her erişim bir politika kuralıyla açıkça izinli hâle getirilir ve
kural yoksa erişim reddedilir. Ölçülecek şey iki yönlüdür: politikanın kapattığı olgu ile
politikanın **kendi** açık yüzeyi, yani gerekmediği hâlde izin verilen erişim sayısı.

### Zorunlu Erişim Denetimi

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/zorunlu-erisim-denetimi

Politika tabanlı denetim etiket ekseninin iki olgusundan birini kapatır ve erişim etiketini açık bırakır; 36 erişim çiftinden 8'i gerekliyken kaba politika 10, dar politika 1 fazla izin bırakıyor.

Önceki ders sürecin çekirdekten hangi ayrıcalıklı işlemi isteyebileceğini daralttı ve dosya
tarafında bir şeyin açık kaldığını saydı. Açık kalan şeyin altında daha genel bir kural yatıyor:
bir dosyaya kimin erişebileceğine, o dosyanın **sahibi** karar veriyor. Sahibi bir dizini
herkese açık yazılabilir işaretlediyse, yetkisi kırpılmış bir süreç de oraya yazar. Kırpma
isteği süzer, iznin kendisini yazmaz.

Bu ders kararı sahibin elinden alıp bir politikaya bağlayan katmanı ele alır ve iki ayrı yüzey
ölçer: politikanın kapattığı olgu ile **politikanın kendi açık yüzeyi**, yani gerekmediği hâlde
izin verilmiş erişim sayısı. Ders politika **yazmayı** öğretir; politikayı devre dışı bırakmak
bu kursta bir çözüm olarak sunulmaz ve bunun ölçüsü de sonunda sayılır.

#### İsteğe Bağlı Denetimden Zorunlu Denetime

Dosya izinleri ve sahiplik **isteğe bağlı** bir modeldir: nesnenin sahibi erişimi genişletme
yetkisine sahiptir ve genişlettiğinde kimseye sormaz. Model basit olduğu için yaygındır ve
zayıflığı da buradadır — tek bir yanlış işaretleme bütün bir dizini açar, sistemin genelinde
hangi öznenin hangi nesneye erişebildiğini gösteren yazılı bir yer yoktur.

**Zorunlu erişim denetimi** kararı merkezî bir politikaya taşır. Çekirdekte, erişim
denetimlerinin geçtiği noktalara yerleştirilmiş bir kanca katmanı vardır; bir güvenlik modülü
bu kancalara bağlanır ve her erişim isteğinde ikinci bir karar verir. Kural şudur: klasik izin
denetimi **önce** çalışır, geçerse politika denetimi çalışır. İkisi seri bağlıdır ve
**ikisinden de geçmeyen erişim gerçekleşmez.** Politika, sahibin verdiği izni genişletemez;
yalnız daraltır.

Politikanın nesneleri ikidir. **Erişim etiketi** özneye ve nesneye takılan bir işarettir; süreç
bir etiket taşır, dosya bir etiket taşır. **Politika kuralı** ise iki etiket ve bir işlem sınıfı
arasında bir bağ kurar. Öntanımlı davranış **reddetmektir**: kuralla açıkça izin verilmemiş her
erişim reddedilir. Bu, isteğe bağlı modelin tam tersidir ve politikanın yazılmasını zorunlu
kılar — kural yoksa program çalışmaz.

```text
# ornek dokum — calistirilmamistir; etiket alanlari kurgudur
$ ls -Z /veri/olcum
sistem_u:nesne_r:olcum_veri_t:s0  ham.dat
sistem_u:nesne_r:olcum_gunluk_t:s0  gunluk.jsonl
$ ps -Z -p 8140
sistem_u:sistem_r:olcum_t:s0  8140 olcum-toplayici
```

Etiketin alanları vardır ve karar çoğunlukla bunlardan yalnız birine, tür alanına dayanır.
Süreç `olcum_t` türündedir, ölçüm verisi `olcum_veri_t`, günlük dosyası `olcum_gunluk_t`
türündedir. Politika bu türler arasındaki izinli erişimleri sayar.

#### İki Aile ve Kuralın Yazımı

Güvenlik modülleri iki aileye ayrılır ve ayrım nesnenin nasıl adlandırıldığıyla ilgilidir.
**Etiket tabanlı** aile erişim etiketini nesnenin kendisinde tutar: etiket dosyanın üst
verisindedir, dosya taşınsa da adı değişse de etiket onunla gelir. **Yol tabanlı** aile ise
nesneyi dosya yoluyla adlandırır ve kuralları yol örüntüleri üzerine yazar. Birincisi taşımaya
dayanıklıdır ve etiketlemeyi ayrı bir iş hâline getirir; ikincisinin yazımı kısadır ve aynı
dosyaya başka bir yoldan erişildiğinde kuralın kapsamı değişebilir.

```text
# ornek politika parcasi — calistirilmamistir
allow olcum_t olcum_veri_t : file { read write getattr };
allow olcum_t olcum_gunluk_t : file { append getattr };
allow olcum_t olcum_ayar_t : file { read getattr };
```

```text
# ornek yol tabanli profil parcasi — calistirilmamistir
/usr/local/bin/olcum-toplayici {
  /veri/olcum/** rw,
  /veri/olcum/gunluk.jsonl a,
  /etc/olcum/ayar.toml r,
  deny /veri/faturalama/** rwx,
}
```

İki yazım da aynı üç şeyi söyler: özne, nesne ve işlem sınıfı. Dökümler çalıştırılmamıştır ve
buradan hiçbir sayı iddiası çıkmaz. Kural sözdizimi güvenlik modülüne göre değişir; bu dersin
ölçtüğü şey sözdizimi değil, kuralların **kaç erişime izin verdiğidir**.

Etiket tabanlı ailede kuralların yanında ikinci bir yazılı parça daha vardır ve unutulduğunda
politika sessizce boşa çıkar: **etiketleme kuralları**. Yeni oluşturulan bir dosya öntanımlı
olarak bulunduğu dizinin türünü alır; istenen tür başka bir şeyse bu bir **tür geçişi**
kuralıyla yazılır. Yazılmadığında ölçüm sürecinin ürettiği günlük dosyası veri türünde doğar,
günlük kuralları ona uygulanmaz ve kimse bir şey fark etmez. Aynı boşluk yedekten geri dönen
ya da başka bir makineden kopyalanan dosyalarda da açılır: etiket üst veridedir ve her taşıma
biçimi onu taşımaz. Bu yüzden politika yazımının bir parçası da **yeniden etiketleme**
adımıdır — kök ağacı ya da veri dizini, yazılı etiketleme kurallarına göre baştan işaretlenir.
Yol tabanlı ailede bu adım yoktur; karşılığında aynı dosyaya ikinci bir yoldan erişildiğinde
kuralın kapsamı dışında kalma sorunu vardır.

#### Etiket Ekseni: İki Olgu, Bir Kapanış

- **IZ24** — Etiket ekseninde **2 olgu** vardır: `erisim-etiketi` ve `politika-kurallari`.
- **IZ25** — Zorunlu etiket, etiket eksenini kapatan tek düzenektir; **1 olgu** kapatır ve
  `erisim-etiketi` olgusunu **açık bırakır**.
- **IZ26** — İki modül ailesi modelde tek bir düzenekle temsil edilir.
- **IZ27** — Demet sırası bağlayıcıdır: beş ad alanı, denetim grubu, yetenek kırpma, zorunlu
  etiket. Sekizinci düzenek eklendiğinde demet **sıkı demet** adını alır.

```python
"""Ortak tanimin bu derste kullanilan parcasi: 24 olgu , 9 eksen ve
etiket eksenini kapatan zorunlu etiket. Olculen sey ACIK KALAN YUZEY."""

OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": "surec", "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": "takma", "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": "ag", "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": "kullanici", "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": "makine", "acik_kalan": []},
    "denetim-grubu":      {"eksen": "kaynak", "acik_kalan": ["islemci-sayisi"]},
    "yetenek-kirpma":       {"eksen": "yetki", "acik_kalan": ["dosya-yetkileri"]},
    "zorunlu-etiket":     {"eksen": "etiket", "acik_kalan": ["erisim-etiketi"]},
}
YEDI = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani", "kullanici-ad-alani",
        "makine-ad-alani", "denetim-grubu", "yetenek-kirpma"]
SIKI = YEDI + ["zorunlu-etiket"]


def gorunen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        kapali |= {o for o, e in olgular if e == v["eksen"]}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def acik_eksen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    g = set(gorunen(duzenekler, olgular))
    return sorted({e for o, e in olgular if o in g})


acik = set(gorunen(["zorunlu-etiket"]))
print("KAHIN  olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}))
print("etiket ekseninde", sum(1 for _, e in OLGULAR if e == "etiket"), "olgu")
print()
for o, e in OLGULAR:
    if e == "etiket":
        print(f"  {o:20s} {'ACIK BIRAKIR' if o in acik else 'kapatir'}")
g = gorunen(["zorunlu-etiket"])
print("zorunlu etiket tek basina: kapatti", len(OLGULAR) - len(g),
      "| gorunen", len(g), "| acik eksen", len(acik_eksen(["zorunlu-etiket"])))
print()
print("asama                      duzenek  gorunen  acik eksen")
for ad, d in (("yedi duzenek", YEDI), ("+zorunlu etiket (siki)", SIKI)):
    print(f"  {ad:24s} {len(d):7d}  {len(gorunen(d)):7d}  {len(acik_eksen(d)):10d}")
print()
EK = OLGULAR + [("politika-surumu", "etiket")]
EKSIK = [(o, e) for o, e in OLGULAR if o != "erisim-etiketi"]
print("olgu kumesi supurmesi (siki demet uygulanmis halde)")
print("kume                  olgu  eksen  gorunen  acik eksen")
for ad, kume in (("temel", OLGULAR), ("+politika-surumu", EK),
                 ("-erisim-etiketi", EKSIK)):
    print(f"  {ad:19s} {len(kume):4d}  {len({x for _, x in kume}):5d}"
          f"  {len(gorunen(SIKI, kume)):7d}  {len(acik_eksen(SIKI, kume)):10d}")
```

```
KAHIN  olgu: 24 | eksen: 9
etiket ekseninde 2 olgu

  erisim-etiketi       ACIK BIRAKIR
  politika-kurallari   kapatir
zorunlu etiket tek basina: kapatti 1 | gorunen 23 | acik eksen 9

asama                      duzenek  gorunen  acik eksen
  yedi duzenek                   7       11           7
  +zorunlu etiket (siki)         8       10           7

olgu kumesi supurmesi (siki demet uygulanmis halde)
kume                  olgu  eksen  gorunen  acik eksen
  temel                 24      9       10           7
  +politika-surumu      25      9       10           7
  -erisim-etiketi       23      9        9           6
```

Üç sayı yan yana duruyor. **Kâhin:** 24 olgu, 9 eksen. **İzolasyon:** zorunlu etiket **1 olgu**
kapatıyor, sıkı demet toplamda **14 olgu** kapatıyor. **Açık kalan yüzey:** sekizinci düzenekten
sonra **10 olgu** ve yine **7 eksen**. Sekiz düzenek eklendi, açık eksen dördüncüden beri hiç
değişmedi.

Açık kalan olgu `erisim-etiketi`dir ve nedeni yapısaldır: politika özneye bir etiket takar,
özne kendi etiketini okuyabilir. Etiketi gizlemek politikayı işlemez kılar, çünkü etiket
kararın girdisidir. Daraltma yolu bu yüzden etiketi saklamak değil, **etiketin hiçbir gizli
bilgi taşımamasını** sağlamaktır: tür adları rol ve amaç bildirir, kimlik, anahtar, kiracı adı
ya da konum bildirmez. İkinci adım politika kaynağının kendisini sınırlamaktır — kural ağacı
sürecin kök ağacına konmaz; sürecin okuyabildiği tek şey kendi etiketi olur, kuralların tamamı
değil. Süpürme bunu doğruluyor: etiket ekseninden açık kalan tek olgu çıkarıldığında eksen
kapanıyor, yüzey **9'a** ve açık eksen **6'ya** iniyor.

#### Politikanın Kendi Açık Yüzeyi

Bir politika yazıldığında ikinci bir ölçü doğar. Kurs boyunca açık yüzeyi çekirdek olguları
üzerinden saydık; politika düzeyinde de aynı soru sorulabilir: **kaç erişime gerekmediği hâlde
izin verildi.** Kurgu, ölçüm sunucusundaki üç özne, dört nesne ve üç işlemdir.

- **IZ28** — Üç özne, dört nesne ve üç işlem **36 erişim çifti** üretir.
- **IZ29** — **Kâhin, iş yükünün gerçekten ihtiyaç duyduğu erişimlerdir**; kurguyu kuran taraf
  bu kümeyi bilir ve **8 erişimden** oluşur.
- **IZ30** — Politikanın açık yüzeyi **fazla izin** sayısıdır: izin verilmiş ama gerekmeyen
  erişimler. **Eksik izin** ise kırılan işi gösterir.

```python
"""Politika duzeyinde acik yuzey: izin verilen ama GEREKMEYEN erisim sayisi."""
OZNE = ("olcum", "fatura", "bakim")
NESNE = ("olcum-veri", "fatura-veri", "gunluk", "ayar")
ISLEM = ("oku", "yaz", "calistir")

# Kahin: is yukunun GERCEKTEN ihtiyac duydugu erisimler.
GEREKEN = {
    ("olcum", "olcum-veri", "oku"), ("olcum", "olcum-veri", "yaz"),
    ("olcum", "gunluk", "yaz"), ("olcum", "ayar", "oku"),
    ("fatura", "fatura-veri", "oku"), ("fatura", "fatura-veri", "yaz"),
    ("fatura", "gunluk", "yaz"), ("bakim", "gunluk", "oku"),
}


def politika_yok(o, n, i):
    """Zorunlu denetim yok: karar yalniz istege bagli katmandadir."""
    return True


def kaba(o, n, i):
    """Tur duzeyinde yazilmis genis kural."""
    return n.startswith(o) or n == "gunluk" or (n == "ayar" and i == "oku")


def dar(o, n, i):
    """Gereken erisimler , arti bakim icin ayar okumasi."""
    return (o, n, i) in GEREKEN or (o, n, i) == ("bakim", "ayar", "oku")


TUM = [(o, n, i) for o in OZNE for n in NESNE for i in ISLEM]
print("toplam erisim cifti:", len(TUM), "| kahin (gereken erisim):", len(GEREKEN))
print()
print("politika          izin  karsilanan  FAZLA IZIN  eksik izin")
for ad, f in (("politika yok", politika_yok), ("kaba politika", kaba),
              ("dar politika", dar)):
    izin = {t for t in TUM if f(*t)}
    print(f"  {ad:15s} {len(izin):5d}  {len(GEREKEN & izin):10d}"
          f"  {len(izin - GEREKEN):10d}  {len(GEREKEN - izin):10d}")
```

```
toplam erisim cifti: 36 | kahin (gereken erisim): 8

politika          izin  karsilanan  FAZLA IZIN  eksik izin
  politika yok       36           8          28           0
  kaba politika      18           8          10           0
  dar politika        9           8           1           0
```

Üç satır politika yazımının bütün gerilimini taşıyor. Politika yokken 36 erişimin tamamı
politika katmanından geçer ve **28'i gereksizdir**. Tür düzeyinde yazılmış kaba bir politika
bunu **10'a** indirir; her üç satırda da eksik izin sıfırdır, yani üçünde de iş çalışır.
Dar politika fazla izni **1'e** indirir ve iş yine çalışır. Aradaki fark yazım emeğidir: kaba
politika üç kural satırıyla, dar politika dokuz satırla yazılır.

**Ölçü, politikanın kaç kural içerdiği değil, kaç gereksiz erişimi ayakta bıraktığıdır.** Bu,
kursun kuralının politika düzeyindeki karşılığıdır ve aynı cümleyle söylenir: neyin hâlâ izinli
olduğu yazılmayan politika ölçülmemiş sayılır.

#### Politika Nasıl Yazılır

Gereken erişim listesi tahminle çıkmaz. Yazma düzeni tersine çalışır: sınama ortamında
politika **denetim kipine** alınır — kurallar değerlendirilir, ihlaller kaydedilir ama erişim
engellenmez — iş yükü baştan sona koşturulur ve düşen her kayıt için tek bir kural yazılır.

```text
# ornek reddedis kaydi — calistirilmamistir
tur=erisim-reddi islem={ write } surec=8140 nesne="ham.dat" sinif=file
  ozne=sistem_u:sistem_r:olcum_t:s0  hedef=sistem_u:nesne_r:fatura_veri_t:s0
```

Kaydın taşıdığı üç alan kuralın üç alanıdır: özne türü, hedef türü, işlem sınıfı. Kural
yazılırken kaydı olduğu gibi kurala çevirmek kolay ama yanlıştır; kayıt tek bir dosyayı
gösterir, kural bir türü kapsar. Yazımdan önce sorulacak soru şudur: bu erişim gerçekten
gerekli mi, yoksa yanlış etiketlenmiş bir dosya mı. İkinci durumda doğru düzeltme kural
eklemek değil, dosyayı doğru türe taşımaktır.

Denetim kipinin bir bedeli vardır ve bu dersin sayılarıyla söylenebilir: o kipte
`politika-kurallari` olgusu kapanmaz, sıkı demet sekiz düzenek yerine yedi düzenek gibi
davranır ve açık yüzey **10 yerine 11 olgudur**. Denetim kipi bir geliştirme adımıdır, bir
işletim düzeni değildir; üretimde kalan denetim kipi ölçüde bir düzeneğin eksilmesine karşılık
gelir. Politikayı tümüyle kapatmak ise bu kursta bir çözüm olarak sunulmaz — üstteki tablonun
ilk satırı, kapatmanın ne anlama geldiğini sayıyla veriyor: **28 fazla izin**. Bir kural iş
akışını kırıyorsa doğru tepki politikayı kaldırmak değil, kırılan tek erişim için dar bir kural
yazmak ya da nesnenin türünü düzeltmektir.

Modeldeki bütün sayılar kurgu üzerinden tam sayımdır; gerçek bir makinede yapılmış ölçüm
değildir ve gerçek bir politikada erişim çifti sayısı çok daha büyüktür.

#### Özet

- Zorunlu erişim denetimi kararı nesnenin sahibinden alıp merkezî bir politikaya taşır; klasik
  izin denetimiyle **seri** çalışır ve öntanımlı davranışı **reddetmektir**.
- Politikanın iki nesnesi vardır: özneye ve nesneye takılan **erişim etiketi** ve iki etiketle
  bir işlem sınıfını bağlayan **politika kuralı**. İki modül ailesi nesneyi etiketle ya da
  yolla adlandırır.
- Etiket ekseninde **2 olgu** vardır; zorunlu etiket **1'ini** kapatır, `erisim-etiketi`
  olgusunu açık bırakır. Sıkı demet sekiz düzenekle **14 olgu** kapatır, **10 olgu** ve
  **7 eksen** açık kalır.
- Politika düzeyinde de bir açık yüzey vardır: 36 erişim çiftinden **8'i** gerekliyken politika
  yokken **28**, kaba politikada **10**, dar politikada **1** fazla izin kalır; üçünde de eksik
  izin sıfırdır.
- Politika denetim kipinde toplanan reddedişlerden yazılır; denetim kipinde `politika-kurallari`
  kapanmaz ve açık yüzey **10 yerine 11 olgudur**. Politikayı kapatmanın ölçüdeki karşılığı
  **28 fazla izindir**.

#### Sonraki Adım

Dört ders dört düzenek ailesini ayrı ayrı ölçtü: ad alanı görünürlüğü, denetim grubu tüketimi,
yetenek kırpma ayrıcalığı, zorunlu etiket erişimi daralttı. Gerçek bir sistemde bunlar tek tek
açılmaz; bir çalışma zamanı hepsini tek bir tanımdan okuyup aynı anda uygular. Sonraki ders o
birleştirmeyi ölçer: yaygın olarak kullanılan altı düzenekli bir demet ile sıkı sekiz düzenekli
bir demeti yan yana koyar, iki düzenek eklemenin yüzeyi kaç olgu daralttığını sayar ve açık
eksenin neden yedide durduğunu gösterir. Orada görülecek olan sayı beklenenden küçüktür.

### Konteyner Çalışma Zamanı

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/konteyner-calisma-zamani

Yaygın altı düzenekli demet 12, sıkı sekiz düzenekli demet 10 olgu bırakıyor: iki düzenek eklemek yüzeyi yalnız 2 olgu daraltıyor ve açık eksen dördüncü düzenekten sonra 7'de duruyor.

Dört ders dört düzenek ailesini tek tek ölçtü: ad alanı görünürlüğü, denetim grubu tüketimi,
yetenek kırpma ayrıcalığı, zorunlu etiket erişimi daralttı. Her biri kendi ekseninde bir şey açık
bıraktı ve her birinin yanına bir daraltma yolu yazıldı. Gerçek bir sistemde ise bu düzenekler
tek tek açılmaz. Bir program bir tanım dosyası okur, dosyada yazan bütün düzenekleri doğru
sırayla uygular ve süreci başlatır. O programın adı **konteyner çalışma zamanıdır**.

Bu ders çalışma zamanını bir düzenek **demeti** olarak ele alır ve tek soruyu sorar: düzenek
eklemek yüzeyi ne kadar daraltıyor. Konteyner imajı, katman modeli, yerleşim, ölçekleme ve
orkestrasyon DevOps müfredatının Konteynerler ve Konteyner Orkestrasyonu kurslarında ölçüldü;
tekrarlanmaz. Buradaki konu yalnız **çekirdeğin sunduğu parçalar** ve bir çalışma zamanının
onları nasıl bir araya getirdiğidir.

#### Çalışma Zamanı Ne Yapar

Çalışma zamanı bir dizin ile bir tanım dosyasından oluşan **demeti** girdi alır. Dizin sürecin
kök dosya ağacıdır; tanım dosyası hangi düzeneklerin hangi ayarlarla açılacağını yazar. Çalışma
zamanı bu dosyayı yorumlar, çekirdek çağrılarına çevirir ve süreci başlatır. Yaptığı iş bundan
ibarettir: yeni bir izolasyon türü icat etmez, var olanları sırayla uygular.

```text
# ornek calisma zamani tanimi (kisaltilmis , alan adlari ornektir)
# — calistirilmamistir
surec:
  komut: /usr/local/bin/olcum-toplayici
  kimlik: 10001
  yetenek-tavani: [CAP_NET_BIND_SERVICE]
  yeni-ayricalik-yok: evet
  erisim-etiketi: sistem_u:sistem_r:olcum_t:s0
kok:
  yol: kok-agaci
  salt-okunur: evet
takmalar:
  - hedef: /veri/olcum
    secenekler: [rw, nosuid, nodev, noexec]
ad-alanlari: [surec, takma, ag, makine, kullanici, iletisim, denetim-grubu]
kimlik-eslemesi:
  - icerideki: 0
    disaridaki: 100000
    boy: 65536
denetim-grubu:
  yol: /olcum.slice/olcum-toplayici
  islemci-kotasi: 20000/100000
  bellek-tavani: 536870912
```

Tanımdaki her satır önceki dört dersten birine karşılık geliyor. Alan adları belirtime göre
değişir ve döküm çalıştırılmamıştır; buradan hiçbir sayı iddiası çıkmaz.

**Sıra bağlayıcıdır** ve yanlış sıra sessiz bir açık bırakır. Kullanıcı ad alanı en başta
açılır, çünkü yetkisiz bir kullanıcının öteki türleri açabilmesini sağlayan tek tür odur ve
kimlik eşlemesi kapanmadan yazılmalıdır. Denetim grubu süreç başlatılmadan önce hazırlanır,
yoksa ilk saniyeler sınırsız geçer. Kök ağacı, süreç kendi takma ad alanına geçtikten **sonra**
değiştirilir; önce değiştirilirse makinenin takma listesi kirlenir. Yetenek kırpma ile yeni
ayrıcalık yok bayrağı ise en sona, program değiştirmeden hemen öncesine bırakılır; erken
yapılırsa hazırlık adımları başarısız olur, geç yapılırsa kırpma hiç uygulanmaz.

```text
# ornek dokum — calistirilmamistir
$ calisma-zamani create olcum-01 --bundle ./demet
$ calisma-zamani start  olcum-01
$ calisma-zamani state  olcum-01
$ calisma-zamani kill   olcum-01 TERM
$ calisma-zamani delete olcum-01
```

Yaşam döngüsü beş adımdır ve **oluşturma ile başlatma ayrıdır**. Oluşturma bütün düzenekleri
kurar ve süreci başlatmadan bekletir; başlatma yalnız beklemeyi sonlandırır. Ayrımın nedeni
işletmedir: bütün izolasyon kurulduktan sonra, süreç henüz tek bir komut çalıştırmadan
yapılandırmanın doğrulanmasına imkân verir.

Çalışma zamanının kendisi de bir süreçtir ve düzenekleri kurabilmek için yetkiye ihtiyaç duyar.
İki işletim biçimi vardır. Yetkili biçimde çalışma zamanı ayrıcalıklı bir hizmet olarak koşar,
bütün düzenekleri doğrudan açar ve kurduğu izolasyonun dışında kalır. Yetkisiz biçimde ise
zincir kullanıcı ad alanıyla başlar: çalışma zamanı önce bir kullanıcı ad alanı açar, kimlik
eşlemesini yazar ve öteki düzenekleri o ad alanının içinden kurar. İkinci biçim bu kursun
ölçüsünde ek bir olgu kapatmaz, ama bir kusur durumunda etkinin kapsamını daraltır — çünkü
çalışma zamanının kendi yetkileri de eşlemenin sınırındadır.

Demetin dışında kalan bir sınır da açıkça yazılmalıdır. Bütün bu düzenekler **tek bir
çekirdeği** paylaşır; çalışma zamanı süreçleri birbirinden ayırır, çekirdeği çoğaltmaz. Ayrı
bir çekirdek isteniyorsa gereken şey başka bir teknoloji sınıfıdır ve bu kursun konusu değildir.
Ölçünün son bölümünde çekirdek ekseninin neden kapanmadığı da tam bu paylaşımdan gelir.

#### İki Demet

- **IZ31** — **Yaygın demet altı düzenektir**: süreç, takma, ağ ve makine ad alanları, denetim
  grubu, yetenek kırpma. Kullanıcı ad alanı ve zorunlu etiket bu demette yoktur.
- **IZ32** — **Sıkı demet sekiz düzenektir**: yaygın demete kullanıcı ad alanı ve zorunlu
  etiket eklenir.
- **IZ33** — Demetler yalnız düzenek listesi bakımından farklıdır; olgu kümesi, eksenler ve
  açık kalan olgular ortak tanımdakiyle aynıdır.
- **IZ34** — Model sekiz düzenek sayar. Gerçek bir çalışma zamanının uyguladığı sistem çağrısı
  süzgeci ve süreç dosya sisteminin bazı yollarını maskeleme adımı **modelde düzenek olarak
  sayılmaz**; ikisi de aşağıda daraltma yolu olarak yazılır.

```python
"""Ortak tanim: izolasyon bir suzgectir. Bir konteyner calisma zamani
duzeneklerin bir DEMETIDIR. Olculen sey ACIK KALAN YUZEY."""

OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": "surec", "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": "takma", "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": "ag", "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": "kullanici", "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": "makine", "acik_kalan": []},
    "denetim-grubu":      {"eksen": "kaynak", "acik_kalan": ["islemci-sayisi"]},
    "yetenek-kirpma":       {"eksen": "yetki", "acik_kalan": ["dosya-yetkileri"]},
    "zorunlu-etiket":     {"eksen": "etiket", "acik_kalan": ["erisim-etiketi"]},
}
YAYGIN = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani",
          "makine-ad-alani", "denetim-grubu", "yetenek-kirpma"]
SIKI = YAYGIN + ["kullanici-ad-alani", "zorunlu-etiket"]


def gorunen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        kapali |= {o for o, e in olgular if e == v["eksen"]}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def acik_eksen(duzenekler, olgular=None):
    olgular = OLGULAR if olgular is None else olgular
    g = set(gorunen(duzenekler, olgular))
    return sorted({e for o, e in olgular if o in g})


print("KAHIN  olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}))
print()
print("demet     duzenek  kapatti  gorunen  acik eksen")
for ad, d in (("yalin", []), ("yaygin", YAYGIN), ("siki", SIKI)):
    g = gorunen(d)
    print(f"  {ad:8s} {len(d):7d}  {len(OLGULAR) - len(g):7d}"
          f"  {len(g):7d}  {len(acik_eksen(d)):10d}")
print()
print("iki demetin farki:", [d for d in SIKI if d not in YAYGIN])
print("fark ettigi olgu :", sorted(set(gorunen(YAYGIN)) - set(gorunen(SIKI))))
print("iki duzenek yuzeyi", len(gorunen(YAYGIN)) - len(gorunen(SIKI)),
      "olgu daraltiyor")
```

```
KAHIN  olgu: 24 | eksen: 9

demet     duzenek  kapatti  gorunen  acik eksen
  yalin          0        0       24           9
  yaygin         6       12       12           7
  siki           8       14       10           7

iki demetin farki: ['kullanici-ad-alani', 'zorunlu-etiket']
fark ettigi olgu : ['kullanici-kimlik-esleme', 'politika-kurallari']
iki duzenek yuzeyi 2 olgu daraltiyor
```

Üç sayı yan yana duruyor. **Kâhin:** 24 olgu, 9 eksen. **İzolasyon:** yaygın demet **12 olgu**,
sıkı demet **14 olgu** kapatıyor. **Açık kalan yüzey:** yaygın demette **12 olgu**, sıkı demette
**10 olgu**; ikisinde de **7 eksen**.

Bu, kursun ikinci iddiasının en güçlü ödemesidir. Yaygın demetten sıkı demete geçmek düzenek
sayısını üçte bir büyütüyor, iki ayrı mekanizma ekliyor, yapılandırmayı ve işletim yükünü
belirgin biçimde artırıyor — ve yüzeyi yalnız **2 olgu** daraltıyor. Daralan olgular
`kullanici-kimlik-esleme` ile `politika-kurallari`dır. Açık eksen ise hiç değişmiyor.

Sonuç, iki düzeneğin değersiz olduğu anlamına gelmez ve öyle okunmamalıdır. Kullanıcı ad alanı
kimlik eşlemesini kapatarak yetkilerin kapsamını daraltır; zorunlu etiket, önceki derste
sayıldığı gibi 36 erişim çiftinden 28'ini politikaya bağlar. Ölçü bunları saymıyor; ölçü yalnız
**görünürlüğü** sayıyor. Söylediği şey dar ve nettir: **görünürlük tarafında ikisinin kazancı
iki olgudur.**

Ölçünün pratikteki kullanımı da buradan çıkar. Bir demeti sıkılaştırmaya karar verirken sorulacak
soru "kaç düzenek açtım" değil, "hangi olgu hâlâ görünüyor" olmalıdır. Birinci soru
yapılandırmanın uzunluğunu ödüllendirir; ikincisi, kazancın nerede bittiğini gösterir. İki
demetin arasındaki fark yazıya döküldüğünde yalnız iki satırdır ve bu iki satır, sıkılaştırmanın
maliyetiyle birlikte tartılabilir hâle gelir.

#### Düzenek Eklendikçe

Demetleri uçtan uca karşılaştırmak, kazancın nerede biriktiğini göstermez. Aynı sıkı demet
düzenek düzenek kurulduğunda eğri okunabilir hâle gelir.

- **IZ35** — Ekleme sırası sıkı demetin listesindeki sıradır.
- **IZ36** — Süpürmede eklenen olgu `cekirdek-derleme-secenekleri`, çekirdek eksenine aittir;
  çıkarılan `saat` de aynı eksendedir.

```python
# --- Onceki blogun uzerine kurulur: OLGULAR, DUZENEK, YAYGIN, SIKI,
# gorunen ve acik_eksen oradan gelir.
print("duzenek eklendikce (siki demet sirasiyla)")
for i in range(len(SIKI) + 1):
    ekle = SIKI[i - 1] if i else "-"
    print(f"  {i} duzenek ({ekle:18s}) gorunen {len(gorunen(SIKI[:i])):2d}"
          f"  acik eksen {len(acik_eksen(SIKI[:i]))}")
print()
g = set(gorunen(SIKI))
print("siki demetten sonra acik kalan", len(g), "olgu (eksene gore)")
for e in acik_eksen(SIKI):
    o = [x for x, ek in OLGULAR if ek == e and x in g]
    print(f"  {e:10s} {len(o)}  {', '.join(o)}")
print()
EK = OLGULAR + [("cekirdek-derleme-secenekleri", "cekirdek")]
EKSIK = [(o, e) for o, e in OLGULAR if o != "saat"]
print("olgu kumesi supurmesi (siki demet uygulanmis halde)")
print("kume                            olgu  eksen  gorunen  acik eksen")
for ad, kume in (("temel", OLGULAR), ("+cekirdek-derleme-secenekleri", EK),
                 ("-saat", EKSIK)):
    print(f"  {ad:29s} {len(kume):4d}  {len({x for _, x in kume}):5d}"
          f"  {len(gorunen(SIKI, kume)):7d}  {len(acik_eksen(SIKI, kume)):10d}")
```

```
duzenek eklendikce (siki demet sirasiyla)
  0 duzenek (-                 ) gorunen 24  acik eksen 9
  1 duzenek (surec-ad-alani    ) gorunen 22  acik eksen 9
  2 duzenek (takma-ad-alani    ) gorunen 20  acik eksen 9
  3 duzenek (ag-ad-alani       ) gorunen 17  acik eksen 8
  4 duzenek (makine-ad-alani   ) gorunen 16  acik eksen 7
  5 duzenek (denetim-grubu     ) gorunen 13  acik eksen 7
  6 duzenek (yetenek-kirpma    ) gorunen 12  acik eksen 7
  7 duzenek (kullanici-ad-alani) gorunen 11  acik eksen 7
  8 duzenek (zorunlu-etiket    ) gorunen 10  acik eksen 7

siki demetten sonra acik kalan 10 olgu (eksene gore)
  cekirdek   4  cekirdek-surumu, cekirdek-ayarlari, sistem-yuku, saat
  etiket     1  erisim-etiketi
  kaynak     1  islemci-sayisi
  kullanici  1  dosya-sahipligi
  surec      1  kendi-surec-numarasi
  takma      1  kok-dosya-agaci
  yetki      1  dosya-yetkileri

olgu kumesi supurmesi (siki demet uygulanmis halde)
kume                            olgu  eksen  gorunen  acik eksen
  temel                           24      9       10           7
  +cekirdek-derleme-secenekleri   25      9       11           7
  -saat                           23      9        9           7
```

Eğrinin biçimi tek başına bir sonuçtur. İlk dört düzenek görünen olguyu 24'ten **16'ya**
indiriyor: sekiz olgu. Son dört düzenek 16'dan **10'a** indiriyor: altı olgu. Açık eksen ise
**dördüncü düzenekten sonra bir daha hiç değişmiyor** — beşinciden sekizinciye kadar dört
düzenek eklendi ve eksen sayısı 7'de kaldı.

Nedeni son tabloda yazıyor. Sıkı demetten sonra açık kalan **10 olgunun yedisi**, yedi ayrı
eksende **birer tanedir**. Her düzenek kendi ekseninde bir olguyu açık bıraktığı için, o eksen
listeden hiçbir zaman düşmez. Yedi eksende **her zaman bir şey açık kalıyor** ve bu, düzenek
eklemekle kapanmıyor. Kursun ikinci iddiası tam olarak budur: **düzenek eklemek olguyu azaltır
ama ekseni azaltmaz.**

Süpürme aynı yapıyı doğruluyor ve önceki derslerden farklı bir sonuç veriyor. Çekirdek eksenine
yirmi beşinci olgu eklendiğinde yüzey 10'dan **11'e** çıkıyor: ekleme birebir yüzeye yansıyor.
Bir olgu çıkarıldığında yüzey **9'a** iniyor, ama açık eksen **7'de** kalıyor. Fark nereden
geliyor — önceki derslerde eklenen olgu kapatılmış bir eksene düşüyordu ve düzenek onu da
kapatıyordu; burada eksen kapatılmamıştır.

#### Kapanmayan Eksen: Çekirdek

Açık kalan 10 olgunun **dördü tek bir eksende** toplanıyor ve o eksenin adı çekirdektir:
çekirdek sürümü, çekirdek ayarları, sistem yükü ve saat. Bunlar sıkı demetteki açık yüzeyin
en büyük tek bloğudur ve nedeni modelin bir eksikliği değildir — **çekirdek eksenini kapatan
hiçbir düzenek yoktur.** Ad alanı ikinci bir çekirdek üretmez; makinede tek bir çekirdek vardır
ve her süreç onunla konuşur. Bu, izolasyonun en temel sınırıdır ve yapılandırmayla aşılmaz.

Buna karşılık eksen daraltılabilir ve üç yol vardır. Birincisi, çekirdek bilgisini yayınlayan
yolların **maskelenmesi ya da salt okunur** yapılmasıdır: sürecin kök ağacında bu yollar ya hiç
görünmez ya da yazılamaz. Bir çalışma zamanının öntanımlı olarak yaptığı iş budur ve modelde
düzenek olarak sayılmayan adımlardan biridir. İkincisi, ad alanına göre ayrılabilen çekirdek
ayarlarının ayrı ayrı verilmesidir; ayarların hepsi ayrılamaz, ama ayrılabilenler makinenin
değerini göstermeyi bırakır. Üçüncüsü, sürecin çekirdeğe yapabileceği çağrı kümesini bir
**sistem çağrısı süzgeciyle** daraltmaktır: süzgeç bir olguyu görünmez kılmaz, ama görünen
olgunun karşılığı olan işlemleri azaltır. Üçü de yüzeyi sıfırlamaz; ölçünün dürüst okuması
şudur: **bu eksende bir şey her zaman görülecektir ve tasarım buna göre yapılır.**

Kalan altı olgu için daraltma yolları önceki derslerde yazıldı: kök ağacını küçültmek ve salt
okunur takmak, kotayı okuyup havuz boyutlandırmasını ona bağlamak, sahiplik bayraklarını
temizlemek ve dosya sistemini `nosuid` ile takmak, sahipliği eşlenen aralığa normalleştirmek,
erişim etiketini gizli bilgi taşımayacak biçimde adlandırmak. Beşi de aynı kalıptadır: açık
kalan olgu süreçte değil, **sürecin dünyasında** daraltılır.

#### Özet

- Konteyner çalışma zamanı yeni bir izolasyon türü icat etmez; bir tanım dosyasındaki düzenekleri
  **doğru sırayla** uygulayan bir programdır. Sıra bağlayıcıdır ve yanlış sıra sessiz bir açık
  bırakır.
- Yaygın altı düzenekli demet **12 olgu**, sıkı sekiz düzenekli demet **10 olgu** açık bırakır:
  iki düzenek eklemek yüzeyi yalnız **2 olgu** daraltır ve daralan olgular
  `kullanici-kimlik-esleme` ile `politika-kurallari`dır.
- Açık eksen **dördüncü düzenekten sonra 7'de durur** ve dört düzenek daha eklendiğinde hiç
  değişmez; düzenek eklemek olguyu azaltır, ekseni azaltmaz.
- Sıkı demetten sonra açık kalan 10 olgunun **yedisi yedi ayrı eksende birer tanedir**; kalan
  **dördü çekirdek eksenindedir** ve bu ekseni kapatan hiçbir düzenek yoktur.
- Çekirdek ekseni kapatılamaz ama daraltılır: bilgi yayan yolların maskelenmesi, ad alanına
  ayrılabilen ayarların ayrı verilmesi ve sistem çağrısı süzgeci. Modeldeki bütün sayılar kurgu
  üzerinden tam sayımdır, ölçüm değildir.

#### Sonraki Adım

Bu konu izolasyonun kapatabildiğini ve kapatamadığını saydı; sıkı demet 24 olgunun 14'ünü
kapattı, 10'unu açık bıraktı. Kapanan 14 olgunun gerçekten kapandığı ise henüz sınanmadı.
Kursun ikinci konusu tam bu soruyu sorar ve yanıtı birinci konunun tersi yöndedir: bir sürecin
çekirdekle konuşmasını okuyan, işlemci kullanımını örnekleyen, çekirdek içinde olay yakalayan
ve çöken sürecin ardından dökümüne bakan araçlar, izolasyonun kapattığı olguların bir kısmını
**geri getirir**. Sonraki ders bunların ilkini, sistem çağrısı izlemeyi ölçer: kaç olgunun geri
geldiğini ve koşuma eklediği bedeli sayar. Kursun iki konusu birbirinin karşıtıdır ve bu açıkça
yazılır — **gözlem izolasyonu deler.**

## Gözlem ve Ayıklama

Sistem çağrısı izleme, örnekleme tabanlı profilleme, çekirdek içi izleme ve çekirdek dökümü çözümlemesi; her kanalın geri getirdiği olgu ve ödettiği bedel.

### Sistem Çağrısı İzleme

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/sistem-cagrisi-izleme

Gözlemin izolasyonu delmesinin ilk ölçüsü: sıkı demetin kapattığı 14 olgudan 2'si sistem çağrısı izlemesiyle geri geliyor, açık yüzey 10'dan 12'ye çıkıyor ve koşum yüzde 34 yavaşlıyor; kanalın gösterdiği beş olgunun üçü zaten görünürdü.

İzolasyon konusu sekiz düzenekli sıkı bir demetle kapandı: bir sürecin 24 gözlenebilir
olgusundan 14'ü kapanmış, 10'u görünür kalmıştı ve dokuz eksenin yedisinde hâlâ bir şey
açıktı. Oradaki soru "ne kadarını kapattık" değil, "ne açık kaldı" idi. Bu konu aynı soruyu
ters yönden sorar: kapatılan 14 olgunun kaçı, sistemi anlamak için kullandığımız araçlar
yüzünden geri gelir.

Sorunun tersliği bir söz oyunu değildir. Gözlem araçları izolasyonu delmek için yazılmadı;
bir sürecin ne yaptığını göstermek için yazıldı. Ne var ki bir sürecin ne yaptığını
göstermek, tam olarak izolasyonun gizlemeye çalıştığı şeyi göstermek anlamına gelir. Kursun
iki konusu bu yüzden birbirinin karşıtıdır ve bu ders karşıtlığın en pahalı örneğiyle açar:
sistem çağrısı izlemesi.

#### Kanal ile Süzgecin Karşıtlığı

Ortak tanımın iki nesnesi vardır. **İzolasyon düzeneği bir süzgeçtir:** belirli bir ekseni
kapatır ve o eksende genellikle bir olguyu açık bırakır. **Gözlem kanalı bir kanaldır:**
kapatılan olguların bir kısmını geri getirir. **Kâhin** sürecin bütün olgularıdır; kurguyu
biz yazdığımız için biliniyor. Ölçülen şey **açık kalan yüzeydir** — görünen olgularla geri
gelen olguların birleşimi.

Bu dersin varsayımları şunlardır. Kanal, izolasyon kurulduktan sonra ve demetin **dışından**
çalışır; izleyen taraf izlenen tarafın kısıtlarına bağlı değildir (**GZ1**). Kanal yalnız
kendi listesindeki olguları gösterir, yeni olgu üretmez (**GZ2**). Bir olgu geri geldiğinde
tam olarak geri gelir; kısmi görünürlük yoktur (**GZ3**). Sistem çağrısı izlemesinin
gösterdiği beş olgu koddaki listedir (**GZ4**). Kanal bedelleri **modeldeki yüzdelerdir,
gerçek ölçüm değildir**; taban koşum 1000 zaman birimidir (**GZ5**). Bedel koşum boyunca
sabittir, izlenen çağrı sayısıyla değişmez (**GZ6**). İzleme, süreç **çalışırken** açıktır;
koşum bittikten sonra bakan bir kanal değildir (**GZ7**).

Araç tarafında görülen şey, sürecin çekirdekten istediği hizmetlerin sırasıdır: hangi dosya
açıldı, hangi meta veri okundu, hangi saat sorgulandı. Sistem çağrısının kendisi İşletim
Sistemi Kavramları kursunda mekanizma olarak kurulmuştu ve burada tekrarlanmaz.

```text
# ornek dokum , calistirilmis degildir
$ strace -f -e trace=file,clock -p <surec-no>
openat(AT_FDCWD, "/etc/<ayar-dosyasi>", O_RDONLY)       = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_uid=0}, 0)  = 0
openat(AT_FDCWD, "/proc/self/mountinfo", O_RDONLY)      = 4
clock_gettime(CLOCK_REALTIME, {tv_sec=<saniye>})        = 0
```

Bu döküm çalıştırılmadı ve içindeki değerler kurgudur. Ölçülen şey dökümün kendisi değil,
dökümden **hangi olgunun okunabildiğidir**; onu aşağıdaki kod sayar.

```python
# M03/K05 ortak tanim -- yalniz bu dersin kullandigi parcalar.
# Izolasyon bir suzgectir: eksen kapatir , her eksende bir sey acik birakir.
# Gozlem kanali bir kanaldir: kapatilan olgularin bir kismini GERI getirir.
OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": ["surec"], "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": ["takma"], "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": ["ag"], "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": ["kullanici"], "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": ["makine"], "acik_kalan": []},
    "denetim-grubu":      {"eksen": ["kaynak"], "acik_kalan": ["islemci-sayisi"]},
    "yetenek-kirpma":       {"eksen": ["yetki"], "acik_kalan": ["dosya-yetkileri"]},
    "zorunlu-etiket":     {"eksen": ["etiket"], "acik_kalan": ["erisim-etiketi"]},
}
YAYGIN_DEMET = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani",
                "makine-ad-alani", "denetim-grubu", "yetenek-kirpma"]
SIKI_DEMET = YAYGIN_DEMET + ["kullanici-ad-alani", "zorunlu-etiket"]

# GZ4: sistem cagrisi izleme kanalinin gosterdigi olgular
IZLEME = ["kok-dosya-agaci", "oteki-takmalar", "dosya-sahipligi", "yetenek-kumesi", "saat"]
# GZ5: kanal bedelleri MODELDEKI yuzdelerdir , gercek olcum degildir
KANAL_BEDELI = {"sistem-cagrisi-izleme": 34, "ornekleme-profili": 3,
                "cekirdek-ici-izleme": 6, "cekirdek-dokumu": 0}
TABAN_SURE = 1000


def gorunen(duzenekler, olgular=OLGULAR):
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        for e in v["eksen"]:
            kapali |= {o for o, x in olgular if x == e}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def geri_gelen(duzenekler, kanal, olgular=OLGULAR):
    g = set(gorunen(duzenekler, olgular))
    kapali = {o for o, _ in olgular} - g
    return sorted(set(kanal) & kapali)


def yuzey(duzenekler, kanal=(), olgular=OLGULAR):
    g = set(gorunen(duzenekler, olgular))
    geri = set(geri_gelen(duzenekler, kanal, olgular))
    return {"gorunen": len(g), "geri_gelen": len(geri), "acik_yuzey": len(g | geri),
            "acik_eksen": len({e for o, e in olgular if o in (g | geri)})}


print("olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}))
g = set(gorunen(SIKI_DEMET))
print("siki demet: duzenek", len(SIKI_DEMET), "| gorunen", len(g),
      "| kapattigi", len(OLGULAR) - len(g))
print()
print("kanalin gosterdigi olgu     eksen      siki demette durumu")
for o in IZLEME:
    e = dict(OLGULAR)[o]
    print(f"  {o:26s}{e:11s}{'zaten goruluyor' if o in g else 'GERI GELIYOR'}")
print()
print("demet          gorunen  geri gelen  acik yuzey  acik eksen")
for ad, d in (("yalin", []), ("yaygin", YAYGIN_DEMET), ("siki", SIKI_DEMET)):
    y = yuzey(d, IZLEME)
    print(f"  {ad:12s} {y['gorunen']:7d}  {y['geri_gelen']:10d}"
          f"  {y['acik_yuzey']:10d}  {y['acik_eksen']:10d}")
print()
yuz = KANAL_BEDELI["sistem-cagrisi-izleme"]
ys = yuzey(SIKI_DEMET, IZLEME)
print("bedel: taban", TABAN_SURE, "-> kosum", TABAN_SURE * (100 + yuz) // 100,
      "| yuzde", yuz)
print("geri gelen olgu basina bedel:", round(yuz / ys["geri_gelen"], 2), "yuzde puan")
print("kanal bedelleri (modeldeki yuzdeler , olcum degil):", KANAL_BEDELI)
print()
print("OLGU KUMESI SUPURMESI -- cikarma (siki demet + izleme kanali)")
geri_dusen, gorunen_dusen = [], []
for o, _ in OLGULAR:
    y = yuzey(SIKI_DEMET, IZLEME, [x for x in OLGULAR if x[0] != o])
    if y["geri_gelen"] < ys["geri_gelen"]:
        geri_dusen.append(o)
    elif y["gorunen"] < ys["gorunen"]:
        gorunen_dusen.append(o)
print("  taban acik yuzey", ys["acik_yuzey"],
      "| degistiren", len(geri_dusen) + len(gorunen_dusen),
      "| degistirmeyen", len(OLGULAR) - len(geri_dusen) - len(gorunen_dusen))
print("    geri geleni dusuren:", ", ".join(geri_dusen), "-> geri 1 , acik yuzey 11")
print("    goruneni dusuren   :", len(gorunen_dusen), "olgu -> gorunen 9 , acik yuzey 11")
print()
print("OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)")
for e in sorted({e for _, e in OLGULAR}):
    y = yuzey(SIKI_DEMET, IZLEME, OLGULAR + [("yeni-olgu", e)])
    print(f"  +{e:10s} olgu 25  gorunen {y['gorunen']:2d}  geri {y['geri_gelen']}"
          f"  acik yuzey {y['acik_yuzey']:2d}")
```

```
olgu: 24 | eksen: 9
siki demet: duzenek 8 | gorunen 10 | kapattigi 14

kanalin gosterdigi olgu     eksen      siki demette durumu
  kok-dosya-agaci           takma      zaten goruluyor
  oteki-takmalar            takma      GERI GELIYOR
  dosya-sahipligi           kullanici  zaten goruluyor
  yetenek-kumesi            yetki      GERI GELIYOR
  saat                      cekirdek   zaten goruluyor

demet          gorunen  geri gelen  acik yuzey  acik eksen
  yalin             24           0          24           9
  yaygin            12           2          14           7
  siki              10           2          12           7

bedel: taban 1000 -> kosum 1340 | yuzde 34
geri gelen olgu basina bedel: 17.0 yuzde puan
kanal bedelleri (modeldeki yuzdeler , olcum degil): {'sistem-cagrisi-izleme': 34, 'ornekleme-profili': 3, 'cekirdek-ici-izleme': 6, 'cekirdek-dokumu': 0}

OLGU KUMESI SUPURMESI -- cikarma (siki demet + izleme kanali)
  taban acik yuzey 12 | degistiren 12 | degistirmeyen 12
    geri geleni dusuren: oteki-takmalar, yetenek-kumesi -> geri 1 , acik yuzey 11
    goruneni dusuren   : 10 olgu -> gorunen 9 , acik yuzey 11

OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)
  +ag         olgu 25  gorunen 10  geri 2  acik yuzey 12
  +cekirdek   olgu 25  gorunen 11  geri 2  acik yuzey 13
  +etiket     olgu 25  gorunen 10  geri 2  acik yuzey 12
  +kaynak     olgu 25  gorunen 10  geri 2  acik yuzey 12
  +kullanici  olgu 25  gorunen 10  geri 2  acik yuzey 12
  +makine     olgu 25  gorunen 10  geri 2  acik yuzey 12
  +surec      olgu 25  gorunen 10  geri 2  acik yuzey 12
  +takma      olgu 25  gorunen 10  geri 2  acik yuzey 12
  +yetki      olgu 25  gorunen 10  geri 2  acik yuzey 12
```

#### Kâhin, Kanal, Geri Gelen Olgu

Üç sayı yan yana durur. **Kâhin:** sürecin 24 olgusu, dokuz eksende. **Kanal:** sistem
çağrısı izlemesi beş olgu gösteriyor. **Geri gelen olgu ve açık yüzey:** bu beş olgunun
**2'si** sıkı demetin kapattığı olgulardır ve geri gelir; açık yüzey **10'dan 12'ye** çıkar.

Geri gelen ikili `oteki-takmalar` ve `yetenek-kumesi`dir. Birincisi takma ad alanının
kapattığı bir olgudur: kök dosya ağacı değiştirilmiş olsa bile, sürecin hangi takma
noktalarını okuduğu çağrı dizisinde görünür. İkincisi yetenek kırpmanın kapattığı olgudur:
sürecin hangi yeteneği kullanmaya çalıştığı, çağrının başarısız dönüşünde bile okunur. İkisi
de düzeneklerin "kapattı" dediği olgulardır ve kanal ikisini de geri açar.

Açık **eksen** sayısı ise 7'de kalır. Bunun nedeni, geri gelen iki olgunun eksenlerinde
zaten açık bir şey olmasıdır: takma ekseninde `kok-dosya-agaci`, yetenek ekseninde
`dosya-yetkileri` sıkı demette de görünüyordu. Yani bu kanal **yeni eksen açmıyor**, açık
eksenleri **kalınlaştırıyor**. Ayrım önemlidir: eksen bir izolasyon kararının konusudur,
olgu ise o kararın kalitesinin ölçüsüdür.

#### Beş Olgu Gösteriliyor, İkisi Yeni

Kanalın gösterdiği beş olgunun **üçü** — `kok-dosya-agaci`, `dosya-sahipligi`, `saat` —
sıkı demet altında **zaten görünüyordu**. İzleme bunları göstermekle yeni bir şey açmaz;
yalnız var olan görünürlüğü tekrarlar.

Buradan çıkan okuma kursun ikinci iddiasının bu konudaki karşılığıdır: **bir aracın çok şey
göstermesi, çok şey geri getirmesi anlamına gelmez.** Sistem çağrısı izlemesi dört kanalın
en ayrıntılısıdır; her çağrıyı, argümanlarını ve dönüş değerini verir. Buna karşın geri
getirdiği olgu sayısı **2'dir** ve bu, dört kanalın içinde en yüksek sayı değildir. Aracın
ürettiği satır sayısıyla izolasyona açtığı gedik arasında doğru orantı yoktur.

Demet tablosu aynı şeyi başka bir yönden söyler. İzolasyon yokken kanal **0** olgu geri
getirir — geri getirecek kapalı olgu yoktur, 24 olgunun hepsi zaten görünür. Yaygın altı
düzenekli demette geri gelen **2**, sıkı sekiz düzenekli demette yine **2**'dir. Eklenen iki
düzenek bu kanalın gediğini **hiç** daraltmaz: kullanıcı ad alanı `dosya-sahipligi`ni açık
bırakıyor, zorunlu etiket ise bu kanalın listesinde olmayan bir olguyu kapatıyor. Sıkılaşan
izolasyon, kanalın açtığı yüzeyi kendiliğinden kapatmaz.

#### Bedel: Koşum Yüzde 34 Yavaşlıyor

Kanalın bedeli koşumu yavaşlatmasıdır. Modeldeki taban koşum 1000 zaman birimidir; izleme
açıkken **1340** olur, yani **yüzde 34**. Bu sayı ve öteki üç kanalın sayıları **modeldeki
yüzdelerdir, gerçek ölçüm değildir**; makineye, yüke ve izlenen çağrı türüne göre gerçek
değer başka çıkar. Modelde durmalarının nedeni büyüklük sırasını sabit tutmaktır.

Bedelin kaynağı yapısaldır. İzleme, izlenen sürecin her sistem çağrısında denetimi izleyen
tarafa geçirir; bir çağrı, birkaç bağlam değiştirmeye dönüşür. Bu yüzden bedel **çağrı
yoğunluğuyla** artar: hesap ağırlıklı bir koşum az etkilenir, dosya ve ağ ağırlıklı bir
koşum çok. Modelde bedel sabit alınmıştır (**GZ6**) ve gerçek sistemde bu varsayım kaba bir
yaklaşıklıktır.

Geri gelen olgu başına bedel **17,0 yüzde puandır**. Bu oran kursun geri kalanında
karşılaştırma birimi olacak; şimdilik tek başına anlamı, izlemenin **pahalı ve dar** bir
kanal olduğudur. Bedelin ikinci yüzü ölçünün dışında kalır: yavaşlayan bir süreç, zamana
duyarlı davranışını değiştirir. Zaman aşımları farklı yerlerde dolar, yarış durumları başka
sıraya girer. İzleme yalnız gözlemez, gözlediği şeyi **değiştirir**; aralıklı bir arıza
izleme açıkken kaybolabilir.

#### Olgu Kümesi Süpürmesi

Bu kursta ikinci tohum yoktur; yerine olgu kümesi süpürülür. Çıkarma süpürmesinde 24 olgu
tek tek listeden düşürülür. Sonuç: açık yüzeyi **12** olgu değiştiriyor, **12** olgu
değiştirmiyor. Değiştirenlerin yalnız **2'si** — `oteki-takmalar` ve `yetenek-kumesi` — geri
gelen sayısını düşürüyor; kalan 10'u zaten görünen olgulardır ve çıkarıldıklarında görüneni
düşürürler. Değiştirmeyen 12 olgu, sıkı demetin kapattığı ve bu kanalın listesinde olmayan
olgulardır.

Ekleme süpürmesi daha keskin bir şey söyler. Dokuz eksenin her birine birer yeni olgu
eklendiğinde açık yüzey **yalnız bir eksende** büyür: `cekirdek`. Nedeni doğrudan düzenek
tablosundadır — sekiz düzeneğin hiçbiri çekirdek eksenini kapatmıyor. Çekirdek sürümü,
çekirdek ayarları, sistem yükü ve saat, sıkı demet altında bile olduğu gibi görünür. Modelde
bu eksene eklenen her yeni olgu doğrudan açık yüzeye yazılır; öteki sekiz eksene eklenen
olgular kapalı kalır.

Bu sonuç ölçünün kurguya bağlı yerini de gösterir. Açık yüzeyin **büyüklüğü** seçilen 24
olguya bağlıdır ve başka bir liste başka bir sayı verirdi. Açık yüzeyin **duyarlılığı** ise
listeye değil, düzenek tablosuna bağlıdır: hangi eksenin kapatıcısı yoksa yüzey o eksende
büyür.

#### Yüzeyi Daraltmak

Bu ders bir gedik sayıyor, o gediğin nasıl kullanılacağını değil. Kursun sınırı bağlayıcıdır:
kaçış, yetki yükseltme ya da atlatma yordamı hiçbir derste yazılmaz. Sayılan her yüzeyin
yanında daraltma yolu yazılır ve bu kanalın daraltma yolları dörttür.

Birincisi izleme yeteneğinin kendisidir. Bir süreci izlemek ayrı bir yetenek gerektirir.
Aynı kullanıcı kimliği altındaki süreçlerde izlemeyi asıl kesen şey çekirdeğin
`ptrace_scope` ayarıdır; yetenek kırpma listesine bu yeteneğin eklenmesi ise farklı
kimlikler arasındaki izlemeyi keser.
İkincisi izleyicinin **konumudur**: izleyen taraf demetin dışındaysa (**GZ1**) sayılan gedik
açıktır, izleyici de aynı demetin içine alınırsa kanal demetin kısıtlarına bağlanır.
Üçüncüsü izleme çıktısının kendisidir; döküm bir dosyaya yazılıyorsa o dosya sürecin
gördüğü her yolu ve yetki denemesini taşır ve erişimi sınırlanmalıdır. Dördüncüsü
kapsamdır: izleme tanı süresince ve dar bir çağrı süzgeciyle açılır, sürekli açık bırakılmaz.

Dördü de bir şeyi ortaklaşa söyler. Kanal, izolasyonun bir kusuru değildir; **ayrı bir
erişim denetimi konusudur.** İzolasyon kararı ile gözlem kararı aynı yerde verilmediğinde,
ikinci karar birincisini sessizce geri alır. En az yetki ilkesinin kendisi Siber Güvenlik
müfredatında kurulmuştu ve burada tekrarlanmaz; buradaki karşılığı tek cümledir: bir demeti
izleyebilen taraf, o demetin kapattığı olguların bir kısmını görebilen taraftır ve bu
görünürlük demetin yapılandırmasında değil, izleyicinin yetkisinde yazılıdır.

#### Özet

- Sıkı demet 24 olgunun 14'ünü kapatıyor, 10'u görünür bırakıyor; sistem çağrısı izlemesi
  kapatılanların **2'sini** geri getiriyor ve açık yüzey **12** oluyor.
- Kanalın gösterdiği beş olgunun **üçü** zaten görünüyordu: çok gösteren araç çok geri
  getiren araç değildir.
- Geri gelen ikili `oteki-takmalar` ve `yetenek-kumesi`dir; açık eksen 7'de kalır, yani kanal
  yeni eksen açmaz, açık eksenleri kalınlaştırır.
- Bedel **yüzde 34** (taban 1000, koşum 1340) ve geri gelen olgu başına **17,0 yüzde
  puandır**; bu yüzdeler modeldeki değerlerdir, gerçek ölçüm değildir.
- Süpürme: açık yüzeyi 24 olgunun 12'si değiştiriyor; eklenen yeni olgu yüzeyi yalnız
  **çekirdek** ekseninde büyütüyor, çünkü o ekseni kapatan düzenek yok.
- Daraltma: izleme yeteneğinin kırpılması, izleyicinin demet içine alınması, döküm dosyasının
  erişim denetimi ve dar kapsam.

#### Sonraki Adım

Bu kanal pahalıydı ve dardı. Sıradaki kanal tam tersi bir yerde durur: örnekleme tabanlı
işlemci profili koşumu **yüzde 3** yavaşlatır, yani izlemenin onda birinden azına mal
olur. Sonraki ders bu ucuz kanalın kaç olgu geri getirdiğini sayar — sonuç **1'dir** ve bu,
denetim grubunun kapattığı bir olgudur. Ucuzluğun tek başına bir erdem olmadığı, örnek
sayısını büyütmenin geri gelen olguyu hiç değiştirmediği tabloda görünecek.

### Başarım Profilleme

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/basarim-profilleme

Koşum sırasında bedel ödeyen kanalların en ucuzu ve dört kanalın en darı: örnekleme tabanlı işlemci profili sıkı demetin kapattığı 14 olgudan yalnız 1'ini geri getiriyor, açık yüzey 11 oluyor ve koşum yüzde 3 yavaşlıyor; örnek sayısı bin kat büyüdüğünde geri gelen olgu değişmiyor.

Önceki ders pahalı bir kanal ölçtü: sistem çağrısı izlemesi sıkı demetin kapattığı 14
olgudan 2'sini geri getiriyor ve koşumu yüzde 34 yavaşlatıyordu. Geri gelen olgu başına
bedel 17,0 yüzde puandı. Bu ders ölçeğin öbür ucundadır. Örnekleme tabanlı işlemci profili,
koşum sırasında bedel ödeyen kanalların **en
ucuzudur**: koşuma eklediği yavaşlık yüzde 3'tür. Çekirdek dökümü koşum bittikten sonra
baktığı için hiç bedel ödemez.

Soru ucuzluğun neye mal olduğudur. Bir kanal koşuma dokunmadan bilgi veriyorsa, izolasyonu
delme gücü de düşük olabilir; ya da tersine, ucuz bir kanal sürekli açık bırakılabildiği
için asıl gediği o açabilir. Ölçü ikisinden hangisinin doğru olduğunu söyler: profil geri
getirdiği olgu sayısında da en dardır — geri gelen **1** olgudur.

#### Profil Bir Kanal Olarak

Örnekleme profili, koşan süreci düzenli aralıklarla durdurup o anda hangi kodun
çalıştığını kaydeder. Toplanan şey bir olay dizisi değil, bir **dağılımdır**: hangi işlev
örneklerin ne kadarını topladı. Profilin nasıl okunacağı — hangi ölçütün seçileceği,
örnekleme oranının hangi olayı kaçıracağı — Ön Yüz tarafında Frontend Kalitesi, işletim
tarafında Gözlemlenebilirlik ve İşletim kursunda ölçüldü ve burada tekrarlanmaz. Bu derste
profil bir başarım aracı olarak değil, **bir izolasyon kanalı olarak** ölçülür.

Varsayımlar sürüyor ve genişliyor. Profil kanalının gösterdiği üç olgu koddaki listedir
(**GZ8**). Bedeller modeldeki yüzdelerdir, **gerçek ölçüm değildir**; taban koşum 1000 zaman
birimidir (**GZ9**). Profil, koşum boyunca açıktır ve bedeli örnek sayısından bağımsız
alınmıştır (**GZ10**) — gerçek bir sistemde örnek hızı yükseldikçe bedel de yükselir, modelde
bu ayrım kapatılmıştır. Örnek sayısı kurgudur ve her örnek bir satır üretir (**GZ11**).
Örnek sayısı bir olgunun **kestirimini** iyileştirir, olgunun görünürlüğünü değiştirmez
(**GZ12**). Profil aracı demetin dışından, koşum sırasında çalışır (**GZ13**).

```text
# ornek dokum , calistirilmis degildir
$ perf record -F <ornek-hizi> -g -p <surec-no> -- sleep <saniye>
[ perf record: <ornek-sayisi> ornek yazildi ]
$ perf report --stdio --sort symbol
# Overhead  Symbol
#  <yuzde>  [.] <islev-a>
#  <yuzde>  [.] <islev-b>
#  <yuzde>  [k] <cekirdek-islevi>
```

Dökümdeki değerler kurgudur ve blok çalıştırılmadı. Ölçülen şey dökümün satırları değil,
dökümden okunabilen **olgulardır**.

```python
# M03/K05 ortak tanim -- yalniz bu dersin kullandigi parcalar.
OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": ["surec"], "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": ["takma"], "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": ["ag"], "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": ["kullanici"], "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": ["makine"], "acik_kalan": []},
    "denetim-grubu":      {"eksen": ["kaynak"], "acik_kalan": ["islemci-sayisi"]},
    "yetenek-kirpma":       {"eksen": ["yetki"], "acik_kalan": ["dosya-yetkileri"]},
    "zorunlu-etiket":     {"eksen": ["etiket"], "acik_kalan": ["erisim-etiketi"]},
}
YAYGIN_DEMET = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani",
                "makine-ad-alani", "denetim-grubu", "yetenek-kirpma"]
SIKI_DEMET = YAYGIN_DEMET + ["kullanici-ad-alani", "zorunlu-etiket"]

KANAL = {  # GZ8: profil kanalinin gosterdigi olgular ; izleme kanali karsilastirma icin
    "ornekleme-profili":     ["islemci-payi", "islemci-sayisi", "sistem-yuku"],
    "sistem-cagrisi-izleme": ["kok-dosya-agaci", "oteki-takmalar", "dosya-sahipligi",
                              "yetenek-kumesi", "saat"],
}
# GZ9: bedeller MODELDEKI yuzdelerdir , gercek olcum degildir
KANAL_BEDELI = {"ornekleme-profili": 3, "sistem-cagrisi-izleme": 34}
TABAN_SURE = 1000
# GZ11-GZ13: ornek sayisi kurgudur ; her ornek bir satir uretir
ORNEK_SAYISI = [100, 1000, 10000, 100000]


def gorunen(duzenekler, olgular=OLGULAR):
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        for e in v["eksen"]:
            kapali |= {o for o, x in olgular if x == e}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def geri_gelen(duzenekler, kanal, olgular=OLGULAR):
    kapali = {o for o, _ in olgular} - set(gorunen(duzenekler, olgular))
    return sorted(set(kanal) & kapali)


def yuzey(duzenekler, kanal=(), olgular=OLGULAR):
    g = set(gorunen(duzenekler, olgular))
    geri = set(geri_gelen(duzenekler, kanal, olgular))
    return {"gorunen": len(g), "geri_gelen": len(geri), "acik_yuzey": len(g | geri),
            "acik_eksen": len({e for o, e in olgular if o in (g | geri)})}


PROFIL = KANAL["ornekleme-profili"]
g = set(gorunen(SIKI_DEMET))
ys = yuzey(SIKI_DEMET, PROFIL)
print("olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}),
      "| siki demet: gorunen", len(g), "kapattigi", len(OLGULAR) - len(g))
print()
print("KAYNAK EKSENI (denetim grubunun ekseni)")
for o, e in OLGULAR:
    if e == "kaynak":
        durum = ("acik birakildi" if o in DUZENEK["denetim-grubu"]["acik_kalan"]
                 else "GERI GELIYOR" if o in PROFIL else "kapali")
        print(f"  {o:20s}{durum}")
print()
print("kanalin gosterdigi olgu   eksen     siki demette durumu")
for o in PROFIL:
    print(f"  {o:24s}{dict(OLGULAR)[o]:10s}"
          f"{'zaten goruluyor' if o in g else 'GERI GELIYOR'}")
print()
print("demet          gorunen  geri gelen  acik yuzey  acik eksen")
for ad, d in (("yalin", []), ("yaygin", YAYGIN_DEMET), ("siki", SIKI_DEMET)):
    y = yuzey(d, PROFIL)
    print(f"  {ad:12s} {y['gorunen']:7d}  {y['geri_gelen']:10d}"
          f"  {y['acik_yuzey']:10d}  {y['acik_eksen']:10d}")
print()
print("kanal                   geri  acik yuzey  bedel  kosum  olgu basina bedel")
for k in KANAL:
    y = yuzey(SIKI_DEMET, KANAL[k])
    b = KANAL_BEDELI[k]
    print(f"  {k:22s} {y['geri_gelen']:4d}  {y['acik_yuzey']:10d}  {b:5d}"
          f"  {TABAN_SURE * (100 + b) // 100:5d}  {b / y['geri_gelen']:17.2f}")
print()
print("ORNEK SAYISI SUPURMESI (geri gelen olgu ornek sayisina bagli degil)")
print("  ornek     satir  geri gelen olgu  olgu basina satir")
for n in ORNEK_SAYISI:
    print(f"  {n:6d}  {n:8d}  {ys['geri_gelen']:15d}  {n // ys['geri_gelen']:17d}")
print()
print("OLGU KUMESI SUPURMESI -- cikarma")
geri_dusen = [o for o, _ in OLGULAR
              if yuzey(SIKI_DEMET, PROFIL,
                       [x for x in OLGULAR if x[0] != o])["geri_gelen"] < ys["geri_gelen"]]
degisen = [o for o, _ in OLGULAR
           if yuzey(SIKI_DEMET, PROFIL,
                    [x for x in OLGULAR if x[0] != o])["acik_yuzey"] != ys["acik_yuzey"]]
print("  taban acik yuzey", ys["acik_yuzey"], "| degistiren", len(degisen),
      "| degistirmeyen", len(OLGULAR) - len(degisen))
print("  geri geleni sifirlayan tek olgu:", geri_dusen)
print()
print("OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)")
for e in sorted({e for _, e in OLGULAR}):
    y = yuzey(SIKI_DEMET, PROFIL, OLGULAR + [("yeni-olgu", e)])
    print(f"  +{e:10s} olgu 25  acik yuzey {y['acik_yuzey']:2d}", end="")
    print("   <-- buyuyor" if y["acik_yuzey"] > ys["acik_yuzey"] else "")
```

```
olgu: 24 | eksen: 9 | siki demet: gorunen 10 kapattigi 14

KAYNAK EKSENI (denetim grubunun ekseni)
  islemci-payi        GERI GELIYOR
  bellek-siniri       kapali
  kullanilan-bellek   kapali
  islemci-sayisi      acik birakildi

kanalin gosterdigi olgu   eksen     siki demette durumu
  islemci-payi            kaynak    GERI GELIYOR
  islemci-sayisi          kaynak    zaten goruluyor
  sistem-yuku             cekirdek  zaten goruluyor

demet          gorunen  geri gelen  acik yuzey  acik eksen
  yalin             24           0          24           9
  yaygin            12           1          13           7
  siki              10           1          11           7

kanal                   geri  acik yuzey  bedel  kosum  olgu basina bedel
  ornekleme-profili         1          11      3   1030               3.00
  sistem-cagrisi-izleme     2          12     34   1340              17.00

ORNEK SAYISI SUPURMESI (geri gelen olgu ornek sayisina bagli degil)
  ornek     satir  geri gelen olgu  olgu basina satir
     100       100                1                100
    1000      1000                1               1000
   10000     10000                1              10000
  100000    100000                1             100000

OLGU KUMESI SUPURMESI -- cikarma
  taban acik yuzey 11 | degistiren 11 | degistirmeyen 13
  geri geleni sifirlayan tek olgu: ['islemci-payi']

OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)
  +ag         olgu 25  acik yuzey 11
  +cekirdek   olgu 25  acik yuzey 12   <-- buyuyor
  +etiket     olgu 25  acik yuzey 11
  +kaynak     olgu 25  acik yuzey 11
  +kullanici  olgu 25  acik yuzey 11
  +makine     olgu 25  acik yuzey 11
  +surec      olgu 25  acik yuzey 11
  +takma      olgu 25  acik yuzey 11
  +yetki      olgu 25  acik yuzey 11
```

#### Kâhin, Kanal, Geri Gelen Olgu

Üç sayı yan yana durur. **Kâhin:** sürecin 24 olgusu, dokuz eksende. **Kanal:** örnekleme
profili üç olgu gösteriyor. **Geri gelen olgu ve açık yüzey:** üçünden **1'i** sıkı demetin
kapattığı olgudur ve geri gelir; açık yüzey **10'dan 11'e** çıkar, açık eksen **7'de** kalır.

Geri gelen tek olgu `islemci-payi`dır. Öteki iki olgu — `islemci-sayisi` ve `sistem-yuku` —
sıkı demet altında zaten görünüyordu. Bu, dört kanalın en küçük açık yüzeyidir: **11**.
Aynı sayı sistem çağrısı izlemesinde 12, kalan iki kanalda 13'tür.

Zaten görünen iki olgunun neden görünür olduğu da ayrı ayrı okunur. `islemci-sayisi`
denetim grubunun bilerek açık bıraktığı olgudur: bir süreç kaç işlemcinin bulunduğunu
görmeye devam eder, yalnız payı sınırlanır. `sistem-yuku` ise çekirdek eksenindedir ve o
ekseni kapatan hiçbir düzenek yoktur; önceki dersin ekleme süpürmesi bunu tek satırda
göstermişti. Yani profilin gösterdiği üç olgudan ikisi, izolasyonun hiç dokunmadığı
yerlerdedir; kanal orada bir gedik açmaz, yalnız var olan görünürlüğü okunur kılar.

Demet tablosu bir ayrıntı daha verir. Yaygın altı düzenekli demette de geri gelen **1**'dir;
sıkılaşan izolasyon bu kanalın gediğini daraltmaz. Nedeni tabloda görünüyor: gediği açan
düzenek **denetim grubudur** ve o, yaygın demette de vardır. Kanalın deldiği şey, demete
sonradan eklenen iki düzenek değil, demetin **çekirdeğindeki** bir düzenektir.

#### Denetim Grubunun Ekseni Kısmen Geri Açılıyor

Kaynak ekseninde dört olgu vardır. Denetim grubu bunların üçünü kapatır ve `islemci-sayisi`nı
açık bırakır; bu, denetim grupları dersinde ölçülmüştü ve burada tekrarlanmaz. Profil,
kapatılan üçten birini — `islemci-payi`nı — geri getirir. Sonuç: kaynak ekseninin dört
olgusundan **ikisi** görünür olur. Denetim grubu tek başına yüzde 25'lik bir görünürlük
bırakıyordu; profil açıkken bu yüzde 50'ye çıkar.

Bunun nedeni yapısaldır ve modeli aşar. Denetim grubu bir sürecin **ne kadar kaynak
alabileceğini** sınırlar; profil ise sürecin **ne kadar kaynak kullandığını** sayar. İkisi
aynı büyüklüğün iki yüzüdür. Sınırlamak için ölçmek gerekir, ölçmek de görünür kılar. Bir
denetim grubunun kendi muhasebe sayaçları da aynı büyüklüğü tutar; profil bu bilgiyi
sıfırdan üretmez, zaten tutulan bir bilgiyi süreç ayrımıyla okunabilir kılar.

Kalan iki olgu — `bellek-siniri` ve `kullanilan-bellek` — bu kanalda kapalı kalır. Profil
işlemci eksenlidir; bellek tarafını başka bir kanal açacaktır ve o kanal bu konunun son
dersinde ölçülür.

Dört kanal içinde profil, geri getirdiği olgu bir düzeneğin **kendi muhasebesinde tutulan**
büyüklük olan tek kanaldır. Ötekiler bir olguyu, düzeneğin hiç kaydetmediği bir yerden
okurlar. Bu fark daraltma tarafında karşılığını bulur: ölçmeyi bırakmadan görünürlüğü
kapatmak burada güçtür, çünkü ölçüm izolasyonun kendi işleyişinin parçasıdır. Daraltma
sorusu "ölçülsün mü" değil, "**kim okuyabilsin**" biçiminde sorulmak zorundadır.

#### Daha Çok Örnek, Aynı Olgu

Örnek sayısı süpürmesi kursun ikinci iddiasını bu kanalda öder. Örnek sayısı 100'den
100000'e, yani **1000 kat** büyütüldüğünde satır sayısı da 1000 kat büyür; geri gelen olgu
**1'de** sabit kalır. Olgu başına satır 100'den 100000'e çıkar. Modelde bu ilişki
tanımlıdır (**GZ12**) ama tanım keyfi değildir: bir olgunun görünürlüğü ikili bir
niteliktir, örnek sayısı ise o olgunun **kestiriminin** duyarlılığını belirler.

Ayrım işletim tarafında da geçerlidir. Örnek hızını yükselten operatör daha ince bir dağılım
elde eder — hangi işlevin payı yüzde 40 mı yüzde 42 mi olduğunu daha kesin söyler. Yükseltme
ona **yeni bir olgu** vermez: hangi süreçlerin işlemciyi paylaştığı bilgisi ilk örnekle de,
yüz bininci örnekle de aynı derecede açıktır. İzolasyon açısından bakan biri için bu kanalın
riski örnek hızından bağımsızdır.

Bedel tarafı da aynı yerden okunur. Profilin bedeli **yüzde 3**'tür: taban koşum 1000 zaman
birimiyken profil açıkken 1030 olur. Geri gelen olgu başına bedel **3,00 yüzde puandır**;
sistem çağrısı izlemesinin **17,00** puanıyla karşılaştırıldığında profil, olgu başına
**5,67 kat** ucuzdur. Bu ucuzluğun bir sonucu vardır: pahalı
kanal tanı bitince kapatılır, ucuz kanal **sürekli açık bırakılabilir**. Süreklilik, tek bir
olgunun görünürlüğünü kalıcı hâle getirir.

#### Olgu Kümesi Süpürmesi

Çıkarma süpürmesinde açık yüzeyi 24 olgunun **11'i** değiştiriyor, **13'ü** değiştirmiyor.
Geri gelen sayısını düşüren **tek** olgu `islemci-payi`dır; o çıkarıldığında kanal hiçbir
olgu geri getirmez ve açık yüzey 10'a iner. Yani bu kanalın bütün gediği tek bir olguya
yaslanmıştır. Bu, ölçünün kurguya bağlılığını dürüstçe gösterir: liste değişirse profilin
gediği tamamen kapanabilir.

Ekleme süpürmesi önceki dersteki sonucu doğrular. Dokuz eksenin her birine bir olgu
eklendiğinde açık yüzey yalnız **`cekirdek`** ekseninde büyür (11'den 12'ye). Sekiz düzeneğin
hiçbiri o ekseni kapatmıyor; kaynak eksenine eklenen yeni bir olgu ise denetim grubu
tarafından kapatıldığı için yüzeye yazılmaz. Bir eksenin kapatıcısı varsa, o eksende
büyüyen olgu listesi yüzeyi büyütmez.

#### Yüzeyi Daraltmak

Bu kanalın gediği dardır ama daraltma yolları vardır ve sayılan yüzeyin yanında yazılmaları
gerekir. Birincisi örnekleme yetkisidir: işlemci sayaçlarına erişim ayrı bir yetkiye bağlıdır
ve o yetenek kırpma listesine alınabilir; çekirdek ayarlarıyla ayrıcalıksız süreçler için
örnekleme kapatılabilir. İkincisi kapsamdır: profil bütün makineyi değil, tek bir süreci ya
da tek bir denetim grubunu hedefleyecek biçimde açılır — makine geneli profil, demet dışı
süreçlerin işlemci payını da görünür kılar. Üçüncüsü profil dosyasının kendisidir; toplanan
dağılım işlev adlarını ve çağrı yığıtlarını taşır, dosya erişim denetimine bağlanır.
Dördüncüsü süredir: tanı süresince açılır, sürekli açık bırakılmaz.

Bu ders bir gediği sayar, kullanımını anlatmaz. Kaçış, yetki yükseltme ve atlatma yordamları
kursun hiçbir dersinde yazılmaz; ölçülen şey hangi olgunun görünür kaldığıdır.

#### Özet

- Örnekleme profili üç olgu gösteriyor; sıkı demet altında yalnız **1'i** geri geliyor
  (`islemci-payi`) ve açık yüzey **11** oluyor — dört kanalın en küçük yüzeyi.
- Açık eksen **7'de** kalıyor; profil yeni eksen açmıyor, kaynak eksenini kalınlaştırıyor:
  eksenin dört olgusundan görünür olanlar 1'den 2'ye çıkıyor.
- Bedel **yüzde 3** (taban 1000, koşum 1030) ve geri gelen olgu başına **3,00 yüzde puan**;
  sistem çağrısı izlemesinin 17,00 puanına karşı olgu başına **5,67 kat** ucuz. Yüzdeler
  modeldeki değerlerdir, gerçek ölçüm değildir.
- Örnek sayısı **1000 kat** büyüdüğünde satır sayısı 1000 kat büyüyor, geri gelen olgu
  **1'de** kalıyor: örnek sayısı kestirimi iyileştirir, yüzeyi büyütmez.
- Süpürme: kanalın bütün gediği tek olguya (`islemci-payi`) yaslanıyor; eklenen yeni olgu
  yüzeyi yine yalnız **çekirdek** ekseninde büyütüyor.
- Daraltma: örnekleme yetkisinin kırpılması, profilin tek sürece ya da tek denetim grubuna
  daraltılması, profil dosyasının erişim denetimi ve sınırlı süre.

#### Sonraki Adım

İki kanal ölçüldü ve ikisi de aynı yönde çalıştı: açık eksen sayısını 7'de bıraktılar.
Sıradaki kanal bunu bozar. Olay tabanlı çekirdek içi izleme yüzde 6 bedelle **3** olgu geri
getirir ve bunlardan biri, ağ ad alanının **tam** kapattığı ekseni yeniden açar; açık eksen
7'den **8'e** çıkar. Sonraki ders bu kanalı üç izleme noktasına ayırarak ölçer ve şu sonucu
yazar: en çok geri getiren kanal en pahalı kanal değildir.

### Çekirdek İçi İzleme

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/cekirdek-ici-izleme

Olay tabanlı çekirdek içi izlemenin ölçülmesi: yüzde 6 bedelle 3 olgu geri geliyor, açık yüzey 13 oluyor ve ağ ad alanının tam kapattığı eksen yeniden açılarak açık eksen 7'den 8'e çıkıyor; olgu başına bedel 2,00 puanla, koşum sırasında bedel ödeyen kanalların en düşüğü.

Önceki iki kanal aynı yönde çalıştı. Sistem çağrısı izlemesi yüzde 34 bedelle 2 olgu,
örnekleme profili yüzde 3 bedelle 1 olgu geri getirdi; ikisi de açık eksen sayısını **7'de**
bıraktı. Açık eksenin sabit kalması küçük bir ayrıntı değildi: kanallar açık eksenleri
kalınlaştırıyor, kapalı bir ekseni açmıyorlardı.

Bu ders o düzeni bozar. Olay tabanlı çekirdek içi izleme, sıkı demetin kapattığı 14 olgudan
**3'ünü** geri getirir ve bunlardan biri, ağ ad alanının **tam** kapattığı bir eksene aittir.
Açık eksen 7'den **8'e** çıkar. Bedel ise yüzde 6'dır — sistem çağrısı izlemesinin beşte
birinden azı. Kursun bu konudaki en keskin cümlesi buradan çıkar: **en çok geri getiren
kanal en pahalı kanal değildir.**

#### Olay Tabanlı Gözlem

Sistem çağrısı izlemesi her çağrıda denetimi izleyen tarafa geçirir; örnekleme profili
düzenli aralıklarla anlık görüntü alır. Çekirdek içi izleme üçüncü bir yoldur: çekirdeğin
içine **izleme noktaları** yerleştirilir, bir olay olduğunda küçük bir işleyici çalışır ve
sonucu bir tampona yazar. Süreç durdurulmaz, örnek beklenmez; yalnız ilgilenilen olay
kaydedilir.

Varsayımlar sürüyor. Kanalın gösterdiği beş olgu koddaki listedir (**GZ14**). Bedeller
**modeldeki yüzdelerdir, gerçek ölçüm değildir**; taban koşum 1000 zaman birimidir
(**GZ15**). İzleme çekirdek tarafında kurulur ve izlenen sürecin ad alanlarından bağımsız
çalışır (**GZ16**); bu, kanalın izolasyonu delme gücünün kaynağıdır. Bir olay kaydedildiğinde
ilgili olgu tam olarak görünür olur (**GZ17**). Kanal üç izleme noktasına ayrılır ve
noktaların olgu kümeleri koddaki listelerdir (**GZ18**). Nokta bedelleri 2, 3 ve 1'dir ve
toplamları kanal bedeline eşittir (**GZ19**). Noktalar birbirinden bağımsız açılıp
kapatılabilir (**GZ20**). Tampon taşması ve olay düşmesi modelde yoktur (**GZ21**) — gerçek
sistemde yüksek olay hızında kayıt eksilir ve bu, ölçünün dışında kalan bir sınırdır.

```text
# ornek dokum , calistirilmis degildir
$ cat /sys/kernel/tracing/available_events | wc -l
<olay-sayisi>
$ echo 1 > /sys/kernel/tracing/events/sched/sched_process_fork/enable
$ cat /sys/kernel/tracing/trace_pipe
  <surec-adi>-<no> [<islemci>] <zaman>: sched_process_fork: ata=<no> cocuk=<no>
```

Blok çalıştırılmadı ve içindeki değerler kurgudur. Ölçülen şey satırların biçimi değil,
satırlardan okunabilen olgulardır.

```python
# M03/K05 ortak tanim -- yalniz bu dersin kullandigi parcalar.
OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": ["surec"], "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": ["takma"], "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": ["ag"], "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": ["kullanici"], "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": ["makine"], "acik_kalan": []},
    "denetim-grubu":      {"eksen": ["kaynak"], "acik_kalan": ["islemci-sayisi"]},
    "yetenek-kirpma":       {"eksen": ["yetki"], "acik_kalan": ["dosya-yetkileri"]},
    "zorunlu-etiket":     {"eksen": ["etiket"], "acik_kalan": ["erisim-etiketi"]},
}
SIKI_DEMET = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani", "makine-ad-alani",
              "denetim-grubu", "yetenek-kirpma", "kullanici-ad-alani", "zorunlu-etiket"]

KANAL = {
    "sistem-cagrisi-izleme": ["kok-dosya-agaci", "oteki-takmalar", "dosya-sahipligi",
                              "yetenek-kumesi", "saat"],
    "ornekleme-profili":     ["islemci-payi", "islemci-sayisi", "sistem-yuku"],
    "cekirdek-ici-izleme":   ["oteki-sureclerin-listesi", "ata-surec-zinciri",
                              "dinleyen-baglanti-noktalari", "cekirdek-ayarlari",
                              "sistem-yuku"],
    "cekirdek-dokumu":       ["kullanilan-bellek", "yetenek-kumesi", "erisim-etiketi",
                              "kullanici-kimlik-esleme"],
}
# GZ15: bedeller MODELDEKI yuzdelerdir , gercek olcum degildir
KANAL_BEDELI = {"sistem-cagrisi-izleme": 34, "ornekleme-profili": 3,
                "cekirdek-ici-izleme": 6, "cekirdek-dokumu": 0}
TABAN_SURE = 1000
# GZ18-GZ20: kanal uc izleme noktasina ayriliyor ; noktalarin bedeli 2+3+1 = 6
NOKTA = {
    "surec-olaylari":         (["oteki-sureclerin-listesi", "ata-surec-zinciri"], 2),
    "ag-olaylari":            (["dinleyen-baglanti-noktalari"], 3),
    "cekirdek-ayar-olaylari": (["cekirdek-ayarlari", "sistem-yuku"], 1),
}


def gorunen(duzenekler, olgular=OLGULAR):
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        for e in v["eksen"]:
            kapali |= {o for o, x in olgular if x == e}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def geri_gelen(duzenekler, kanal, olgular=OLGULAR):
    kapali = {o for o, _ in olgular} - set(gorunen(duzenekler, olgular))
    return sorted(set(kanal) & kapali)


def yuzey(duzenekler, kanal=(), olgular=OLGULAR):
    g = set(gorunen(duzenekler, olgular))
    geri = set(geri_gelen(duzenekler, kanal, olgular))
    return {"gorunen": len(g), "geri_gelen": len(geri), "acik_yuzey": len(g | geri),
            "acik_eksen": len({e for o, e in olgular if o in (g | geri)})}


ICI = KANAL["cekirdek-ici-izleme"]
g = set(gorunen(SIKI_DEMET))
ys = yuzey(SIKI_DEMET, ICI)
print("olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}),
      "| siki demet: gorunen", len(g), "kapattigi", len(OLGULAR) - len(g),
      "acik eksen", yuzey(SIKI_DEMET)["acik_eksen"])
print()
print("kanalin gosterdigi olgu       eksen     siki demette durumu")
for o in ICI:
    print(f"  {o:28s}{dict(OLGULAR)[o]:10s}"
          f"{'zaten goruluyor' if o in g else 'GERI GELIYOR'}")
print()
print("EKSEN TABLOSU (olgu | siki demette gorunen | kanal aciksa gorunen)")
geri = set(geri_gelen(SIKI_DEMET, ICI))
for e in sorted({e for _, e in OLGULAR}):
    hepsi = [o for o, x in OLGULAR if x == e]
    a = len([o for o in hepsi if o in g])
    b = len([o for o in hepsi if o in g | geri])
    not_ = "  <-- eksen yeniden acildi" if a == 0 < b else ""
    print(f"  {e:10s} {len(hepsi):5d} {a:24d} {b:26d}{not_}")
print()
print("kanal                   geri  acik yuzey  acik eksen  bedel  olgu basina bedel")
for k in KANAL:
    y = yuzey(SIKI_DEMET, KANAL[k])
    b = KANAL_BEDELI[k]
    oran = f"{b / y['geri_gelen']:.2f}" if y["geri_gelen"] else "-"
    print(f"  {k:22s} {y['geri_gelen']:4d}  {y['acik_yuzey']:10d}  {y['acik_eksen']:10d}"
          f"  {b:5d}  {oran:>17s}")
print()
print("IZLEME NOKTASI SUPURMESI (noktalar sirayla aciliyor)")
print("  nokta                   yeni olgu  toplam geri  toplam bedel  marjinal bedel")
acik, top = [], 0
for ad, (olgular_, bedel) in NOKTA.items():
    onceki = len(geri_gelen(SIKI_DEMET, acik))
    acik = acik + olgular_
    simdi = len(geri_gelen(SIKI_DEMET, acik))
    top += bedel
    print(f"  {ad:22s} {simdi - onceki:10d} {simdi:12d} {top:13d} {bedel:15d}")
print("  toplam nokta bedeli:", top, "= kanal bedeli", KANAL_BEDELI["cekirdek-ici-izleme"],
      "| kosum", TABAN_SURE * (100 + top) // 100)
print()
print("OLGU KUMESI SUPURMESI -- cikarma")
gd = [o for o, _ in OLGULAR
      if yuzey(SIKI_DEMET, ICI, [x for x in OLGULAR if x[0] != o])["geri_gelen"]
      < ys["geri_gelen"]]
de = [o for o, _ in OLGULAR
      if yuzey(SIKI_DEMET, ICI, [x for x in OLGULAR if x[0] != o])["acik_yuzey"]
      != ys["acik_yuzey"]]
ek = [o for o, _ in OLGULAR
      if yuzey(SIKI_DEMET, ICI, [x for x in OLGULAR if x[0] != o])["acik_eksen"]
      < ys["acik_eksen"]]
print("  taban acik yuzey", ys["acik_yuzey"], "acik eksen", ys["acik_eksen"],
      "| degistiren", len(de), "| degistirmeyen", len(OLGULAR) - len(de))
print("  geri geleni dusuren:", ", ".join(gd))
print("  acik ekseni 8'den 7'ye dusuren olgu:", len(ek),
      "| bunlardan kanalin geri getirdigi:",
      [o for o in ek if o in geri_gelen(SIKI_DEMET, ICI)])
print()
buyuten = [e for e in sorted({e for _, e in OLGULAR})
           if yuzey(SIKI_DEMET, ICI,
                    OLGULAR + [("yeni-olgu", e)])["acik_yuzey"] > ys["acik_yuzey"]]
print("OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)")
print("  yuzeyi buyuten eksen:", buyuten, "-> acik yuzey", ys["acik_yuzey"] + 1)
print("  oteki", 9 - len(buyuten), "eksende acik yuzey", ys["acik_yuzey"], "olarak kaliyor")
```

```
olgu: 24 | eksen: 9 | siki demet: gorunen 10 kapattigi 14 acik eksen 7

kanalin gosterdigi olgu       eksen     siki demette durumu
  oteki-sureclerin-listesi    surec     GERI GELIYOR
  ata-surec-zinciri           surec     GERI GELIYOR
  dinleyen-baglanti-noktalari ag        GERI GELIYOR
  cekirdek-ayarlari           cekirdek  zaten goruluyor
  sistem-yuku                 cekirdek  zaten goruluyor

EKSEN TABLOSU (olgu | siki demette gorunen | kanal aciksa gorunen)
  ag             3                        0                          1  <-- eksen yeniden acildi
  cekirdek       4                        4                          4
  etiket         2                        1                          1
  kaynak         4                        1                          1
  kullanici      2                        1                          1
  makine         1                        0                          0
  surec          3                        1                          3
  takma          3                        1                          1
  yetki          2                        1                          1

kanal                   geri  acik yuzey  acik eksen  bedel  olgu basina bedel
  sistem-cagrisi-izleme     2          12           7     34              17.00
  ornekleme-profili         1          11           7      3               3.00
  cekirdek-ici-izleme       3          13           8      6               2.00
  cekirdek-dokumu           3          13           7      0               0.00

IZLEME NOKTASI SUPURMESI (noktalar sirayla aciliyor)
  nokta                   yeni olgu  toplam geri  toplam bedel  marjinal bedel
  surec-olaylari                  2            2             2               2
  ag-olaylari                     1            3             5               3
  cekirdek-ayar-olaylari          0            3             6               1
  toplam nokta bedeli: 6 = kanal bedeli 6 | kosum 1060

OLGU KUMESI SUPURMESI -- cikarma
  taban acik yuzey 13 acik eksen 8 | degistiren 13 | degistirmeyen 11
  geri geleni dusuren: oteki-sureclerin-listesi, ata-surec-zinciri, dinleyen-baglanti-noktalari
  acik ekseni 8'den 7'ye dusuren olgu: 6 | bunlardan kanalin geri getirdigi: ['dinleyen-baglanti-noktalari']

OLGU KUMESI SUPURMESI -- ekleme (her eksene bir yeni olgu)
  yuzeyi buyuten eksen: ['cekirdek'] -> acik yuzey 14
  oteki 8 eksende acik yuzey 13 olarak kaliyor
```

#### Kâhin, Kanal, Geri Gelen Olgu

Üç sayı yan yana durur. **Kâhin:** sürecin 24 olgusu, dokuz eksende. **Kanal:** çekirdek içi
izleme beş olgu gösteriyor. **Geri gelen olgu ve açık yüzey:** beşinden **3'ü** sıkı demetin
kapattığı olgulardır ve geri gelir; açık yüzey **10'dan 13'e**, açık eksen **7'den 8'e**
çıkar.

Geri gelen üçlü `oteki-sureclerin-listesi`, `ata-surec-zinciri` ve
`dinleyen-baglanti-noktalari`dır. İlk ikisi süreç ad alanının kapattığı olgulardır: süreç
kendi ad alanında yalnız kendini görüyor olsa bile, çekirdek tarafında yerleştirilmiş bir
süreç olayı izleyicisi çatallama olaylarını ad alanı ayrımı gözetmeden görür. Üçüncüsü ağ
ad alanının kapattığı bir olgudur ve asıl kırılma oradadır.

Zaten görünen iki olgu — `cekirdek-ayarlari` ve `sistem-yuku` — çekirdek eksenindedir.
Önceki iki derste de aynı sonuç çıkmıştı: o ekseni kapatan hiçbir düzenek yok. Kanalın beş
olgusundan ikisi bu yüzden yeni bir şey açmaz.

#### Kapanmış Bir Eksen Yeniden Açılıyor

Eksen tablosu dört kanal içinde yalnız bu kanalda değişir. Ağ ekseninde üç olgu vardır ve
ağ ad alanı üçünü de kapatır; ortak tanımın birinci okumasında ağ ile makine ad alanı,
kendi eksenlerini **tam** kapatan tek ikili olarak geçiyordu. Çekirdek içi izleme bu tam
kapatmayı deler: `dinleyen-baglanti-noktalari` geri gelir ve ağ ekseninde görünen olgu
sayısı 0'dan **1'e** çıkar.

Ayrım işletim açısından önemlidir. Bir eksenin kalınlaşması, o eksende zaten bir şey
görünürken bir şey daha görünmesidir; ölçüyü büyütür ama izolasyon kararını değiştirmez.
Bir eksenin **yeniden açılması** ise izolasyon kararının kendisini geçersizleştirir. Ağ ad
alanı kurulurken verilen karar "bu süreç makinenin ağını görmeyecek" idi; kanal açıkken bu
karar artık geçerli değildir. Sıkı demetin dokuz eksenden yedisinde bir şey açık bırakması
bilinen bir sonuçtu; sekizinci eksenin **gözlem yüzünden** açılması ayrı bir sonuçtur.

Süreç ekseninde de bir kalınlaşma vardır: üç olgudan görünen sayısı 1'den **3'e** çıkar,
yani eksen tamamen görünür olur. Eksen zaten açık sayıldığı için tabloda bir artış
görünmez; olgu tarafında ise kanalın en büyük katkısı buradadır.

#### En Çok Geri Getiren Kanal En Pahalı Kanal Değildir

Dört kanalın karşılaştırma tablosu kursun bu konudaki ana iddiasını tek bakışta verir.
Sistem çağrısı izlemesi **yüzde 34** bedelle **2** olgu, çekirdek içi izleme **yüzde 6**
bedelle **3** olgu getiriyor. Olgu başına bedel birincide **17,00**, ikincide **2,00** yüzde
puandır: çekirdek içi izleme, olgu başına sistem çağrısı izlemesinin **8,5'te biri** kadar
pahalıdır ve daha çok olgu getirir. Pahalılık ile delme gücü arasında bu modelde bir bağ
yoktur.

Nedeni yapısaldır. Sistem çağrısı izlemesinin bedeli **her çağrıda** ödenir; ölçülen sürecin
çağrı yoğunluğuyla büyür. Çekirdek içi izlemenin bedeli ise **yalnız seçilen olaylarda**
ödenir; süreç ne kadar çalışırsa çalışsın, seçilmeyen olaylar için hiçbir şey ödenmez.
Birincisi geniş ve körlemesine, ikincisi dar ve seçicidir. Seçicilik hem ucuzluğun hem de
delme gücünün kaynağıdır: doğru olay seçildiğinde tek bir izleme noktası, bir ad alanının
kapattığı olguyu doğrudan verir.

Tablonun dördüncü satırı da şimdiden görünüyor: çekirdek dökümü **yüzde 0** bedelle **3**
olgu getiriyor. Onun bedeli koşumda değil, başka bir yerdedir ve bu konunun son dersinde
ölçülür.

#### İzleme Noktası Süpürmesi

Kanal üç noktaya ayrıldığında marjinal getiri açıkça görünür. Süreç olayları noktası
**2** yeni olgu getirir ve **2** puana mal olur. Ağ olayları noktası **1** yeni olgu getirir
ve **3** puana mal olur — en pahalı nokta, en az olgu getiren noktadır; ama getirdiği olgu
tam da ekseni yeniden açan olgudur. Çekirdek ayar olayları noktası **0** yeni olgu getirir
ve yine de **1** puan ödetir. Üç noktanın toplamı 6'dır ve kanal bedeline eşittir; koşum
1000'den 1060'a çıkar.

Üçüncü nokta işletim açısından en öğretici olanıdır. Açıktır, kayıt üretir, bedel ödetir ve
izolasyon açısından **hiçbir şey** eklemez; gösterdiği iki olgu zaten görünüyordu. Bir gözlem
kurulumunu denetlerken sorulacak soru "bu nokta ne gösteriyor" değil, "bu nokta neyi **yeni**
gösteriyor" olmalıdır. Marjinal getirisi sıfır olan bir nokta yalnız bedel ödetir.

#### Olgu Kümesi Süpürmesi

Çıkarma süpürmesinde açık yüzeyi 24 olgunun **13'ü** değiştiriyor, **11'i** değiştirmiyor.
Geri gelen sayısını düşüren üç olgu, kanalın geri getirdiği üç olgunun kendisidir. Açık
ekseni 8'den 7'ye düşüren **6** olgu vardır; bunların yalnız biri —
`dinleyen-baglanti-noktalari` — kanalın geri getirdiği olgudur. Kalan beşi, kendi ekseninde
sıkı demet altında görünen tek olgu oldukları için çıkarıldıklarında o ekseni tamamen
kapatırlar.

Bu ikinci sonuç eksen ölçüsünün kırılganlığını gösterir. Bir eksenin "açık" sayılması tek
bir olguya bağlı olabilir; liste değişirse eksen sayısı değişir. Olgu sayısı ise daha
dayanıklıdır. Ekleme süpürmesi önceki iki dersle aynı yanıtı verir: dokuz eksenin yalnız
`cekirdek` ekseninde yeni bir olgu açık yüzeyi büyütür (13'ten 14'e), kalan sekiz eksende
yüzey **13** olarak kalır.

#### Yüzeyi Daraltmak

Sayılan yüzeyin yanında daraltma yolu yazılır. Birincisi izleme noktası yerleştirme
yetkisidir: çekirdek içi izleme ayrı bir yetki gerektirir ve o yetenek kırpma listesine
alınabilir; çekirdek ayarlarıyla ayrıcalıksız süreçler için izleme kapatılabilir. İkincisi
nokta seçimidir — süpürmenin gösterdiği gibi, marjinal getirisi sıfır olan noktalar
kapatılır; açık nokta sayısı azaldıkça hem bedel hem yüzey küçülür. Üçüncüsü olay
süzgeçleridir: bir izleme noktası tek bir denetim grubuna ya da tek bir ad alanına
daraltılabilir; makine geneli izleme, demet dışı bütün süreçlerin olaylarını da görünür
kılar. Dördüncüsü kayıt tarafıdır; toplanan olay akışı süreç adlarını, ata zincirini ve
bağlantı noktalarını taşır ve erişimi sınırlanmalıdır.

Bu ders bir gediği sayar, kullanımını anlatmaz. Kaçış, yetki yükseltme ve atlatma yordamları
kursun hiçbir dersinde yazılmaz.

#### Özet

- Çekirdek içi izleme beş olgu gösteriyor; **3'ü** geri geliyor ve açık yüzey **13** oluyor:
  dört kanalın en çok olgu getiren ikilisinden biri.
- Açık eksen **7'den 8'e** çıkıyor; ağ ad alanının **tam** kapattığı eksen yeniden açılıyor
  ve bunu yapan tek kanal budur.
- Bedel **yüzde 6** (taban 1000, koşum 1060) ve olgu başına **2,00 yüzde puan** — sistem
  çağrısı izlemesinin 17,00 puanının **8,5'te biri**. Yüzdeler modeldeki değerlerdir, gerçek
  ölçüm değildir.
- Üç izleme noktasının marjinal getirisi 2, 1 ve **0** olgu; bedelleri 2, 3 ve 1 puan. En
  pahalı nokta en az olgu getiriyor, üçüncü nokta hiçbir yeni olgu getirmeden bedel ödetiyor.
- Süpürme: açık ekseni düşüren 6 olgudan yalnız biri kanalın getirdiği olgudur; eklenen yeni
  olgu yüzeyi yine yalnız **çekirdek** ekseninde büyütüyor.
- Daraltma: izleme yeteneğinin kırpılması, marjinal getirisi sıfır noktaların kapatılması,
  olayların tek denetim grubuna daraltılması ve olay akışının erişim denetimi.

#### Sonraki Adım

Üç kanal da koşum sırasında çalıştı ve üçü de koşuma bir bedel ekledi. Sıradaki kanal
koşuma hiç dokunmaz: çekirdek dökümü, süreç çöktükten **sonra** bakar ve koşum bedeli
**yüzde 0**'dır. Buna karşın geri getirdiği olgu sayısı **3'tür** ve getirdikleri arasında
kullanıcı kimlik eşlemesi ile yetenek kümesi vardır. Bedeli sıfır olan bir kanalın yüzeyi
neden en büyükler arasında olduğu, dökümün **ne taşıdığıyla** açıklanır — ve bu, kursun ve
M03 müfredatının son dersidir.

### Çekirdek Dökümü Çözümlemesi

Source: https://academia.sh/tr/kurslar/cekirdek-arayuzleri/cekirdek-dokumu-cozumlemesi

Koşum bedeli sıfır olan kanalın ölçülmesi: çekirdek dökümü sıkı demetin kapattığı 14 olgudan 3'ünü geri getiriyor, açık yüzey 13 oluyor ve dört kanal birlikte 8 olgu geri getirerek geri gelme oranını 0,5714'e çıkarıyor; dökümün bedeli koşumda değil, taşıdığı hassas veride.

Üç kanal ölçüldü ve üçü de koşum sırasında çalıştı: sistem çağrısı izlemesi yüzde 34,
çekirdek içi izleme yüzde 6, örnekleme profili yüzde 3 bedelle. Dördüncü kanal bu düzenin
dışındadır. Çekirdek dökümü, süreç çöktükten **sonra** yazılır; koşan sürece hiçbir şey
ödetmez, koşum bedeli **yüzde 0**'dır.

Bedeli sıfır olan bir kanalın zararsız olması beklenir. Ölçü tersini söyler: döküm geri
getirdiği olgu sayısında **3** ile en yüksek ikilinin içindedir ve getirdikleri arasında
kullanıcı kimlik eşlemesi ile yetenek kümesi vardır. Bu ders o çelişkiyi çözer — sıfır bedel
koşumda ödenmez, **saklamada** ödenir — ve kursu kapatır.

#### Koşum Bittikten Sonra Bakan Kanal

Bir süreç ölümcül bir sinyalle sonlandığında çekirdek, sürecin bellek görüntüsünü bir dosyaya
yazabilir. Bu dosya bir olay akışı değildir; tek bir **anlık kesittir** ve sürecin son
durumunu taşır: bellek içeriği, yetki durumu, kimlik alanları, açık kaynakların izleri.

Varsayımlar sürüyor. Döküm süreç sonlandığında yazılır ve koşum sırasında hiçbir şey ödetmez
(**GZ22**). Dökümün taşıdığı dört olgu koddaki listedir (**GZ23**). Bedeller **modeldeki
yüzdelerdir, gerçek ölçüm değildir**; taban koşum 1000 zaman birimidir (**GZ24**). Döküm tek
anlıktır: koşum boyunca değişen bir olgunun yalnız son değeri görünür (**GZ25**). Döküm
dosyası kalıcıdır; okunabildiği sürece taşıdığı olgular görünür kalır (**GZ26**). Dört kanal
aynı anda açık olabilir ve koşum bedelleri toplanır (**GZ27**). Dökümün boyutu ve saklama
süresi modelde yoktur (**GZ28**) ve bu, ölçünün dışında kalan asıl maliyettir.

```text
# ornek dokum , calistirilmis degildir
$ cat /proc/sys/kernel/core_pattern
<dokum-yolu-sablonu>
$ ulimit -c
<dokum-boyut-siniri>
$ ls -l <dokum-dizini>
-rw-------  1 <sahip> <grup>  <boyut>  <zaman>  core.<surec-adi>.<no>
```

Blok çalıştırılmadı ve değerleri kurgudur. Dosyanın izin bitlerinin dar olması rastlantı
değildir; nedeni aşağıda ölçülür.

```python
# M03/K05 ortak tanim -- bu ders dort kanalin tamamini kurar.
OLGULAR = [
    ("oteki-sureclerin-listesi", "surec"), ("kendi-surec-numarasi", "surec"),
    ("ata-surec-zinciri", "surec"),
    ("kok-dosya-agaci", "takma"), ("oteki-takmalar", "takma"),
    ("paylasilan-gecici-dizin", "takma"),
    ("makine-arayuzleri", "ag"), ("makine-yonlendirme-tablosu", "ag"),
    ("dinleyen-baglanti-noktalari", "ag"),
    ("kullanici-kimlik-esleme", "kullanici"), ("dosya-sahipligi", "kullanici"),
    ("makine-adi", "makine"),
    ("islemci-payi", "kaynak"), ("bellek-siniri", "kaynak"),
    ("kullanilan-bellek", "kaynak"), ("islemci-sayisi", "kaynak"),
    ("cekirdek-surumu", "cekirdek"), ("cekirdek-ayarlari", "cekirdek"),
    ("sistem-yuku", "cekirdek"), ("saat", "cekirdek"),
    ("yetenek-kumesi", "yetki"), ("dosya-yetkileri", "yetki"),
    ("erisim-etiketi", "etiket"), ("politika-kurallari", "etiket"),
]
DUZENEK = {
    "surec-ad-alani":     {"eksen": ["surec"], "acik_kalan": ["kendi-surec-numarasi"]},
    "takma-ad-alani":     {"eksen": ["takma"], "acik_kalan": ["kok-dosya-agaci"]},
    "ag-ad-alani":        {"eksen": ["ag"], "acik_kalan": []},
    "kullanici-ad-alani": {"eksen": ["kullanici"], "acik_kalan": ["dosya-sahipligi"]},
    "makine-ad-alani":    {"eksen": ["makine"], "acik_kalan": []},
    "denetim-grubu":      {"eksen": ["kaynak"], "acik_kalan": ["islemci-sayisi"]},
    "yetenek-kirpma":       {"eksen": ["yetki"], "acik_kalan": ["dosya-yetkileri"]},
    "zorunlu-etiket":     {"eksen": ["etiket"], "acik_kalan": ["erisim-etiketi"]},
}
SIKI_DEMET = ["surec-ad-alani", "takma-ad-alani", "ag-ad-alani", "makine-ad-alani",
              "denetim-grubu", "yetenek-kirpma", "kullanici-ad-alani", "zorunlu-etiket"]
KANAL = {
    "sistem-cagrisi-izleme": ["kok-dosya-agaci", "oteki-takmalar", "dosya-sahipligi",
                              "yetenek-kumesi", "saat"],
    "ornekleme-profili":     ["islemci-payi", "islemci-sayisi", "sistem-yuku"],
    "cekirdek-ici-izleme":   ["oteki-sureclerin-listesi", "ata-surec-zinciri",
                              "dinleyen-baglanti-noktalari", "cekirdek-ayarlari",
                              "sistem-yuku"],
    "cekirdek-dokumu":       ["kullanilan-bellek", "yetenek-kumesi", "erisim-etiketi",
                              "kullanici-kimlik-esleme"],
}
# GZ24: bedeller MODELDEKI yuzdelerdir , gercek olcum degildir
KANAL_BEDELI = {"sistem-cagrisi-izleme": 34, "ornekleme-profili": 3,
                "cekirdek-ici-izleme": 6, "cekirdek-dokumu": 0}
TABAN_SURE = 1000


def gorunen(duzenekler, olgular=OLGULAR):
    kapali = set()
    for d in duzenekler:
        v = DUZENEK[d]
        for e in v["eksen"]:
            kapali |= {o for o, x in olgular if x == e}
        kapali -= set(v["acik_kalan"])
    return [o for o, _ in olgular if o not in kapali]


def geri_gelen(duzenekler, kanallar, olgular=OLGULAR):
    kapali = {o for o, _ in olgular} - set(gorunen(duzenekler, olgular))
    geri = set()
    for k in kanallar:
        geri |= set(KANAL[k]) & kapali
    return sorted(geri)


def yuzey(duzenekler, kanallar=(), olgular=OLGULAR):
    g = set(gorunen(duzenekler, olgular))
    geri = set(geri_gelen(duzenekler, kanallar, olgular))
    return {"gorunen": len(g), "geri_gelen": len(geri), "acik_yuzey": len(g | geri),
            "acik_eksen": len({e for o, e in olgular if o in (g | geri)})}


g = set(gorunen(SIKI_DEMET))
kapatilan = len(OLGULAR) - len(g)
ys = yuzey(SIKI_DEMET, ["cekirdek-dokumu"])
print("olgu:", len(OLGULAR), "| eksen:", len({e for _, e in OLGULAR}),
      "| siki demet: gorunen", len(g), "kapattigi", kapatilan)
print()
print("dokumun tasidigi olgu       eksen      siki demette durumu")
for o in KANAL["cekirdek-dokumu"]:
    print(f"  {o:26s}{dict(OLGULAR)[o]:11s}"
          f"{'zaten goruluyor' if o in g else 'GERI GELIYOR'}")
print()
print("kanal                   geri  acik yuzey  acik eksen  bedel  kosum")
for k in KANAL:
    y = yuzey(SIKI_DEMET, [k])
    b = KANAL_BEDELI[k]
    print(f"  {k:22s} {y['geri_gelen']:4d}  {y['acik_yuzey']:10d}  {y['acik_eksen']:10d}"
          f"  {b:5d}  {TABAN_SURE * (100 + b) // 100:5d}")
h = yuzey(SIKI_DEMET, list(KANAL))
bh = sum(KANAL_BEDELI.values())
print(f"  {'DORT KANAL BIRDEN':22s} {h['geri_gelen']:4d}  {h['acik_yuzey']:10d}"
      f"  {h['acik_eksen']:10d}  {bh:5d}  {TABAN_SURE * (100 + bh) // 100:5d}")
print()
print("siki demetin kapattigi olgu:", kapatilan)
print("dort kanalla geri gelen    :", h["geri_gelen"])
print("geri gelme orani           :", round(h["geri_gelen"] / kapatilan, 4))
print("hicbir kanalin getirmedigi :",
      sorted(set(o for o, _ in OLGULAR) - g - set(geri_gelen(SIKI_DEMET, list(KANAL)))))
print()
print("OLGU KUMESI SUPURMESI (dort kanal birden)")
de = [o for o, _ in OLGULAR
      if yuzey(SIKI_DEMET, list(KANAL),
               [x for x in OLGULAR if x[0] != o])["acik_yuzey"] != h["acik_yuzey"]]
buyuten = [e for e in sorted({e for _, e in OLGULAR})
           if yuzey(SIKI_DEMET, list(KANAL),
                    OLGULAR + [("yeni-olgu", e)])["acik_yuzey"] > h["acik_yuzey"]]
print("  cikarma: acik yuzey", h["acik_yuzey"], "| degistiren", len(de),
      "| degistirmeyen", len(OLGULAR) - len(de))
print("  ekleme : yuzeyi buyuten eksen", buyuten, "-> acik yuzey", h["acik_yuzey"] + 1)
```

```
olgu: 24 | eksen: 9 | siki demet: gorunen 10 kapattigi 14

dokumun tasidigi olgu       eksen      siki demette durumu
  kullanilan-bellek         kaynak     GERI GELIYOR
  yetenek-kumesi            yetki      GERI GELIYOR
  erisim-etiketi            etiket     zaten goruluyor
  kullanici-kimlik-esleme   kullanici  GERI GELIYOR

kanal                   geri  acik yuzey  acik eksen  bedel  kosum
  sistem-cagrisi-izleme     2          12           7     34   1340
  ornekleme-profili         1          11           7      3   1030
  cekirdek-ici-izleme       3          13           8      6   1060
  cekirdek-dokumu           3          13           7      0   1000
  DORT KANAL BIRDEN         8          18           8     43   1430

siki demetin kapattigi olgu: 14
dort kanalla geri gelen    : 8
geri gelme orani           : 0.5714
hicbir kanalin getirmedigi : ['bellek-siniri', 'makine-adi', 'makine-arayuzleri', 'makine-yonlendirme-tablosu', 'paylasilan-gecici-dizin', 'politika-kurallari']

OLGU KUMESI SUPURMESI (dort kanal birden)
  cikarma: acik yuzey 18 | degistiren 18 | degistirmeyen 6
  ekleme : yuzeyi buyuten eksen ['cekirdek'] -> acik yuzey 19
```

#### Kâhin, Kanal, Geri Gelen Olgu

Üç sayı yan yana durur. **Kâhin:** sürecin 24 olgusu, dokuz eksende. **Kanal:** çekirdek
dökümü dört olgu taşıyor. **Geri gelen olgu ve açık yüzey:** dördünden **3'ü** sıkı demetin
kapattığı olgulardır ve geri gelir; açık yüzey **10'dan 13'e** çıkar, açık eksen **7'de**
kalır.

Geri gelen üçlü `kullanilan-bellek`, `yetenek-kumesi` ve `kullanici-kimlik-esleme`dir. Üçü de
üç ayrı düzeneğin kapattığı olgulardır: sırasıyla denetim grubu, yetenek kırpma ve kullanıcı
ad alanı. Tek bir dosya, üç ayrı izolasyon kararını aynı anda geçersizleştirir. Dördüncü
olgu `erisim-etiketi` sıkı demet altında zaten görünüyordu; zorunlu etiket düzeneği kendi
ekseninde onu bilerek açık bırakıyor.

Açık eksenin 7'de kalması, önceki derste görülen ayrımı doğrular: döküm hiçbir kapalı ekseni
yeniden açmaz, üç açık ekseni kalınlaştırır. Buna karşın açık yüzeyi **13**'e çıkarır ve bu,
çekirdek içi izlemeyle birlikte dört kanalın en büyük tekil yüzeyidir. Bedeli en düşük olan
kanal, yüzeyi en çok büyüten iki kanaldan biridir.

#### Sıfır Bedel Nerede Ödeniyor

Koşum bedeli sıfırdır çünkü döküm koşan sürece dokunmaz. Bedel başka yerdedir ve üç
biçimde ortaya çıkar.

Birincisi **kalıcılıktır** (**GZ26**). Öteki üç kanal, açık oldukları sürece bilgi verir;
kapatıldıklarında görünürlük biter. Döküm bir **dosyadır**: bir kez yazıldığında, silinene
kadar taşıdığı olguları göstermeye devam eder. Bir saatliğine açılan izleme bir saatlik
görünürlük üretir, bir kez yazılan döküm ise saklandığı süre boyunca görünürlük üretir.

İkincisi dosyanın **içeriğidir**. Döküm, sürecin bellek görüntüsünü taşır; bellekte o anda
ne varsa dökümde de vardır. Bu, ölçüde sayılan dört olgunun çok ötesinde bir kümedir:
işlenen veri, oturum bilgileri, yapılandırma değerleri ve kimlik bilgileri bellekte
bulunabilir. **Çekirdek dökümü hassas veri taşır.** Bu kurs dökümün içinden gizli veri
çıkarma yordamını **yazmaz**; ölçtüğü şey dökümün hangi olguyu görünür kıldığıdır, o
görünürlüğün nasıl kötüye kullanılacağı değil.

Üçüncüsü **erişimdir**. Dökümün üretildiği yol ve dosyanın sahipliği, kimin okuyabileceğini
belirler. Paylaşılan bir dizine yazılan bir döküm, izolasyon demetinin dışındaki süreçler
için de okunabilir olabilir.

Daraltma yolları buradan doğrudan çıkar. Döküm üretimi **kapatılabilir** ya da süreç başına
kaynak sınırıyla boyut sınırına bağlanabilir; yetki yükselten süreçler için döküm üretimi
ayrıca engellenebilir. Dosya **dar izinlerle** ve yalnız ayrıcalıklı sürecin okuyabileceği
bir dizine yazılır, paylaşılan geçici dizinlere değil. Dökümler bir **saklama politikasına**
bağlanır: tanı bittiğinde silinir. Dinlenirken şifreleme, dosyayı yedeklere ve kopyalara
karşı da korur. Dördü birlikte, koşum bedeli sıfır olan kanalın gerçek bedelini yönetilebilir
kılar.

#### Dört Kanalın Toplamı

Dört kanal birlikte açıldığında sonuç kursun üçüncü iddiasıdır. Sıkı demet 24 olgudan
**14'ünü** kapatıyordu; dört kanal bunların **8'ini** geri getirir. Geri gelme oranı
**0,5714**'tür: **izolasyonun kapattığı olguların yarıdan fazlası gözlemle geri geliyor.**
Açık yüzey 10'dan **18'e**, açık eksen 7'den **8'e** çıkar. Toplam koşum bedeli **yüzde
43**'tür ve koşum 1430'a uzar; dördünü aynı anda açık tutmak ender bir kurulumdur, ama
kurulumun sınırını bu satır çizer.

Geri gelmeyen altı olgu da öğreticidir: `bellek-siniri`, `makine-adi`, `makine-arayuzleri`,
`makine-yonlendirme-tablosu`, `paylasilan-gecici-dizin` ve `politika-kurallari`. Bunlar
hiçbir kanalın listesinde yoktur ve kapalı kalırlar. İzolasyon, gözlem kanallarının
bakmadığı yerlerde çalışmaya devam eder; delinen şey izolasyonun tamamı değil, **kanalların
kesiştiği kısmıdır**.

Olgu kümesi süpürmesi son kez koşar. Çıkarma tarafında açık yüzeyi 24 olgunun **18'i**
değiştiriyor, **6'sı** değiştirmiyor — değiştirmeyenler tam olarak yukarıdaki altılıdır.
Ekleme tarafında yüzey yine yalnız **`cekirdek`** ekseninde büyüyor (18'den 19'a). Dört
dersin dördünde de aynı sonuç çıktı: kapatıcısı olmayan eksen, listeye eklenen her olguyu
doğrudan yüzeye yazar.

#### Özet

- Çekirdek dökümü dört olgu taşıyor; **3'ü** geri geliyor (`kullanilan-bellek`,
  `yetenek-kumesi`, `kullanici-kimlik-esleme`) ve açık yüzey **13** oluyor.
- Koşum bedeli **yüzde 0**'dır; bedel kalıcılıkta, dosyanın içeriğinde ve erişimindedir.
  Döküm **hassas veri taşır** ve saklama ile erişimi sınırlanmalıdır.
- Tek bir dosya üç ayrı düzeneğin — denetim grubu, yetenek kırpma, kullanıcı ad alanı —
  kararını aynı anda geçersizleştiriyor.
- Dört kanal birlikte: geri gelen **8**, açık yüzey **18**, açık eksen **8**, toplam bedel
  **yüzde 43**; geri gelme oranı **0,5714**.
- Altı olgu hiçbir kanalla geri gelmiyor; izolasyon kanalların bakmadığı yerde çalışmayı
  sürdürüyor.
- Daraltma: döküm üretiminin kapatılması ya da boyut sınırına bağlanması, dar izinli ve
  paylaşılmayan bir dizin, saklama politikası ve dinlenirken şifreleme.

#### Kurs Kapanışı

Kurs tek bir kuralla yürüdü: **bir izolasyonun sayısı kapattığı yüzey değil, açık bıraktığı
yüzeydir; neyin hâlâ görüldüğü yazılmayan izolasyon ölçülmemiş sayılır.** Aşağıdaki tablo
dokuz dersi aynı ölçüyle yan yana koyar. `gozlem` konusunun dört satırı bu konuda ölçülen
sayılardır; `izolasyon` konusunun beş satırı o derslerin kendi sayılarıyla doldurulur.

| Ders | Kâhin | İzolasyon ya da kanal | Açık yüzey / geri gelen |
|---|---|---|---|
| Ad Alanları | 24 olgu / 9 eksen | beş ad alanı | **15** görünen; ağ ve makine ad alanı kendi eksenini **tam** kapatan tek ikili |
| Denetim Grupları | 24 olgu / 9 eksen | + denetim grubu | **12** görünen; 3 olgu kapanıyor, `islemci-sayisi` **açık kalıyor** |
| Yetenekler | 24 olgu / 9 eksen | + yetenek kırpma | **11** görünen; yetki ekseninin iki olgusundan yalnız biri kapanıyor, **dosya yetkileri açık** |
| Zorunlu Erişim Denetimi | 36 erişim çiftinin 8'i gerekli | + zorunlu etiket | **10** görünen (sıkı demet); politikasız **28 fazla izin**, kaba politika **10**, dar politika **1**; denetim kipinde yüzey 10 yerine **11** |
| Konteyner Çalışma Zamanı | 24 olgu / 9 eksen | yaygın 6 düzenek / sıkı 8 düzenek | **12**'ye karşı **10**; iki düzenek yüzeyi yalnız **2 olgu** daraltıyor, **açık eksen 7'de duruyor** |
| Sistem Çağrısı İzleme | 24 olgu / 9 eksen | kanal: 5 olgu gösteriyor, bedel yüzde 34 | geri gelen 2, açık yüzey 12, açık eksen 7 |
| Başarım Profilleme | 24 olgu / 9 eksen | kanal: 3 olgu gösteriyor, bedel yüzde 3 | geri gelen 1, açık yüzey 11, açık eksen 7 |
| Çekirdek İçi İzleme | 24 olgu / 9 eksen | kanal: 5 olgu gösteriyor, bedel yüzde 6 | geri gelen 3, açık yüzey 13, açık eksen 8 |
| Çekirdek Dökümü Çözümlemesi | 24 olgu / 9 eksen | kanal: 4 olgu taşıyor, bedel yüzde 0 | geri gelen 3, açık yüzey 13, açık eksen 7 |

Kursun iki konusu birbirinin karşıtıydı ve ölçü bunu sayıyla yazdı: izolasyon 14 olgu
kapattı, gözlem 8'ini geri getirdi.

Bu ders M03 müfredatının da sonudur. Beş kurs tek bir ekseni izledi: **sistemin gerçek
durumu ile operatörün elindeki kanıt arasındaki farkı ölçmek.** Linux'a Giriş adları ve
izinleri okumayı, Kabuk Programlama komutu bir araca dönüştürmeyi, Sistem Yönetimi çıktıdan
çıkarılan tanının kaç kez yanlış olduğunu, Linux Ağ Yönetimi ve Sorun Giderme bir arızayı
katman katman daraltmayı, Çekirdek Arayüzleri ve İzolasyon da izolasyonun açık bıraktığı
yüzeyi ölçtü.

İki borç da ödendi. Ad alanı ve denetim grubu, Sistem Yönetimi kursunun servis yöneticisi
dersinde ve Linux Ağ Yönetimi kursunun erişim ve filtreleme bölümünde iki kez bu kursa havale
edilmişti. Bu kurs ikisini de kurdu ve ikisini de **açık bıraktıkları yüzeyle birlikte**
ölçtü: süreç ad alanı kendi süreç numarasını, denetim grubu işlemci sayısını açık bırakıyor,
gözlem kanalları ise ikisinin kapattığı olguların bir kısmını geri getiriyor.

Sırada Bilgisayar Ağları müfredatı var. Bu kursta ağ, yalnız bir **eksen** olarak geçti:
kapatılan üç olgu, yeniden açan bir kanal. Ağın kendisi — paketin iki uç arasında izlediği
yol, katmanların görevleri, adresleme ve protokoller — orada kurulur. İlk kurs İnternet Nasıl
Çalışır, bir adres satırına yazılan isteğin uçtan uca yolculuğunu izleyerek başlar.

