Перейти до вмісту

Лабораторні

Доріжок дві, і йдуть вони паралельно теорії. На доріжці A ви пишете системний код на C і реалізуєте механізми, про які читали. На доріжці B адмініструєте систему й спостерігаєте ті самі механізми в живій машині.

Одна від одної доріжки не залежать. Можна пройти якусь одну, можна обидві, можна брати роботи вибірково: кожна самодостатня й містить перелік модулів, які треба прочитати перед нею.

Три рівні складності означають глибину роботи, проходити їх по порядку не обов’язково. Базовий перевіряє, чи ви зрозуміли механізм. Середній вимагає його застосувати. Просунутий вимагає виміряти результат і пояснити його.

До кожної роботи є автоперевірка: скрипт, який ганяє ваш розв’язок і каже, що саме не працює. Курс розрахований на самостійне проходження, тому перевірка не залежить від того, чи хтось загляне у ваш код.

Сторінки робіт побудовані однаково. «Мета» каже, що ви зможете після роботи і де це знадобиться. «Завдання» описує результат, межі й критерій «готово». «Перед початком» перелічує, що прочитати й підготувати. Далі йдуть етапи, перевірка й часті помилки.

Вам знадобиться Linux, який не шкода зламати. Частина робіт передбачає розмітку дисків, збирання RAID і доведення системи до аварійного режиму, тож на робочій машині цього робити точно не варто.

Перевірки, заготовки й скрипти встановлення лежать в одному архіві:

Terminal window
curl -fsSL https://os.easy-tech.blog/os-course-labs.tar.gz | tar xz
cd os-course-labs

Далі всі команди зі сторінок робіт виконуються саме з цього каталогу. Якщо потрібен один-єдиний файл, його можна взяти окремо — наприклад https://os.easy-tech.blog/labs/a1-shell/check.sh.

Еталонних розв’язків в архіві немає.

В архіві є каталог setup/ з Vagrant-машиною на Debian 12, у якій уже стоїть усе потрібне:

Terminal window
cd setup && vagrant up && vagrant ssh

Усередині стоять gcc, make, gdb, strace, ltrace, perf, bpftrace, lsof, sysstat, numactl, libfuse3-dev та libcap2-bin, а до машини підключено чотири додаткові диски по 1 ГіБ для B5.

Якщо Vagrant вам не підходить, setup/provision.sh поставить те саме на будь-який свіжий Debian чи Ubuntu:

Terminal window
sudo bash setup/provision.sh
Terminal window
cd labs/a1-shell
./check.sh ./myshell

Скрипт друкує список перевірок і показує, які з них не пройшли. Оцінок він не виставляє й нікуди нічого не надсилає.

Роботи доріжки B перевіряються інакше, бо там немає програми, яку можна запустити. Кожна з них закінчується переліком тверджень, і кожне з цих тверджень ви маєте вміти підтвердити командою на власній системі.

Майже кожна робота просить щось «записати у звіт». Звіт тут не документ для викладача, його ніхто не збиратиме. Це текстовий файл поруч із кодом, на сторінку-дві, у якому ви фіксуєте:

  • числа, які отримали: заміри, розміри, кількість винятків;
  • відповіді на запитання, поставлені в етапах роботи;
  • що не запрацювало з першого разу і чому.

Поки число лише на екрані, здається, що все зрозуміло. Коли треба написати, чому воно саме таке, прогалини стають видимими. Для робіт доріжки B звіт заміняє автоперевірку: він і є результатом роботи.

Доріжка A — системне програмування на C

Section titled “Доріжка A — системне програмування на C”
Робота Рівень Спирається на
A1 Власний shell базовий 3, 6
A2 Симулятор планувальника базовий 7
A3 Producer–consumer середній 8, 9
A4 Власний аллокатор середній 10, 12
A5 Заміщення сторінок просунутий 11, 12
A6 Файлова система через FUSE просунутий 15
A7 HTTP-сервер у трьох редакціях просунутий 13

Доріжка B — адміністрування та інфраструктура

Section titled “Доріжка B — адміністрування та інфраструктура”
Робота Рівень Спирається на
B1 Встановлення системи базовий 5
B2 Власний mini-top базовий 2, 6
B3 cgroups і OOM killer середній 12, 17
B4 Контейнер руками середній 16, 17
B5 LVM і RAID просунутий 14
B6 Профілювання просунутий 13, 18