Просто интересно, является ли ключ к разделяемой памяти именем файла или индексом.
У меня есть файл с именем .last, который представляет собой жесткую ссылку на файл с именем YYYYMMDDHHMMSS.
Каталог выглядит следующим образом:
20110101143000
.last
.last - это просто жесткая ссылка на 20110101143000.
Через некоторое время создается новый файл
20110101143000
20110622083000
.last
Затем мы удаляем .last и воссоздаем его для обращения к новому файлу.
Наше программное обеспечение, которое постоянно работает во время этих обновлений, сопоставляет файл .last с MAP_SHARED.По завершении работы с файлом программное обеспечение может кэшировать его в течение нескольких минут, а не удалять его.На физическом сервере одновременно работают 12-24 экземпляра программного обеспечения.Различные экземпляры часто отображают один и тот же файл примерно в одно и то же время.У меня вопрос:
Использует ли linux имя файла для доступа к общей памяти или использует inode?
Учитывая этот сценарий:
- proc Mmaps .last, а не unmap
- записывается новый файл, .last удаляется, создается новый .last для связи с новым файлом
- procB отображает новый .last и не отображает
Если бы linux использовал inode, то proc A и B увидели бы разные блоки памяти, сопоставленные с разными файлами, что нам и нужно.Если linux использует имя файла, то и A, и B видят один и тот же блок памяти, сопоставленный с новым файлом.B - это хорошо, но A падает, когда память в блоке осколков меняется.
Кто-нибудь знает, как это на самом деле работает?Я собираюсь протестировать, но если выяснится, что это основано на имени, я облажался, если кто-то не знает трюк.
Спасибо!