Разбивается ли виртуальное адресное пространство всего процесса на страницы - PullRequest
1 голос
/ 05 декабря 2009

Примечание: Я пытаюсь изучить общий обзор распределения виртуальной памяти

Разбивается ли виртуальное адресное пространство всего процесса на страницы определенного размера:

  .text
  .bss
  .data

Включает ли это пространство кучи и стек - или это всегда нестранично?

Ответы [ 3 ]

2 голосов
/ 05 декабря 2009

Как правило, в страничной операционной системе все адресное пространство процессов разбивается на страницы. Каждый линейный адрес содержит два компонента - номер страницы в старших значащих битах и ​​смещение на странице в младших значащих битах.

Например, для 32-битных линейных адресов и страниц размером 4 КБ верхние 20 бит - это номер страницы, а нижние 12 бит - это смещение страницы.

2 голосов
/ 05 декабря 2009

Прежде всего обратите внимание, что «страницы» - это просто области адресного пространства. Регион, который является «нестраничным» (я предполагаю, что вы имеете в виду, что его нельзя перенести на диск), по-прежнему логически разделен на страницы, но ОС может реализовать другую политику на этих страницах.

Самый распространенный размер страницы - 4096 байт. Многие архитектуры поддерживают одновременное использование нескольких форматов страниц (например, страниц по 4K, а также страниц по 1 МБ). Однако операционные системы часто придерживаются только одного размера страницы, так как в большинстве случаев затраты на управление несколькими размерами страниц намного выше, чем те преимущества, которые это дает. Исключения существуют, но я не думаю, что вам нужно о них беспокоиться.

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

Области .text, .bss и .data не должны быть известны ОС (хотя большинство ОС знают о них по соображениям безопасности и производительности).

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

1 голос
/ 05 декабря 2009

.data - это место, где лежат инициализированные глобальные переменные программы. .bss содержит глобальные переменные без явного инициализатора (со значением по умолчанию 0). Куча и стек являются отдельными зонами памяти от них и друг от друга. Вся память, видимая процессом, представляет собой виртуальную память, разделенную на страницы. Процесс не видит ничего, кроме виртуальной памяти.

...