Computer Science

Учебник Операционные системы для начинающих

24 урока · 6 разделов · бесплатно, без регистрации

Операционная система — невидимый посредник между вашими программами и железом. Этот курс объясняет, как она устроена изнутри: что такое процессы и потоки, как планировщик делит процессор, почему возникают гонки данных и взаимоблокировки, как работает виртуальная память и из чего состоят файловые системы. Ключевые алгоритмы — планирование и замещение страниц — даны живыми запускаемыми симуляциями. Подойдёт студентам и разработчикам, которые готовятся к собеседованиям или хотят понимать, что происходит под капотом.

Курс «Операционные системы» состоит из 6 разделов и 24 уроков: Введение в ОС, Процессы и потоки, Планирование процессов, Синхронизация и взаимоблокировки, Управление памятью и Файловые системы и ввод-вывод. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Введение в ОС

    1. Что делает операционная система

      Операционная система как менеджер ресурсов и слой абстракций: зачем она нужна, какие проблемы решает и что прячет от программ.

    2. Ядро и пользовательский режим

      Режим ядра и пользовательский режим, кольца защиты и зачем процессору два уровня привилегий: как ОС защищает себя и железо от программ.

    3. Системные вызовы

      Что такое системный вызов, чем он отличается от обычной функции, какие бывают категории и как выглядит реальный код с fork, read и write.

    4. Прерывания и виды ОС

      Что такое прерывание, чем отличается аппаратное от программного, как работает обработчик и какие бывают виды операционных систем.

  2. 2 Процессы и потоки

    1. Что такое процесс

      Процесс как программа в исполнении: адресное пространство, состояния процесса, блок управления процессом (PCB) и переходы между состояниями.

    2. Потоки против процессов

      Чем поток отличается от процесса, что потоки разделяют, а что у них своё, плюсы и минусы многопоточности и модели потоков.

    3. Создание процессов: fork и exec

      Как создаются процессы: системные вызовы fork и exec, копирование адресного пространства, copy-on-write и дерево процессов.

    4. Переключение контекста и IPC

      Что такое переключение контекста и почему оно стоит дорого, а также обзор межпроцессного взаимодействия: каналы, разделяемая память и сигналы.

  3. 3 Планирование процессов

    1. Зачем нужен планировщик и его критерии

      Зачем ОС нужен планировщик процессов, какие задачи он решает и по каким критериям оценивают качество планирования: загрузка CPU, время ожидания и оборота.

    2. FCFS и SJF

      Невытесняющие алгоритмы планирования FCFS (первым пришёл — первым обслужен) и SJF (кратчайшая задача первой) с запускаемой симуляцией и расчётом метрик.

    3. Round Robin и приоритеты

      Алгоритм Round Robin с квантом времени и приоритетное планирование: запускаемая симуляция, выбор кванта, голодание и старение.

    4. Вытесняющее и невытесняющее планирование

      Разница между вытесняющим и невытесняющим планированием, их плюсы и минусы, и как современные ОС комбинируют алгоритмы в многоуровневых очередях.

  4. 4 Синхронизация и взаимоблокировки

    1. Состояние гонки и критическая секция

      Что такое состояние гонки (race condition) на наглядном примере, понятие критической секции и условия корректной синхронизации.

    2. Мьютексы и семафоры

      Примитивы синхронизации: мьютекс и семафор, разница между ними, и классическая задача производитель-потребитель с ограниченным буфером.

    3. Взаимоблокировки: четыре условия

      Что такое взаимоблокировка (deadlock), четыре необходимых условия Коффмана и стратегии борьбы: предотвращение, избегание, обнаружение.

    4. Обнаружение и избегание deadlock

      Обнаружение взаимоблокировки через поиск цикла в графе ожидания и идея алгоритма банкира для безопасного выделения ресурсов с запускаемыми примерами.

  5. 5 Управление памятью

    1. Иерархия памяти и виртуальная память

      Иерархия памяти от регистров до диска, принцип локальности и идея виртуальной памяти: зачем каждому процессу своё адресное пространство.

    2. Страничная организация памяти

      Как работает paging: деление памяти на страницы и кадры, таблица страниц и трансляция виртуального адреса в физический с запускаемым примером.

    3. Подкачка и замещение страниц

      Подкачка страниц и page fault, алгоритмы замещения FIFO, LRU и Optimal с запускаемой симуляцией и подсчётом промахов на одной строке обращений.

    4. Фрагментация и thrashing

      Внешняя и внутренняя фрагментация памяти и явление thrashing: когда система занята почти только подкачкой страниц вместо полезной работы.

  6. 6 Файловые системы и ввод-вывод

    1. Что такое файловая система

      Зачем нужна файловая система, что такое файл и метаданные, как устроены каталоги и пути, и какие абстракции она предоставляет программам.

    2. Inode и методы выделения блоков

      Идея inode как структуры с метаданными и указателями на блоки, и методы выделения дисковых блоков: непрерывный, связный и индексный.

    3. Буферизация, кэш и модели ввода-вывода

      Зачем нужны буферизация и дисковый кэш, как они ускоряют ввод-вывод, и чем блокирующий ввод-вывод отличается от неблокирующего и асинхронного.

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

      Журналируемые файловые системы и RAID для надёжности данных, плюс разбор частых вопросов про ОС на технических собеседованиях.