|
| 1 | +# Базовый трек. Лабораторная работа 2 |
| 2 | + |
| 3 | +## Задание |
| 4 | + |
| 5 | +Для оптимизации работы с блочными устройствами в ОС существует кэш страниц с данными, которыми мы производим операции чтения и записи на диск. Такой кэш позволяет избежать высоких задержек при повторном доступе к данным, так как операция будет выполнена с данными в RAM, а не на диске (вспомним пирамиду памяти). |
| 6 | + |
| 7 | +В данной лабораторной работе необходимо реализовать блочный кэш в пространстве пользователя в виде динамической библиотеки. Политику вытеснения страниц и другие элементы задания необходимо получить у преподавателя. |
| 8 | + |
| 9 | +При выполнении работы необходимо реализовать простой API для работы с файлами, предоставляющий пользователю следующие возможности: |
| 10 | + |
| 11 | +1. Открытие файла по заданному пути файла, доступного для чтения. Процедура возвращает некоторый хэндл на файл. Пример: `int lab2_open(const char *path)`. |
| 12 | + |
| 13 | +2. Закрытие файла по хэндлу. Пример: `int lab2_close(int fd)`. |
| 14 | + |
| 15 | +3. Чтение данных из файла. Пример: `ssize_t lab2_read(int fd, void buf[.count], size_t count)`. |
| 16 | + |
| 17 | +4. Запись данных в файл. Пример: `ssize_t lab2_write(int fd, const void buf[.count], size_t count)`. |
| 18 | + |
| 19 | +5. Перестановка позиции указателя на данные файла. Достаточно поддержать только абсолютные координаты. Пример: `off_t lab2_lseek(int fd, off_t offset, int whence)`. |
| 20 | + |
| 21 | +6. Синхронизация данных из кэша с диском. Пример: `int lab2_fsync(int fd)`. |
| 22 | + |
| 23 | +Операции с диском разработанного блочного кеша должны производиться в обход page cache ОС. |
| 24 | + |
| 25 | +В рамках проверки работоспособности разработанного блочного кэша необходимо адаптировать указанную преподавателем программу-загрузчик из ЛР 1, добавив использование кэша. Запустите программу и убедитесь, что она корректно работает. Сравните производительность до и после. |
| 26 | + |
| 27 | +## Ограничения |
| 28 | + |
| 29 | +1. Программа (комплекс программ) должна быть реализован на языке C. |
| 30 | + |
| 31 | +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 будет определять время последующего доступа к данным. |
| 32 | + |
| 33 | +3. Запрещено использовать высокоуровневые абстракции над системными вызовами. |
| 34 | + |
| 35 | +## Требования к отчету и защите |
| 36 | + |
| 37 | +Отчет должен содержать: |
| 38 | + |
| 39 | +1. титульный лист с указанием номера и названия ЛР, вашего ФИО, ФИО преподавателя практики, номера вашей группы, варианта ЛР; |
| 40 | + |
| 41 | +2. текст задания в соответствии с вариантом; |
| 42 | + |
| 43 | +3. краткий обзор кода; |
| 44 | + |
| 45 | +4. данные о работе программы-нагрузчика до и после внедрения своего page cache; |
| 46 | + |
| 47 | +5. заключение с анализом результатов и выводом. |
0 commit comments