Курс Вступ · Місія 0
Академічна↔ Сюжет С.І.Д.⌨️ команди 16 · 7 нових

Вступ. Організація роботи в курсі, робоче середовище та порядок здачі робіт

Мета

Ознайомитися зі структурою дисципліни, форматом лабораторних робіт і самостійної роботи, підготованим робочим середовищем (контейнер розробника) та порядком здачі й оцінювання робіт. Вступ не оцінюється і доступний упродовж усього семестру.

Структура дисципліни

Дисципліна складається з трьох модулів, кожен присвячений одній «межі» між програмою та машиною:

Модуль Тема Лекції Лабораторні Інструменти
1 Ізоляція процесів: межа середовища виконання 1–3 ЛР1–ЛР3 Docker, простори імен та cgroups Linux
2 Керування пам'яттю: межа безпеки 4–7 ЛР4–ЛР7 Rust, Cargo, перевірка запозичень
3 Від асемблера до WebAssembly: межа набору інструкцій 8–10 ЛР8–ЛР10 NASM/gcc/objdump, WABT, wasm-pack

До кожної лабораторної роботи передбачено дві теми самостійної роботи (СРС): перша готує до захисту рівня 2, друга — до розширення рівня 3. СРС окремо не оцінюється; оцінюється рівень, досягнутий у лабораторній роботі.

Кожна лабораторна робота доступна у двох еквівалентних за змістом версіях: сюжетній (основна; технічні відомості вплетені в наскрізну історію) та академічній (стисла методична форма). Перемикач між версіями розташований угорі сторінки.

Рівні виконання та оцінювання

Рівень Оцінка Зміст Форма перевірки
1 3 базове завдання за покроковою інструкцією з очікуваними результатами автотести
2 4 пояснення механізму та жива демонстрація захист (усно)
3 5 розширення: автоматизація, оптимізація або власне рішення за контрактом автотести і/або захист

Студент самостійно обирає рівень, на який претендує. Вищий рівень включає виконання попередніх.

Робоче середовище: контейнер розробника

Усі роботи виконуються в підготовленому контейнері розробника (devcontainer) з попередньо встановленими інструментами для відповідної роботи. Опис середовища кожної ЛР і СРС — базовий образ, інструменти та їхні версії, дозволені команди, порти, перевірки готовності — зафіксований у конфігурації курсу (environment/labNN.yml, environment/srsNN.yml) і використовується застосунком курсу при ініціалізації робочого простору студента; те саме середовище можна отримати в GitHub Codespaces навчального репозиторію.

Модуль Базове середовище
1 Ubuntu 24.04 з Docker Engine (Docker-in-Docker), curl, procps, iproute2, util-linux
2 Rust 1.79 (rustc, cargo, rustfmt, clippy), git
3 WABT 1.0.34, Node.js 22, gcc 13 / binutils, clang 18 / lld, Rust 1.79 з ціллю wasm32-unknown-unknown, wasm-pack, binaryen

Порядок роботи в середовищі:

  1. Відкрити лабораторну роботу в кабінеті курсу (або Codespaces). Контейнер створюється автоматично; у нього монтується навчальний репозиторій студента.
  2. Перевірити середовище: cat /etc/os-release | head -2 (очікується Ubuntu 24.04 або відповідний базовий образ) та команду перевірки інструмента роботи (docker version, cargo --version, wat2wasm --version).
  3. Виконувати роботу в терміналі контейнера; результати комітити в репозиторій. Зміни у файловій системі контейнера поза репозиторієм не зберігаються між сеансами.

Довідка з команд: man <команда> — повний посібник (вихід — q); <команда> --help (для підкоманд — docker run --help, cargo build --help) — стисла довідка. Файл README у каталозі роботи переглядається командою cat README.md або less README.md.

На кожній сторінці ЛР, СРС і конспекту наведено блок «Команди на цій сторінці» з однореченнєвим описом кожної команди терміналу, що трапляється в тексті; команди, які зустрічаються в курсі вперше, позначені.

Порядок здачі робіт

  1. Роботи виконуються в особистому навчальному репозиторії на GitHub; кожна ЛР — в окремому каталозі (lab01/, lab02/, …). Склад каталогу визначає розділ «Здача» відповідної ЛР та starter/README.md (контракт стартового коду).

  2. Звіт REPORT.md містить: варіант і його розрахунок, вивід команд кожного кроку порядку виконання, відповіді на контрольні питання.

  3. Здача — тегом submit/labNN у репозиторії:

    git add lab01 && git commit -m "lab01: рівень 2"
    git tag submit/lab01 && git push --tags
    

    Повторна здача — перевстановленням тегу: git tag -f submit/lab01 && git push -f --tags.

  4. Автотести (рівень 1, за наявності — рівень 3) запускаються за тегом. Рівень 2 захищається усно з живою демонстрацією.

Варіант. У більшості робіт параметри завдання (порт, ім'я контейнера, тестові дані) залежать від номера студента в списку групи N (зазвичай N % 4 або N % 3). Варіант і його розрахунок обов'язково зазначаються на початку REPORT.md.

Контрольні питання

  1. З яких модулів складається дисципліна і яка «межа» є предметом кожного?
  2. Чим відрізняються рівні 1, 2 і 3 виконання лабораторної роботи та форми їх перевірки?
  3. Яку роль відіграє СРС і як вона пов'язана з рівнями лабораторної роботи?
  4. Що таке контейнер розробника і чому середовище виконання робіт фіксується у конфігурації курсу?
  5. Якими командами перевірити базовий образ середовища та готовність основного інструмента роботи?
  6. Як отримати довідку з команди терміналу та як переглянути README у терміналі?
  7. Яким чином здається лабораторна робота і як виконати повторну здачу?
⌨️ КОМАНДИ НА ЦІЙ СТОРІНЦІ 16 · 7 нових

Кожна команда терміналу з цієї сторінки — одним реченням. Позначка нове — команда зустрічається в курсі вперше; далі вважаємо її знайомою.

git
Система керування версіями: історія змін, гілки, теги; здача робіт у курсі — через теги submit/labNN.
git tag
Позначає поточний коміт іменем (git tag submit/lab01) — так ти «здаєш» лабораторну.
git push
Відправляє коміти й теги у віддалений репозиторій (git push --tags).
curlнове
Консольний HTTP-клієнт: надсилає запит на URL і друкує відповідь (curl -i http://localhost:8080/ — разом із заголовками); також уміє завантажувати файли й скрипти.
rustcнове
Компілятор Rust; напряму викликається рідко (rustc --version, rustc --explain E0382 — розшифрувати помилку), зазвичай його запускає Cargo.
cargoнове
Система збірки й менеджер пакетів Rust: створює проєкт, тягне залежності (крейти), збирає, тестує, запускає.
wasm-packнове
Збирає крейт Rust у пакет для браузера: .wasm + JS-обгортка (glue code) через wasm-bindgen.
cat
Виводить вміст файлу в термінал повністю (від concatenate); зручно для коротких файлів і /proc/....
head
Показує перші рядки файлу або потоку (head -5 — перші п'ять).
docker version
Показує версії клієнта й демона — перевірка, що Docker встановлений і працює.
docker
Клієнт Docker: усі дії з образами й контейнерами — через його підкоманди (docker <підкоманда> --help — довідка).
wat2wasmнове
З WABT: перекладає текстовий формат WAT у бінарний модуль .wasm (wat2wasm m.wat -o m.wasm).
man
Відкриває посібник (manual) до команди: man ps; вихід — q.
docker run
Створює й запускає контейнер з образу (docker run -it ubuntu:24.04 bash — інтерактивно з терміналом; -d — у фоні; --rm — видалити після виходу; -p 8080:80 — прокинути порт).
cargo buildнове
Компілює проєкт у target/debug/; --release — з оптимізаціями у target/release/.
lessнове
Показує файл посторінково з прокруткою; вихід — клавіша q.

💡 Прочитати README прямо в терміналі: cat README.md (виведе весь файл) або less README.md (посторінково; вихід — клавіша q).
Довідка з будь-якої команди: man curl (повний посібник, вихід — q) або коротко curl --help; для підкоманд — docker run --help, cargo build --help.