Если требования к памяти приложения или драйвера не известны заранее (до начала их выполнения), этот драйвер или приложение обычно должны так или иначе запрашивать память у ОС / ядра.
Системные вызовыодин из таких способов сделать запросы выделения памяти.Часто системный вызов вызывается с помощью специальной инструкции CPU (например, int
, syscall
, sysenter
на процессоре x86).
Но могут быть дополнительные способы вызова в ОС /ядро запрашивает память, либо другие инструкции или события, которые может инициировать приложение / драйвер, что заставит ЦП упреждать выполнение приложения / драйвера и передавать управление в ОС / ядро.Сбои страниц, возникающие при попытке доступа к области памяти, которая либо защищена, либо не поддерживается физической памятью, может быть другой.Например, приложение может иметь свое собственное виртуальное адресное пространство и всякий раз, когда оно пытается читать или записывать из / в память, которой не выделена физическая память, ЦПУ переключает выполнение из приложения в ядро, которое выделяет память, а затем процессор переключается обратно.Это еще один способ, который не обязательно связан с какими-либо системными вызовами.
Конечно, если нет ОС или нет служб управления памятью, и в каждый момент времени работает только одно приложение, и оно имеет доступ ко всем ресурсам компьютера.(это более или менее то, что вы имели в DOS
), он может управлять самой памятью, и в этом случае системные вызовы не нужны.
Что касается остальной части what must be done when allocating memory
, это зависит от ОС(если есть) и процессор.Например, может потребоваться отобразить физические страницы памяти в виртуальное адресное пространство.И вообще, все адресное пространство должно быть как-то разделено на выделенные блоки памяти.Диспетчер памяти должен отслеживать выделенные и свободные области адресного пространства.За защитой памяти (если она поддерживается процессором и ОС) также необходимо позаботиться.Все обычные вещи.