Я читаю «Концепцию операционных систем» и сейчас нахожусь на 8-й главе! Однако я мог бы использовать некоторые пояснения или заверения в том, что я правильно понимаю.
Логические адреса: согласно книге, логические адреса генерируются ЦП. Что именно это означает? (В адресной системе, генерируемой исполнением ..) Я предполагаю, что когда код компилируется для программы, программа не имеет представления, где код будет загружен в память. Все, что делает компилятор, - это создает общий набросок компоновки программы и того, как должно располагаться изображение, но не присваивает ему никаких реальных адресов. Когда программа выполняется, ЦП берет это изображение макета, созданное компилятором, и раздает некоторые адреса (логические) адресам, сгенерированным из кода.
Физические адреса: физические адреса не генерируются до тех пор, пока ЦП не сгенерирует некоторый набор логических адресов (состоящий из базового адреса и смещения). Логические адреса проходят через MMU или другое устройство, и где-то по ходу линии логические адреса сопоставляются с физическими адресами RAM.
В чем же тогда реальная разница? Я вижу одно преимущество. Использование логических адресов дает больше свободы приложениям. Если бы физические адреса были жестко запрограммированы, то успех программы во многом зависел бы от физического компьютера, доступных адресов RAM и т. Д.
Разве использование логических адресов, преобразованных в физический, не требует двух шагов вместо одного к одному и, следовательно, больше лишних усилий?
Где же тогда находятся логические адреса после генерации? Они могут существовать в регистре ЦП, пока ЦП обслуживает процесс, но куда они попадают до и после? Я понимаю, что это зависит от реализации. Я предполагаю, что они могут храниться в каком-то специальном регистровом пространстве или буфере на ЦП, таком как TLB, верно? Если нет, то таблица может существовать в самой оперативной памяти, а ЦП хранит только указатель / адрес на базовый адрес таблицы в ОЗУ, правильно?
Кажется, что хранение адресов в ОЗУ контрпродуктивно по сравнению с адресами логической памяти. Могу только предположить, что мое понимание неверно.