Навигация
Неделя 1 (09.02.2017)
Лекция: введение
- мотивация
- зачем нужны ОС
- унификация работы с железом
- разделение ресурсов
- зачем нужно понимать, как работают ОС
- модель ядра
- системные вызовы
- процесс с точки зрения ядра
- процессы в CPS-представлении
- обработка системных вызовов ядром
- fork, exec
- блокирующие системные вызовы
Практика
Архив того, что происходило на паре: [zip]
- иллюстрация системных вызовов
strace
strace
привычный hello
- в панике убегаем
- виновата стандартная библиотека
strace
hello
без библиотеки
- ещё раз с библиотекой, но теперь не убегаем
- библиотеки
- единицы трансляции
- объектные файлы
- статические, динамические
- собираем статическую .o
- собираем динамическую
- сборка (
make
)
- зачем
- граф зависимостей
- синтаксис
- переменные
- метапеременные
Неделя 2 (16.02.2017)
Лекция
- разделение памяти между процессами
- виртуальная память vs физическая память
- адресное пространство
- страничная адресация
- swap
- примитивная аллокация памяти
- процесс
- контекст
- информация: uid, pwd, etc.
- файловая система
- mount namespaces
- mount, umount
- inode
- файловые дескрипторы
- таблица файловых дескрипторов
- open, close
- chroot
- dup, dup2
- права доступа
- RWX пользователь/группа/остальные
- sticky bit, setuid, setgid
- chmod, chown
Практика
Неделя 3 (02.03.2017)
Лекция
- дерево процессов
- pid, ppid
- process namespaces
- zombie processes
- wait, waitpid
- fork bomb
- fork vs. clone
- threads
- пользователи
- uid
- setuid
- real/effective uid
Практика
Неделя 4 (16.03.2017)
Лекция
- IPC
- pipe, FIFO
- shared memory
- memory-mapped files
- shared anonymous memory
shm_open
- signals
- standard signals
- sigkill
- sigstop/sigcont
- sigint
- sigterm
- signal handlers,
sigaction
- realtime signals
- other IPC methods
Практика
Неделя 5 (23.03.2017)
Лекция
- Job control
- Группы процессов
- Создание группы
- foreground и background группы
- Группы-сироты
- Сессии
- Демонизация
- RTFM
- TLPI, глава 34
setsid(2)
, setpgid(2)
, tcsetpgrp(3)
Практика
Неделя 6 (30.03.2017)
Лекция
- Терминалы
- История
- UART
- Line discipline
- Драйвер TTY
- Псевдотерминалы
- Зачем
- ssh
- screen/tmux
- xterm и компания
- slave/master
posix_openpt(3)
, grantpt(3)
, unlockpt(3)
, ptsname(3)
- Состояния процессов
- Сигналы
- RTFM
Практика
Неделя 7 (06.04.2017)
Лекция
- Сокеты
- Семейство
AF_UNIX
, AF_INET
, AF_INET6
- Тип
SOCK_STREAM
, SOCK_DGRAM
, SOCK_SEQPACKET
SOCK_RAW
- Создание
socket
, bind
, listen
, accept
socket
, connect
- Примеры:
SOCK_STREAM
, SOCK_DGRAM
- Сеть
- Модель OSI
- Почему протоколов стек?
- Коммутация
- Протоколы
Практика
Неделя 8 (13.04.2017)
Лекция
- Мультиплексирование ввода-вывода
- Неблокирующий ввод-вывод
fork
на каждого клиента
select(2)
poll(2)
epoll(7)
- Level-triggered и edge-triggered методы
- Неблокирующий
accept
-сокет
- Сигналы
- self-pipe trick
pselect
, ppoll
, epoll_pwait
O_ASYNC
- Версия на realtime-сигналах
Практика
Неделя 9 (20.04.2017)
Лекция
- откуда берется первый код
- system firmware
- загрузчик
- MBR
- GRUB
- chainloading
- multiboot
- загрузка ядра
- настройка CPU
- initrd/initramfs
- pivot_root
Практика
Неделя 10 (27.04.2017)
Лекция
- объектный файл
- symbol table
- relocation table
- статическая линковка
- динамическая линковка/загрузка
- проблемы наивной реализации
- PIC
- GOT/PLT
- глобальные переменные на
x86_32
LD_PRELOAD
- ленивая загрузка
Практика
Неделя 11 (04.05.2017)
Лекция
- Кольца защиты
- Userspace (3)
- Kernelspace (2--0)
- Hypervisor (-1)
- SMM (-2)
- AMT (-3)
- Прерывания
- Real vs Protected mode
- PF, GPF, DF, ...
- Таймер, клавиатура, ...
- Triple Fault
- Реализация системных вызовов
int
sysenter
/sysexit
, syscall
/sysret
ud2
- vdso
- Paging
- Page Table/Page Directory/PDPT/PML4
- Physical Address Extension
- Большие страницы
- Биты
- Accessed, RW, Present, Dirty, ...
- TLB
- Трюки с Page Fault
- swap
- memory overcommit
- Memory-mapped files
Неделя 12 (11.05.2017)
Лекция
malloc
/free
vs mmap
/munmap
sbrk
и карта памяти процесса
- SLAB для данных одного размера
- Free List Allocator
- Улучшение времени поиска
- first-fit vs best-fit
- Фрагментация
- Композиция нескольких аллокаторов для разных размеров
- Hoard Allocator
- Превращение любого аллокатора в многопоточный
- False sharing
- (*) Реализация Thread-local storage
- VMA
- Реализация аналогично free list allocator