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
73 changes: 54 additions & 19 deletions lab/vtpc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,38 @@

## Задание

Для оптимизации работы с блочными устройствами в ОС существует кэш страниц с данными, которыми мы производим операции чтения и записи на диск. Такой кэш позволяет избежать высоких задержек при повторном доступе к данным, так как операция будет выполнена с данными в RAM, а не на диске (вспомним пирамиду памяти).
Для оптимизации работы с блочными устройствами в ОС существует кэш страниц с
данными, которыми мы производим операции чтения и записи на диск. Такой кэш
позволяет избежать высоких задержек при повторном доступе к данным, так как
операция будет выполнена с данными в RAM, а не на диске (вспомним [пирамиду памяти][memory-pyramid-csbasics]
на 35 слайде и [всё-всё][what-every-programmer-should-know-about-memory]).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А в этой папире точно много че про buffer cache? Там же про RAM.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я глянул, там в целом про память. В том числе кеши

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А мб нет — нужно посмотреть папиру подробнее

Copy link
Member Author

@e1turin e1turin Nov 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В папире про оперативную в основном, про кеши, про устройство ячеек памяти и потоки данных с внешних устройств в RAM

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

да пофиг


В данной лабораторной работе необходимо реализовать блочный кэш в пространстве пользователя в виде динамической библиотеки. Политику вытеснения страниц и другие элементы задания необходимо получить у преподавателя.
В данной лабораторной работе необходимо реализовать блочный кэш в пространстве
пользователя в виде динамической библиотеки. Политику вытеснения страниц и
другие элементы задания необходимо получить у преподавателя.

При выполнении работы необходимо реализовать простой API для работы с файлами, предоставляющий пользователю следующие возможности:
При выполнении работы необходимо реализовать простой API для работы с файлами,
предоставляющий пользователю следующие возможности (по аналогии с системным API):

1. Открытие файла по заданному пути файла, доступного для чтения. Процедура
возвращает некоторый хэндл на файл. Пример: `int lab2_open(const char *path)`.
возвращает некоторый хэндл на файл. Пример: `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)`.
Пример: `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)`.
Пример: `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)`.
абсолютные координаты.
Пример: `​​​​​​​off_t lab2_lseek(int fd, off_t offset, int whence)`.

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

Операции с диском разработанного блочного кеша должны производиться в обход page
cache ОС.
Операции с диском разработанного блочного кеша должны производиться в обход
страничного кеша операционной системы.

В рамках проверки работоспособности разработанного блочного кэша необходимо
адаптировать указанную преподавателем программу-загрузчик из ЛР 1, добавив
Expand All @@ -38,14 +45,14 @@ cache ОС.
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 будет определять время последующего доступа к
данным.
предоставить пользователю возможность подсказать 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. Запрещено использовать высокоуровневые абстракции над системными вызовами.

Expand All @@ -54,7 +61,7 @@ cache ОС.
Отчет должен содержать:

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

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

Expand All @@ -63,3 +70,31 @@ cache ОС.
4. данные о работе программы-нагрузчика до и после внедрения своего page cache;

5. заключение с анализом результатов и выводом.

## Описание вариантов

Вариант задания представляет собой название алгоритма вытеснения страниц из кеша, который изучается на лекции ([часть 3, 22 слайд][page-preemtion-algo-slides]), либо иной на усмотрение преподавателя. Например,

1. LRU -- Least Recently Used,
2. LFU -- Least Frequantly Used,
4. MRU -- Most Recently Used,
5. FIFO -- First In First Out,
6. NRU -- Not Recently Used,
7. Clock -- Часовой алгоритм,
9. Optimal (с подсказкой),
10. Random,
11. Second chance,
12. ARC,
13. 2Q,
14. LRU-K.

> [!NOTE]
> Это перечислены алгоритмы **вытеснения** страниц, но ведь страницы нужно ещё
> правильно **загружать** -- подумайте над тем, какую страницу следует взять в
> использование следующей и в какой момент.

[memory-pyramid-csbasics]: https://se.ifmo.ru/documents/10180/640663/%D0%9F%D1%80%D0%B5%D0%B7%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F+%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9+2019+%D1%87%D0%B0%D1%81%D1%82%D1%8C+2.pdf/a89541ff-090d-47b4-8454-eb5d71afd207

[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