Skip to content
Merged
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
21 changes: 12 additions & 9 deletions lab/vtpc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@
предоставляющий пользователю следующие возможности (по аналогии с системным API):

1. Открытие файла по заданному пути файла, доступного для чтения. Процедура
возвращает некоторый хэндл на файл. Пример: `int lab2_open(const char *path)`.
возвращает некоторый хэндл на файл. Пример: `int vtpc_open(const char *path)`.

2. Закрытие файла по хэндлу. Пример: `int lab2_close(int fd)`.
2. Закрытие файла по хэндлу. Пример: `int vtpc_close(int fd)`.

3. Чтение данных из файла.
Пример: `ssize_t lab2_read(int fd, void buf[.count], size_t count)`.
Пример: `ssize_t vtpc_read(int fd, void buf[.count], size_t count)`.

4. Запись данных в файл.
Пример: `ssize_t lab2_write(int fd, const void buf[.count], size_t count)`.
Пример: `ssize_t vtpc_write(int fd, const void buf[.count], size_t count)`.

5. Перестановка позиции указателя на данные файла. Достаточно поддержать только
абсолютные координаты.
Пример: `​​​​​​​off_t lab2_lseek(int fd, off_t offset, int whence)`.
Пример: `​​​​​​​off_t vtpc_lseek(int fd, off_t offset, int whence)`.

6. Синхронизация данных из кэша с диском. Пример: `int lab2_fsync(int fd)`.
6. Синхронизация данных из кэша с диском. Пример: `int vtpc_fsync(int fd)`.

Операции с диском разработанного блочного кеша должны производиться в обход
страничного кеша операционной системы.
Expand All @@ -40,6 +40,9 @@
использование кэша. Запустите программу и убедитесь, что она корректно работает.
Сравните производительность до и после.

Точкой входа в ваш модуль являются файлы `vtpc.h` и `vtpc.c`. Именно этот API
вызывается тестовым фреймворком, сравнивающим поведения вашего `vtpc` и `libc`.

## Ограничения

1. Программа (комплекс программ) должна быть реализован на языке C.
Expand All @@ -48,9 +51,9 @@
предоставить пользователю возможность подсказать page cache, когда будет
совершен следующий доступ к данным. Это можно сделать либо добавив параметр в
процедуры `read` и `write` (например,
`ssize_t lab2_read(int fd, void buf[.count], size_t count, access_hint_t hint)`),
`ssize_t vtpc_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`
`int vtpc_advice(int fd, off_t offset, access_hint_t hint)`). `access_hint_t`
в данном случае – это абсолютное время или временной интервал, по которому
разработанное API будет определять время последующего доступа к данным.

Expand Down Expand Up @@ -97,4 +100,4 @@

[what-every-programmer-should-know-about-memory]: https://www.akkadia.org/drepper/cpumemory.pdf

[page-preemtion-algo-slides]: https://se.ifmo.ru/documents/10180/1505608/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B.+%D0%A7%D0%B0%D1%81%D1%82%D1%8C+3.pdf/188c34ff-f76c-1d42-b3cb-f9314b5898d8
[page-preemtion-algo-slides]: https://se.ifmo.ru/documents/10180/1505608/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B.+%D0%A7%D0%B0%D1%81%D1%82%D1%8C+3.pdf/188c34ff-f76c-1d42-b3cb-f9314b5898d8