Номер страницы и смещение
Я изучаю различные типы управления памятью. Я не понимаю смысла иметь биты смещения в виртуальном адресе. А также, почему размеры страниц сделаны степенью 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 - она дает очень хороший обзор виртуальной памяти.