Обработчики исключений ошибок страниц и обновление таблиц страниц
При чтении того, как обработчики исключений ошибок страниц обрабатывают сбои страниц и их обращения, мне неясно было одно. Если процесс использует общую страницу и происходит сбой страницы, когда обработчик исключений сбоя страницы обновляет запись таблицы страниц в таблице страниц для процесса, вызвавшего сбой страницы, он также обновляет записи таблицы страниц во всех другие процессы, которые разделяют ту же страницу? Из моего прочтения этой темы кажется, что он только обновляет запись таблицы страниц в таблице страниц для сбойного процесса, но тогда как другие процессы узнают, что эта страница была выгружена? Заранее спасибо!
1 ответ
Это одна из проблем, которую вы должны решить при разработке вашего менеджера памяти. Одним из возможных вариантов является создание теневого PTE для каждой страницы, которой можно поделиться. При сбое процесса на общей странице менеджер памяти проверяет теневой PTE. Если теневой PTE не является резидентным, он обрабатывает сбой страницы обычным способом, обновляя как PTE с ошибочными процессами, так и теневой PTE, когда страница доступна. Если теневой PTE является резидентным, то он просто копирует теневой PTE в рабочий PTE. Таким образом, PTE процесса обновляются только тогда, когда процесс фактически касается страницы. Вот как я думаю, что Windows делает это - мои знания о Linux ограничены, но, поскольку почти каждая страница в процессе Linux может совместно использоваться в любое время (из-за разветвления), я ожидаю, что у них есть другой способ сделать что-то для обработки совместное использование без необходимости иметь теневые PTE для каждой отдельной страницы в системе.
В этой модели требуется некоторая хитрость, если у вас есть асинхронная обработка ошибок страницы, так как вам нужно обрабатывать случай, когда другой процесс вызывает сбой на странице, в то время как он вызывается. Вам также нужно обрабатывать случай выгрузки страниц. В этом случае вам нужно будет пройти через каждый процесс, у которого есть страница в рабочем наборе, и удалить ее, что может потребовать некоторых IPI и некоторого бухгалтерского учета.