Как я могу указать несколько структур address_space для inode? - PullRequest
1 голос
/ 24 марта 2012

Скажите, что два разных процесса открывают два разных файла. Обычно у каждого из них был бы свой собственный инод, и у каждого инода был бы свой struct address_space (это парень, который помнит, где страницы кэша страниц находятся в памяти).

Но, скажем, я знал , что эти файлы изначально были идентичны. Я хочу придумать способ интеллектуального разделения кэширования в максимально возможной степени.

Я рассматривал следующие стратегии:

  1. Добавить новое поле в структуру struct address_space: указатель на «родителя». Затем, всякий раз, когда я ищу существующую страницу, я также смотрю в родительской (если она существует). Всякий раз, когда я пишу на страницу, мне, таким образом, нужно делать сбой и C-O-W страницу в главном address_space. Оба файла будут иметь общего родителя.

  2. Сгруппируйте каждый связанный набор struct address_space в связанный список. Всякий раз, когда я ищу существующую страницу, ищите весь связанный список. В этом случае, однако, было бы запрещено «находить» грязную страницу в адресном пространстве друга. Другими словами, если страница испачкается, она больше не может использоваться в качестве резервной копии. В этом случае, если кто-нибудь когда-либо записывает данные в файл, мне нужно будет отсоединить адресные пространства. Мне также нужно было бы какое-то поведение C-O-W, чтобы поддержать это.

Может кто-нибудь сказать мне:

  • Является ли одна или обе эти идеи обоснованными?
  • На что конкретно мне следует обращать внимание?

Для справки, я делаю хакерское ядро, чтобы сэкономить память, потому что в моей системе открыто несколько идентичных файлов (но не один и тот же inode = не разделяет pagecache).

РЕДАКТИРОВАТЬ: 3-я идея:

  • Храните связанный список «связанного» кэша страниц address_space, а затем каждый раз, когда мы читаем с диска, обновляем каждую открытую структуру address_space. Открытие нового связанного файла может привести к тому, что произойдет копирование большой таблицы страниц, за исключением пропуска любых грязных страниц.
...