Журналирование, RAID и вопросы собеседований

Как файловые системы переживают сбои, как диски защищают от поломок, и что любят спрашивать про ОС на интервью.

Журналирование сначала записывает намерение об изменении в журнал, чтобы после сбоя файловая система осталась согласованной; RAID объединяет несколько дисков ради надёжности и/или скорости.

Зачем журналирование

Представьте: ОС обновляет файл — нужно изменить и данные, и метаданные (размер, блоки). Если питание пропадёт между этими операциями, файловая система окажется в противоречивом состоянии: метаданные говорят одно, данные — другое. После такого диск может «развалиться».

Журналируемая файловая система (ext4, NTFS, XFS) решает это так: прежде чем менять сам диск, она записывает в специальный журнал план изменений. Дальше выполняет их. Если сбой случился посреди — после перезагрузки ОС читает журнал и либо доводит операцию до конца, либо откатывает. Файловая система всегда остаётся согласованной.

Аналогия: бухгалтер сначала пишет в черновик «перевести 100 со счёта A на счёт B», и только потом проводит. Если его прервали, по черновику видно, что хотели сделать, и можно завершить корректно.

RAID: много дисков как один

RAID (Redundant Array of Independent Disks) объединяет несколько физических дисков в один логический. Цель — надёжность (пережить поломку диска) и/или скорость. Основные уровни:

УровеньИдеяЧто даёт
RAID 0чередование (striping) без избыточностискорость, но нет защиты
RAID 1зеркалирование (одинаковые копии)защита: пережить отказ диска
RAID 5чередование + распределённая чётностьзащита и скорость, экономно
RAID 10зеркало + чередованиескорость и защита, но дороже

Важный нюанс: RAID — не замена резервным копиям. Он защищает от поломки железа, но не от случайного удаления файла или вируса — это удаление просто продублируется на все диски.

Частые вопросы на собеседованиях

Темы ОС обожают на интервью. Вот типичные вопросы и краткая суть ответа:

  • Процесс или поток? Процесс — изолированное адресное пространство; потоки внутри процесса делят память. Потоки дешевле, но опаснее (гонки).
  • Что такое deadlock и его условия? Вечное взаимное ожидание; четыре условия Коффмана; устранить любое — нет deadlock.
  • Чем мьютекс отличается от семафора? Мьютекс — один владелец (взаимное исключение); семафор — счётчик на N доступов.
  • Как работает виртуальная память? Своё адресное пространство у процесса, трансляция через таблицу страниц и MMU, недостающее — на диске.
  • Что такое context switch и почему он дорогой? Сохранение/восстановление состояния; страдают кэш и таблица страниц.
  • FCFS, SJF, Round Robin — в чём разница? Порядок прихода; короткие первыми; квант времени по кругу.
  • Что происходит при page fault? Страницы нет в памяти, ОС грузит её с диска, при нехватке кадров выбирает жертву по алгоритму замещения.
  • Что такое race condition? Зависимость результата от порядка выполнения потоков над общими данными; лечится синхронизацией.

Мини-симуляция: применяем журнал после сбоя

Покажем идею журналирования: незавершённые операции из журнала доводятся до конца при восстановлении.

# Журнал: каждая запись — намерение (committed=True значит можно применять)
journal = [
    {"op": "write", "file": "a.txt", "committed": True},
    {"op": "write", "file": "b.txt", "committed": True},
    {"op": "write", "file": "c.txt", "committed": False},  # прервано сбоем
]

print("Восстановление после сбоя:")
applied = 0
for entry in journal:
    if entry["committed"]:
        print(f"  применяем: {entry['op']} {entry['file']}")
        applied += 1
    else:
        print(f"  откатываем (не зафиксировано): {entry['op']} {entry['file']}")

print(f"Применено операций: {applied}, откачено: {len(journal) - applied}")
print("Файловая система согласована")

Вывод:

Восстановление после сбоя:
  применяем: write a.txt
  применяем: write b.txt
  откатываем (не зафиксировано): write c.txt
Применено операций: 2, откачено: 1
Файловая система согласована

Итог

  • Журналирование пишет план изменений в журнал, чтобы пережить сбой без потери согласованности.
  • После сбоя ОС по журналу доводит операции до конца или откатывает их.
  • RAID объединяет диски ради скорости (striping) и/или надёжности (зеркало, чётность).
  • RAID защищает от поломки железа, но не заменяет резервные копии.
  • На собеседованиях по ОС спрашивают про процессы/потоки, deadlock, синхронизацию, виртуальную память и планирование.
Проверьте себя
1. Зачем нужна журналируемая файловая система?
AЧтобы ускорить чтение файлов
BЧтобы после сбоя питания файловая система осталась в согласованном состоянии
CЧтобы шифровать данные на диске
DЧтобы экономить место на диске
2. Что обеспечивает RAID 1 (зеркалирование)?
AМаксимальную скорость без защиты данных
BСжатие данных
CЗащиту: данные дублируются, поэтому отказ одного диска не теряет их
DЗамену резервным копиям
3. Почему RAID не заменяет резервные копии?
ARAID работает медленнее бэкапа
BRAID нельзя использовать с журналированием
CRAID хранит только метаданные
DRAID защищает от поломки железа, но случайное удаление файла продублируется на все диски