Ответ
Copy-on-write (CoW, копирование при записи) — это стратегия оптимизации ресурсов, при которой несколько процессов изначально совместно используют одни и те же данные (страницы памяти, блоки диска). Фактическое копирование данных происходит только тогда, когда один из процессов пытается изменить эти общие данные.
Классический пример в Linux: системный вызов fork().
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int data = 42;
pid_t pid = fork(); // Здесь происходит CoW для страниц памяти процесса
if (pid == 0) {
// Дочерний процесс
printf("Child: data = %dn", data); // Чтение — данные общие
data = 100; // Попытка записи — здесь ядро создает копию страницы памяти для дочернего процесса
printf("Child after write: data = %dn", data);
} else {
// Родительский процесс
wait(NULL);
printf("Parent: data is still %dn", data); // Родительская копия не изменилась
}
return 0;
}
Применение в DevOps и контейнеризации:
- Docker/OCI образы: Слои образов используют CoW. Контейнер запускается из общего read-only образа, а его writable слой (R/W) создается только при записи файлов. Это экономит дисковое пространство и ускоряет запуск.
# Два контейнера из одного образа Ubuntu делят базовые слои $ docker run -it ubuntu:22.04 bash $ docker run -it ubuntu:22.04 bash - Файловые системы: Btrfs, ZFS, OverlayFS используют CoW для снапшотов и эффективного хранения данных.
- Виртуализация: Гипервизоры используют CoW для быстрого создания клонов виртуальных машин.
Преимущества: Значительная экономия памяти/дискового пространства и ускорение операций создания процессов/контейнеров. Недостаток: Небольшие накладные расходы на первое обращение на запись (копирование) и возможная фрагментация.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶