Курс знайомить студентів із основними абстракціями та компонентами операційних систем, принципами їх функціонування та способами взаємодії із ними.
Мета та цілі курсу: оскільки більшість прикладних комп’ютерних систем покладаються на ті чи інші операційні системи, розуміти їх особливості та організацію важливо для ефективного використання на всіх рівнях – від користувачів та системних адміністраторів до розробників вбудовуваного, прикладного, високопродуктивного чи системного програмного забезпечення. Прослухавши цей курс, студенти зможуть більш ефективно взаємодіяти із комп’ютером на цих рівнях.
Формат курсу: лекцій, практичні заняття, консультації, робота над проектами, іспит у формі усної співбесіди.
В процесі курсу студенти ознайомляться із:
▪ Ключовими поняттями та абстракціями операційних систем: процес, динамічна бібліотека, віртуальна пам’ять, системний виклик, драйвер тощо.
▪ Основними підсистемами операційних систем, їх структурою та принципами функціонування: диспетчером задач, менеджером пам’яті, файловими системами, засобами вводу-виводу тощо.
▪ Принципами написання коду режиму ядра та створення драйверів.
▪ Способами побудови інтерфейсів користувача, зокрема – консольних та GUI, з точки зору операційної системи.
▪ Системним програмуванням систем, що відповідають стандарту POSIX, як синхронного, так і асинхронного: робота із файлами, керування процесами та потоками, засоби IPC (Inter-process communication), діагностика стану системи. ▪ Особливостями операційних систем реального часу.
По ключових темах виконуватимуться практичні завдання:
- Створення скриптів bash та інших командних оболонок.
- Робота із навчальною операційною системою xv6.
- Використання файлових системних викликів для створення аналогу утиліти cat.
- Розробка простого командного інтерпретатора.
- Створення аналогу утиліти ls.
- Розширення командного інтерпретатора – підтримка перенаправлення, конвеєр, фонове виконання програм.
- Розширення командного інтерпретатора – підтримка мережевого під’єднання.
- Робота із бінарними даними на прикладі читання образу диску FS FAT16/FAT32/ext2 FS.
- Створення простого модуля ядра Linux для Raspberry Pi.
- Пропонується також серія додаткових завдань для поглибленого вивчення окремих тем.