OSDev

для всех
Текущее время: 29 мар 2024, 02:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 16 июн 2009, 20:19 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
Физическая память разделяется на регионы. Регион - это непрерывная область памяти, имеющая начало, длину, атрибуты, имя (не обязательно) и счетчик ссылок. Атрибутов два - "зарезервирован" и "разделяемый". Если установлен "зарезервирован", менеджер не выдаст этот регион при обычном запросе на память.
Ядро поддерживает два списка регионов: свободные (со счетчиком ссылок = 0) и занятые (со счетчиком ссылок > 0).

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

Регионы могут быть разделяемыми. Есть два типа разделения регионов:
[*]С помощью флага "разделяемый", при установленном имени. Любой процесс может запросить такой регион, но получит доступ только для чтения. Такое разделение будет использоваться при разделении библиотек в памяти.
[*]Передача от владельца. При таком разделении, процесс-владелец региона разрешает процессу-получателю региона подключить регион к себе (для записи или только для чтения), и передает ему идентификатор региона через другие средства IPC. Так же применим к регионам 1 типа, если необходимо получить доступ для записи. Такое разделение может использоваться, например, в графическом сервере.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер физической памяти
СообщениеДобавлено: 16 июн 2009, 20:23 

Зарегистрирован: 26 апр 2007, 16:22
Сообщения: 67
труЪ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^2: Менеджер физической памяти
СообщениеДобавлено: 16 июн 2009, 20:37 

Зарегистрирован: 02 май 2007, 14:25
Сообщения: 126
Хе, а у меня, походу, регионы попродвинутее будут :).
Я, как раз, их сейчас реализую.
У меня есть такие типы регионов:
- SHARED - разделяемый между процессами
- MMIO - memory-mapped IO
- FLAT - прямое отображение виртуальной памяти на физическую
- OPTIMISTIC - выделение страницы осуществляется только при обращении к памяти

Каджый регион - это группа страниц.
Регион может быть однократно и более, целиком или по частям замонтирован на виртуальное адресное пространство.
Поэтому у меня регион содержит не только счётчик ссылок, но и список точек монтирования на виртуальные адресные пространства. Вот так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^3: Менеджер физической памяти
СообщениеДобавлено: 16 июн 2009, 20:43 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
У меня в принципе тоже самое, только не реализовано MMIO, OPTIMISTIC будет для всех регионов, SHARED не выделено отдельно, а FLAT - это зарезервированный регион.

А зачем список точек монтирования?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Менеджер физической памяти
СообщениеДобавлено: 17 июн 2009, 10:47 

Зарегистрирован: 02 май 2007, 14:25
Сообщения: 126
А как ты будешь выгружать страницу из памяти, не зная, к какому адресному пространству и по какому адресу она подмонтирована ;)?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB