Числа в выводе ipcs -l
, которые вы видите, являются значениями по умолчанию (неизменными) значений этих параметров, которые жестко заданы в самом ядре.
Когда ядро создает пространство имен IPC (эти параметры определены для каждого пространства имен), оно инициализирует его , а устанавливает ограничения по умолчанию , которые определены здесь следующим образом:
#define SHMMIN 1 /* min shared seg size (bytes) */
#define SHMMNI 4096 /* max num of segs system wide */
#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */
#define SHMALL (ULONG_MAX - (1UL << 24)) /* max shm system wide (pages) */
#define SHMSEG SHMMNI /* max shared segs per process */
Как видите, эти значения по умолчанию не зависят от фактического размера вашей оперативной памяти. Что касается значения по умолчанию максимального размера общего сегмента, SHMMAX - оно определяется как ULONG_MAX - (1UL << 24)
(то есть зависит только от максимального размера unsigned long
), которое после оценки (в окне x86_64) дает 18446744073692774399
в байтах, то есть 18014398509465599
в килобайтах, и это именно то число, которое вы видите в строке max seg size (kbytes)
вывода ipcs -l
.
Вас не должно смущать тот факт, что это значение больше, чем ваш физический объем ОЗУ - все это о виртуальной памяти, которая намного больше, чем физическая ОЗУ .