Курс состоит из 23 занятий по двум дисциплинам: «Системное программирование» и «Архитектура и эксплуатация высоконагруженных систем». На первой ты узнаешь о работе Linux и изучишь эффективное низкоуровневое программирование с использованием знаний об устройстве ОС и взаимодействии с ней. В рамках второй — освоишь теорию сетевых технологий и распределенных алгоритмов, познакомишься с современными инструментами разработки и эксплуатации высоконагруженных систем. С перечнем изучаемых тем в рамках курса можно ознакомиться на страницах двух дисциплин «Архитектура и эксплуатация высоконагруженных систем» и «Системное программирование».
Уверенное владение любым языком программирования. Базовые навыки работы в командной строке и знание языка Си.
Онлайн-интенсивы проходят в вечернее время. В конце каждой лекции студенты получают домашнее задание на закрепление пройденных тем. В конце предмета «Системное программирование» — итоговый экзамен.
Проверка знаний любого языка программирования, языка C и навыка работы в командной строке.
Поступить могут студенты и аспиранты всех курсов и факультетов МФТИ, знающие какой-либо язык программирования.
Ноутбук с установленным Linux.
8 ак. часов в неделю без учета времени на выполнение домашнего задания.
Онлайн.
Обучение бесплатно.
Другие вопросы можно посмотреть здесь.
Linux vs Unix. Microkernel. FreeBSD, Ubuntu, Mac, System III, V, Unix time-sharing system, 4.4BSD.
Стандарты: ISO C, POSIX, Single Unix Specifications. Организации: Open Group, IEEE.
Ядро. Процесс и его представление в ядре. Состояния процесса, цикл жизни.
Типы совместной работы процессов: preemptive и cooperative. Планировщики и
IO Bound vs Processor Bound процессы, особенности планирования. Вызов nice, приоритеты. Единица планирования - timeslice. Планировщики в ядре, CFS. Вызовы sched_yield и sched_setaffinity.
Режимы работы: привелигированныи, обычныи. Память, разбивка на секции. Ресурсы процесса - дескрипторы, локи. Прерывания процесса: исключения, аппаратные, шедулинг. Контексты работы: пользователь, ядро, сигнал. Обращения к ядру - системные вызовы: как определяются, передача параметров, возврат результата.
Виртуальная и физическая память. Cache, cache line, cache levels, cache coherence, false sharing. High and low memory, области памяти. Page tables. Память ядра и процесса пользователя, разметка, вызовы: kmalloc, vmalloc, brk, madvice, mmap, pmap. Malloc, его альтернативы.
Прерывания. Аппаратные и программные, их природа, назначение. Обработка прерываний. Сигналы - зачем нужни они, как устроены. Обработка сигналов, особенности, контекст выполнения, longjump, top and bottom halves. /proc/interrupts. signal, sigaction.
Файловая система и ядро. Виртуальная ФС. Файлы и типы: block, char, network. Представление в ядре: inode. Секторы. Планировщики IO операций - elevator-ы: Linus, Deadline, Anticipatory, CFQ, Noop. Page cache. Page nowrite/writethrough/ writeback. Работа с файлом - buffered, unbuffered, line.
Потоки в linux, представление в ядре. Отличие от процессов. POSIX.
Синхронизация: mutex, rw-lock, condition variable, spin-lock, barrier. Атомарные операции. Атрибуты потоков и объектов синхронизации. Взаимодействие с сигналами.
IPC. Pipe, FIFO. XSI: message queue, semaphore, shared memory. POSIX semaphore. Sockets: API, byte orderding. Доменные сокеты.
Сеть, краткая история от ARPANET. Каноническая модель OSI, реальная TCP/IP, стек
протоколов. Реализация сетевого взаимодействия в ядре. Пользовательский
интерфейс socket, connect, close, send, recv. TCP и UDP.
Advanced IO. Неблокирующие IO операции. Блокировка файла: flock, lockf, fcntl. Multiplexed IO: select, poll, kqueue. Async IO: aio_read/write.
Пользователи, группы, права. Атрибуты и права доступа файлов и процессов. Группы процессов, сессии. /etc/passwd, /etc/group. Sticky bit. Демонизация процесса. Атрибуты глобальных объектов: локов, памяти.
Экзамен