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

StackOverflow https://stackoverflow.com/questions/1851794

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

  .text
  .bss
  .data

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top