phantom-84 писал(а):
В рамках этой темы инициализация не так важна. Хотя если все-таки говорить об инициализации памяти, я не использую базовую память для каких-либо структур управления памятью кроме временного хранения описателей блоков памяти, полученных от BIOS.
Под
базовой вы понимаете память статически выделенную в исходном коде? Статически - всмысле константный адрес. Правильно?
phantom-84 писал(а):
Отображение ядра, хранящегося в базовой памяти, в верхнюю часть ВАП (тем более в виде большой страницы) тоже не делаю. Максимум могу отобразить в пространство ядра первую физ. страницу (4 кб) ради экономии.
Я делал отображение в виде 4M страницы по двум причинам. Во-первых, мне хотелось съэкономить на коде. Во-вторых, проэкспериментировать с режимом PSE в 32-битном страничном режиме. Проверить как это работает. Поэтому именно так и сделано.
Ядро с логической точки зрения тоже своего рода процесс, со своими сегментами кода, констант, данных и стека. Соответственно размер отображенной в память части ядра может быть минимальным.
phantom-84 писал(а):
Почему в прикладном пространстве секция кода так резко поменяла свое местоположение в сравнении с традиционными взглядами на этот вопрос, не понятно. А как вы планируете размещать код других прикладных модулей (библиотек) в ВАП?
Спасибо за комментарий. Насчет традиционных взглядов на вопрос, я давно не обновлял свои знания, и если есть на эту тему ссылка, буду благодарен. Насчет размещения кода shared libraries, честно скажу над вопросом не думал. Вопрос действительно интересный. Т.е. они явно где-то должны располагаться... Причем должна быть защита от записи кодовых страниц, а также страниц константных данных.
phantom-84 писал(а):
Таблица страниц, включая каталог, также традиционно относится к пространству ядра, хотя в ней естественно есть и "локальные" страницы.
В моем случае ядро вместе со всеми управляющими структурами находится в 1М мегабайте и оно вместе со всеми управляющими структурами отображено в старшие 4M памяти.
phantom-84 писал(а):
Да и без того в пространстве ядра должны быть локальные участки. Кстати если локальные участки и таблицу страниц разместить в начале пространства ядра, то можно добиться полного разделения локальной и глобальной памяти на две области.
Что такое "локальные участки", какое их назначение? Собственно память в примере и разделена как раз на 2 части: прикладную и последние 4М виртуального адресного пространства - область ядра.
Конечно это всё сыро. Чтобы доводить до ума, нужно с кем-то обсуждать. У меня 99% времени уходит на Java в данный момент... Я собственно не разрабатываю операционную систему. Я лишь провожу эксперимменты с концепциями. На большее вряд ли когда либо будет мотивация.
Нужно выбирать какие-то управляющие структуры для выделения физической памяти для начала. А поверх них прикручивать работу с виртуальным адресным пространстом. Но, тут нужны концепции структур, относящихся к процессам....
Что касается выделения физической памяти. Самый простой концепт - битовая маска, скорее всего, будет медленно работать. Да и память занимать будет. Список свободных блоков, возможно вариант лучше. У James Molloy был описан подобный вариант... Есть куча классических механизмов, последний из которых, кажется Slub Allocation.... Было бы много что интересно обсудить...