---
title: 'Makine İmajları'
source: 'https://academia.sh/tr/kurslar/bulut-hesaplama-ve-ag/makine-imajlari'
course: 'Bulutta Hesaplama ve Ağ'
language: tr
updated: '2026-08-17T18:06:56+00:00'
license: 'CC BY-SA 4.0'
---

# Makine İmajları

Açılışta yapılan sekiz kalem tek tek imaja gömülür ve her kalemin kazandırdığı saniye ile ödettiği bayatlık yan yana sayılır; gömme düzeyi sıfırdan sekize taranarak açılış süresi, dış çağrı sayısı, bağımlılık türü, aylık pişirme yükü ve bayat kalem-günü çıkarılır; açılışta kalan işin hangi bağımlılığa bağlı olduğu ve o bağımlılık düştüğünde açılışın durup durmadığı ölçülür.

Önceki ders bir kalemi tek satırda geçti: yeniden yaratma 35 dakika. O sürenin içindeki asıl iş,
boş bir diskin çalışan bir makineye dönüşmesidir ve bu dönüşüm bir **makine imajından** başlar.
İmaj, örneğin kök diskine kopyalanan hazır dosya sistemidir; içinde ne varsa açılışta yapılmaz,
içinde ne yoksa açılışta yapılır.

M22/K05 bu imajın nasıl üretildiğini — pişirme akışını, sürümlenmesini ve yayılma penceresini —
ölçtü; o ölçüm burada tekrarlanmaz. Bu dersin ölçüsü tek bir eksendir: **açılış süresi**. Her kalem
için aynı soru sorulur — bu kalem imaja gömülürse açılış kaç saniye kısalır, karşılığında imaj kaç
gün daha bayat kalır ve ayda kaç kez yeniden pişirmek gerekir. Cevap kalemden kaleme değişir ve
değişimin büyüklüğü, "her şeyi imaja gömmek" ile "hiçbir şeyi gömmemek" arasındaki tercihi bir
zevk meselesi olmaktan çıkarır.

**BH7.** Bölgesel ölçüm ağının — su sayaçlarından okuma toplayan kurgu yazılımın — açılışında on
kalem yapılır; sekizi imaja gömülebilir, ikisi gömülemez. Süreler, boyutlar ve değişim aralıkları
kurgudur. **BH8.** Taban imaj 900 MB'dır, çekme hızı 60 MB/sn'dir, çekirdek açılışı her yolda
11 saniyedir. **BH9.** Pişirme haftada bir toplu yapılır; bir değişikliğin imaja girmek için
beklediği süre ortalama 3,5 gündür. **BH10.** Bir pişirme, sınamasıyla birlikte 18 dakika tutar.
**BH11.** Gömme sırası açgözlüdür: pişirme başına en çok saniye kazandıran kalem önce gömülür.
**BH12.** Bir kalemin "kritik" olması, o kalem eksikken servisin başlamaması demektir; ayrım
kurgudur.

## Bir Kalemin İki Yüzü

Açılışta yapılan her iş bağımsız bir kalemdir ve her kalemin imaja gömülmesi ayrı bir karardır.
Kalem gömülünce açılıştaki saniyesi kalkar ama imajın boyutu büyür — ve büyüyen imajın çekilmesi
açılışa saniye ekler. Net kazanç bu ikisinin farkıdır. Bedel ise başka bir birimdedir: kalem ne
kadar sık değişiyorsa, imaja gömülmesi o kadar sık yeniden pişirme ister.

```js
// olcum-agi/imaj-kalemleri.mjs — bir kalemi imaja gommenin acilis kazanci ve tazelik bedeli (model)

export const HIZ = 60, TABAN_MB = 900, CEKIRDEK = 11;   // MB/sn, taban imaj, cekirdek acilisi (sn)
export const PISIRME_BEKLEME = 3.5, PISIRME_DK = 18;    // haftalik toplu pisirmede ortalama bekleme

// [ad, acilista sn, imaja ekledigi MB, kac gunde bir degisir, bagimlilik, cagri, kritik mi]
export const KALEM = [
  ["cekirdek paketleri", 46, 320, 45, "paket deposu", 6, true],
  ["calisma zamani", 38, 210, 30, "paket deposu", 3, true],
  ["olcum aracisi", 14, 60, 14, "paket deposu", 2, false],
  ["gunluk yonlendirme", 8, 20, 21, "paket deposu", 1, false],
  ["sertifika demeti", 9, 12, 7, "yapilandirma sunucusu", 1, true],
  ["uygulama ikilisi", 22, 90, 2, "yapim deposu", 1, true],
  ["ag ayarlari", 6, 2, 3, "yapilandirma sunucusu", 1, true],
  ["ortam degiskenleri", 3, 1, 1, "yapilandirma sunucusu", 1, false],
];
// Gomulemez kalemler: acilista her zaman yapilir.
export const GOMULEMEZ = [["dugum sirri", 7, "sir deposu", 1, true],
  ["saat esitleme", 4, "zaman sunucusu", 1, false]];

export const olc = ([ad, sn, mb, gun, , cagri]) => ({
  ad, kazanc: sn - mb / HIZ, pisirme: 30 / gun, cagri,
  bayat: (30 / gun) * PISIRME_BEKLEME,
});
// Acgozlu sira: pisirme basina en cok saniye kazandiran kalem once gomulur.
export const SIRA = [...KALEM].sort((a, b) =>
  olc(b).kazanc / olc(b).pisirme - olc(a).kazanc / olc(a).pisirme);

if (import.meta.url === `file://${process.argv[1]}`) {
  console.log("kalem".padEnd(22) + "acilista".padEnd(10) + "imaja".padEnd(9) + "cekme".padEnd(9) +
    "net kazanc".padEnd(12) + "ayda pisirme".padEnd(14) + "bayat kalem-gun".padEnd(17) + "oran");
  for (const k of SIRA) {
    const o = olc(k);
    console.log(o.ad.padEnd(22) + `${k[1]} sn`.padEnd(10) + `${k[2]} MB`.padEnd(9) +
      `${(k[2] / HIZ).toFixed(1)} sn`.padEnd(9) + `${o.kazanc.toFixed(1)} sn`.padEnd(12) +
      o.pisirme.toFixed(2).padEnd(14) + o.bayat.toFixed(1).padEnd(17) +
      (o.kazanc / o.pisirme).toFixed(1));
  }
  const g = GOMULEMEZ.reduce((t, x) => t + x[1], 0);
  console.log(`\ngomulemez kalemler: ${GOMULEMEZ.map((x) => x[0]).join(", ")} — ` +
    `${g} sn ve ${GOMULEMEZ.length} cagri her acilista kalir`);
}
```

```
kalem                 acilista  imaja    cekme    net kazanc  ayda pisirme  bayat kalem-gun  oran
cekirdek paketleri    46 sn     320 MB   5.3 sn   40.7 sn     0.67          2.3              61.0
calisma zamani        38 sn     210 MB   3.5 sn   34.5 sn     1.00          3.5              34.5
olcum aracisi         14 sn     60 MB    1.0 sn   13.0 sn     2.14          7.5              6.1
gunluk yonlendirme    8 sn      20 MB    0.3 sn   7.7 sn      1.43          5.0              5.4
sertifika demeti      9 sn      12 MB    0.2 sn   8.8 sn      4.29          15.0             2.1
uygulama ikilisi      22 sn     90 MB    1.5 sn   20.5 sn     15.00         52.5             1.4
ag ayarlari           6 sn      2 MB     0.0 sn   6.0 sn      10.00         35.0             0.6
ortam degiskenleri    3 sn      1 MB     0.0 sn   3.0 sn      30.00         105.0            0.1

gomulemez kalemler: dugum sirri, saat esitleme — 11 sn ve 2 cagri her acilista kalir
```

Son sütun kalemleri iki kümeye ayırır. `cekirdek paketleri` 40,7 saniye kazandırır ve ayda 0,67 kez
pişirme ister; oran 61'dir. `ortam degiskenleri` 3 saniye kazandırır ve ayda 30 kez pişirme ister;
oran 0,1'dir. İki kalem arasında **altı yüz kat** fark vardır ve fark boyuttan değil, **değişim
sıklığından** gelir. İmaja gömülmeye en uygun kalem, açılışta en uzun süren kalem değildir; uzun
sürüp seyrek değişen kalemdir.

`uygulama ikilisi` satırı bu ayrımın en görünür yeridir. Açılışta 22 saniye tutar — listenin en
uzun üçüncü kalemi — ama iki günde bir değişir. Gömülürse ayda 15 pişirme tetikler ve 52,5 bayat
kalem-günü biriktirir. Aynı 20,5 saniyeyi `calisma zamani` yalnız 3,5 bayat kalem-güne satar.
Sezgi "en büyük kalemi göm" der; oran sütunu "en durağan kalemi göm" der.

Gömülemez iki kalem ölçünün alt sınırını çizer. Düğüm sırrı imaja yazılamaz, çünkü imajı okuyabilen
herkes sırrı da okur; saat eşitlemesi imajdan gelemez, çünkü ölçülen şey açılış anıdır. Bu iki
kalem 11 saniye ve 2 çağrıdır ve hiçbir pişirme kararı bunları kaldıramaz.

## Gömme Düzeyi Taraması

Tek tek kalemler karşılaştırıldı; sıradaki soru kaç tanesinin gömüleceğidir. Aşağıdaki tarama oran
sütununa göre sıralanmış listeyi baştan alır ve sıfırdan sekize kadar her düzeyde açılışı yeniden
hesaplar.

```js
// olcum-agi/gomme-taramasi.mjs — kac kalem imaja gomulurse acilis ne oluyor (model)
import { HIZ, TABAN_MB, CEKIRDEK, PISIRME_DK, KALEM, GOMULEMEZ, SIRA, olc } from "./imaj-kalemleri.mjs";

export const duzey = (k) => {
  const gomulu = SIRA.slice(0, k), acik = SIRA.slice(k);
  const mb = TABAN_MB + gomulu.reduce((t, x) => t + x[2], 0);
  const sure = CEKIRDEK + mb / HIZ + acik.reduce((t, x) => t + x[1], 0) +
    GOMULEMEZ.reduce((t, x) => t + x[1], 0);
  const cagri = acik.reduce((t, x) => t + x[5], 0) + GOMULEMEZ.reduce((t, x) => t + x[3], 0);
  const tur = new Set([...acik.map((x) => x[4]), ...GOMULEMEZ.map((x) => x[2])]).size;
  return { k, mb, sure, cagri, tur,
    pisirme: gomulu.reduce((t, x) => t + olc(x).pisirme, 0),
    bayat: gomulu.reduce((t, x) => t + olc(x).bayat, 0),
    son: k ? SIRA[k - 1][0] : "—" };
};

if (import.meta.url === `file://${process.argv[1]}`) {
  console.log("gomulu".padEnd(9) + "son gomulen".padEnd(22) + "imaj".padEnd(10) +
    "acilis".padEnd(10) + "dis cagri".padEnd(11) + "bagimlilik".padEnd(12) +
    "ayda pisirme".padEnd(14) + "pisirici dk".padEnd(13) + "bayat kalem-gun");
  for (let k = 0; k <= KALEM.length; k++) {
    const d = duzey(k);
    console.log(`${k}/${KALEM.length}`.padEnd(9) + d.son.padEnd(22) + `${d.mb} MB`.padEnd(10) +
      `${d.sure.toFixed(1)} sn`.padEnd(10) + String(d.cagri).padEnd(11) + `${d.tur} tur`.padEnd(12) +
      d.pisirme.toFixed(2).padEnd(14) + Math.round(d.pisirme * PISIRME_DK).toString().padEnd(13) +
      d.bayat.toFixed(1));
  }
  const s = duzey(0), t = duzey(4), h = duzey(KALEM.length);
  console.log(`\nilk dort kalem: acilis ${(s.sure - t.sure).toFixed(1)} sn kisaliyor, ` +
    `${t.bayat.toFixed(1)} bayat kalem-gunune mal oluyor`);
  console.log(`son dort kalem: acilis ${(t.sure - h.sure).toFixed(1)} sn kisaliyor, ` +
    `${(h.bayat - t.bayat).toFixed(1)} bayat kalem-gunune mal oluyor`);
  console.log(`saniye basina bayatlik: ilk dortte ${(t.bayat / (s.sure - t.sure)).toFixed(2)}, ` +
    `son dortte ${((h.bayat - t.bayat) / (t.sure - h.sure)).toFixed(2)} kalem-gun/sn`);
}
```

```
gomulu   son gomulen           imaj      acilis    dis cagri  bagimlilik  ayda pisirme  pisirici dk  bayat kalem-gun
0/8      —                     900 MB    183.0 sn  18         5 tur       0.00          0            0.0
1/8      cekirdek paketleri    1220 MB   142.3 sn  12         5 tur       0.67          12           2.3
2/8      calisma zamani        1430 MB   107.8 sn  9          5 tur       1.67          30           5.8
3/8      olcum aracisi         1490 MB   94.8 sn   7          5 tur       3.81          69           13.3
4/8      gunluk yonlendirme    1510 MB   87.2 sn   6          4 tur       5.24          94           18.3
5/8      sertifika demeti      1522 MB   78.4 sn   5          4 tur       9.52          171          33.3
6/8      uygulama ikilisi      1612 MB   57.9 sn   4          3 tur       24.52         441          85.8
7/8      ag ayarlari           1614 MB   51.9 sn   3          3 tur       34.52         621          120.8
8/8      ortam degiskenleri    1615 MB   48.9 sn   2          2 tur       64.52         1161         225.8

ilk dort kalem: acilis 95.8 sn kisaliyor, 18.3 bayat kalem-gunune mal oluyor
son dort kalem: acilis 38.3 sn kisaliyor, 207.5 bayat kalem-gunune mal oluyor
saniye basina bayatlik: ilk dortte 0.19, son dortte 5.42 kalem-gun/sn
```

Tarama tek bir eğri değil, **iki farklı eğridir**. Açılış süresi 183 saniyeden 48,9 saniyeye
düşerken azalan getiri verir: ilk dört kalem 95,8 saniye kazandırır, son dört kalem 38,3 saniye.
Bayatlık ise ters yönde ve hızlanarak artar: ilk dört kalem 18,3 bayat kalem-günü, son dört kalem
207,5 bayat kalem-günü ödetir. Son satır iki eğriyi tek sayıya çevirir — kazanılan saniyenin fiyatı
ilk dörtte 0,19 kalem-gün, son dörtte 5,42 kalem-gündür. **Yirmi sekiz kat.**

Pişirici dakika sütunu aynı şeyi işgücü tarafından yazar. Dört kalem gömülüyken imaj üretici ayda
94 dakika çalışır; sekiz kalem gömülüyken 1161 dakika — yaklaşık on dokuz saat. Bu, kimsenin
plana yazmadığı ama her ay ödenen bir bedeldir ve pişirme hattının kendisinin izlenmesi gereken
bir altyapı parçası olmasının nedenidir.

Bağımlılık sütunu ise düz düşmez, **basamak basamak** düşer: 5 türden 4'e dördüncü kalemde, 3'e
altıncıda, 2'ye sekizincide iner. Neden ilk dört kalemin dördünün de aynı bağımlılığı — paket
deposunu — kullanmasıdır. Bir bağımlılık türü ancak ona bağlı **son** kalem de gömüldüğünde
kalkar; ilk üç kalemi gömmek çağrıyı 18'den 7'ye indirir ama tür sayısını hiç değiştirmez.

## Açılışta Kalanın Yüzeyi

Çağrı sayısı bir yüzey ölçüsüdür: her çağrı, açılış anında ayakta olması gereken ayrı bir şeydir.
Ama bütün çağrılar aynı ağırlıkta değildir. Kimi kalem eksikse servis hiç başlamaz, kimi kalem
eksikse makine açılır ve eksik çalışır.

```js
// olcum-agi/acilis-yuzeyi.mjs — acilista kalan isin dis yuzeyi ve karar defteri (model)
import { KALEM, GOMULEMEZ, SIRA } from "./imaj-kalemleri.mjs";
import { duzey } from "./gomme-taramasi.mjs";

const DUZEY = [0, 4, 8];
const acik = (k) => [...SIRA.slice(k).map(([ad, sn, , , b, c, kr]) => ({ ad, sn, b, c, kr })),
  ...GOMULEMEZ.map(([ad, sn, b, c, kr]) => ({ ad, sn, b, c, kr }))];

const etki = (k, bag) => {
  const l = acik(k).filter((x) => x.b === bag);
  if (!l.length) return "etkisiz";
  if (l.some((x) => x.kr)) return "acilis basarisiz";
  return `-${l.reduce((t, x) => t + x.sn, 0)} sn, ${l.length} kalem eksik`;
};

// [kalem, kimde, geri alinabilir mi]
const KARAR = [["imaja hangi kalem girer", "sende", "evet — yeni imaj"],
  ["taban isletim sistemi surumu", "sende", "evet — yeni imaj"],
  ["pisirme sikligi", "sende", "evet"],
  ["yayimlanmis imajin icerigi", "sende", "hayir — ayni kimlikle degismez"],
  ["imaja giren sir", "sende", "hayir — kopyalandiysa silmek yetmez"],
  ["ornege verilen baslangic betigi", "sende", "hayir — yaratildiktan sonra degismez"],
  ["imaj deposunun dayanikliligi", "saglayicida", "—"],
  ["imajin kopyalanma hizi", "saglayicida", "—"],
  ["taban imajin altindaki sanallastirma", "saglayicida", "—"]];

if (import.meta.url === `file://${process.argv[1]}`) {
  const BAG = [...new Set([...KALEM.map((x) => x[4]), ...GOMULEMEZ.map((x) => x[2])])];
  console.log("dusen bagimlilik".padEnd(24) +
    DUZEY.map((k) => `${k}/8 gomulu`.padEnd(22)).join("").trimEnd());
  for (const b of BAG)
    console.log((b.padEnd(24) + DUZEY.map((k) => etki(k, b).padEnd(22)).join("")).trimEnd());
  console.log("");
  console.log("duzey".padEnd(9) + "acilis".padEnd(10) + "acik kalem".padEnd(13) +
    "kritik acik kalem".padEnd(20) + "acilisi durduran bagimlilik");
  for (const k of DUZEY) {
    const a = acik(k);
    console.log(`${k}/8`.padEnd(9) + `${duzey(k).sure.toFixed(1)} sn`.padEnd(10) +
      String(a.length).padEnd(13) + String(a.filter((x) => x.kr).length).padEnd(20) +
      String(new Set(a.filter((x) => x.kr).map((x) => x.b)).size));
  }
  const say = (v) => KARAR.filter((x) => x[1] === v).length;
  console.log(`\nkarar defteri: ${say("sende")} kalem elde, ${say("saglayicida")} kalem saglayicida`);
  for (const [ad, , geri] of KARAR.filter((x) => x[2].startsWith("hayir")))
    console.log(`  geri alinamaz — ${ad.padEnd(32)} ${geri.slice(8)}`);
}
```

```
dusen bagimlilik        0/8 gomulu            4/8 gomulu            8/8 gomulu
paket deposu            acilis basarisiz      etkisiz               etkisiz
yapilandirma sunucusu   acilis basarisiz      acilis basarisiz      etkisiz
yapim deposu            acilis basarisiz      acilis basarisiz      etkisiz
sir deposu              acilis basarisiz      acilis basarisiz      acilis basarisiz
zaman sunucusu          -4 sn, 1 kalem eksik  -4 sn, 1 kalem eksik  -4 sn, 1 kalem eksik

duzey    acilis    acik kalem   kritik acik kalem   acilisi durduran bagimlilik
0/8      183.0 sn  10           6                   4
4/8      87.2 sn   6            4                   3
8/8      48.9 sn   2            1                   1

karar defteri: 6 kalem elde, 3 kalem saglayicida
  geri alinamaz — yayimlanmis imajin icerigi       ayni kimlikle degismez
  geri alinamaz — imaja giren sir                  kopyalandiysa silmek yetmez
  geri alinamaz — ornege verilen baslangic betigi  yaratildiktan sonra degismez
```

Açılışı durduran bağımlılık sayısı 4'ten 1'e iner ve bu, saniyeden bağımsız bir kazançtır. Hiçbir
kalem gömülmemişken dört ayrı sistemin aynı anda ayakta olması gerekir; sekizi gömülmüşken tek bir
sistem — sır deposu — kalır. Sır deposu satırı üç sütunda da aynıdır ve gömme kararıyla
değiştirilemez. Zaman sunucusu satırı ise tek "yumuşak" satırdır: düşerse açılış tamamlanır,
makine 4 saniye erken ve saati eşitlenmemiş olarak iş almaya başlar.

Bu satır sessiz bir tuzağın yeridir. Ölçüm ağının okumaları zaman damgalıdır; saati eşitlenmemiş
bir makinenin ürettiği kayıtlar başarısız açılıştan daha zor fark edilir, çünkü makine sağlıklı
görünür. Kritik olmayan kalemin eksik açılması bir hata değil, bir karardır.

Karar defteri dokuz kalemin **altısını elde bırakır**: imaja ne gireceği, taban sürümün ne olacağı,
ne sıklıkta pişirileceği ve üç geri alınamayan kalem. Sağlayıcıda kalan üçü — imaj deposunun
dayanıklılığı, kopyalanma hızı, altındaki sanallaştırma — çekme saniyesini belirler ama seçilemez.

Geri alınamayan üç kalem birbirinden farklı biçimde geri alınamaz. Yayımlanmış imajın içeriği
aynı kimlikle değişmez; düzeltmek yeni bir imaj demektir ve o imaj eskisini silmez. İmaja giren
sır, imaj bir kez kopyalandıysa silinerek geri alınamaz; bu yüzden sır deposu çağrısı bir eksiklik
değil, bir tercihtir. Örneğe verilen başlangıç betiği ise örnek yaratılırken verilir ve o örnek
yaşadığı sürece değişmez — betiği düzeltmek çalışan makineyi düzeltmez, yalnız **bundan sonra
yaratılacak** makineleri düzeltir.

## Özet

- Bir kalemin gömülmeye uygunluğunu boyutu değil değişim sıklığı belirler: `cekirdek paketleri`
  pişirme başına 61 saniye kazandırır, `ortam degiskenleri` 0,1 saniye — altı yüz kat fark.
- `uygulama ikilisi` açılışta 22 saniye tutar ama iki günde bir değişir; gömülürse ayda 15 pişirme
  ve 52,5 bayat kalem-günü ödetir, aynı saniyeyi `calisma zamani` 3,5 kalem-güne satar.
- Gömme düzeyi taramasında açılış 183 saniyeden 48,9 saniyeye iner; kazanılan saniyenin fiyatı ilk
  dört kalemde 0,19, son dört kalemde 5,42 bayat kalem-günüdür.
- Dış çağrı 18'den 2'ye düşer ama bağımlılık türü basamak basamak iner: bir tür ancak ona bağlı son
  kalem de gömüldüğünde kalkar; pişirici yükü 94 dakikadan 1161 dakikaya çıkar.
- Açılışı durduran bağımlılık 4'ten 1'e iner, sıfıra inmez; zaman sunucusu düşerse makine açılır ve
  saati eşitlenmemiş olarak iş alır — başarısız açılıştan daha zor görülen bir durumdur.
- Dokuz kalemin altısı elde, üçü sağlayıcıdadır; geri alınamayan üç kalem yayımlanmış imajın
  içeriği, imaja giren sır ve örneğe verilen başlangıç betiğidir.

## Sonraki Adım

Bu ders açılışın ne kadar sürdüğünü ve neye bağlı olduğunu saydı, ama makinenin **ne kadar
yaşayacağını** hiç sormadı. Bütün hesap örneğin istendiği sürece ayakta kalacağı varsayımı üzerine
kuruldu: 183 saniye de 48,9 saniye de bir kez ödenir, sonra makine iş yapmaya devam eder.

Kiralamanın bir de kesintili biçimi vardır — kapasite ucuza verilir, karşılığında sağlayıcı onu
kısa bir bildirimle geri alabilir. Önceki kurs bu biçimin fiyat farkını ölçtü; burada fiyat girdi
olur ve soru iş türüne kayar. Sonraki ders dört iş türünü kesintili kapasitede koşturur ve sorar:
bildirim süresi kısaldıkça hangi iş ne kadar iş kaybediyor, yeniden başlamak ne tutuyor ve hangi
iş kesintiye hiç dayanmıyor?
