Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Менеджер памяти для длинного режима

399
24 марта 2009 года
KIV
432 / / 20.01.2009
Я пытаюсь написать 64-битную ОС. Как лучше управлять в ней страницами. Битовая карта не подходит из-за слишком большого размера (для 64-битного адресного пространства - 512 ТБ). Менеджер памяти должен уметь:
1) Выделять 1 страницу с конкретным адресом.
2) Выделять несколько страниц с конкретным адресом.
3) Освобождать 1 страницу с конкретным адресом.
4) Освобождать несколько страниц с конкретным адресом.
5) Искать и выделять свободную страницу.
6) Искать и выделять блок из свободных страниц.
Разумеется если страница уже выделена, то 1 и 2 пункт не должны сработать. Примеры желательно давать на FASM.
14
24 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Почитайте теорию про менеджеры памяти и принципы их работы
399
25 марта 2009 года
KIV
432 / / 20.01.2009
Посоветуйте где почитать
14
25 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Вконец обленились и не хотим думать?
гугл "реализация менеджера памяти"
399
07 апреля 2009 года
KIV
432 / / 20.01.2009
Кое-что нашёл. Но я так и непонял: где хранится список свободных и занятых блоков памяти: на свободных страницах или в специальной области памяти?
261
07 апреля 2009 года
ahilles
1.5K / / 03.11.2005
Цитата: KIV
Но я так и непонял: где хранится список свободных и занятых блоков памяти: на свободных страницах или в специальной области памяти?


если немного подумать, то можно понять что список надо держать в специальной области памяти. Важная поправка в специальной области памяти физической и виртуальной (хотя это уже от прогера зависит).

252
08 апреля 2009 года
koderAlex
1.4K / / 07.09.2005
Цитата: KIV
Я пытаюсь написать 64-битную ОС. Как лучше управлять в ней страницами. Битовая карта не подходит из-за слишком большого размера (для 64-битного адресного пространства - 512 ТБ).



битовая карта пишется не для всего возможного адресного пространства , а для реально установленной оперативки + адресное пространство , занятое девайсами . и логический размер страниц менеджера памяти не обязан совпадать с размером страниц , физически реализованного в процессоре механизма страничной адресации .

14
08 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата:

именно поэтому на момент 2003 64-битной винды адресное пространство для процесса было всего 8 Гб максимум. Тут ведь столкновение возможностей и потребностей, в данном случае не в пользу первых.


Прошу прощения, я тут напортачил :). Конечно же 8 ТераБайт (Это для x64). И 7 для IA-64. Вообщем суть в том что далеко не все 16 Эксабайт собираются адресовать.

349
08 апреля 2009 года
Phantom-84
656 / / 27.10.2005
64-разрядную ось я писать не пытался. Только 32-разрядную, причем не использующую PAE. Однако не считаю, что в 64-разрядной системе это будет отличаться принципиально. Битовую карту использую только для памяти, лежащей ниже 1 мб (предназначена для аппаратных буферов ISA-устройств). Основной пул свободных страниц (FPT) имее структуру стека, растущего вверх (фактически это массив двойных слов переменной длины). Индекс вершины стека определяет количество свободных страниц за исключением страниц, занятых непосредственно FPT. Хотя и эти страницы можно использовать как свободные, но только после того, как длина основного массива становится равной нулю. Для этого используется два счетчика Один определяет количество страниц в основном массиве (сами страницы не отображены ни в одно вирт. пространство). Другой - количество страниц, занятых FPT и отображенных в пространство ядра (адреса таких страниц хранятся в таблице страниц вместе со страничными флагами). Есть еще неизменяемая переменная, определяющая количество страниц, которые необходимы FPT при максимальном насыщении - это так сказать пограничное значение. Количество свободной физической памяти, информация о которой хранится в FPT, даже в недостижимом идиале не будет превышать 4 Гб (физическая память выше границы 4 Гб не используется; в FPT не должно быть одинаковых адресов, а если на этот счет возникают какие-либо сомнения, то на этапе инициализации можно задействовать и карту памяти), поэтому размер FPT не будет превышать 4 Мб. Соответственно в пределах 4 дополнительных Мб можно выжать за счет использования описанного двухуровневого механизма. Причем инвалидация страниц FPT начнет работать только, когда основной массив будет полностью пуст, т.е. когда останется в пределах 4 Мб свободной оперативной памяти, занятой непосредственно FPT.
260
08 апреля 2009 года
Ramon
1.1K / / 16.08.2003
Особо хороша инициализация данной структуры.
252
09 апреля 2009 года
koderAlex
1.4K / / 07.09.2005
для 32битног адресного пространства , с грануляцией в 4кб и 32бит на страницу максимальный размер битовой карты будет равен 4мб .
349
09 апреля 2009 года
Phantom-84
656 / / 27.10.2005
[quote="Ramon"]Особо хороша инициализация данной структуры.[/quote]Это сарказм? Поясни, что именно тебе нравится или не нравится. Если имеется в виду необходимость сохранять адрес каждой свободной страницы, то могу сказать, что другие варианты не лучше.
[quote="koderAlex"]для 32битног адресного пространства , с грануляцией в 4кб и 32бит на страницу максимальный размер битовой карты будет равен 4мб .[/quote]А зачем в битовой карте на страницу отводить 32 бита? Одного недостаточно?
252
09 апреля 2009 года
koderAlex
1.4K / / 07.09.2005
Цитата: Phantom-84
А зачем в битовой карте на страницу отводить 32 бита? Одного недостаточно?


несколько бит на описание страницы + поле счётчика пользователей данной страницы (для разделяемой памяти).

14
09 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Народ, а как делаете защиту страниц? ReadOnly/ReadWite/Execute?
261
09 апреля 2009 года
ahilles
1.5K / / 03.11.2005
Цитата: Phodopus
Народ, а как делаете защиту страниц? ReadOnly/ReadWite/Execute?


в смысле? в PTE и PDE (для long mode ещё и PDPE и PML4E) есть биты, которые задают атрибуты защиты страницы.

349
09 апреля 2009 года
Phantom-84
656 / / 27.10.2005
Цитата:
несколько бит на описание страницы + поле счётчика пользователей данной страницы (для разделяемой памяти).

А понятно, просто я свободные и занятые страницы держу в разных структурах. Для занятых страниц двойного слова будет мало, если для их учета используется одна общесистемная структура.

252
09 апреля 2009 года
koderAlex
1.4K / / 07.09.2005
Цитата: Phantom-84
А понятно, просто я свободные и занятые страницы держу в разных структурах. Для занятых страниц двойного слова будет мало, если для их учета используется одна общесистемная структура.


вполне хватает . для более подробной инфы по странице проще обратится к соответсвующей ТС процесса, эту страницу использующего .

399
09 апреля 2009 года
KIV
432 / / 20.01.2009
Спасибо. Но ОС не знает где находится память ввода-вывода устройств. Узнавать это будут драйвера, ведь стандартного адреса нет. Стек страниц не подходит для выделения блока из нескольких страниц, а это может потребоваться опять же драйверам (устройсва понятия не имеют о страничной адресации, поэтому страницы должны быть рядом физически). Помоему для реализация менеджера подходит список свободных блоков (для оперативной памяти), но с реализацией алгоритма на Ассемблере не всё так просто. Нет ли у кого-нибудь примера менеджера памяти на FASM (можно и на другом)?
551
09 апреля 2009 года
Pavia
357 / / 22.04.2004
Цитата:
Спасибо. Но ОС не знает где находится память ввода-вывода устройств.

ОС должна знать какие у нее ресурсы. Пойми так лучше. Разумеет узнавать должна через драйверы, а распределять сама.

399
10 апреля 2009 года
KIV
432 / / 20.01.2009
Списибо за идеи. Как вам такой вариант: основная память выделяется с помощью битовой карты, а драйвера регистрируют определённый участки памяти как память устройств. После этого драйвера и приложения модгит получать, совместно (или не совместно) использовать и освобождать эти блоки памяти.
349
11 апреля 2009 года
Phantom-84
656 / / 27.10.2005
Это вариант. Но меня больше интересует, как ты структурно собираешься бороться с основными недостатками битовых карт, касающихся быстрого поиска свободных страниц и неэффективного использования битовых карт для изначально фрагментированного физического адресного пространства.
551
11 апреля 2009 года
Pavia
357 / / 22.04.2004
Я со скоростью борюсь так. У меня правда под 32битный режим.
Есть две битовые карты. Первая для 4кб страниц. Каждый бит означает занята страница 1, свободна 0. Вторая для 4мб. 11 занята 00 свободно 10 частично занята. И еще для 4МБ есть слово в которое записанно колличество занятых 4кб страниц.

Читаю двойными словами и проверяю за раз 32(16) страниц. Вначале ищу в 4мб потом уже уточняю по 4 кб. Так что поиск свободной\Занятой страницы быстрый.

А вот для приложения есть куча которая освобождает и добавляет страницы идет только в верхушку. Занятые данные представленны списком свободных блоков.

Хотя идея Фантома мне нравится. Так что я пока не знаю как лучше.
252
13 апреля 2009 года
koderAlex
1.4K / / 07.09.2005
Цитата: KIV
Спасибо. Но ОС не знает где находится память ввода-вывода устройств. Узнавать это будут драйвера, ведь стандартного адреса нет. Стек страниц не подходит для выделения блока из нескольких страниц, а это может потребоваться опять же драйверам (устройсва понятия не имеют о страничной адресации, поэтому страницы должны быть рядом физически). Помоему для реализация менеджера подходит список свободных блоков (для оперативной памяти), но с реализацией алгоритма на Ассемблере не всё так просто. Нет ли у кого-нибудь примера менеджера памяти на FASM (можно и на другом)?


почему не знает ? при инициализации оси просматриваешь шину пк на предмет адресов девайсов и всё . для простой оси этого вполне хватит , а для горячего подключения тоже можно простую реализацию сделать .

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог