Как память загружается из виртуальной памяти? - PullRequest
0 голосов
/ 11 июля 2020

Я знаю, что операционные системы обычно хранят Page Tables для сопоставления фрагмента виртуальной памяти с фрагментом физической памяти.

Мой вопрос: загружает ли ЦП весь фрагмент при загрузке данного байта ?

Допустим, у меня есть: ld %r0, 0x4(%r1)

Предполагая, что размер моей страницы 4 KB, загружает ли процессор сразу все 4 КБ или ему удается загрузить только байт с учетом смещения правильно?

Требуется ли page size аппаратным обеспечением или настраивается программным обеспечением и ОС?

Изменить:

Выяснилось, что page size требует аппаратного обеспечения: 1018 *

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

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

На типичном современном процессоре да, он загружает всю страницу.

Это не могло бы работать по-другому, так как в таблицах страниц для данной страницы есть только два состояния: присутствует и нет. Если страница присутствует, она должна быть сопоставлена ​​с какой-либо страницей в физической памяти. Если нет, каждый доступ к этой странице вызывает ошибку страницы. Состояние «частично присутствует» отсутствует.

Чтобы ОС могла безопасно отметить страницу как присутствующую, она должна загрузить всю страницу в физическую память и обновить таблицы страниц, чтобы указать виртуальную страницу на физическую страницу. Если он загрузил только один байт или меньшее количество, приложение может позже попытаться получить доступ к другому байту на той же странице, который не был загружен, и он прочитает мусор. В этом случае ЦП не может создать еще одну ошибку страницы, чтобы позволить ОС исправить ситуацию, если только страница не была помечена как отсутствующая, и в этом случае исходный доступ также не сможет быть завершен.

Размер страницы фиксирован аппаратно, хотя некоторые архитектуры предлагают несколько различных вариантов, из которых может выбирать ОС. Например, последние процессоры x86-64 позволяют страницам иметь размер 4 КБ, 2 МБ или 1 ГБ. ОС может смешивать и сопоставлять их во время выполнения; в таблицах страниц есть биты, указывающие размер каждой страницы.

0 голосов
/ 11 июля 2020

ваш вопрос затрагивает так много уровней архитектуры процессора / памяти ... не зная точную архитектуру процессора / архитектуру памяти / версию, которую вы имеете в виду: хотя команда cpu нацелена только на один байт, она вызовет память -controller, чтобы найти всю физическую страницу и полностью загрузить ее (по крайней мере, предварительная выборка может сработать) в кеш второго / первого уровня. ваши данные передаются после заполнения кеша.

...