В данной лабораторной работе необходимо реализовать блочный кэш в пространстве пользователя в виде динамической библиотеки (.so).
Политику вытеснения: Linux FIFO
При выполнении работы необходимо реализовать простой API для работы с файлами, предоставляющий пользователю следующие возможности:
- Открытие файла по заданному пути файла, доступного для чтения. Процедура возвращает некоторый хэндл на файл. Пример:
int lab2_open(const char *path) - Закрытие файла по хэндлу. Пример:
int lab2_close(int fd) - Чтение данных из файла. Пример:
ssize_t lab2_read(int fd, void buf[.count], size_t count) - Запись данных в файл. Пример:
ssize_t lab2_write(int fd, const void buf[.count], size_t count) - Перестановка позиции указателя на данные файла. Достаточно поддержать только абсолютные координаты. Пример:
off_t lab2_lseek(int fd, off_t offset, int whence) - Синхронизация данных из кэша с диском. Пример:
int lab2_fsync(int fd)
Операции с диском разработанного блочного кеша должны производиться в обход page cache используемой ОС.
В рамках проверки работоспособности разработанного блочного кэша необходимо адаптировать программу-загрузчик из ЛР 1, добавив использование кэша. Запустить программу и убедиться, что она корректно работает. Сравнить производительность до и после.
lib/- реализация блочного кэшаsrc/- программы-нагрузчики для проверки блочного кэшаtext/- скрипт для генерации большого текстового файла (нужен для программы-нагрузчика)
.
├── Dockerfile
├── Makefile
├── README.md
├── Taskfile.yml
├── docker-compose.yml
├── lib
│ ├── Makefile
│ ├── include
│ │ ├── api.h
│ │ └── cache.h
│ ├── obj
│ └── src
│ ├── api.c
│ └── cache.c
├── src
│ ├── ema_search_no_cache.c
│ └── ema_search_with_cache.c
└── text
└── generate.py