Задать вопрос
@SergeySerge11

Как операционная система выделяет память для процессов?

Вообще у меня 10 реализаций malloc с кучей придуманных стратегий И все тонкости реализаций я знаю, Тупняк по применению вдруг возник Операционной системой, ставящий под вопрос вообще нужность функций для объектов больше размера страницы. Правильно ли я понимаю, что для каждого 4096*n байта будет вызвана функция VirtualAlloc?

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

То есть, как выделится блок размером допустим 4 мега байта, 1000 страниц, что проиходит по порядку?
И тут вопрос, а зачем вообще что-либо искать, когда можно сгенерировать виртуальные линейные адреса, просто найти N/4096 свободных физических страниц через free list, и выдать и записать их адреса. А виртуальные адреса просто сгенерировать по счетчику +=4096, 64 бит адресов никогда не кончатся, и вернуть сгенерированный адрес, обновив таблицы. Или так и реализовано в винде? Или есть ошибка, типа через 100 лет счетчик дойдет до 2^64 и может колизию создать( если подумать думаю тоже решение найдется)?
То есть в чем смысл искать регион последовательных виртуальных адресов, если их не существует, и можно просто offset= 0,1,2,3,4,5 +offset вернуть.
  • Вопрос задан
  • 612 просмотров
Подписаться 3 Простой 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы