From 0f76e153de3388fd890ef127f8512d0e6ea38e72 Mon Sep 17 00:00:00 2001 From: e1turin Date: Wed, 3 Sep 2025 23:32:59 +0300 Subject: [PATCH 1/6] upd. clarify work precess --- doc/process.md | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/doc/process.md b/doc/process.md index 3d22f47..7cde206 100644 --- a/doc/process.md +++ b/doc/process.md @@ -13,40 +13,44 @@ Выдайте доступ на чтение вашего репозитория преподавателю практики. `Settings -> Collaborators and teams -> Add people`. -## Шаг 2. Ход лабораторной работы +## Шаг 2. Выполнение задания 1. Отведите ветку от `main`. Ветка должна называться `lab-N`, где `N` -- номер лабораторной работы, например, `lab-1`. -2. Напишите код. +2. Напишите код, сохраняя детальную историю коммитов. -3. Сделайте PR из `lab-N` в `main`. В "Приложении А" вы найдете требования к описанию PR. +3. Выгрузите коммиты в удаленный репозиторий. -4. Пройдите автоматические проверки. +4. Сделайте Pull Request (PR) из `lab-N` в `main`, согласно требованим к оформлению из "Приложении А". -Note. Возможно, вы будете не согласны с некоторыми ошибками линтера. Очевидно странные вы можете отключить, но в комментариях к ПРу аргументировать свое решение. +5. Пройдите автоматические проверки. + +**Note**. Возможно, вы будете не согласны с некоторыми ошибками линтера. Очевидно странные проверки вы можете отключить, но в комментариях к PR-у необходимо аргументировать свое решение. ## Шаг 3. Прохождение ревью кода -1. Призовите преподавателя практики на ревью. +1. Дайте преподавателю практики право на просмотр и ревью вашего рерпозитория. Когда задание будет выполнено, назначьте его ревьювером и упомяните в обсуждении PR. 2. Исправьте замечания. 3. Получите ОК от преподавателя и дополнительное задание. +4. Выполните дополнительное задание. + ## Шаг 4. Защита лабораторной работы 1. Напишите отчет в соответствии с требованиями в "Приложении Б". -2. Отправьте преподавателю на почту. Тема письма должна совпадать с заголовком PRа. +2. Отправьте отчет преподавателю на почту. Тема письма должна совпадать с заголовком PRа. -3. Приходите на занятие готовыми ответить на вопросы. +3. Приходите на занятие готовыми ответить на вопросы и продемонстрировать выполнение доп. задания. 4. Пройдите защиту. 5. Получите оценку. -## Приложение А. Формат описания MR +## Приложение А. Формат описания Pull Request (PR) Title: `[БП]ЛР[1-4] <Группа> <Фамилия> <Имя>` @@ -89,3 +93,5 @@ P33000 Иванов Иван Иванович 6. ФИО преподавателя практики полностью 7. Год 3. Ссылка в начале секции "Ход работы". +4. Промежуточные результаты выполнения основного и дополнительного задания. +5. Заключение. From 4b303529461f236245479482ab92297a409fcc08 Mon Sep 17 00:00:00 2001 From: e1turin Date: Wed, 3 Sep 2025 23:51:03 +0300 Subject: [PATCH 2/6] Remove hardcoded points. Add todos --- lab/vtfs/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lab/vtfs/README.md b/lab/vtfs/README.md index 21b260a..8ac9837 100644 --- a/lab/vtfs/README.md +++ b/lab/vtfs/README.md @@ -149,6 +149,8 @@ int vtfs_fill_super(struct super_block *sb, void *data, int silent) { Аргументы `data` и `silent` нам не понадобятся. В этой функции мы используем ещё одну (пока) неизвестную функцию — `vtfs_get_inode`. Она будет создавать новую структуру `inode`, в нашем случае — для корня файловой системы: + + ```c struct inode* vtfs_get_inode( struct super_block* sb, @@ -245,6 +247,8 @@ drwxrwxrwx 1 root root 0 Oct 24 15:52 vt После этого мы сможем перейти в `/mnt/vt`, но не можем вывести содержимое директории. На этот раз нам понадобится не `i_op`, а `i_fop` — структура типа [file_operations][21]. Реализуем в ней первую функцию — `iterate`. + + ```c struct file_operations vtfs_dir_ops = { .iterate = vtfs_iterate, @@ -324,6 +328,8 @@ struct dentry* vtfs_lookup( Теперь научимся создавать и удалять файлы. Добавим ещё два поля в `inode_operations` — `create` и `unlink`: Функция `vtfs_create` вызывается при создании файла и должна возвращать новую `inode` с помощью `d_add`, если создать файл получилось. Рассмотрим простой пример: + + ```c int vtfs_create( struct inode *parent_inode, @@ -503,7 +509,6 @@ int64_t vtfs_http_call( - Готовность запустить тесты по просьбе преподавателя -- За хранилище данных в RAM вы сможете получить не более 10 баллов за ЛР, а за реализацию с сервером до 15 баллов. [1]: https://en.wikipedia.org/wiki/Monolithic_kernel [2]: https://en.wikipedia.org/wiki/Ext4 From ce0fa86934854e09c1bac3d6a8172f96b93aaae8 Mon Sep 17 00:00:00 2001 From: e1turin Date: Sat, 6 Sep 2025 22:47:19 +0300 Subject: [PATCH 3/6] vtsh: Clarify work process --- lab/vtsh/README.md | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/lab/vtsh/README.md b/lab/vtsh/README.md index 02e9073..cc2ef1c 100644 --- a/lab/vtsh/README.md +++ b/lab/vtsh/README.md @@ -1,5 +1,9 @@ # Базовый трек. Лабораторная работа 1 +## Введение + +Базовый пользовательский интерфейс операционной системы - это терминал, а имея возможность запускать программы можно расширить возможности данной операционной системы. В этой лабораторной работе вам предлагается реализовать простую командную оболочку наподобие Bash и еще ряд вспомогательных утилит для проверки работоспособности разработанного приложения и исследования поведения операцонной системы. + ## Часть 1. Запуск программ Необходимо реализовать собственную оболочку командной строки - shell. Shell должен предоставлять пользователю возможность запускать программы на компьютере с переданными аргументами командной строки и после завершения программы показывать реальное время ее работы (подсчитать самостоятельно как «время завершения» – «время запуска»). @@ -8,43 +12,50 @@ Разработать комплекс программ-нагрузчиков по варианту, заданному преподавателем. Каждый нагрузчик должен, как минимум, принимать параметр, который определяет количество повторений для алгоритма, указанного в задании. Программы должны нагружать вычислительную систему, дисковую подсистему или обе подсистемы сразу. Необходимо скомпилировать их без опций оптимизации компилятора. -Перед запуском нагрузчика, попробуйте оценить время работы вашей программы или ее результаты (если по варианту вам досталось измерение чего либо). Постарайтесь обосновать свои предположения. Предположение можно сделать, основываясь на свой опыт, знания ОС и характеристики используемого аппаратного обеспечения. +Перед запуском нагрузчика, попробуйте оценить время работы вашей программы или ее результаты (если по варианту вам досталось измерение чего либо). Обоснуйте свои предположения. Продолжительность каждого запуска должна занимать определенное время, по крайней мере, минуту. -1. Запустите программу-нагрузчик и зафиксируйте метрики ее работы с помощью инструментов для профилирования. Сравните полученные результаты с ожидаемыми. Постарайтесь найти объяснение наблюдаемому. +1. Запустите программу-нагрузчик и зафиксируйте метрики ее работы с помощью инструментов для мониторинга и профилирования. Сравните полученные результаты с ожидаемыми. Объяснените наблюдаемое поведение. 2. Определите количество нагрузчиков, которое эффективно нагружает все ядра процессора на вашей системе. Как распределяются времена USER%, SYS%, WAIT%, а также реальное время выполнения нагрузчика, какое количество переключений контекста (вынужденных и невынужденных) происходит при этом? -3. Увеличьте количество нагрузчиков вдвое, втрое, вчетверо. Как изменились времена, указанные на предыдущем шаге? Как ведет себя ваша система? +3. Увеличьте количество нагрузчиков вдвое, втрое, вчетверо. Как изменились исследуемые показатели? Почему? -4. Объедините программы-нагрузчики в одну, реализованную при помощи потоков выполнения, чтобы один нагрузчик эффективно нагружал все ядра вашей системы. Как изменились времена для того же объема вычислений? Запустите одну, две, три таких программы. +4. Объедините программы-нагрузчики в одну, реализованную при помощи потоков выполнения, чтобы один нагрузчик эффективно нагружал все ядра вашей системы. Как изменились времена для того же объема вычислений? Запустите одну, две, три таких программы. Как изменились исследуемые показатели? Почему? -5. Добавьте опции агрессивной оптимизации для компилятора. Как изменились времена? На сколько сократилось реальное время исполнения программы нагрузчика? +5. Добавьте опции агрессивной оптимизации для компилятора. Как изменились исследуемые показатели? На сколько сократилось реальное время исполнения программы нагрузчика? Почему? ## Требования к реализации 1. Программа (комплекс программ) должна быть реализован на языке C. -2. Дочерние процессы должны быть созданы через заданные системные вызовы операционной системы, с обеспечением корректного запуска и и завершения процессов. Запрещено использовать высокоуровневые абстракции над системными вызовами. Необходимо использовать, процедуры libc. +2. Дочерние процессы должны быть созданы через указанные в варианте системные вызовы операционной системы, с обеспечением корректного запуска и завершения процессов. Запрещено использовать высокоуровневые абстракции над системными вызовами. Необходимо использовать, процедуры libc. ## Требования к отчету и защите -1. Отчет должен содержать титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО преподавателя практики, номера вашей группы, варианта ЛР. +Отчет должен содержать: + +1. Титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО преподавателя практики, номера вашей группы, варианта ЛР. + +2. Текст задания в соответствии с вариантом. + +3. Листинг исходного кода всех программ, написанных в рамках данной ЛР. + +4. Предположения о свойствах программ-нагрузчиков -2. Отчет должен содержать текст задания в соответствии с вариантом. +5. Результаты измерений и метрик программ-нагрузчиков, полученных инструментами мониторинга. Должно быть описано, какие утилиты запускались, с какими параметрами и выводом. -3. Отчет должен содержать листинг исходного кода всех программ, написанных в рамках данной ЛР. +6. Сравнительный анализ ожидаемых и фактических значений исследованных показателей. -4. Отчет должен содержать предположения о свойствах программ-нагрузчиков +7. Заключение. -5. Отчет должен содержать результаты измерений и метрик программ-нагрузчиков, полученных инструментами мониторинга. Должно быть описано, какие утилиты запускались, с какими параметрами и выводом. +Студент должен быть готов: -6. Отчет должен содержать сравнительный анализ ожидаемых и фактических значений. +1. Продемонстрировать работоспособность Shell и предоставить исходный код. -7. Отчет должен содержать вывод. +2. Воспроизвести ход работы в рамках части 2 и продемонстрировать схожие результаты работы программ-нагрузчиков. -8. Студент должен быть готов продемонстрировать работоспособность Shell и предоставить исходный код. +3. Ответить на вопросы по реализации приложений и контрольные вопросы. -9. Студент должен быть готов воспроизвести ход работы в рамках части 2 и продемонстрировать схожие результаты работы программ-нагрузчиков. ## Источники From 91939c807b5608da581dd89d0c1ce8549fd0e290 Mon Sep 17 00:00:00 2001 From: e1turin Date: Sun, 21 Sep 2025 20:09:15 +0300 Subject: [PATCH 4/6] (vtsh) Clarify task and add Part 2 (bash operators). --- lab/vtsh/README.md | 86 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 70 insertions(+), 16 deletions(-) diff --git a/lab/vtsh/README.md b/lab/vtsh/README.md index cc2ef1c..d97e407 100644 --- a/lab/vtsh/README.md +++ b/lab/vtsh/README.md @@ -2,39 +2,88 @@ ## Введение -Базовый пользовательский интерфейс операционной системы - это терминал, а имея возможность запускать программы можно расширить возможности данной операционной системы. В этой лабораторной работе вам предлагается реализовать простую командную оболочку наподобие Bash и еще ряд вспомогательных утилит для проверки работоспособности разработанного приложения и исследования поведения операцонной системы. +Базовый пользовательский интерфейс операционной системы - это терминал, с его +помощью можно взаимодействовать с ОС, давать ей команды и запускать программы и +наблюдать результат их выполнения. А имея возможность запускать программы можно +расширить возможности данной ОС. В данной лабораторной работе вам предлагается +реализовать простую командную оболочку наподобие Bash вместе с несколькими +вспомогательными утилитами для проверки работоспособности разработанного +приложения и исследования поведения операцонной системы. ## Часть 1. Запуск программ -Необходимо реализовать собственную оболочку командной строки - shell. Shell должен предоставлять пользователю возможность запускать программы на компьютере с переданными аргументами командной строки и после завершения программы показывать реальное время ее работы (подсчитать самостоятельно как «время завершения» – «время запуска»). +Необходимо реализовать собственную оболочку командной строки - shell. Shell +должен предоставлять пользователю возможность запускать программы на компьютере +с переданными аргументами командной строки и отображать время их выполнения +(расчитать как разность времени завершения и времени запуска). -## Часть 2. Мониторинг и профилирование +## Часть 2. Логические операторы -Разработать комплекс программ-нагрузчиков по варианту, заданному преподавателем. Каждый нагрузчик должен, как минимум, принимать параметр, который определяет количество повторений для алгоритма, указанного в задании. Программы должны нагружать вычислительную систему, дисковую подсистему или обе подсистемы сразу. Необходимо скомпилировать их без опций оптимизации компилятора. +В разработанное приложение командной оболочки необходимо добавить поддержку +логических операторов (аналогичных операторам из Bash) согласно выданному варианту: -Перед запуском нагрузчика, попробуйте оценить время работы вашей программы или ее результаты (если по варианту вам досталось измерение чего либо). Обоснуйте свои предположения. Продолжительность каждого запуска должна занимать определенное время, по крайней мере, минуту. +1. `&&` - логическое И (AND), +2. `||` - логическое ИЛИ (OR), +3. `;` - последовательное выполнение, +4. `&` - выполнение в фоне. -1. Запустите программу-нагрузчик и зафиксируйте метрики ее работы с помощью инструментов для мониторинга и профилирования. Сравните полученные результаты с ожидаемыми. Объяснените наблюдаемое поведение. +## Часть 3. Анализ системы и мониторинг -2. Определите количество нагрузчиков, которое эффективно нагружает все ядра процессора на вашей системе. Как распределяются времена USER%, SYS%, WAIT%, а также реальное время выполнения нагрузчика, какое количество переключений контекста (вынужденных и невынужденных) происходит при этом? +Разработайте комплекс программ-нагрузчиков согласно выданному варианту. +Каждый нагрузчик должен, как минимум, принимать параметр, который определяет +количество повторений для алгоритма, указанного в задании. Варианты программ +рассчитаны так, чтобы нагружать вычислительную подсистему (CPU) и подсистему +ввода-вывода (IO) или одновременно - это необходимо учитывать при их реализации. +Разработанные программы еобходимо скомпилировать без дополнительных опций +оптимизации компилятора. -3. Увеличьте количество нагрузчиков вдвое, втрое, вчетверо. Как изменились исследуемые показатели? Почему? +Проведите исследование поведения ОС во время исполнения разработанных +программ-нагрузчиков по следующему плану: -4. Объедините программы-нагрузчики в одну, реализованную при помощи потоков выполнения, чтобы один нагрузчик эффективно нагружал все ядра вашей системы. Как изменились времена для того же объема вычислений? Запустите одну, две, три таких программы. Как изменились исследуемые показатели? Почему? +1. Перед запуском нагрузчика, попробуйте оценить время работы вашей программы + или ее результаты (если по варианту вам досталось измерение чего либо) и + обоснуйте свои предположения. -5. Добавьте опции агрессивной оптимизации для компилятора. Как изменились исследуемые показатели? На сколько сократилось реальное время исполнения программы нагрузчика? Почему? +2. Запустите программу-нагрузчик и зафиксируйте метрики ее работы с помощью + инструментов для мониторинга и профилирования (см. лекции). Сравните полученные + результаты с ожидаемыми. Объяснените наблюдаемое поведение. Продолжительность + каждого запуска должна занимать достаточное для прекращения переходных + процессов время, по крайней мере, минуту. + +3. Определите количество одновременно запущенных процессов с программой-нагрузчиком, + которое эффективно нагружает все ядра процессора в вашей системе. Как + распределяются показатели времени USER%, SYS%, WAIT%, а также полное время + выполнения нагрузчика, какое количество переключений контекста (вынужденных и + невынужденных) происходит при этом? Подумайте над тем, как вы определяете + эффективность. + +4. Увеличьте количество нагрузчиков вдвое, втрое, вчетверо. Как изменились + исследуемые показатели? Почему? + +5. Объедините программы-нагрузчики в одну, реализованную при помощи потоков + выполнения, чтобы один нагрузчик эффективно нагружал все ядра вашей системы. Как + изменились показатели времени для того же объема вычислений? Запустите одну, + две, три таких программы. Как изменились исследуемые показатели? Почему? + +6. Скомпилируйте программу-нугрузчик с опцией агрессивной оптимизации. Как + изменились исследуемые показатели? На сколько сократилось реальное время + исполнения программы нагрузчика? Почему? ## Требования к реализации 1. Программа (комплекс программ) должна быть реализован на языке C. -2. Дочерние процессы должны быть созданы через указанные в варианте системные вызовы операционной системы, с обеспечением корректного запуска и завершения процессов. Запрещено использовать высокоуровневые абстракции над системными вызовами. Необходимо использовать, процедуры libc. +2. Дочерние процессы должны быть созданы через указанные в варианте системные + вызовы операционной системы, с обеспечением корректного запуска и завершения + процессов. Запрещено использовать высокоуровневые абстракции над системными + вызовами. Необходимо использовать, процедуры libc. ## Требования к отчету и защите Отчет должен содержать: -1. Титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО преподавателя практики, номера вашей группы, варианта ЛР. +1. Титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО + преподавателя практики, номера вашей группы, варианта ЛР. 2. Текст задания в соответствии с вариантом. @@ -42,7 +91,9 @@ 4. Предположения о свойствах программ-нагрузчиков -5. Результаты измерений и метрик программ-нагрузчиков, полученных инструментами мониторинга. Должно быть описано, какие утилиты запускались, с какими параметрами и выводом. +5. Результаты измерений и метрик программ-нагрузчиков, полученных инструментами + мониторинга. Должно быть описано, какие утилиты запускались, с какими + параметрами и их вывод. 6. Сравнительный анализ ожидаемых и фактических значений исследованных показателей. @@ -52,11 +103,14 @@ 1. Продемонстрировать работоспособность Shell и предоставить исходный код. -2. Воспроизвести ход работы в рамках части 2 и продемонстрировать схожие результаты работы программ-нагрузчиков. +2. Воспроизвести ход работы по исследованию поведения ОС и продемонстрировать схожие + результаты работы программ-нагрузчиков. -3. Ответить на вопросы по реализации приложений и контрольные вопросы. +3. Ответить на вопросы по реализации программ и контрольные вопросы. ## Источники -- Тесты взяты из репозитория [sergey-v-galtsev/shad-os](https://gitlab.com/sergey-v-galtsev/shad-os/-/blob/master/bsh/test.py) +- Тесты взяты из репозитория [sergey-v-galtsev/shad-os][shad-os-tests] + +[shad-os-tests]: https://gitlab.com/sergey-v-galtsev/shad-os/-/blob/master/bsh/test.py \ No newline at end of file From 0d5702a03f6c766942b41a0f2209e30ecebca14d Mon Sep 17 00:00:00 2001 From: e1turin Date: Sun, 21 Sep 2025 20:25:02 +0300 Subject: [PATCH 5/6] (vtpc) enhance task --- lab/vtpc/README.md | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/lab/vtpc/README.md b/lab/vtpc/README.md index 78e4047..a458ba7 100644 --- a/lab/vtpc/README.md +++ b/lab/vtpc/README.md @@ -8,27 +8,44 @@ При выполнении работы необходимо реализовать простой API для работы с файлами, предоставляющий пользователю следующие возможности: -1. Открытие файла по заданному пути файла, доступного для чтения. Процедура возвращает некоторый хэндл на файл. Пример: `int lab2_open(const char *path)`. +1. Открытие файла по заданному пути файла, доступного для чтения. Процедура + возвращает некоторый хэндл на файл. Пример: `int lab2_open(const char *path)`. 2. Закрытие файла по хэндлу. Пример: `int lab2_close(int fd)`. -3. Чтение данных из файла. Пример: `ssize_t lab2_read(int fd, void buf[.count], size_t count)`. +3. Чтение данных из файла. + Пример: `ssize_t lab2_read(int fd, void buf[.count], size_t count)`. -4. Запись данных в файл. Пример: `ssize_t lab2_write(int fd, const void buf[.count], size_t count)`. +4. Запись данных в файл. + Пример: `ssize_t lab2_write(int fd, const void buf[.count], size_t count)`. -5. Перестановка позиции указателя на данные файла. Достаточно поддержать только абсолютные координаты. Пример: `​​​​​​​off_t lab2_lseek(int fd, off_t offset, int whence)`. +5. Перестановка позиции указателя на данные файла. Достаточно поддержать только + абсолютные координаты. + Пример: `​​​​​​​off_t lab2_lseek(int fd, off_t offset, int whence)`. 6. Синхронизация данных из кэша с диском. Пример: `int lab2_fsync(int fd)`. -Операции с диском разработанного блочного кеша должны производиться в обход page cache ОС. +Операции с диском разработанного блочного кеша должны производиться в обход page +cache ОС. -В рамках проверки работоспособности разработанного блочного кэша необходимо адаптировать указанную преподавателем программу-загрузчик из ЛР 1, добавив использование кэша. Запустите программу и убедитесь, что она корректно работает. Сравните производительность до и после. +В рамках проверки работоспособности разработанного блочного кэша необходимо +адаптировать указанную преподавателем программу-загрузчик из ЛР 1, добавив +использование кэша. Запустите программу и убедитесь, что она корректно работает. +Сравните производительность до и после. ## Ограничения 1. Программа (комплекс программ) должна быть реализован на языке C. -2. Если по выданному варианту задана политика вытеснения Optimal, то необходимо предоставить пользователю возможность подсказать page cache, когда будет совершен следующий доступ к данным. Это можно сделать либо добавив параметр в процедуры `read` и `write` (например, `ssize_t lab2_read(int fd, void buf[.count], size_t count, access_hint_t hint)`), либо добавив еще одну функцию в API (например, `int lab2_advice(int fd, off_t offset, access_hint_t hint)`). `access_hint_t` в данном случае – это абсолютное время или временной интервал, по которому разработанное API будет определять время последующего доступа к данным. +2. Если по выданному варианту задана политика вытеснения Optimal, то необходимо + предоставить пользователю возможность подсказать page cache, когда будет + совершен следующий доступ к данным. Это можно сделать либо добавив параметр в + процедуры `read` и `write` (например, + `ssize_t lab2_read(int fd, void buf[.count], size_t count, access_hint_t hint)`), + либо добавив еще одну функцию в API (например, `int lab2_advice(int fd, off_t offset, access_hint_t hint)`). + `access_hint_t` в данном случае – это абсолютное время или временной интервал, + по которому разработанное API будет определять время последующего доступа к + данным. 3. Запрещено использовать высокоуровневые абстракции над системными вызовами. @@ -36,7 +53,8 @@ Отчет должен содержать: -1. титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО преподавателя практики, номера вашей группы, варианта ЛР; +1. титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО + преподавателя практики, номера вашей группы, варианта ЛР; 2. текст задания в соответствии с вариантом; From f3c0216a97c795fabe44109fa1d340b48b06b757 Mon Sep 17 00:00:00 2001 From: e1turin Date: Sun, 21 Sep 2025 20:31:11 +0300 Subject: [PATCH 6/6] add process note --- doc/process.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/process.md b/doc/process.md index 7cde206..94a7b1f 100644 --- a/doc/process.md +++ b/doc/process.md @@ -15,6 +15,10 @@ ## Шаг 2. Выполнение задания +Рекомендуется открывать в редакторе кода конкретный каталог с лабораторной +работой **как корневой** (например, `lab/vtsh`), чтобы автоматически использовались +подготовленные конфигурации. + 1. Отведите ветку от `main`. Ветка должна называться `lab-N`, где `N` -- номер лабораторной работы, например, `lab-1`.