Вычисление размера виртуальных адресов [закрыто]

Я застрял в этой проблеме, которую я изучаю на экзамене завтра. (Я понимаю концепцию виртуальных и физических адресов, фреймов страниц, адресной шины и т. Д.)

Если вы используете страницы 4K с 128K RAM и 32-битной адресной шиной, насколько большим может быть виртуальный адрес? Сколько у вас может быть обычных фреймов?

РЕДАКТИРОВАТЬ: я считаю, что ответ 2 ^ 32 и 2 ^ 20. Я просто не знаю, как это вычислить.

12.12.2008 03:50:07
1 ОТВЕТ
РЕШЕНИЕ

Ваши ответы в точности верны.

С помощью 32-разрядной адресной шины вы можете получить доступ к виртуальному пространству из 2 ^ 32 уникальных адресов.

Каждая страница 4K использует 2 ^ 12 (физических) адресов, поэтому вы можете поместить (2 ^ 32) / (2 ^ 12) = 2 ^ 20 страниц в пространство.

Удачи с экзаменом!


Отредактируйте, чтобы ответить на вопросы в комментариях:

Откуда вы знаете, что не можете получить доступ более чем к 2 ^ 32 адресам?

32-разрядная адресная шина означает, что к адресным контактам в ОЗУ подключено 32 провода - каждый из них представлен одним из битов. Каждый провод удерживается на высоком или низком напряжении, в зависимости от того, равен ли этот бит 1 или 0, и каждая конкретная комбинация единиц и нулей, представленная 32-битным значением, таким как 0xFFFF0000, выбирает соответствующую ячейку памяти. При 32 проводах на адресных контактах имеется 2 ^ 32 уникальных комбинации напряжений, что означает, что вы можете получить доступ к 2 ^ 32 местам.

Так что насчет размера страницы 4K?

Если система имеет размер страницы 4 КБ, это означает, что микросхемы ОЗУ на каждой странице имеют 12 адресных битов (потому что 2 ^ 12 = 4 КБ). Если ваша гипотетическая система имеет 128 КБ ОЗУ, вам потребуется 128 КБ / 4 КБ = 32 страницы или наборы микросхем ОЗУ. Таким образом, вы можете использовать 12 бит для выбора физического адреса на каждом чипе, проложив те же 12 проводов к 12 контактам на каждом чипе RAM. Затем используйте еще 5 проводов, чтобы выбрать, какая из 32 страниц содержит нужный вам адрес. Мы использовали 12 + 5 = 17 адресных битов для доступа к 2 ^ 17 = 128 КБ ОЗУ.

Давайте сделаем последний шаг и представим, что 128 КБ ОЗУ находятся на карте памяти. Но с 32-битной адресной шиной у вас осталось 32-17 = 15 адресных битов! Эти биты можно использовать для выбора одной из 2 ^ 15 = 32768 карт памяти, что дает вам общее виртуальное адресное пространство 2 ^ 32 = 4 ГБ ОЗУ.

Это полезно помимо оперативной памяти и карт памяти?

Обычной практикой является разделение большого набора битов, таких как адреса, на более мелкие подгруппы, чтобы сделать их более управляемыми. Иногда они делятся по физическим причинам, таким как адресные контакты и карты памяти; в других случаях это по логическим причинам, таким как IP-адреса и подсети. Прелесть в том, что детали реализации не имеют отношения к конечному пользователю. Если вы обращаетесь к памяти по адресу 0x48C7D3AB, вам все равно, в какой микросхеме ОЗУ она находится и как устроена память, пока присутствует ячейка памяти. И когда вы переходите к 67.199.15.132, вам все равно, находится ли компьютер в подсети класса C, если он принимает ваши отклики. :-)

6
12.12.2008 05:19:46
Я думал, что виртуальный адрес может быть больше, чем физический адрес. Откуда вы знаете, что вы не можете получить доступ более чем к 2 ^ 32 уникальным адресам?
titaniumdecoy 12.12.2008 04:18:16
@titanium, ваша логика (2 ^ 32) больше вашей физической (128K = 2 ^ 17). Ваша адресная шина ограничивает вашу виртуальную память (32 бита = 2 ^ 32).
paxdiablo 12.12.2008 04:29:27