2008-12-12 2 views
0

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

Если вы используете 4K-страницы с 128 КБ ОЗУ и 32-разрядную шину адреса, насколько большой может быть виртуальный адрес ? Сколько регулярных фреймов страниц у вас может быть?

EDIT: Я считаю, что ответ 2^32 и 2^20. Я просто не знаю, как вычислить это.

ответ

6

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

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

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

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


Edit для решения вопросов в комментариях:

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

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

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

Если система имеет размер страницы 4K, это означает, что чипы RAM на каждой странице имеют 12 адресных битов (потому что 2^12 = 4K). Если ваша гипотетическая система имеет 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 = 4G ОЗУ.

Возможно ли это за пределами ОЗУ и карт памяти?

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

+0

Я думал, что виртуальный адрес может быть больше физического адреса. Как вы знаете, что вы не можете получить доступ к более чем 2^32 уникальным адресам? – titaniumdecoy

+0

@titanium, ваш логический (2^32) IS больше вашего физического (128K = 2^17). Ваша адресная шина ограничивает вашу виртуальную память (32 бит = 2^32). – paxdiablo

+1

Удивительный ответ. Спасибо Адаму. – Nrj

Смежные вопросы