Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions doc/process.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,40 +13,48 @@
Выдайте доступ на чтение вашего репозитория преподавателю практики.
`Settings -> Collaborators and teams -> Add people`.

## Шаг 2. Ход лабораторной работы
## Шаг 2. Выполнение задания

Рекомендуется открывать в редакторе кода конкретный каталог с лабораторной
работой **как корневой** (например, `lab/vtsh`), чтобы автоматически использовались
подготовленные конфигурации.

1. Отведите ветку от `main`. Ветка должна называться `lab-N`,
где `N` -- номер лабораторной работы, например, `lab-1`.

2. Напишите код.
2. Напишите код, сохраняя детальную историю коммитов.

3. Выгрузите коммиты в удаленный репозиторий.

3. Сделайте PR из `lab-N` в `main`. В "Приложении А" вы найдете требования к описанию PR.
4. Сделайте Pull Request (PR) из `lab-N` в `main`, согласно требованим к оформлению из "Приложении А".

4. Пройдите автоматические проверки.
5. Пройдите автоматические проверки.

Note. Возможно, вы будете не согласны с некоторыми ошибками линтера. Очевидно странные вы можете отключить, но в комментариях к ПРу аргументировать свое решение.
**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] <Группа> <Фамилия> <Имя>`

Expand Down Expand Up @@ -89,3 +97,5 @@ P33000 Иванов Иван Иванович
6. ФИО преподавателя практики полностью
7. Год
3. Ссылка в начале секции "Ход работы".
4. Промежуточные результаты выполнения основного и дополнительного задания.
5. Заключение.
7 changes: 6 additions & 1 deletion lab/vtfs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ int vtfs_fill_super(struct super_block *sb, void *data, int silent) {

Аргументы `data` и `silent` нам не понадобятся. В этой функции мы используем ещё одну (пока) неизвестную функцию — `vtfs_get_inode`. Она будет создавать новую структуру `inode`, в нашем случае — для корня файловой системы:

<!-- TODO: Update inode_init_ownwer signature according to fresh linux kernal API -->

```c
struct inode* vtfs_get_inode(
struct super_block* sb,
Expand Down Expand Up @@ -245,6 +247,8 @@ drwxrwxrwx 1 root root 0 Oct 24 15:52 vt

После этого мы сможем перейти в `/mnt/vt`, но не можем вывести содержимое директории. На этот раз нам понадобится не `i_op`, а `i_fop` — структура типа [file_operations][21]. Реализуем в ней первую функцию — `iterate`.

<!-- TODO: Update .iterate field name according to fresh linux kernal API -->

```c
struct file_operations vtfs_dir_ops = {
.iterate = vtfs_iterate,
Expand Down Expand Up @@ -324,6 +328,8 @@ struct dentry* vtfs_lookup(

Теперь научимся создавать и удалять файлы. Добавим ещё два поля в `inode_operations` — `create` и `unlink`: Функция `vtfs_create` вызывается при создании файла и должна возвращать новую `inode` с помощью `d_add`, если создать файл получилось. Рассмотрим простой пример:

<!-- TODO: Update create function signature according to fresh linux kernal API -->

```c
int vtfs_create(
struct inode *parent_inode,
Expand Down Expand Up @@ -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
Expand Down
34 changes: 26 additions & 8 deletions lab/vtpc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,53 @@

При выполнении работы необходимо реализовать простой 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. Запрещено использовать высокоуровневые абстракции над системными вызовами.

## Требования к отчету и защите

Отчет должен содержать:

1. титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО преподавателя практики, номера вашей группы, варианта ЛР;
1. титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО
преподавателя практики, номера вашей группы, варианта ЛР;

2. текст задания в соответствии с вариантом;

Expand Down
Loading
Loading