WedX - журнал о программировании и компьютерных науках

Определение размера таблицы страниц

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

Определить размер таблицы страниц для виртуальной памяти

Но у меня возникли проблемы с применением этого к моей проблеме.

Я понимаю, что общее уравнение:

(Всего # страниц) x (размер страницы)

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

память с байтовой адресацией, 48-битное виртуальное пространство, размер страницы 16 КБ (14 бит для представления),
4 ГБ физической памяти (22 бита для представления) и допустимые, грязные, эталонные биты для каждой страницы.

Каков размер таблицы для одного приложения?

Всего # страниц = 2^48 / 2^14 = 2^34

Размер страницы = 16 КБ

Общий размер страницы = (всего # страниц) x (размер страницы) = 2^34 x 16 кБ = 274877906944 кБ ?!?!?

Некоторая помощь будет высоко оценена - явно что-то я делаю неправильно.

Спасибо.


  • 1) Это одноуровневая таблица страниц? 2) является ли ограничение количества виртуальных страниц для процесса максимальным для виртуального адресного пространства? Является ли запись в таблице страниц 32-битной или 64-битной? 27.10.2014

Ответы:


1

Вы путаете страницу с записью в таблице страниц:

  1. Таблица страниц состоит из записей таблицы страниц.
  2. Каждая запись таблицы страниц содержит адрес в физической памяти страницы.
  3. страница представляет собой фрагмент памяти размером 16 КБ.

Вы хотите отобразить 4 ГБ физической памяти на несколько страниц по 16 КБ.

Итак, вам нужно (4 * 10 ^ 6 / 16 * 10 ^ 3) = 250 страниц (адресов)

Каждый адрес хранится в записи таблицы страниц, которая представляет собой 32-битное целое число, состоящее из адреса в физической памяти страницы и некоторых битов модификатора/информации об этой странице. .

Каждому процессу требуется как минимум одна таблица страниц. Здесь он состоит из 250 записей таблицы страниц. Размер каждой записи в таблице страниц представляет собой 32-битное (4 байта) число (назовите его как хотите)

Таким образом, общий размер, необходимый для одного процесса:

250 * 4B = 1000 B = 1kB

Почему этот подход не используется на основе модели подкачки, используемой MMU x86:

Проблема с одноуровневым механизмом подкачки, как вы описываете, заключается в том, что каждому (независимо от того, насколько мал) процессу потребуется: 4 ГБ/16 КБ = 4 * 10 ^ 6 Б / 16 * 10 ^ 3 Б = 0,25 * 1000 = < strong>250 записей таблицы страниц
250 * 4 байта (32 бита на запись) = 1 КБ на процесс

Это не кажется большим, но здесь вы использовали страницы размером 16 КБ (например, большинство систем x86 используют страницы размером 4 КБ, поэтому вам потребуется 1 МБ для каждого процесса)

Вот почему x86 использует двухуровневый процесс подкачки, в котором каждый процесс имеет 1024 записи каталога страниц, и каждая из этих записей содержит адрес таблицы страниц (которая содержит 1024 записи таблицы страниц). Таким образом, минимальная выделенная память процесса становится: 4 байта (запись каталога страниц) + 1024 * 4 байта (1024 32-битных записи таблицы страниц). Каждая запись таблицы страниц указывает на физическую страницу размером 4 КБ в памяти.

1024 записи каталога страниц * 1024 записи таблицы страниц для каждого каталога * 4 КБ страницы = 4 ГБ адресуемой памяти

Виртуальный адрес состоит примерно из:

  • Индекс записи каталога страниц
  • Индекс записи в таблице страниц
  • Смещение на странице 4kB

Это означает, что даже если вы увеличите размер одной страницы (тем самым уменьшив количество необходимых записей в таблице страниц), вам потребуется большее число для описания смещения.

27.10.2014
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]