Специальная цена

Системное программирование

От железа и ОС — к производительному коду

06 августа

3 месяца

Онлайн

Пн/Чт 20:00 Мск

Для кого этот курс?

  • Разработчики на системных языках (C, С++, Rust), желающие расширить свои знания
  • Backend-разработчики, которые планируют или работают с высокопроизводительными системами
  • Архитекторы и тимлиды, которым необходимо проектировать производительные компоненты и проводить разбор инцидентов/узких мест

Необходимые знания

  • Опыт программирования на C/C++
  • Знания структур данных

Чему научится студент на курсе?

  • Понимать, как код исполняется от железа к ОС: CPU/регистры, иерархия памяти и кэши, стек/куча, виртуальная память (MMU/TLB)
  • Разбираться, как устроен исполняемый файл и загрузка: статическая/динамическая линковка, анатомия ELF
  • Понимать устройство ядра как менеджера ресурсов: системные вызовы, прерывания, page fault, copy-on-write, процессы/потоки и планирование
  • Писать системный код на уровне API ОС: управление процессами, низкоуровневый I/O, управление памятью (brk/sbrk, mmap), многопоточность и синхронизация (pthread, mutex, semaphore, condition variables)
  • Работать с IPC: сигналы, пайпы/FIFO, shared memory (shm_open + mmap) и принципы корректной синхронизации между процессами
  • Отлаживать и профилировать системный/многопоточный код: strace, gdb, valgrind, AddressSanitizer/ThreadSanitizer

Почему стоит освоить?

 
Курс позволит закрыть разрыв между написанием кода и пониманием почему он не работает или тормозит на уровне ОС и железа. Часто эти знания критично необходимы для собеседований и первых задач в системной/инфраструктурной разработке.
 
Вы сможете на практике разобраться как устроена ОС: процессы/потоки, память, IPC. Также, в программу курса включен блок про отладку и профилирование.

Процесс обучения

Занятия в OTUS — это не заранее отснятый материал. Вебинары проходят в режиме реального времени, где преподаватели-практики рассказывают об актуальных кейсах и инструментах, которые нужны им в работе сейчас. Вы сможете активно участвовать голосом, практиковаться, задавать вопросы и получать обратную связь. Такой формат дает реальный результат. 

А если вы не смогли посетить занятие в реальном времени, то сможете посмотреть его в записи и задать вопрос преподавателю в закрытом чате.

Портфолио

Индивидуальная разработка итоговой проектной работы

Обучайтесь у экспертов


Программу ведут действующие специалисты

Перспективы

 

Получите знания, которые помогут повысить вашу востребованность и доход

Партнеры

Многие студенты еще во время прохождения первой части программы находят или меняют работу, а к концу обучения могут претендовать на повышение в должности.

  • Карьерные мероприятия в сообществе
    Публичный разбор резюме
    Публичное прохождение собеседования и воркшопы
  • Разместите свое резюме в базе OTUS и сможете получать приглашения на собеседования от партнеров
* Информация в этом разделе не предназначена для корпоративного обучения
Формат обучения

Интерактивные вебинары


2 онлайн-трансляции по 2 ак.часа в неделю. Доступ к записям и материалам остается навсегда

Практика

 

Домашние задания + проектная работа, для усиления вашего портфолио и компетенций

Активное комьюнити

Живое общение с преподавателями на вебинарах, переписки в чате и развёрнутые ответы при проверке ДЗ

Программа

Аппаратная архитектура

В этом модуле мы разберёмся, как наш код взаимодействует с реальным железом компьютера. Узнаем, почему память работает медленнее процессора, и как заставить CPU не простаивать в ожидании данных. Научимся читать ассемблерный выхлоп компилятора и спроектируем бенчмарк, чтобы пощупать влияние архитектуры процессора на исполнение кода.

Тема 1: Архитектура CPU и Ассембли

Тема 2: Иерархия памяти и Кэши

Тема 3: Branch prediction

Тема 4: SIMD // ДЗ

Операционная система как менеджер

В этом модуле мы заглянем внутрь операционной системы и поймем, по каким правилам ядро Linux управляет нашими программами. Разберёмся, как устроена виртуальная память процесса, как процессор ускоряет работу с ней через аппаратные кэши TLB, и в чем физическая разница между стеком и кучей. Мы изучим анатомию файловых систем на уровне диска, разберем магию слоев VFS и Page Cache, а также научимся управлять потоками и системными сигналами.

Тема 1: Пространство ядра и системные вызовы

Тема 2: Процессы, потоки и шедулинг

Тема 3: Виртуальная память процесса

Тема 4: Аппаратное ускорение виртуальной памяти

Тема 5: Layout данных и Stack Frame

Тема 6: Сигналы ОС // ДЗ

Тема 7: Файловая система

Системное программирование

В финальном модуле мы научимся писать высокопроизводительный софт и управлять ресурсами Linux из кода. Вы разберете сетевой стек, решите проблему False Sharing и соберете собственный Event Loop на базе `epoll`. В конце мы перейдем на `io_uring` для асинхронного I/O и освоим отладку/профилирование через `strace` и `perf`.

Тема 1: Управление процессами в коде // ДЗ

Тема 2: Аллокаторы и управление памятью

Тема 3: Конкурентность и низкоуровневая синхронизация

Тема 4: Конкурентность и синхронизация на уровне компилятора и языка

Тема 5: Примитивы синхронизации ОС // ДЗ

Тема 6: IPC

Тема 7: Сеть

Тема 8: Мультиплексирование I/O

Тема 9: Продвинутый I/O

Тема 10: Отладка и профилирование системного кода

Проектная работа

Заключительный месяц курса посвящён проектной работе. Свой проект — это то, что интересно писать слушателю. То, что можно создать на основе знаний, полученных на курсе.

Тема 1: Консультация по проектам и домашним заданиям // Проект

Тема 2: Защита проектных работ и подведение итогов

Также вы можете получить полную программу, чтобы убедиться, что обучение вам подходит

Выпускной проект

 
Тема проектной работы: "Микро-Docker: разработка собственной примитивной системы контейнеризации"
 
Студент реализует минимальную систему контейнеризации, которая запускает процесс в изолированном окружении и управляет его жизненным циклом. В результате проектной работы должен быть работающий прототип микро-контейнера и краткая документация (архитектура, ограничения, инструкция запуска).

Преподаватели

Руководитель курса

Артём Токарев

Lead Rust Developer

Сергей Кольцов

Владимир Щерба

Фото в обработке

Николай Макаров

Фото в обработке

Петр Усольцев

старший инженер-программист

ООО "Стайл Телеком"

Егор Мищерин

Разработчик С++

NDA

Александр Першин

Ольга Плисенко

Зав. сектором разработки

ЦИГИТ АГУ

Эксперты-практики делятся опытом, разбирают кейсы студентов и дают развернутый фидбэк на домашние задания

Прошедшие
мероприятия

Артём Токарев
Открытый вебинар
malloc — кто же ты на самом деле?
Владимир Щерба
Открытый вебинар
Продвинутое использование отладчика GDB

Этот курс может оплатить ваш работодатель

Обучайтесь за счёт работодателя или разделите оплату 50/50
  • Подробно расскажем об интересующем вас курсе
  • Объясним, как договориться с работодателем
  • Сообщим стоимость обучения и варианты оплаты
  • Ответим на вопросы
  • Предоставим шаблон договора и счёт на оплату

Подтверждение знаний и навыков

OTUS осуществляет лицензированную образовательную деятельность.

Вы получите сертификат о прохождении обучения, а также можете получить удостоверение о повышении квалификации.

После обучения:

  • Удостоверение о повышении квалификации: если вы успешно защитили выпускной проект и готовы предоставить копию документа о высшем или среднем профессиональном образовании

  • Доступ к учебным материалам курса

  • Ваш личный проект, который поможет проходить собеседования

Частые вопросы

Смогу ли я совмещать учебу с работой?
Да. Программа курса рассчитана на студентов, у которых мало времени. Лекции проводим дважды в неделю, домашние задания — не чаще 1 раза в неделю.
Обязательно ли выполнять и защищать выпускной проект?
Для получения сертификата OTUS и УПК (удостоверение повышения квалификации государственного образца) необходимо сдать проект. Кроме того, проект необязательно защищать перед аудиторией, а можно сдать в чате с преподавателем. Для получения УПК также понадобится предъявить документ об образовании.
Обязательно ли выполнять все домашние задания?
Да, если хотите хорошо отточить навыки. На курсе будут практические домашние задания, их выполнение занимает примерно 2-3 часа.
Что, если в середине курса я не смогу продолжать обучение?
Вы можете бесплатно перейти в другую группу. Но только один раз.
Я могу вернуть деньги?
Да, мы можем вернуть деньги за то время курса, которое вы ещё не успели отучиться. Например, если курс длится пять месяцев, а вы отучились один, мы вернём деньги за оставшиеся четыре месяца за вычетом фактически понесенных расходов.
Может ли мой работодатель оплатить курс?
Да. Когда свяжетесь с нашим менеджером, уточните, что оплачивать курс будет ваш работодатель.
Остались вопросы?
Оставляйте заявку и задавайте вопросы менеджеру, команда курса с ним на связи и постарается дать вам исчерпывающую информацию.