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