Максимальное пространство памяти, которое приложение может использовать равным (физическая память + пространство подкачки)?

Из этого сообщения я знаю, что пространство подкачки коррелирует с физической памятью. Предположим, что физическая память и пространство подкачки составляют 4 ГБ. Хотя теоретически пространство памяти 64-битного приложения близко к 2 ^ 64 (конечно, kernel ​​будет занимать некоторое пространство), но, на мой взгляд, фактическая память, которую может использовать приложение, составляет всего 8 ГБ.

Поэтому мой вопрос: для приложения, работающего в Unix / Linux, является ли максимальное пространство памяти, которое он может использовать равным (физическая память + пространство подкачки)?

Это сложный вопрос.

Прежде всего, теоретическое пространство виртуальной памяти 64-битной системы составляет 2 ^ 64. Но на самом деле ни ОС, ни процессор не поддерживают такое большое пространство виртуальной памяти или физическую память.

Текущие процессоры x86-64 (ака AMD64 и современные 64-разрядные чипы Intel) фактически используют 48-битные адресные строки (AMD64) и 42-разрядные адресные строки (Intel), теоретически позволяющие 256 терабайт физической памяти.

И Linux позволяет 128 Тбайт пространства виртуальной памяти для каждого процесса на x86-64 и теоретически может поддерживать 64 ТБ физической памяти.

На ваш вопрос, в идеальном случае, максимальное пространство виртуальной памяти, которое может использовать Linux-процесс, – это просто ограничение виртуальной памяти на Linux выше. Даже если ваша система исчерпала все пространство подкачки, выделила только 100 МБ свободной ОЗУ, ваш процесс также может использовать весь объем памяти.

Но ваша система может иметь некоторые ограничения для запроса пространства виртуальной памяти (malloc, которые вызывают brysc / sbrk syscall). Например, у Linux есть параметры vm.overcommit_memory и vm.overcommit_ratio, чтобы определить, будет ли malloc отказываться в процессе. См. http://www.win.tue.nl/~aeb/linux/lk/lk-9.html .

Однако пространство виртуальной памяти не является реальной операцией RAM + swap. Учитывая реальную RAM + swap, ваше мнение правильное: процесс никогда не будет использовать более реальную RAM + swap, чем ваша система. Но в большинстве случаев в вашей системе будет много процессов, поэтому смену RAM + swap, которую вы можете использовать, сжимается. Если все физические RAM + swap будут исчерпаны, убийца OOM выберет какой-то процесс для убийства.