Акуратна реалізація кешування вимагає вирішення декількох проблем.

По-перше, ємкість буфера кеша обмежена. Коли блок має бути завантажений в заповнений буфер кеша, виникає проблема заміщення блоків, тобто окремі блоки мають бути видалені з нього. Тут працюють ті ж стратегії і ті ж FIFO, Second Chance і LRU-алгоритмы заміщення, що і при виштовхуванні сторінок пам'яті.

Рис. 14.12. Структура блокового кешу

Заміщення блоків повинне здійснюватися з урахуванням їх важливості для файлової системи. Блоки мають бути розділені на категорії, наприклад: блоки індексних вузлів, блоки непрямої адресації, блоки директорій, заповнені блоки даних і т. д., і залежно від приналежності блоку до тієї або іншої категорії можна застосовувати до них різну стратегію заміщення.

По-друге, оскільки кешування використовує механізм відкладеного запису, при якому модифікація буфера не викликає негайного запису на диск, серйозною проблемою є "старіння" інформації в дискових блоках, образи яких знаходяться в буферному кеші. Невчасна синхронізація буфера кеша і диска може привести до дуже небажаних наслідків у разі відмов устаткування або програмного забезпечення. Тому стратегія і порядок відображення інформації з кеша на диск має бути ретельно продумана.

Так, блоки, істотні для сумісності файлової системи (блоки індексних вузлів, блоки непрямої адресації, блоки директорій), мають бути переписані на диск негайно, незалежно від того, в якій частині LRU-цепочки вони знаходяться. Hеобходимо ретельно вибрати порядок такого переписування.

У Unix є для цього виклик SYNC, який примушує всі модифіковані блоки записуватися на диск негайно. Для синхронізації вмісту кеша і диска періодично запускається фоновий процес-демон. Крім того, можна організувати синхронний режим роботи з окремими файлами, що задається при відкритті файлу, коли всі зміни у файлі негайно зберігаються на диску.

Нарешті, проблема конкуренції процесів на доступ до блоків кеша вирішується веденням списків блоків, що перебувають в різних станах, і відміткою про полягання блоку в його дескрипторі. Наприклад, блок може бути заблокований, брати участь в операції введення-виводу, а також мати список процесів, чекаючих звільнення даного блоку.