Журналирование, 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, синхронизацию, виртуальную память и планирование.