Страничная адресация
____________________________________________
I
В i386 используется двухуровневая страничная адресация. По инициализации всё, кажись, понятно.
32-битный адрес задаётся так:
10 бит page directory | 10 бит page table | 12 бит offset
То есть при любом обращении к памяти мне надо будет пользоваться такой структурой вместо физического адреса, как в сегментах?
____________________________________________
II
В Linux трёхуровневая. Если количество членов в page middle directory 1, то поле middle остаётся всегда 0. Дык всё равно не будет совместимо с x86, разве нет?
____________________________________________
Цитата:
Originally posted by drish
10 бит page directory | 10 бит page table | 12 бит offset
То есть при любом обращении к памяти мне надо будет пользоваться такой структурой вместо физического адреса, как в сегментах?
____________________________________________
10 бит page directory | 10 бит page table | 12 бит offset
То есть при любом обращении к памяти мне надо будет пользоваться такой структурой вместо физического адреса, как в сегментах?
____________________________________________
I. А в процессоре это для того и сделано, чтобы ограничить доступ к физической памяти. Все пишешь в линейную (не задумываясь о каких-то там страницах), а физическое размещение - это отдельный вопрос, пусть над ним думает операционная система, например. А если надо обращаться к конкретному физическому адресу (а зачем?), то не используй страничное преобразование, ну а под операционкой вроде есть функции для работы с физическими адресами.
II. Не знаю как там закручено в Linux, могли например сделать еще и какое-то програмное преобразование (например с помощью нескольких page directory).
необязательно. в виндах имеем flat - модель,
используем 32х разрядное смещение
в eax или ecx, необращая внимания на селектор.
я ламос, ногами не пинать :).