ФЭНДОМ


Линейный адрес является результатом преобразования логического адреса механизмом сегментации. Разрядность линейного адреса зависит от типа процессора: для 80286 — 24 бита, для 32-разрядных микропроцессоров, начиная с 80386 — 32 бита, для 64-разрядных процессоров — 64 бита в режиме IA-32e и 32 бита в других режимах. В микропроцессоре 8086 20-разрядный линейный адрес численно совпадает с физическим, равно как и в реальном режиме работы более поздних процессоров, ввиду отключённого механизма страничной трансляции. При этом для формирования линейного адреса используется напрямую значение селектора сегмента: оно смещается на 4 бита влево, формируя 20-битный базовый адрес. После этого суммированием базового адреса и смещения вычисляется линейный адрес, непосредственно отображаемый на физическое адресное пространство.

В защищённом режиме линейный адрес может преобразовываться в физический адрес с помощью страничного механизма. Если же страничная организация не используется (бит PG в управляющем регистре CR0 сброшен) или не поддерживается (её не было в микропроцессоре 80286), линейный адрес является одновременно и физическим, выдаваемым на шину адреса процессора. Подробнее преобразование логического адреса в линейный и далее в физический описано в разделе Управление памятью в защищённом режиме.

В режиме IA-32e страничный механизм всегда активен, поэтому линейный адрес всегда преобразуется в физический. Подробно преобразование адресов в этом режиме описано в разделе Управление памятью в режиме IA-32e, здесь же заметим, что, хотя в теории линейный адрес является 64-разрядным, на практике его разрядность может быть меньше; например, в первых 64-разрядных микропроцессорах Intel она равна 48 битам. Сам линейный адрес (а значит, и логический, с которым они численно равны из-за не используемого в этом режиме механизма сегментации) должен иметь каноническую форму: его аппаратно не реализованные старшие биты должны быть равны старшему из реализованных битов, т.е. фактически адрес должен быть числом со знаком. Например, если физическая длина линейного адреса равна 48 битам, он должен находиться в пределах от –2**47 до +2**47–1.