Номер страницы и смещение

Я изучаю различные типы управления памятью. Я не понимаю, зачем иметь смещенные биты в виртуальном адресе. А также почему размеры страниц сделаны мощностью 2?

моя основная путаница: дайте мне пример смещения, используемого в инструкции для доступа к определенному виртуальному addr?

моя вторая путаница: Обычное утверждение состоит в том, что если размер логического адреса равен 2^m, а размер страницы-2^n, то m-n битов логического адрес обозначьте номер страницы.

спасибо заранее

3 ответов


Я думаю, что ваши первичные и вторичные путаницы связаны с общей путаницей по этому вопросу:)

позвольте мне немного поговорить об этом, и, надеюсь, я смогу помочь. Во-первых, аналогия - представьте, что вы пытаетесь найти дом в городе. Представьте, что каждому дому дали уникальный номер - вы можете себе представить, что количество домов скоро станет очень большим и запутанным. Теперь представьте, что вы вводите понятие улицы - номера домов теперь становятся немного больше управляемый, как вы сгруппировали их в хорошие куски. Итак: улицы = номер страницы, номер дома = смещенный адрес.

Весь смысл наличия страниц виртуальной памяти заключается в том, чтобы позволить компьютеру разрезать память на управляемые куски и не тратить слишком много. Вырезание его на куски (страницы) позволяет гранулированный контроль доступа, подкачки и другие приятные вещи, как это. Чем меньше ваши страницы ,тем меньше памяти вы собираетесь тратить (если для процесса A требуется 32k памяти, а размер страницы 64К, вы собираетесь в конечном итоге с некоторыми, которые не используются), но тем выше накладные расходы на систему.

Что касается того, почему размеры страниц равны 2, это не тратит место в адресе. Поскольку компьютеры основаны на двоичном (на данный момент), все имеет тенденцию сводиться к степеням 2. Представьте, что у вас есть материал, основанный на факторах 10. 10 в двоичном - 1010 - вы должны использовать 4 бита, чтобы держать его, так почему бы не перейти на полный диапазон значений, которые вы можете получить из 4 бит: 0000 - 1111 (от 0 до 15 = 16 значений).

Извините, что я немного задержался - надеюсь, это подтолкнет вас в правильном направлении!


Мне нравится аналогия GHC с улицами и городами, почему нам нужен пейджинг. Кроме того, группировка байтов памяти в страницы позволяет процессору увеличить объем памяти.

предположим, что заданы следующие свойства:

  • виртуальный адрес 32 бита
  • смещение страницы составляет 12 бит
  • физический адрес 30 бит
  • объем оперативной памяти составляет 1 гиб

вот диграмма, которую я сделал, которая показывает, как номер страницы и смещение страницы используется для адресации определенной ячейки в памяти:

enter image description here

существует виртуальный адрес, который генерируется процессором и состоит из виртуального номера страницы (20 бит) и смещения страницы (12 бит).

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

номер виртуальной страницы передается на карту страницы с использованием 20 бит адреса. Поскольку номер страницы передается в двоичном формате с 20 битами адресов, это означает, что карта страницы может иметь до 2^20 записей (так как с 20 битами вы можете получить 2^20 разных чисел), это также причина, по которой номера страниц являются степенями 2.

таким образом, используя карту страницы, вы можете найти, какой физический номер страницы сопоставлен с запрошенным виртуальным номер страницы, смещение страницы не изменяется. Имея физический номер страницы и смещение страницы у вас есть физический адрес. Используя номер страницы, вы переходите на определенную страницу памяти, а с помощью смещения - на определенную байтовую ячейку. (Также смещение страницы определяет размер страницы, так как 12 бит для смещения означает, что мы можем обратиться к 2^12 = 4096 ячейкам (оранжевым на диаграмме) на странице)

в зеленом вы можете увидеть пример, где мы запрашиваем виртуальную страницу номер 2 со смещением страницы 4095. Согласно карте страницы виртуальная страница номер 2 сопоставляется с физической страницей 15, которая дает нам физический адрес с физическим номером страницы 15 и смещением 4095. (обычно виртуальные / физические номера страниц и смещения страниц отображаются в шестнадцатеричном формате, но я использовал decimal просто для упрощения)

PS:

данные примера взяты из этой лекции -https://www.youtube.com/watch?v=3akTtCu_F_k - он дает очень хороший обзор виртуальной памяти.


У меня такая же путаница, но если я понял это правильно, то это похоже на следующее: сила случая 2 немного отличается от общего понимания темы. Это больше похоже на соглашение, поскольку мы имеем дело с двоичными значениями и нуждаемся в соответствующем разделении между битами, для которых сила 2 подходит соответствующим образом.

например, если pGe имеет 64k слов и есть 4 слова на кадр, то 2^x=64 - >x=6

Что означает, что каждый кадр может иметь физический адрес, составляющий 6 двоичных значений, т. е. 0 или 1, в котором 4 будет представлять номер кадра. И последнее обозначающее точное расположение слова среди 4.

обратите внимание, что здесь каждый кадр может иметь 5 или любое другое значение, или так называемая конвенция не.