Windows ошибки страниц

Что вызывает ошибки страниц?

Согласно Википедии :

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

Ладно, в этом есть смысл.

Но если это так, то почему всякий раз, когда информация о процессе в Process Hacker обновляется, я вижу около 15 ошибок страниц?

Screenshot

Или, другими словами, почему любая память выгружается? (Я понятия не имею, пользователь это или память kernel.) У меня нет файла подкачки, и использование RAM составляет около 1.2 GB из 4 GB, что происходит после чистой перезагрузки. Нет недостатка ни в каких ресурсах; зачем что-то выгружать?

7 ответов

  • Доступ к памяти журнала, который вызывает серьезные ошибки страницы

    Кто-нибудь знает, как получить доступ к памяти (указатели), которые вызывают ошибки страниц? Меня интересуют в основном основные ошибки страниц. Немного предыстории о том, чего я пытаюсь достичь. У меня есть приложение с большим объемом памяти (база данных), и я хочу соотнести подкачку с доступом…

  • Server.Transfer показывает дубликаты страниц

    У меня есть вызов метода DoSomething() в событии загрузки страницы: protected void Page_Load(object sender, EventArgs e) { try { DoSomething(); } catch { Server.Transfer(’~/Error.aspx’); } } Теперь проблема в том, что DoSomething также делает Server.Transfer — Error.aspx , если какое-то условие не…

(Я автор книги «хакер процессов».)

Во-первых:

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

Это не совсем правильно, как объяснено позже в той же статье ( незначительная ошибка страницы ). есть мягкие ошибки страницы, где все, что нужно сделать kernel, — это добавить страницу в рабочий набор процесса. Вот таблица из книги Windows Internals (я исключил те, которые приводят к нарушению доступа):

  • Причина неисправности- результат
  • Доступ к странице, которая не находится в памяти, но находится на диске в файле подкачки или сопоставленном файле- выделите физическую страницу и считайте нужную страницу с диска и в соответствующий рабочий набор
  • Доступ к странице, находящейся в резервном или измененном списке — переход страницы к соответствующему процессу, сеансу или системному рабочему набору
  • Доступ к нулевой странице по требованию- добавление нулевой страницы в соответствующий рабочий набор
  • Запись на страницу copy-on-write- сделать процесс-приватную (или сеанс-приватную) копию страницы и заменить оригинал в рабочем наборе процесса или системы

Ошибки страниц могут возникать по разным причинам, как вы можете видеть выше. Только один из них имеет отношение к чтению с диска. Если вы попытаетесь выделить блок из кучи, а менеджер кучи выделит новые страницы, а затем обратится к этим страницам, вы получите ошибку страницы с нулевым спросом. Если вы попытаетесь подключить функцию в kernel32, записав ее на страницы kernel32, вы получите ошибку copy-on-write, потому что эти страницы автоматически копируются, поэтому ваши изменения не влияют на другие процессы.

Теперь, чтобы ответить на ваш вопрос более конкретно: хакер процесса, кажется , имеет ошибки страницы только при обновлении своей служебной информации — то есть, когда он вызывает EnumServicesStatusEx, который RPCs к SCM (services.exe). Я предполагаю, что в этом процессе выделяется много памяти, что приводит к сбоям страниц с нулевым спросом (служебная информация требует хранения нескольких страниц, IIRC).

Медленным, но устойчивым источником ошибок страниц является OS-поиск редко посещаемых страниц. В этом случае операционная система помечает некоторые страницы, которых нет, но оставляет их в памяти as-is. Если приложение обращается к странице, то возникает ловушка #PF, и OS просто помечает присутствующую страницу снова без дальнейших церемоний. Если «long time» проходит и страница никогда не спотыкается о неисправность, то OS знает, что страница является хорошим кандидатом для замены, если возникнет такая необходимость. Этот механизм может работать проактивно даже в периоды отсутствия ресурсного давления.

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

Предположим, вы сопоставляете файл журнала и продолжаете добавлять его. Каждый раз, когда вы превышаете предел выделенной памяти, происходит ошибка страницы, OS предоставит вам новую пустую страницу и отрегулирует длину файла.

Это также могут быть нарушения доступа, которые ловятся и обрабатываются программой.

Возможно также, что программа использует больше сегментов памяти, чем помещается в TLB (который является кэшем для таблиц страниц). Когда страницы являются смежными, все они могут быть обработаны одной записью таблицы страниц. Но если память фрагментирована в физическом адресном пространстве, требуется много записей таблицы страниц, и они могут не поместиться в TLB. Когда происходит пропуск TLB, вызывается обработчик ошибок страницы OS и ищет сопоставление в таблице страниц процесса.

Брайан отметил, что x86 (и, следовательно, все системы Win32) справляются с этим без сбоя страницы.

Еще одной причиной сбоев страниц является запуск защитных страниц, используемых для роста стека и copy-on-write, но обычно они не происходят без привязки. Я не уверен, будут ли они отображаться как нарушения доступа или нет, потому что они будут помечены как нарушение доступа при входе в ловушку MMU, но, вероятно, обрабатываются обработчиком ошибок страницы OS и не преобразуются в нарушение доступа в пользовательском режиме (SEH).

  • Ошибки страниц в алгоритме LRU

    У меня возникли проблемы с пониманием кое-чего из моей лекции по программированию. Я знаю, что алгоритмы замены страниц имеют ошибки страниц. В алгоритме LRU, когда происходит ошибка страницы? Это когда больше нет свободных кадров? Это когда кадр уже есть, но уже используется? У меня есть эта…

  • Google Chrome-вызывает серьезное отставание

    На одном из сайтов, с которыми я работаю, контент не показывается до 17 секунд. Однако как только он подключается, сайт загружается довольно быстро. Я проследил эту проблему до ошибки Google Chrome, где Predict network actions to improve page load performance при включении вызывает эти…

Каждый раз, когда читается раздел mmap’D, генерируется ошибка страницы, которая включает в себя всякий раз, когда вы загружаете DLL. Таким образом, загрузка DLL на самом деле не считывает все DLL в память, а только вызывает его сбой при выполнении кода.

Вы увидите мягкие ошибки страниц , когда память распределяется между процессами. В принципе, если у вас есть файл с отображением памяти, совместно используемый двумя процессами, когда второй процесс загружает файл с отображением памяти, генерируются ошибки мягких страниц-память уже находится в физическом RAM, но операционная система должна исправить таблицы диспетчера памяти так, чтобы адрес виртуальной памяти в вашем процессе указывал на правильную физическую страницу.

Особенно для чего-то вроде Process Hacker, который, вероятно, вводит код в каждый запущенный процесс (чтобы собрать информацию), он, вероятно, довольно интенсивно использует общую память для выполнения IPC.

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

и помните, что разные операционные системы отличаются алгоритмами подкачки.

Основы ошибок страниц

Распределение ресурсов-это тонкий баланс между сохранением первичного хранилища доступным для использования и предотвращением необходимости как можно больше переходить на вторичное. Если процесс пытается выделить память и не может этого сделать, это обычно исключение, а иногда и фатальное исключение.

По сути, вы не можете хранить все в RAM без свободных ресурсов, потому что, когда программа запускается или запрашивает больше, она падает.

Похожие вопросы:

Я получаю некоторые странные ошибки связывания в XCode. Я более или менее понимаю, что такое ошибки связывания, но не понимаю, почему они появляются в моей ситуации. У меня есть приложение, которое…

При рассмотрении процесса в Process Explorer , что это значит, когда есть несколько ошибок страницы? Приложение обрабатывает довольно много данных, и UI не очень отзывчив. Существуют ли оптимизации…

Я получаю код ошибки #1 при рендеринге некоторых веб-страниц, но не других в phantomJS. Блок находится в стороннем модуле, который вызывает phantomJS, чтобы сделать снимок экрана. if (path) {…

Кто-нибудь знает, как получить доступ к памяти (указатели), которые вызывают ошибки страниц? Меня интересуют в основном основные ошибки страниц. Немного предыстории о том, чего я пытаюсь достичь. У…

У меня есть вызов метода DoSomething() в событии загрузки страницы: protected void Page_Load(object sender, EventArgs e) { try { DoSomething(); } catch { Server.Transfer(’~/Error.aspx’); } } Теперь…

У меня возникли проблемы с пониманием кое-чего из моей лекции по программированию. Я знаю, что алгоритмы замены страниц имеют ошибки страниц. В алгоритме LRU, когда происходит ошибка страницы? Это…

На одном из сайтов, с которыми я работаю, контент не показывается до 17 секунд. Однако как только он подключается, сайт загружается довольно быстро. Я проследил эту проблему до ошибки Google Chrome,…

У меня есть следующий вопрос: Домен-это example.com и A url example.com/something.php Всякий раз, когда я добавляю / в конце любого url, у меня есть зеркальная страница. Пример:…

У меня есть концептуальный вопрос относительно операционных систем и обработчиков ошибок страниц. Рассмотрим случай, когда kernel имеет виртуальное адресное пространство. Таким образом, если есть…

я запускаю приложение, которое состоит из функций Google Cloud, запускаемых темами PubSub, поэтому в основном они общаются друг с другом через Google PubSub. Проблема в том, что иногда он может…

Понравилась статья? Поделиться с друзьями:
ErrorWin
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: