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

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

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

  • Мое второе замешательство: обычное утверждение состоит в том, что если размер логического адреса равен 2^m а размер страницы равен 2^n, то старшие биты mn логического адреса обозначают номер страницы.

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

  • виртуальный адрес 32 бита
  • смещение страницы составляет 12 бит
  • физический адрес 30 бит
  • RAM составляет 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 (( обычно номера виртуальных/физических страниц и смещения страниц будут отображаться в шестнадцатеричном формате, но я использовал десятичную для упрощения)

PS:

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