Мне интересно, как операционные системы позволяют дочерним процессам знать, сколько доступно памяти.
Скажем, весь компьютер имеет 1 ГБ оперативной памяти. Операционная система работает и использует 100 МБ (я понятия не имею, сколько операционной системы на самом деле использует). Таким образом, осталось 900 МБ.
Затем вы запускаете 10 программ. Каждая программа создает 10 дочерних процессов. Вопрос в том, что эти родительские и дочерние процессы видят как общую доступную им память.
В качестве второй части вопроса, чтобы сделать его немного более сложным, скажем, что приложения работали некоторое время, и теперь на компьютере доступно 500 МБ (скажем, операционная система использовала на 100 МБ больше, а приложения использовали на 300 МБ больше, чтобы добраться до этого уровня осталось 500 МБ). Теперь вопрос в том, что эти родительские и дочерние процессы видят как доступную память на данный момент. Если он такой же, как прежде, или другой, и как он отличается.
Причина вопроса в том, что я читал о виртуальной памяти, которая гласит:
Виртуальная память [это] метод, который обеспечивает «идеализированную абстракцию ресурсов хранения, которые фактически доступны на данной машине», которая «создает иллюзию для пользователей очень большой (основной) памяти».
Таким образом, в принципе, каждый процесс в случае (1) получает сообщение "у вас есть 1 ГБ доступной памяти" или "у вас есть 900 МБ доступной памяти". Я не уверен, что он на самом деле скажет, если в нем будет указано общее количество на всем компьютере или общее - использование операционной системы.
Тогда для случая (2) будет указано "1 ГБ доступно", "900 МБ доступно", "600 МБ доступно" или "500 МБ доступно". Та же ситуация, я не уверен, что это скажет.
Это также может отличаться от этих значений. Операционная система может каким-то образом приблизить доступную память для каждого из 100 дочерних процессов, возможно, разделив ее равномерно. Таким образом, если на компьютере осталось 500 МБ, это будет означать, что каждому процессу будет сказано «у вас есть 500/100 == 5 МБ свободного места». Но тогда, если это так, если один процесс израсходовал 5 МБ, а осталось еще 495 МБ, задаюсь вопросом, будет ли разрешено начать использовать это, и ему сообщают новое число из того, что доступно. Вот почему я не думаю, что это обычно так, а скорее кажется, что ОС скажет, вероятно, что доступно на компьютере в целом (например, 1 ГБ).
Кроме того, причина, по которой я думаю, что всегда будет указано "1 ГБ", заключается в том, что я не уверен, есть ли способ определить, сколько памяти использует один процесс (или операционная система знает, сколько памяти использует). Если операционная система знает , сколько он сам использует, то кажется , что он сообщит 900Mb.
Другая часть путаницы заключается в том, что, если использование памяти постоянно меняется, и ОС сообщает каждому процессу, какой объем памяти - используемая память, вам придется постоянно проверять, сколько памяти доступно, если вы пытаетесь получить доступ. больше памяти То есть вы не могли кэшировать использование памяти при запуске программы. Может случиться так, что программа, которая простаивает несколько часов, запускается с 100 МБ памяти "на компьютере", но затем, после этого, снова проверяет, «о, подождите, доступно только 5 МБ». По некоторым причинам это кажется нежелательным поведением, но я не уверен.
Любая помощь в понимании того, как ОС сообщает дочернему процессу, сколько памяти доступно в разные моменты времени, была бы полезна. Спасибо.