Менеджер памяти для длинного режима
1) Выделять 1 страницу с конкретным адресом.
2) Выделять несколько страниц с конкретным адресом.
3) Освобождать 1 страницу с конкретным адресом.
4) Освобождать несколько страниц с конкретным адресом.
5) Искать и выделять свободную страницу.
6) Искать и выделять блок из свободных страниц.
Разумеется если страница уже выделена, то 1 и 2 пункт не должны сработать. Примеры желательно давать на FASM.
гугл "реализация менеджера памяти"
если немного подумать, то можно понять что список надо держать в специальной области памяти. Важная поправка в специальной области памяти физической и виртуальной (хотя это уже от прогера зависит).
битовая карта пишется не для всего возможного адресного пространства , а для реально установленной оперативки + адресное пространство , занятое девайсами . и логический размер страниц менеджера памяти не обязан совпадать с размером страниц , физически реализованного в процессоре механизма страничной адресации .
именно поэтому на момент 2003 64-битной винды адресное пространство для процесса было всего 8 Гб максимум. Тут ведь столкновение возможностей и потребностей, в данном случае не в пользу первых.
Прошу прощения, я тут напортачил :). Конечно же 8 ТераБайт (Это для x64). И 7 для IA-64. Вообщем суть в том что далеко не все 16 Эксабайт собираются адресовать.
[quote="koderAlex"]для 32битног адресного пространства , с грануляцией в 4кб и 32бит на страницу максимальный размер битовой карты будет равен 4мб .[/quote]А зачем в битовой карте на страницу отводить 32 бита? Одного недостаточно?
несколько бит на описание страницы + поле счётчика пользователей данной страницы (для разделяемой памяти).
в смысле? в PTE и PDE (для long mode ещё и PDPE и PML4E) есть биты, которые задают атрибуты защиты страницы.
А понятно, просто я свободные и занятые страницы держу в разных структурах. Для занятых страниц двойного слова будет мало, если для их учета используется одна общесистемная структура.
вполне хватает . для более подробной инфы по странице проще обратится к соответсвующей ТС процесса, эту страницу использующего .
ОС должна знать какие у нее ресурсы. Пойми так лучше. Разумеет узнавать должна через драйверы, а распределять сама.
Есть две битовые карты. Первая для 4кб страниц. Каждый бит означает занята страница 1, свободна 0. Вторая для 4мб. 11 занята 00 свободно 10 частично занята. И еще для 4МБ есть слово в которое записанно колличество занятых 4кб страниц.
Читаю двойными словами и проверяю за раз 32(16) страниц. Вначале ищу в 4мб потом уже уточняю по 4 кб. Так что поиск свободной\Занятой страницы быстрый.
А вот для приложения есть куча которая освобождает и добавляет страницы идет только в верхушку. Занятые данные представленны списком свободных блоков.
Хотя идея Фантома мне нравится. Так что я пока не знаю как лучше.
почему не знает ? при инициализации оси просматриваешь шину пк на предмет адресов девайсов и всё . для простой оси этого вполне хватит , а для горячего подключения тоже можно простую реализацию сделать .