Каждый процесс имеет свое независимое виртуальное адресное пространство - два процесса могут отображать virtpage 1 на разные физические страницы. Процессы могут участвовать в общей памяти, и в этом случае каждый из них имеет некоторое отображение виртуальной страницы на одну и ту же физическую страницу.
Виртуальное адресное пространство процесса может использоваться для сопоставления виртуальных страниц с физическими страницами, с файлами, отображаемыми в памяти, устройствами и т. Д. Виртуальные страницы не должны быть подключены к ОЗУ. Процесс может отобразить в памяти весь файл объемом 1 ГБ - в этом случае его физическая память может быть только парой мегабайт, но его виртуальное адресное пространство будет составлять 1 ГБ или более. Многие процессы могут сделать это, и в этом случае сумма использования виртуального адресного пространства во всех процессах может составлять, скажем, 40 ГБ, тогда как общее использование физической памяти может составлять, скажем, только 100 мегабайт; это очень легко сделать в 32-битных системах.
Поскольку многие процессы загружают одни и те же библиотеки, ОС обычно помещает библиотеки в один набор исполняемых страниц, доступных только для чтения, а затем загружает отображения в пространство virtpage для каждого процесса, чтобы указать на этот один набор страниц, чтобы сохранить на физической памяти.
Процессы могут иметь отображения virtpage, которые ни на что не указывают, например, если часть памяти процесса была записана в файл страницы - процесс попытается получить доступ к этой странице, ЦП вызовет сбой страницы, ОС увидит ошибку страницы и обработает ее, приостановив процесс, прочитав страницы обратно в оперативную память из файла подкачки и затем возобновив процесс.
Обычно существует 3 типа ошибок страниц. Первый тип - когда у ЦП нет виртуально-физического сопоставления в TLB - процессор вызывает программное прерывание разрыва страницы в ОС, ОС помещает сопоставление в процессор для этого процесса, а затем процесс повторно запускает нарушающее работу. инструкции. Это происходит тысячи раз в секунду.
Второй тип - это когда ОС не имеет сопоставления, потому что, скажем, память для процесса была перенесена на диск, как объяснено выше. Это случается нечасто на слабонагруженных машинах, но происходит чаще, когда увеличивается нагрузка на память, от 100 до 1000 раз в секунду, может быть, даже больше.
Третий тип - это когда ОС не имеет сопоставления, потому что сопоставления не существует - процесс пытается получить доступ к памяти, которая ему не принадлежит. Это генерирует segfault, и, как правило, процесс убивается. Это не должно происходить часто и зависит исключительно от того, насколько хорошо написано программное обеспечение на компьютере и не имеет никакого отношения к планированию или загрузке компьютера.
Даже если вы уже знали это, я подумал, что добавлю это для сообщества.