LINUX.ORG.RU

Работа с памятью.


1

1

Заранее прошу прощения за возможно некорркетный вопрос.

Как я понял начиная с i386 в виртуальном режиме возможна работа с сегментнойорганизацией памяти (под каждый кусок [сегмент] памяти заводмтся своя таблица, где указаны возможности по доступу к этому куску, находится-ли он сейчас в памяти или в свопе и тд..), а возможна страничная организация (все 4 Гб разделены на страницы по 4Кб и для каждой страницы указано все тоже самое).

Правильно-ли я пониаю? Какой способ использует линукс?

★★★★

Linux на IA32 использует сегментно-страничный режим. Все сегменты стандартные - по 4 Гб. В некоторых вариациях предел CS может уменьшаться до последней exec VMA. Можно создавать свои сегменты в LDT.

Ну а страницы... страницы как страницы.

anonymous
()
Ответ на: комментарий от anonymous

Но тогда как решается такая задача: есть кусок памяти (физический). Он описывается одной страницей, но так-же входит в какой-то сегмент. Допустим страница попала в своп. Но как часть сегмента, она пропала. То-есть если своппинг производить постранично, то возможны случаи частично отсвопленых сегментов.

alexru ★★★★
() автор топика
Ответ на: комментарий от alexru

>Допустим страница попала в своп. Но как часть сегмента, она пропала

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

Тупо верить мне на слово не советую, могу и ошибаться. Если так, поправьте меня.

devinull ★★
()
Ответ на: комментарий от devinull

>Тупо верить мне на слово не советую, могу и ошибаться. Если так,
>поправьте меня.

в принципе, все верно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.