Функции semaphore, shared memory и ipc


Содержание

XCI. Semaphore, Shared Memory and IPC Functions

This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

Semaphores may be used to provide exclusive access to resources on the current machine, or to limit the number of processes that may simultaneously use a resource.

This module prov >

Table 1. Limits of Shared Memory by the Unix OS

SHMMAX max size of shared memory, normally 131072 bytes
SHMMIN minimum size of shared memory, normally 1 byte
SHMMNI max amount of shared memory segments on a system, normally 100
SHMSEG max amount of shared memory segments per process, normally 6

The messaging functions may be used to send and receive messages to/from other processes. They provide a simple and effective means of exchanging data between processes, without the need for setting up an alternative using unix domain sockets.

Note: This extension is not available on Windows platforms.

No external libraries are needed to build this extension.

Support for this functions are not enabled by default. To enable System V semaphore support compile PHP with the option —enable-sysvsem . To enable the System V shared memory support compile PHP with the option —enable-sysvshm . To enable the System V messages support compile PHP with the option —enable-sysvmsg .

Semaphore, Shared Memory and IPC

  • ��������
  • ��������� � ���������
    • ����������
    • ���������
    • ��������� �� ����� ����������
    • ���� ��������
  • ���������������� ���������
  • Semaphore �������
    • ftok � Convert a pathname and a project identifier to a System V IPC key
    • msg_get_queue � Create or attach to a message queue
    • msg_queue_exists � Check whether a message queue exists
    • msg_receive � Receive a message from a message queue
    • msg_remove_queue � Destroy a message queue
    • msg_send � Send a message to a message queue
    • msg_set_queue � Set information in the message queue data structure
    • msg_stat_queue � Returns information from the message queue data structure
    • sem_acquire � Acquire a semaphore
    • sem_get � Get a semaphore id
    • sem_release � Release a semaphore
    • sem_remove � Remove a semaphore
    • shm_attach � Creates or open a shared memory segment
    • shm_detach � Disconnects from shared memory segment
    • shm_get_var � Returns a variable from shared memory
    • shm_has_var � Check whether a specific entry exists
    • shm_put_var � Inserts or updates a variable in shared memory
    • shm_remove_var � Removes a variable from shared memory
    • shm_remove � Removes shared memory from Unix systems

CIX. Semaphore, Shared Memory and IPC Functions

This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

Semaphores may be used to provide exclusive access to resources on the current machine, or to limit the number of processes that may simultaneously use a resource.

This module prov >

Таблица 1. Limits of Shared Memory by the Unix OS

SHMMAX max size of shared memory, normally 131072 bytes
SHMMIN minimum size of shared memory, normally 1 byte
SHMMNI max amount of shared memory segments on a system, normally 100
SHMSEG max amount of shared memory segments per process, normally 6

The messaging functions may be used to send and receive messages to/from other processes. They provide a simple and effective means of exchanging data between processes, without the need for setting up an alternative using Unix domain sockets.

Замечание: Для Windows-платформ это расширение недоступно.

Эти функции всегда доступны.

Support for this functions are not enabled by default. To enable System V semaphore support compile PHP with the option —enable-sysvsem . To enable the System V shared memory support compile PHP with the option —enable-sysvshm . To enable the System V messages support compile PHP with the option —enable-sysvmsg .

Поведение этих функций зависит от установок в php.ini .

Таблица 2. Semaphore Configuration Options

Name Default Changeable Changelog
sysvmsg.value «42» PHP_INI_ALL
sysvmsg.string «foobar» PHP_INI_ALL

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.


Таблица 3. System V message constants

Constant Type
MSG_IPC_NOWAIT integer
MSG_NOERROR integer
MSG_EXCEPT integer

Don’t use semaphores to serialize access to an undefined number of resources. There is no way (yet) to know before locking if a semaphore is already locked, thus not being able to fully release the semaphore and occupying a semaphore resource for an undefined time.

A possible solution is to build a shared mem pool and store there the current number of locks for a semaphore id.

Cheers,
Horaci Cuevas

Here is a quick utility to dump the contents of a shm_ format memory segment:

If you going to work with semaphore, which was created by some external program, you can try the following code for this program (C example):

#define SVSEM_MODE (SEM_R | SEM_A | SEM_R>>3 | SEM_R>>6) /* 0644 */
#define PHP_SEM_NEED_NUMBER 3

/*. */
int sem > struct sembuf semptr;
union semun semopts;
/*. */
if( (sem >= 0 ) <
semopts.val = 1; /* initial value for sem */
if( semctl( semid, 0, SETVAL, semopts) >
else

/*. */
/* If you want acquire the sem */
semptr.sem_num = 0;
semptr.sem_op = -1; /* lock it */
semptr.sem_flg = SEM_UNDO;
while( semop(semid, &semptr, 1)

Samlpe code for using most of the functions here:

$MEMSIZE = 512;// size of shared memory to allocate
$SEMKEY = 1; // Semaphore key
$SHMKEY = 2; // Shared memory key

echo «Start.\n»;
// Get semaphore
$sem_ > if ($sem_ > <
echo «Fail to get semaphore»;
exit;
>
else
echo «Got semaphore $sem_id.\n»;

// Accuire semaphore
if (! sem_acquire($sem_id))
<
echo «Fail to aquire semaphore $sem_id.\n»;
sem_remove($sem_id);
exit;
>
else
echo «Success aquire semaphore $sem_id.\n»;

$shm_ > if ($shm_ > <
echo «Fail to attach shared memory.\n»;
sem_remove($sem_id);
exit;
>
else
echo «Success to attach shared memory : $shm_id.\n»;

// Write variable 1
if (!shm_put_var($shm_id, 1, «Variable 1»))
<
echo «Fail to put var 1 on shared memory $shm_id.\n»;
sem_remove($sem_id);
shm_remove ($shm_id);
exit;
>
else
echo «Write var1 to shared memory.\n»;

// Write variable 2
if (!shm_put_var($shm_id, 2, «Variable 2»))
<
echo «Fail to put var 2 on shared memory $shm_id.\n»;
sem_remove($sem_id);
shm_remove ($shm_id);
exit;
>
else
echo «Write var2 to shared memory.\n»;

// Read variable 1
$var1 = shm_get_var ($shm_id, 1);
if ($var1 === false)
<
echo «Fail to retrive Var 1 from Shared memory $shm_ > >
else
echo «Read var1=$var1.\n»;

// Read variable 1
$var2 = shm_get_var ($shm_id, 2);
if ($var1 === false)
<
echo «Fail to retrive Var 2 from Shared memory $shm_ > >
else
echo «Read var2=$var2.\n»;

// Release semaphore
if (!sem_release($sem_id))
echo «Fail to release $sem_id semaphore.\n»;
else
echo «Semaphore $sem_id released.\n»;

// remove shared memory segmant from SysV
if (shm_remove ($shm_id))
echo «Shared memory successfully removed from SysV.\n»;
else
echo «Fail to remove $shm_id shared memory from SysV.\n»;

// Remove semaphore
if (sem_remove($sem_id))
echo «semaphore removed successfully from SysV.\n»;
else
echo «Fail to remove $sem_id semaphore from SysV.\n»;
echo «End.\n»;

LXF82:Unix API

�������� �� �������� ������ ���� 2015 ��� (12 �������) ������ ��������� (6 �������) ������ ��������� (6 �������) �������� �� ����������� ������ ���� 2015 ��� (12 �������) ������ ��������� (6 �������) ������ ��������� (6 �������) �������� ������ ������� ������� (�������� ������) ���� 2014 ��� (12 �������) ������ ��������� (6 �������) ������ ��������� (6 �������)
���������������� ��� UNIX
  • ����� 1: �������� � �������� ��������
  • ����� 2: ������������� ��������������
  • ����� 3: ������� ��������� � ��������
  • ����� 3: ������
  • ����� 4: �������
  • ����� 6: ��������
  • ����� 7: ������: ��������
  • ����� 8: ������: �������������
  • ����� 9: ������
  • ����� 10: ���������� ����/�����
  • ����� 11: ncurses: ������ �����!
  • ����� 12: � ������ �� ����

����������

������� ��������� � ��������

����� 3 ������ � ������ �� ������������ �������� �������������� �������������� � Unix. � ���� ������� ������ ��������� ��������� ��� � ���������� ���������� IPC: �������� ���������, ����������� ������ � ���������.

�� ������ ��������, ��� �������� ���� ������������ ����, �

���������� ����������� � ��� � �� ���� ���������


�� ���������� �������� ���������� �������������� ����� ���������� � Linux. ������ ��������� �����, ������������� � ���������� ������, ������������ � Unix ����������� � ������ ������. ����� � ��� ���� ��������� � ������ ��������� �������������� ��������������. �� ����������� �� ���� ����������, ������� ��������� � Unix System V � ���� ������� � System V Interface Definition (SVID). � ��������� ����� ��� ��������� �������������� ����� ����� Unix-��������� (������� ��������� �� �������������� � Mac OS X 10.3 � ��. ������ ���������� 1). ���������� ���� ���������� SVID IPC �������. ����� ������ �������� ����� �������� ������ � ������ ������� �������, ��� ������ �������������� �� ������������� ����� �������. ���� �������������� ��� ���� �������� System V IPC ��������� ���� � ���������� �����-������������� �������. ����� ������������ ���� � ��� �� ������, ��������� ������ ������������ ���� � ��� �� ����. ��� ������� ������� IPC ������������� ����������� ������� ������ � ������, � ����� ����������� �������.

���������

�������� ��������� Linux ����� �� �������� ���������, ������������ � ����������� ������������ ������. ��������� ������������� � �������� � ����� ��������� �� �������� ��������������� ��� � ������������ �������. ������ ������ ��������� ����� ������� ���� ��� ��������� �������� ��� ������ �����������, � ���� ������� ��������� ����� �������������� ��������� ����� ��� ����� ����������. ��������� ������������ ��� ������������������� ������, ������������ �� ������ �������� �������. ������� ��������� SVID �������� ���������� ����������:

  • ����������� ���������� ��������� � �������. ����������, ������������ ��������� ��� ������ �������, ������� ���� ����������� ������� ���������, ������� ����� (� ������) ���� ������� �����������-���������� � ������ ���������� ��� ������.
  • ����������� ������������� ������ ��������� �� ������� �� ������ ����������� �� ���������������. ��� ����������� ��������� ������������ ������������ ��������� ���������, � ����� ���������������� ���������, ���������� ������� ������������, ������������ � ������ �������.
  • ������������ ��������� � ������ ���������.

��������� ����� ������� ���������. ������������ ������ ��������� � ������������ ���������� ��������� � ������� ����������, ������ �� ���������� ������� ��� ���� Unix-������ ������� ���������� ��� �����������. � Linux ������������ ����� ��������� � ������ ������ ���������� MSGMAX, ������������ � ����
, � ������������ ����� ��������� � ���������� MSGMNG �� ���� �� �����. �� ��������� IA32 ������ ��������� �� ����� ��������� 8 ��������, � ����� ������� � 16384 (16K) ���������. ��������� ������, �������������� ��� �������� ���������, ����� ���� ���������� ��������� �������:

���� mtype �������� ������������ ������������ ����� � ����������� ���������. � ���� ���� �������� ������������ ������������� ���������, ������� ����� ������������������ ��� ��� ������������ ������. ����� ���� mtype, ��������� ������ ��������� ����� ��������� ����� ���������� ������ ����� ����� �����.

� �������� ������� ������������� �������� ���������� ���������� ������ ���� �������� � ������� � �������. �������� ������ �� ������� �� ����� (����� msgcli.c � msgserv.c ��������������). ����� ��������� ����� ������������ �����������, ��� ������ ������������ ���� � ��� �� ������ ��������� � ������������� �������. ��� ������, ����� ��� ������� � �������, ������ ������� � ��������� ������������ ���� (�� ������� ��� msgtypes.h). ���� ��������� ������ �������� ���:

������ ���� mtype, �� ������ ���� snd_pid, ������� ����� ��������� ������������� ��������-����������� ���������, � ���� body, ������� ������������� ��� ������ ���������. �� ����� �� ���������� ��������� ������ �������� ��� ��������� ������ �����. �������� ���� mtype ��������� ��, � ����� ���������� �� ����� ����. ���� mtype ����� ���� �� ������ ��������������� ���� ���������. � ��� ������� ����� �������, ��������, ��������� ���������. ��������� ������� ������������ ������� ���������, ���������� ����� ��������� � ������ ������� ��������� � ����� ������� �����������.

����� ��������� ��������� ��� ������� ���������� ���� �������. ��� ��������� ����������� ����� ����� ������������ ������� ftok(3), ������ ����������� �� ������ � ��������� SVID ����������� �������� �������� ��������������, ������� � ����� ������� �� ��������� ���� ��� ��������� � ����� msgtypes.h:

������������, ��� � ������� ��� ���������� ������ ������� ��������� � ������ 1174. � ��������, ���������, ��������� ������ IPC, ����� ������, ���������� �� ��� ����� ������ (��. ���� ������������� ����� IPC_EXCL), ������ ����� �� ����� �� �����. ��������, ������� ���������, ��� ������ � ��������� ��������������� ����������, �� ��� ��� ������? ������� ����� ������� ������ ������������� �� ������-������ ����, ������ � ����� �������������� ����� ���-�� ���������� ������ ��������. ��� ���������� ����� ������������ ����������� ������, ��� �������, � ���� �������, ��������� ���������� �������������. ������������ �������������� �������� ������� �������� �� ������������ ���� �������� ������� (������� � ���� ������ �����, ������� � �����). ������� ftok(), ������� �� ���������� ����, ���� �������� ������������ ��������������, ����������� �� ������������ ���� �������� �������. ����� ����, �������� ������������� ������� IPC ����� ���������� �������, ���� ������������ ������ ��� ������ ���������� ����������� ���� �� ��������, ����������� �� ������� � ���������� ��������� ������.

���������� ������ ������ �������. ������ �������� ���������, ���������� ��������, ������������� ��������� �� ������ ���������, ���������� ������� ��������� ���!�, ���� �������������, ��� ������ ������� �����, ����� ������� ������� � ��������� ������. ��������������� ������� ��������� �� ������� ���������-�������. ����� ��������� (msgserv.c), ��� ������, ���������� � ������������ ������. ��� ����, ��������� � �������, �������������� ��� ������ � �����������, ���������� �������� ��� ��������� � ����� ��������� ������ � . ������� ��������� ��������� ��� ������ ������� msgget(2):

������ �������� msgget() � ����, ������������� ������������ �������. �� ��������, ������� ��� ����� ������� � ������ ������ � ��������������� �������, ������� ����������� �������. �������, ��� ���� ����� ������ ��� �������� �������, � ��� ������ � ��� ������������ �������������. ������ �������� ������������ ����� ���������� ����� ���� ������� � ����������� ������� (����������� ����� ���� ������� � ����������� �������) � ���������� �������������� ������: �������, �����������, �������� ������� SVID IPC, ������ �������� �� ����������-����������. ���� IPC_CREATE ���������, ��� � ���������� ������ msgget() ������ ���� ������� ����� �������. ��� ��������� ����� IPC_EXCL, ������� msgget() ������ ��������� �� ������, ���� ������� � ��������� ������ ��� ����������. � ������ ������ msgget() ���������� ������������� �������� � ������������� ��������� �������.

�������� � ��������� ��������� ����������� ��� ������ ������� msgsnd(2) � msgrcv(2) ��������������. ������ ���������� ����� ������� �������� ������������� �������, ������������ �������� msgget(). �� ������ ��������� ���������� ������ ��������� ���������. ��� ���� ������� ����, ���������, �������� ��������� �� �������, ������ ������� ������ ���������, ��������������� ���������� ��������������, � ����� ������ ��������� ������� ������� � ��������, ����� ��������� ���� ��������� ������������� ����. �� ����� ���� ������ polymsgserv/polymsgcli, ��������������� ���� ������. ������� ���������� ������� msgrcv() �������� ������������� ���������. ���� �������� ����� ��������� ������ ����, �� ������� ����� ��������� ��������� � ��������������� ��������� ���� mtype. ���� ���� �������� ����� ����, �� ������� ����� ��������� ������ �� ������� ���������, � ���� �������� �������������, �� ������� ����� ��������� ������ ���������, ��� ������������� ������ ���� ����� ����������� �������� ���������. ��������� �������� � �������� msgsnd() � msgrcv() ��������� ������ �������������� �����. ������ �������, �������� ��������� �� �������, ���������������� ���������� ��������� �� ��� ���, ���� ���������� ��������� �� ����� ���������, �� ���� ���� � ������� �� �������� ��������� ���������� ����. ������ ��� �������� ��� ������� � ����� ����������. ��� �������� ����� IPC_NOWAIT, msgrcv() ������ ��������� �� ������, ���� �� ������ ������ � ������� ����������� ���������� ���������.

� ����� ������� ������ � ������ ���������� ������ �������������� ��� ���������� ���������. ��� ������� ��� ����, ����� ���������, ���������� ��������������� msgsnd() � msgrcv(), �� ��������� �� ������� ���� ����������� ���������. ��� ������ ���������� � ������� ��������� �� ��������� mtype, ������ 1, � ��������� � �� ���������, ������ 2 (� ���������-������� ��� ��������).

��� �������� ������� ������������ ������� msgctl(2), �������, ��� � ��� ������� *ctl(), ����� ��������� ��������� ������ �������� (��������, ��������� ������ � ��������� �������). ������ �������� ���� �������, ��� ������, ������������� �������, ������ �������� � ������� (IPC_STAT, IPC_SET ��� IPC_RMID). ������ �������� ������������ � �������-�������� (�� ����, ����� ������ �������� ����� IPC_STAT), � ����� ��� ������������ ������� (������� IPC_SET). � ��� ���������� ��������� �� ��������� msgid_ds, ���� ������� �������� �������� ��������� ���������� �������. ������� ���������� ������ ���������� �������. �����

������� ������� � ��������������� msgid.

���������� ������ ���������-������. ������ ����� ��� ������ �������� ������������� �������. ��� ����� ������������ ������� msgget() � ��� �� ������ �������, ��� � � �������, � ������ ���� �������, �� ��� �������������� ������. ��� ���������� ��� ������������� ��� ������������ ������� � ������ ������ ��� -1, ���� ������� �� ����������:

����� ������ ��������� ������, �������� �������������, ��������� ���������, ��������� � ���� mtype �������� 2, ���������� ��������� � ���� ����� ������� � ��������� � ��������������� 1. ������������� ��� ��������� (������ ������ ������������ make msgdemo), ��������� ������� ������, �����, � ������ ���� ���������, ������. ����������� � ���� ������� ������ � ������� ����.

����������� ������

���������� �������� ���������� ������� (������� ����� �������� � ������) ����� ������� ������������ � ������� ��������� �����������:

�������� ����������� � ���, ��� ���� �������� ������� ����-���������� (spin locks) �� ������ ���������, �� � �� ����������� ��������� ������������� �������. ��������, ��� ���� ������� ����� ��������� �������� ���������� spin_lock, �������� ���� �������, ����� ��� ������ ����� FALSE, � ��������� � ������

� ������������� ������� (�������� �� ���������� �����������) �������, ��������� ������� � ������������ �������, ����� ������������ � ��� ������, ����� ������ ������� ��� ��������, �� ��� �� ������� �������� spin_lock. ������ ������� �������� ��������, ��� ��� ������ FALSE, � ��� �������� �������� � ����������� ������� � ������� ������ � ������������ �������. ��������� �������� ������� ���, ��� �������� ���������� �������� � �������� �������� ����������, �� ���� �� ���������� ����� ���� �������� ������ ���������. ������ ��������, ������������� ������������� ��� ������������� ����������� ��������, �������� �. ������, � �������� �. �������� � 1965 ����. � 1981 ���� �.�������� ��������� ����� ������� ��������.

������������ SVID ��������� ��������� ��� ������ � ������������ ������� ������. ����������� ����� ������ ������������ ����� ������� ������, ������������ �������� ������������ ���������� ���������. ���� ���� ������� ������� ������ � ����������� �������, ������ ������� ����� ��������� �� ������ ��� �� ����������� ������� ���������� ������. �� ���������������� ������������� ����������� ������ �� ��� �������� ������� ������-������. ��� � � ������ � �����������, ��� ����� ������� ����� ��������� ������ ��� ������� � ������� � ������������ ����� (�� ����� ��� ���� shmemtypes.h):

�������� ����������� ������ �� �������� ������� ����������� �� ��������� ����� ������. ��������� memory_block ����������� ����, ������ ������������� �� ����� ����������� ������������. ������ ������ ���� ��������� memory_block � ���������, ��� ����� ��� ���������� ����������������� ��������� ���������, � ������� ����� ������� ����. ��������� ���� ������������� ���������� ��� �������� ������. � ����� ������������ ����� �� �� ���������� ���� ��� ������������� ������������ �����, �� ��������� ��� ������� ����� (� ����� ������ � ����������� ����� �������). ��� ��� ����� �������� ������� ftok() ��� ��������� �����. �����������, ��� ����� ��������� ������ ���� ������ ����� ������������� ��� ������ shmemserv. ���������� �������� ��� ������������� �������:

��� ��� ����������, ftok() ���������� ����, ��������� � �������� ��������� ��� �����, � ����� ������ � ��� ����������� ����� �������. ������������� ����� ����� ��������� ��� ��������� ����� �� ��������� ������� ����������� ������������ �����. ������� ��� ������ � ����������� ������� ��������� � ������ sys/ipc.h sys/shm.h. ����������� ���� ������ ���������� ��� ������ ������� shmget(2), ������� ���������� ��� ���������. � ������ ��������� ���������� ����, ���������������� ���������� ���� ������. ������ �������� ��������� ������� ������ ����� � ������. � ������� ��������� ���������� ����� ���� ������� � �����, ����������� ������ msgget(). ������� shmget() ���������� ������������� ����������� ����� ������ (��� �� ������� ������ � ���������� �� ����). ����� �������� ��������� �� ��������� ���� ����������� ������, ���� ���� ����� ���������� � ��������� �������� ������������ ��������. ����������� ����� ����������� ������ � �������� ������������ �������� ��������� ������� shmat(2). � ���� ������� ���� ��� ���������. ������ �������� � �������������, ������������ �������� shmget(). �� ������ ��������� ���������� ����������� ��������� ����� ��� ����������� ������������ ����� � ��������� �������� ������������. ������� shmat() ������������� ���������� ����������� ���� � ��������� ������������, ������� � ���������� ������, �� �������� ��������� �� ������������. ���� �� ������ ��������� shmat() �������� ������� ��������, ������� ���� ������� ��������� ����� ������� �����������. �������� ������������ ������ ������ ���� ��������� �� ������� ���������� ��������. ����� ����� �� ����������� �����, �� �������� � ������� ��������� ������� ���� SHM_RND, � ����� ������� ���� ������������� �������� ������. ����� �������������� ������, ������� ����� �������� � ������� ���������, ������� ���� SHM_RDONLY, ������� ����������� ������������ ������� ������ ������� ��� �������. ��� �������� ���������� ������� shmat() ���������� ��������� �� ������ ������� �����������, � ������� �� ����� �������� ��� � ������� ���������� �� ���������� ���� ������. ����� ������ ���������� ������ �������, ������� ����� � ����, ��� ���� �� ���� ������� ����������� ������ �� ������������� ������� ������� ������������� �������, ��� ��� ��� ���������� ����� ������������ �� ���� ���������. ��� ������������� ������ ������� � ������� � ������������� ������� �� ���������� ���������� ��� �������� ��������� (��. ������ ����������, 2), ������� ��������� ������������ ������ � ����� ����������� ������, ��������� ����������� ��������.

������� shmdt(2) ������� ������� ����������� � ��������� �������� ������������ (�� �� ������� ���� ����������� ������). ���� ����������� ������ ��������� �������

������� � �� �����, � �� ���� ������� ������������ ���� ������ msgctl(). ������ �������� ������ � ����� ����������� ������ � ������� �������

��� ���� �� ���������, ������� �� ������. ����� ������ ������ ����������, ���������� � ����������� ���� ��������, ��������� ������ � ��������� � �������� ������ �������, ��������� �������� ����-����������. ������������� ��� ��������� (����������� make shmemdemo), ��������� ������, ����� ������ � ��������� ������ � ���� �������. ������ �������� ����������, ����� �� �������� q � ������� ����. ��������� � �����������, ��, �������, �������� �������� �� ��������������, � ������� ������ �������� �������. ����� ����, �� ����� �������� ������������ ���� ����������� �������� ���������� ��� ������ ��������. ����� ����� ����-����������, ������� ������������ � ��������� ���������. ������ ��-�� ����-���������� ��������� �������� ������������ ����� ������� � ����� ������������ ������ �������� ����������. ��� �������� ��������� ������� ����� ����� ������ � ��������� �� ���������� ������������ ������, ���� � ����������� �� ��� ����������� �� ����������. ������ ����� �� ������� ������� �������������, �������������� ������ � ����������� ������� � ������� ����������� ��������� �������� ����������, � ������������� ���������������� ���������� ������ � ���� ��������. ������ ������ ��������� �������� ������������� ����� ��������.

��������


�������� ������ ������������ ��� �������� ������������� ������� � ���������. � Unix-�������� ����������� ��� ���� ��������� � �������� System V, �������� POSIX � �������� � ����������� ������. ��������� ������ ��������� System V IPC, �� ���������� �������� System V. ��������� �������� ���� ���� ����� ��������� ����� ����� � (��. ������ ����������, 3).

��������� �������� ������������ ��������� ��������� ���������� ���������� � ���������� ��� ����������. � ����������� �� ���� �������� ������� ���� ���������������� ���������� ������������� � ���� ������ (�� ��� ���, ���� ������ ����� �� ��������� ������� � ������ ���������), ���� �������� �������� ���������� ����������, �������� ������ ���������� ����������. ��������� ������� ������������ ������ ������ �������� � ����������� �� �������� ���������� ��������� (semvalue) � ����������� ���������� sem_op.

������������� �������� sem_op ������������� �������� �������� ����������� ������� � �������� ������������ ������, ���� ������ � ������� ������������. ������������� �������� ������������� � ������������� �������. ����������� ���� ������� semaphore() ��������� ��������� ������������� �������� (general semaphore). ������ ����� �������� ������������ � System V IPC.

��������� ������ � ������ �� ����������� �������, ������� ����-���������� ���������� (�� ����� �� ������� �������� ����� ������� � ����� semserv.c, � �������� ����� ������� � � ����� semcli.c. ���, ��� �������� ���������, ���������� � ����� . ���������-������ ������� �������� � ������� ������

������� semget(2) ������ �� msgget() � shmget(), �� � ��� ���� �������������� �������� � ���������� ����������� ���������. ���� � ���, ��� ������ ���������, ������������ ��������, ��������� ����� ������ �������� (����� ��� ����� ����������� ������ � ������� ��������� ������ ���������� � ������������ ����������). ����������� ����������� ����� ��� ������� �� ���������� ��������� ��������������, ������� ������� semget() ��������� ��������� ��������� �����. ������ ���������� ����������� ��� ��������. ��� ������������ �� ��� ��������, ���� ��. �������, ��� ��� ������ ������ �������. ������ ������� ���������, ������ �� ������ ������ ������, ��������� ��������, ������ � ������ �� ������ ������ ������, ��������� ��������. ����� �������, �� ����������� semget() ������� ����� ��� ��������. � ������ ��������� ���������� ������� semget() ���������� ������������� ������ ������� ���������.

��� ����������� ��������� �������� ������������ ��������� sembuf. � ��� ���������� ����� ����� (���������� ����� ������� �� ������ Unix-�������), �� ������� ������������� �������� ���:

  • short sem_num � ����� �������� (� �������), ��� ������� ����������� �������� (��������� ���������� � ����).
  • short sem_op � �����, ���������� ��������� ��������.
  • short sem_flg � �������������� �����.

��� � � ����������� ���� ������������� ������� ������ ��������, ������������� �������� sem_op ������������� �������� �������� ����������� ������� � �������� ������������ ������, ���� ������ ����������. ������������� �������� ���������� ������� ����������� ������ (��� ������������ � �����). ��������� �� ������ �������� sembuf (�� ��������� �� �������) ���������� ��� ������ �������� ������� semop(2), ������� ���� �������� ��������� ��������, ���� ���������������� ���������� �����. ������ �������� ���� ������� � �������������, ������������ semget(). � ������� ��������� ���������� ����� ������� � ������� sembuf. ��� ���, ��������, �� ���������, ��� ������ ����� ���������� ������ � ����������� �������:

� ��� ������ ������������ ������, ���� ������ �� ������� �������� ������� ��������:

������� ���������� �� ������ � ����������� �������, ������� ���������� ������/������, ��������� ������ ������� ��������, ��������� ������ ���� � ������������������. �������� �������� ��������� � ������� ������� semctl(), � �������, ����� �������, ����� ��������� ����� ���������:

������������� ������ ��� ������ semserv, � ������ ��� ������ semcli, (��� ���������� make semdemo) ��������� ������ � ������. �� �������, ��� ����� ������� ����������� ������� �������, � ��������� ����������� ������� ������, ��� � ������ ������������� ����-����������.

��� ���� ��������� ������ ������� �������������� ����� ���������� � Unix/Linux, ������ ����������� ���������� ���� � �������� ������. ��� �� � �������� � ��������� ���.

������� semaphore, shared memory � ipc

Postgres Pro ������ ����� ����������� ��������� ������� ������������ ������� �� �������, �������� ��� ������� ���������� ����� ������� � ����� ������� ��� ��� ������ � ����� �������� ������. � ���� ������� ����������� ������� ����, ������� ���������� Postgres Pro , � ������� � ������� �������, ��������� � ��������������� ���� ��������.

17.4.1. ����������� ������ � ��������

���� ��� ��������� ��������� ����������� � �������, ��� ������� ������� ������ ������� ������ Illegal system call (�������� ��������� �����). � ���� ������ ������������ ������ ������ �������� � ������������������� ���� �������. ��� ��� Postgres Pro ������ �� ����� ��������. ��� �������� ������ ��������, �������� � ������������ ������������� ���������.

����� Postgres Pro ��������� ���� �� ��������� ������ ������� IPC , ������ ������������ �����������, �� ����� �������� ���������, ��������� �� ������ � � ���, ��� � ��� ������. (��. ����� ��������� 17.3.1.) ��������������� ��������� ���� � ������ �������� ���������� ���������� (��� ����������� � ������� 17.1), �� ��������������� ��� ��-�������. ���� ������������ ������� �� ��������� ��� ��������� ������.

����������

PostgreSQL �� ������ 9.3 �������� ��� ������� ������� ������� ������� ����� ����������� ������ System V. ���� �� ����������� ����� ������ ������ �������, ���������� � ������������ �� ����� ������.

��� �������� �������� ��������
SHMMAX ������������ ������ �������� ����������� ������ (� ������) �� ������ 1 �� (������, ���� ����������� ����� ����� �������)
SHMMIN ����������� ������ �������� ����������� ������ (� ������) 1
SHMALL ����� ����� ��������� ����������� ������ (� ������ ��� ���������) ���� � ������, �� ��, ��� � SHMMAX ; ���� � ���������, �� ceil(SHMMAX/PAGE_SIZE)
SHMSEG ������������ ����� ��������� ����������� ������ ��� �������� ��������� ������ 1 �������, �� �������� �� ��������� ������� ������
SHMMNI ������������ ����� ��������� ����������� ������ ��� ���� ������� ��� SHMSEG ���� ����������� ������ ����������
SEMMNI ������������ ����� ��������������� ��������� (�. �., �� �������) ��� ������� ceil((max_connections + autovacuum_max_workers + max_worker_processes + 5) / 16)
SEMMNS ������������ ����� ��������� ��� ���� ������� ceil((max_connections + autovacuum_max_workers + max_worker_processes + 5) / 16) * 17 ���� ����������� ������ ����������
SEMMSL ������������ ����� ��������� � ������ �� ������ 17
SEMMAP ����� ������� � ����� ��������� ��. �����
SEMVMX ������������ �������� �������� �� ������ 1000 (�� ��������� ��� ������ ����� 32767; ��� ������������� ������ ��� �� �������)

Postgres Pro ����������� ��������� ���� ����������� ������ System V (������ 48 ���� �� 64-������ ���������) ��� ������ ����� �������. � ����������� ����������� ������������ ������ ����� ����� ���������� ��� �������. ������, ���� ��������� ����� ����� �������, ��� ����������� ������ System V �������� � ������ ����������, ����� ������������ ��������� �������� SHMMAX , ������������ ������ �������� ����������� ������ (� ������), ���� SHMALL , ����� ����� ����������� ������ System V, ��������� ��� ���� �������. ��������, ��� SHMALL �� ������ �������� ������� � ���������, � �� � ������.

����� �������� �������� � ����������� �������� ��������� ����������� ������ ( SHMMIN ), ������� ��� Postgres Pro �� ������ ��������� �������� 32 ���� (������ ��� ����� 1 ����). ������������ ����� ��������� ��� ���� ������� ( SHMMNI ) ��� ��� ������ �������� ( SHMSEG ) ���� ������ �� ������ �� ����������������� �������, ���� ������ ��� ����� �� ����� ����.

Postgres Pro ���������� �� ������ �������� �� ���� ����������� ����������� (max_connections), �� ����������� ������� ������� ����������� (autovacuum_max_workers) � ������� ������� (max_worker_processes), � ������� �� 16. � ������ ����� ������ ���� ����� 17-�� �������, ���������� � ���������� ����� � , ����������� ������������ �������� � �������� ��������� ������ ����������. ������������ ����� ��������� � ������� ������� ���������� SEMMNS , �������, �������������, ������ ���� ����� ��� ������� ����� max_connections , autovacuum_max_workers � max_worker_processes , ���� ���� �������������� �� ������ 16 ��������� ����������� � ������� ��������� (��. ������� � ������� 17.1). �������� SEMMNI ���������� ������������ ����� ������� ���������, ������� ����� ������������ � ������� � ���� ������ �������. ����� �������, ��� �������� ������ ���� �� ������ ��� ceil((max_connections + autovacuum_max_workers + max_worker_processes + 5) / 16) . � �������� ���������� ������� �������, ������� ������� ����� �������������, �� ������ �������������� ������������� ����������� ������� semget , ��������, � No space left on device � (�� ���������� �� �������� �����), ����� ��������� ����� ����������� ����������.

� ��������� ������� ����� ������������� ��������� SEMMAP ��� ������� �� ������ SEMMNS . ���� � ������� ���� ����� �������� (� �� ������ �������� ��� ���), �� ���������� ������ ����� �������� ���������, � ������� ���������� ������ ��� ������� ������������ ����� ���������. ����� ����� ��������� �������������, ��� ������ ���� ����������� � ������������ �������� ������, ���� �������������� ��� ����� ������ � �����. ���� ����� �������������, ������������� �������� �������� (�� ������������). ����� �������, ������������ ������������ ��������� ����� �� �������� �������� � ���������� ����� ��������� ���������.

�������� SEMMSL , ������������, ������� ��������� ����� ���� � ����� ������, ��� Postgres Pro ������ ��������� ��� ������� 17.

������ ���������, ��������� � � �������������� �������� � � ����������, ��������, SEMMNU � SEMUME , �� ������ Postgres Pro �� ������.

��� ������� � ������ 5.1, ��� ����� ����������, ��� SHMMAX , ������� �������������� ��������� �� ������ �����������, ��� ��� �������, ������, ��������� ������������ ��� ������ � �������� �����������. �������� ������������ ��������� ������ � ��� ������ ��� ������, ��������, ��� DB/2 .

������ ����� ������������ �������� ���������� ��������� ulimit � /etc/security/limits , ��� ��� ����������� ������ ����������� �� ������ ( fsize ) � ���������� ������ ( nofiles ) ����� ���� ������������ ��������. FreeBSD

�������� ���������� IPC �� ��������� ����� ��������, ��������� ����������� sysctl ��� loader . � ������� sysctl ����� ������ ��������� ���������:

����� ��� ��������� ����������� ����� ������������, �������� /etc/sysctl.conf .


��� ���������, ��������� � ����������, sysctl ������ �� ���������, �� �� ����� ������ � /boot/loader.conf :

����� ��������� ����� ������� ��������� �������� � ����, ��������� ������������� �������.

��������, �� �������� ��������� ���� ���, ����� ����������� ������ ������ ���������� � ��� � ������� �� ����������� � ������������ ��������. ��� ����� �������, ��������� � ������� sysctl �������� kern.ipc.shm_use_phys .

���� �� ����������� �������� FreeBSD, ������� � sysctl �������� security.jail.sysvipc_allowed , ������� �������� postmaster , ���������� � ������ �������, ������ ����������� ������� �������������� ������������ �������. ��� ��������� ������, ��� ��� �� ��������� ������� ������������� ���������� � ����������� ������ ��� ��������� � ������ �������, � ��� ���� ������������ ���������� ������ ���� ������� IPC � Postgres Pro. (�� FreeBSD 6.0 � ����� ������� ������� ��� ������� IPC �� ����� ��������� ������� �������� � ������ �������, ��� �� ��������� ��������� �������� postmaster �� ����� ����� � ������ �������.)

�� ������ 4.0 ������� FreeBSD �������� ��� ��, ��� � ������ OpenBSD (��. ����). NetBSD

� NetBSD , ������� � ������ 5.0, ��������� IPC ����� ��������, ���������������� �������� sysctl , ��������:

����� ��� ��������� ����������� ����� ������������, �������� /etc/sysctl.conf .

������ ����� ����� ��������� kern.ipc.semmni � kern.ipc.semmns , ��� ��� �� �������� �� ��������� � NetBSD ������� ����.

��������, �� �������� ��������� ���� ���, ����� ����������� ������ ������ ���������� � ��� � ������� �� ����������� � ������������ ��������. ��� ����� �������, ��������� � ������� sysctl �������� kern.ipc.shm_use_phys .

�� ������ 5.0 ������� NetBSD �������� ��� ��, ��� ������ OpenBSD (��. ����), �� ����������� ����, ��� ��������� ���� � ���� ������� ��������������� � ��������� options , � �� option . OpenBSD

� OpenBSD , ������� � ������ 3.3, ��������� IPC ����� ��������, ���������������� �������� sysctl , ��������:

����� ��� ��������� ����������� ����� ������������, �������� /etc/sysctl.conf .

������ ����� ����� ��������� kern.seminfo.semmni � kern.seminfo.semmns , ��� ��� �� �������� �� ��������� � OpenBSD ������� ����.

� ������ ������� OpenBSD ��� ����������� ����������� ����, ����� �������� ��������� IPC. ����� ���������, ��� � ���� �������� ��������� SYSVSHM � SYSVSEM (�� ��������� ��� ��������). ��������� ������ ����������, ��� ���������� ��������� ��������� � ����� ������������ ����: HP-UX

�������� �� ��������� ������ ������ ������������� ������� ������������. � HP-UX 10 �������� SEMMNS �� ��������� ����� �������� 128, ��� ����� ���� ������������ ��� ������� ��� ������.

�� ��������� ������������ ������ �������� ����� 32 ��, � ������������ ����� ������ ���������� 2097152 �������. �������� ����� ������ �������� 4096 ����, �� ����������� ������������� ������������ ���� � ���������� � �������� ������� � (����� ������ ������ �������� �����, �������� getconf PAGE_SIZE ).

��������� ������� ����������� ������ ����� ��������, ���������������� �������� sysctl . ��������, ��� ����� �������� 16 �� ��� ����������� ������:

����� ��������� ��� ��������� ����� ������������, �� ����� ����� �������� � ���� /etc/sysctl.conf (��� ������������ �������������).

� ��������� ������ ������������� ����� �� ��������� ��������� sysctl , �� �� �� ��������� ����� ����������, ����������� � �������� ������� /proc :

��������� ��������� ����� ������ ���������� ��������, ��� ��� �� ������ ������ �� �����. OS X

��� ��������� ����������� ������ � OS X ������������� ������� ���� /etc/sysctl.conf � �������� � ���� ���������� ���������� ��������� �������:

��������, ��� � ��������� ������� OS X, ��� ���� ���������� ����������� ������ ������ ���� ����������� � /etc/sysctl.conf , ����� �� �������� ����� ���������������.

������ � ����, ��� ��������� ������ OS X ���������� ������� ������ ��� SHMMAX ��������, �� ������� 4096.

SHMALL �� ���� ��������� ���������� � ��������� (�� 4 ��).

� ������ ������� OS X, ����� ��������� ���������� ����������� ������ �������� � ����, ����������� ������������. ������� � ������ 10.5, ��� ���������, ����� SHMMNI ����� �������� ��� ����, ���������������� �������� sysctl . ��, ��� �� �����, ����� �������� ��������� ���� �������� � /etc/sysctl.conf , ����� ��� ����������� ����� ������������.

���� /etc/sysctl.conf ��������������, ������ ������� � OS X ������ 10.3.9. ���� �� ����������� ���������� ������ 10.3.x, ���������� ��������������� ���� /etc/rc � ������ �������� ���������� ���������:

��������, ��� /etc/rc ������ ���������� ��� ���������� ������� OS X, ��� ��� ������� �������, ��� ��� ������� ��������� ��� ��������� ����� ������� ����������.

� OS X 10.2 � ����� ������ ������� ������ ����� ���� �������� ��� ������� � ����� /System/Library/StartupItems/SystemTuning/SystemTuning . SCO OpenServer

� ����������� ������������ ������ ������ �������� ����������� ������ ����� ������ � 512 ��. ����� ��������� ���� ������, ������� ��������� � ������� /etc/conf/cf.d . ����� ����������� ������� �������� SHMMAX , ��������:

������� ����� �������� SHMMAX , ��������:

����� �������� � ����� ������, ������� �� ������ ���������� (� ������). ��������� SHMMAX , ������������ ����:


� ������������� �������. Solaris ������ � 2.6 �� 2.9 (Solaris 6 .. Solaris 9)

��������������� ��������� ����� �������� � /etc/system , �������� ���:

����� ��������� �������� � ����, ����������� ����������� �������. ���������� � ����������� ������ � ����� ������ ������� Solaris ����� ����� �� ������ http://sunsite.uakom.sk/sunworldonline/swol-09-1997/swol-09-insidesolaris.html. Solaris 2.10 (Solaris 10) � ����� ������� ������
OpenSolaris

� Solaris 10 � �����, � ����� � OpenSolaris, ����������� ��������� ����������� ������ � ��������� ���������� ������ ��� ����������� ���������� Postgres Pro . �� ��������� Solaris ������ ������������� � SHMMAX �������� ������ ��� . ����� �������� ���� ��������, �������������� ������������ ������ �������� �������, ���������� � ������������� postgres . ��������, ��������� �� ����� root ����� �������:

��� ������� ������ ������ user.postgres � ������������� ������������ ����� ����������� ������ ��� ������������ postgres ������ 8 ��. ��� ��������� �������� � ���� ��� ��������� ����� ����� ������������ ��� ��� ����������� Postgres Pro (�� ������������ ������������). ��� ���� ���������������, ��� Postgres Pro ����������� ������������� postgres � ������ postgres . ������������� ������� ����� ���� ������� �� �����.

��� �������� ��� ������, ������������ �� ������� ���������� �����������, ������������� ����� �������� ��������� ���������:

����� ����, ���� Postgres Pro � ��� ����������� ������ ����, ����� ������������ ����� ��������� ������ �� ������������� �������� ����. �������� �������������� ���������� � �������� � ������� prctl ����� � ����������� ���������� �������������� (System Administrator’s Guide), ������ 2: ������� � ������ (Chapter2: Projects and Tasks). UnixWare

� UnixWare 7 ������������ ������ ��������� ����������� ������ ����� 512 �� � ����������� ������������. ����� ����������� ������� �������� SHMMAX , ���������:

� ���������� �� ������� ������� ��������, �������� �� ���������, � ����� ����������� � ������������ ��������. ����� ������ ����� �������� SHMMAX , ���������:

����� �������� � ����� ������, ������� �� ������ ���������� (� ������). ������� �������� SHMMAX , ������������ ����:

� ����������� �������.

17.4.2. RemoveIPC � systemd

���� ������������ systemd , ���������� ������������ � ���, ����� ������� IPC (����� ������ � ��������) �� ������������� �������������� ������������ ��������. ��� �������� ��������� ��� ������ � ��������� Postgres Pro �� ��������� ����. ������������� �������������� ������� Postgres Pro ��� �������� � ������� �������, ��� ��� ������������ postgres ������ �������� ��� ��������� ������������.

�������� RemoveIPC � logind.conf ����������, ������ �� ������� IPC ��������� ��� ������ ������ ������������ �� �������. �� ��������� ������������� ��� �� ����������������. ���� �������� �� ��������� ������� � ����������� ������ systemd , �� � ��������� ������������� ������������ ������ �� �� ��������� ��������.

������ ������������� ������ ����� ����������� ��������� ����������� � ���, ��� ������� ���������, ������������ �������� Postgres Pro , ��������� ��� ������� ������, ��� �������� � ������ ������� � ����������� ����:

��������� ���� �������� IPC (����������� ������/��������, System V/POSIX) �������������� � systemd ��������� ��-�������, ������� ����� ����������� ��������, ����� ��������� ������� IPC �� ��������� ���, ��� ������. ������ ���������� �� ��� ������ �������� �� �������������.

������� � ������ ������������ �� ������� � ����� ��������� ��� ���������� ������ ������������ ��� ���� ������������� ����� ��� ������ postgres , � ����� ������, ���� �������� ���-�� ��������, ��� ��� ������������� ��� �������� ������.

����� ������������ �������� � ��������� � , ������������ �� ����� ���������� systemd , ������ �� �������� SYS_UID_MAX � /etc/login.defs .

������ ������������ � ������������ ������� ������ ����������������� ��������� ������������ postgres ��� ���������� ������������, ��������� ������� useradd -r , adduser —system ��� ������������.

���� �� ������� ������ ������������ ���� ������� ����������� � �������� � ����������, ������������� ������

� /etc/systemd/logind.conf ��� ������ ���������� ����� ������������.

��������

���������� ����������� ������� ���� �� ���� ���� ��������, ����� ������ Postgres Pro ����� ����� ������������.

17.4.3. ����������� ��������

� Unix-�������� ������������ �������� ���������� ��������� ���� ����������� ��������, ������� ����� ������ �� ������ ������� Postgres Pro . �������� ����� ����������� �� ����� ��������� ��� ������������, ����� �������� ������ � ����� ������ ��� ������� ��������. ������ �� ���� ����������� ����� � ������ � � � ������ � ������. ������ ������ ������������� ������������ ������������� �������, �� ������������ ����� ��������� ��� �������� �� ������� �������. �������� ������ ������ ����� ������ ������������ root. �� ��������� ���� ���������� �������� ��������� ����� setrlimit . ��������� ����� ��������� � ��������� ������ ��������� ���������� ������� ulimit (� ��������� Bourne) � limit ( csh ). � �������� ��������� BSD ���������� ������������� ��������, ���������������� ��� ����� ������������, ��������� ���� /etc/login.conf . �� ������������� ���������� � ������������ ������������ �������. ��� Postgres Pro ������� ������������ ��������� maxproc , openfiles � datasize . ��� ����� ����������, �������� ���:

(����� -cur ���������� ������ ������. ����� ������ ������ ������, ����� �������� ��� ��������� �� -max .)

���� ����� ����� ������������� ������������� ����������� �� ������������� ��������� ��������.

� Linux ������������ ����� �������� ������, ������� ������������ ����, ������������ � ��������� /proc/sys/fs/file-max . �������� ���� ������ �����, ������� ������ ����� � ���� ����, ���� ������� ������������ � ���� /etc/sysctl.conf . ������������ ����� ������ ��� ������ �������� ������� ��� ���������� ����; �� ��������������� �������� ���������� � /usr/src/linux/Documentation/proc.txt .

������ Postgres Pro ���������� ��� ������������ ������� ����������� ��������� �������, ��� ��� ��������� ����� ��������� ������ ���� �� ������ ����� ����������� ���������� ���� ����� ���������, ��������� ��� ��������� �������. ��� ������ �� ��������, �� ����� � ����� ������� �������� ��������� ��������, ������ ����� ���� ���������.


� �������� ������������� ����� �������� ������ �� ��������� ������ ���������� � ���������-��������������� � ��������, ����������� ������������ ���� ������� ���������� ������������� ���, ����� �� ���� �� ��� �� ��������� ������� ����� ��������� ��������. ���� �� ���������� � ������� ��������� ��������, ��� ������ ������ ����������, �� �� ���������� ������� ����� ���������� ������� ��������� ���� ������.

� ������ �������, ��������� ������� ��������� ��������� ��������� ��������� ����� ����� ������ � ���� ��� ������ ����� ��������� ���������, ��� ����� ����� ��������� ������������� ������. ���� �� ���������� � ����� ���������, �� �� �������� ������ ������������� �����������, �� ������ ���������� ������������� �������� ������ �������� Postgres Pro , ��������� �������� ������������ max_files_per_process.

17.4.4. ���������� ��������� ������ � Linux

� Linux 2.4 � ����� �������� ����������� ������ �� ��������� �������� �� ���������� ��� Postgres Pro . ���������� ����, ��� ���� �������� ������ � ���������� ������, ��� ����� ���������� ������� ����������� ������� Postgres Pro (postmaster), ���� ��� ��������� ������ �������� Postgres Pro ��� ������� �������� ����������� ������ ����� ���������.

����� ��� ����������, �� ������ �������� �������� ����� ��������� ���� (��� ������ ������ ��� ���������, ����� ������ � ������������ ����� �������):

��� ��������� ������� � ���, ��� ������� postgres ��� ��������� ��-�� �������� ������. ���� ������������ ����������� � ���� ������ ����� �������� ��-��������, ����� ����������� ����������� �� �����. ����� ������������ ������ �������, Postgres Pro ������� �������������.

���� �� �������� ������ ��� �������� � ��������� Postgres Pro �� ����������, ��� ������� ������ �������� �� ������ ��� ������. ���� ���������� ������ ������������, ������ �������� ����� �����, �������� ����� ������������ ��������, ��� ��� ����������� ��������� ��� �������� ������ ���������� ������ ����� ������������� � ���������� ������, � ����� � ������������ ��������.

���� ������ �� ������� �� ���� ������ Postgres Pro , ��� �������� ����� ������, ������� ������������ �������. � ��������� ������� ����� ������ ���������� ���������������� ����������, ��������� � �������, � ������ shared_buffers � work_mem . � ������ ������� �������� ����� ���������, ������ ��� ��������� ������� ����� ����������� � ������ ������� ��� ������. ���� ����� � ����� �������� ����� ��������� ����� ����������� max_connections � ������������ ������� ��� ����������.

� Linux 2.6 � ����� � ���������� ��������� � ������ ����� �������������, ������� ��������� ����. ���� ��� ���� OOM killer (����������� ��������� ��� �������� ������) �� ����� ����� ����������, ����������� ������ ����������� ����������� �����������, � ������ ��������� ������� ���������� ����� ����������. ��� ����� ����� �������� ����� �������� ��������� ������, ���������������� sysctl :

���� �������� ��������������� ������ � /etc/sysctl.conf . ��������, �� ����� �������� �������� ��������� �������� vm.overcommit_ratio . �� ������������� ���������� � ������������ ���� https://www.kernel.org/doc/Documentation/vm/overcommit-accounting.

������ ������, ������� ����� ��������� (��������, ������ � ���������� vm.overcommit_memory ), ����������� � ���������� �������� postmaster �� ����� ��������� ����� ��� �������� ������. ��� ����� ����� ������ ��� �������� �������� ����� OOM ����� �������� �������� -1000 . ����� ����� ��� ����� �������, ��������

� ������� ������� ������������ �������� ��������������� ����� ���, ��� ��������� postmaster. ��������, ��� ������ ��� ���� ��� ������ root, ����� ������ �� ���������; ������� ����� ����� �������� ��� ������� � ��������� ������, ������������� ������������ root. ���� �� ������� ���, �� ����� ������ ���������� � ������ ������� ��� ���������� ��������� ����� �������� �������� ��������:

� ������ ����������� �������� �������� �������� ����� ����������� � �������, ������� ��������� ����� OOM, ��� ��� ��� ������������� �������� OOM ������ ���������� ��. �� ������ ������ � ������ �������� ��� PG_OOM_ADJUST_VALUE , ���� ������, ����� �������� �������� ����������� � ������ ��������� OOM. ( PG_OOM_ADJUST_VALUE ����� ����� ��������, � ���� ������ ��������������� ������� ��������.) ���� �� �� ���������� PG_OOM_ADJUST_FILE , �������� �������� ����� �������� � ��� �� ��������� ����� OOM, ������� ������ ��� �������� ��������, ��� ���������, ��� �� ��� �������� ��� ��� ��� ����, ����� ������� ������� �������� �� ������ ���������.

� ������ ����� Linux /proc/self/oom_score_adj �����������, �� �� �� ���������������� ����� ���� �������� ����� /proc/self/oom_adj . ��� ���������� �������� �������� ��� ��, ������ ��������, ����������� ����������� ��������, ����� -17 , � �� -1000 .

����������

��������� ������������ � ������ Linux 2.4 �������� ��������������� ���������� ��������� sysctl overcommit, ������������ ���������� � 2.6. ������, ���� ���������� ��� vm.overcommit_memory �������� 2 � ���� 2.4, �������� �� ���������, � ������ ���������. ������ ��� �������������� ���� �������� � ���� 2.4, ������������� ���������������� �������� ��� ������ ���� (��. ������� vm_enough_memory � ����� mm/mmap.c ) � ���������, ��� ���� ������������ ������ ������ ��� �����. ������� ����� ������������ overcommit-accounting �� ������� ������� ��������� ����, ��� �� ������������� ��������������. � ������ ��������, ���������� � �������� �� ���� ��� ���������� ����� �������.

17.4.5. �������� �������� � Linux

������������� �������� ������� ������� ��������� ������� ��� ������ � �������� ������������ ������� ������, ��� ���������� ��� Postgres Pro , �������� ��� ������� ��������� shared_buffers. ����� ����� ���� ������������ ��� ����������� � Postgres Pro , ���� ������ ���� ������� � ����������� CONFIG_HUGETLBFS=y � CONFIG_HUGETLB_PAGE=y . ����� ��� ����������� ��������� �������� ���� vm.nr_hugepages . ����� ������� ��������� ���������� �������� �������, ��������� Postgres Pro ��� ��������� �������� ������� � ���������� �� ���������� VmPeak �������� postmaster, � ����� ������� ������ �������� ��������, ���������������� �������� �������� /proc . ��������, �� ������ ��������:

� ������ ������ 6490428 / 2048 ��� �������� 3169.154 , ��� ��� ��� ����������� ������� 3170 �������� �������, � �� ����� ������ ��� �������� ���:

������� �������� ����� �������, ���� �������� �������� ����� �������������� � ������� ����������� � ���� �������. �� �������� �������� ���� �������� � /etc/sysctl.conf , ����� �� ���������� � ����� ������������.

������ ���� �� ����� �������� ����������� ���������� �������� ������� �����, ������� ����� ������������� ��������� ��� ������� ��� ������������� �������. (���������� ����� ������������ ������ ���� �������� ������� ����� ������ ��� �������������� � �������� ��������.) ����� ��������� ������� �������� � ����������� �������� �������, ���������:

�������� System V IPC. ����������� ������ � ����������� ������� � UNIX. ������� ����� ���������� (thread)

����������� ������ � UNIX. ��������� ������ shmget(), shmat(), shmdt()

� ����� ������ ������������ �������, �������� ������������ ����������� ��������� System V IPC �������� ����������� ������ (shared memory) . �� ��� ��������� �� ���� ��������� ������� ����� �� ������. ��� �������� �������� ��� ���������� �����, ��� ������������ ������� ����� ��������� ���������� ��������� ��������� ������������ ��������� ������� ��������� ������������. ���������� ��������� , ����������� ����������� ����� �������������, ����� �������� ����������� �� ������, ����������� ����������, ���������� � ���������-���������� ����������� ������.

��� �������� ����� System V IPC ������� ��������������� ���������������� �������� (��������) ��� ����������� �������������� ���������.

��� �������� ������� ����������� ������ � ������������ ������ ��� ������� �� ����� � ��� ������������ ������� ����������� ��������� ����� shmget() . ���������� ��� �������� ��� ������������� ��� �������� ����� ������� ����������� ������ .

  • ����������� ������. � �������� �������� ����� ���������� ������ ������������ ��������, �������������� �������� ftok() ��� ���������� ����� ����� � ������ ���������� ������� ����������� ������ . � �������� ������ ������������ ���������� ���� ������� � ������������ �������� � ����� IPC_CREAT . ���� ������� ��� ������� ����� ��� �� ����������, �� ������� ����� �������� ������� ��� � ���������� ������� �������. ���� �� ����� �� ��� �����������, �� �� ������ ������� ��� ����������. �������� ���������� � ���� ���������� ������ ����� IPC_EXCL . ���� ���� ����������� ���������� ���������� ���������� ������ ������ � ��� ������, ���� ������� ������������� ��� ������ (�. �. ����� �� �� �����������), ���� �� ������� �����������, �� ��������� ����� ���������� � �������, � �������� ��������� ���������� errno , ��������� � ����� errno.h , ����� ����������� � EEXIST .
  • ������������� ������. � �������� �������� ����� ����������� ����������� �������� IPC_PRIVATE . ������������� �������� IPC_PRIVATE ������ �������� � ������� �������� ������ �������� ����������� ������ � ��������� ������� ������� � � ������, ������� �� ��������� �� ��������� ����� �� ������ �� ��� ������������ ��������� � ������� �� ����� ���� ������� � ������� ������� ftok() �� ��� ����� ���������� �� ����������. ������� ������ IPC_CREAT � IPC_EXCL � ���� ������ ������������.

��������� ����� shmget()


�������� ���������� ������

�������� ���������� ������

��������� ����� shmget ������������ ��� ���������� �������� ������� � �������� ����������� ������ �, � ������ ��� ��������� ����������, ���������� ���������� System V IPC ��� ����� �������� (����� ��������������� �����, ���������� ��������������� ������� ������ �������������� ������� � �������������� � ���������� ��� ������ �������� � ���).

�������� key �������� ������ System V IPC ��� ��������, �. �. ���������� ��� ������ �� ������������ ���� System V IPC . � �������� �������� ����� ��������� ����� �������������� �������� �����, ���������� � ������� ������� ftok() , ��� ����������� �������� IPC_PRIVATE . ������������� �������� IPC_PRIVATE ������ �������� � ������� �������� ������ �������� ����������� ������ � ������,������� �� ��������� �� ��������� ����� �� ������ �� ��� ������������ ��������� � ������� �� ����� ���� ������� � ������� ������� ftok() �� ��� ����� ���������� �� ����������.

�������� size . ���������� ������ ������������ ��� ��� ������������� �������� � ������. ���� ������� � ��������� ������ ��� ����������, �� ��� ������ �� ��������� � ��������� � ��������� size , �������������� ������������� ������.

�������� shmflg � ����� � ������ ���� ������ ��� �������� ������ �������� ����������� ������ � ���������� ����� ��������� ������������� ��� ������� � ��������, � ����� ������������� �������� ������ �������� � ��������� ���������� ������ ��� ������� ��������. �� �������� ��������� ����������� (� ������� �������� ��������� ��� � » | «) ��������� ���������������� �������� � ������������ ���� �������:

  • IPC_CREAT � ���� �������� ��� ���������� ����� �� ����������, �� ������ ���� ������;
  • IPC_EXCL � ����������� ��������� � ������ IPC_CREAT . ��� ���������� �� ������������� � ������������� �������� � ��������� ������, ������ � �������� �� ������������ � �������������� ��������� ��������, ��� ���� ���������� errno , ��������� � ����� , ������ �������� EEXIST ;
  • 0400 � ��������� ������ ��� ������������, ���������� �������;
  • 0200 � ��������� ������ ��� ������������, ���������� �������;
  • 0040 � ��������� ������ ��� ������ ������������, ���������� �������;
  • 0020 � ��������� ������ ��� ������ ������������, ���������� �������;
  • 0004 � ��������� ������ ��� ���� ��������� �������������;
  • 0002 � ��������� ������ ��� ���� ��������� �������������.

��������� ����� ���������� �������� ����������� System V IPC ��� �������� ����������� ������ ��� ���������� ���������� � �������� -1 ��� ������������� ������.

������ � ��������� ������� ����������� ������ � ���������� �������������� �� ������������, ������� ������ ��������� ����� shmget() . ������ � ��� ������������ ������� ����� ����� �������������� ����� ���������:

  • ���� �� ����� �� ����, ��, ��������� ����� shmget() ,����� �������� �� ����������. � ���� ������ ������ ��������� � �������� ��������� ����� ������ ���� IPC_EXCL , � �������� �����, �����������, �� ����� ���� IPC_PRIVATE . ����� ������� ������������, � ������ ������� ������ ��������� � ��������, ��������� ��� �� ��������.
  • ���� �� ����� ��������������� ���, ��� ���������� System V IPC ������������ � ������ ���� ������������ �������, � �������� ��� �������� �� ��������, ���������� ����������� ������ , �������� ��������. �������, ��� ��� �������� ����������� ������ � ������� �������� IPC_PRIVATE � ��� ����������� ��������� ������.

����� ��������� ����������� ���������� �������� ������� ����������� ������ � �������� ������������ �������� ��������. ��� �������������� � ������� ���������� ������ shmat() . ��� ���������� ���������� �� ������ ����� ����������� ������ � �������� ������������ �������� ��������. ���������� ������ � ���� ������ �������������� � ������� ������� ������� ����� ����������������.

��������� ����� shmat()

�������� ���������� ������

�������� ���������� ������

��������� ����� shmat ������������ ��� ��������� ������� ����������� ������ � �������� ������������ �������� ��������. ������ �������� �� �������� ������ ��������� ���������� ������, � �������������� ������� �������� �����. ��� ������� �������� ����������� � UNIX Manual.

�������� shmid �������� ������������ System V IPC ��� �������� ����������� ������, �. �. ���������, ������� ������ ��������� ����� shmget() ��� �������� �������� ��� ��� ��� ������ �� �����.

� �������� ��������� shmaddr � ������ ������ ����� �� ������ ����� ���������� �������� NULL , �������� ������������ ������� ����� ���������� ����������� ������ � �������� ������������ ������ ��������.

�������� shmflg � ����� ����� ����� ��������� ������ ��� ��������: 0 � ��� ������������� �������� ������ � ������ ��� ��������� � SHM_RDONLY � ���� �� ����� ������ ������ �� ����. ��� ���� ������� ������ ����� ��������������� ����� ������� � ��������.

��������� ����� ���������� ����� �������� ����������� ������ � �������� ������������ �������� ��� ���������� ���������� � �������� -1 ��� ������������� ������.


����� ��������� ������������� ����������� ������ ������� ����� ��������� ������ ������ ��������� ������������, �������� �� ���� ��� ������� � ������� ���������� ������ shmdt() . �������, ��� � �������� ��������� ��������� ����� shmdt() ������� ����� ������ ������� ����������� ������ � �������� ������������ ��������, �. �. �������� , ������� ������ ��������� ����� shmat() , ������� ������ �������� ������� ��������� �� ���������� ����� ������� ������������� ����������� ������ .

��������� ����� shmdt()

�������� ���������� ������

�������� ���������� ������

��������� ����� shmdt ������������ ��� ���������� ������� ����������� ������ �� ��������� ������������ �������� ��������.

�������� shmaddr �������� ������� �������� ����������� ������,�. �. ���������, ������� ������ ��������� ����� shmat() .

��������� ����� ���������� �������� 0 ��� ���������� ���������� � �������� -1 ��� ������������� ������.

������ �������� � �������������� ����������� ������

��� ����������� ������������� ����������� ������ ������� ���������� ��� ����������������� ���������.

��� ��������� ����� ������ ���� �� ����� � ���������� ����������� ������ ��� �������� ����� �������� ������ �� �������� � �� �����. � ����������� ������ ����������� ������ �� ���� ����� �����. ������ ������� ������� ������������ ��� ������� ��� ��������� 1, ������ ������� � ��� ��������� 2, ������ ������� � ��� ����� �������� ��������. �������������� ����� � ���������� ��������� ��-�� ������������� ������������� ��������� ������� ��� �������� ����������� ������ . ��� ����� ��� �����, ����� ��������� ����� ��������� ������, ����� ��� ������� ��, � ������, ����� ��� ��� ������������. �� ���������� ��������, ��������� ������� ��������� ����� shmget() � ������� IPC_CREAT � IPC_EXCL . ���� ����� ����������� ���������, �� �� ������� ����������� ������ . ���� ����� ����������� � ������������ ������ � �������� ���������� errno ��������� EEXIST , ��, ������, ����������� ������ ��� ����������, � �� ����� �������� �� IPC ���������� , �������� ��� �� ����� ����� � ������� ��������� ������. �������� ���������, ��������� ��� ������� 06-1�.� � 06-1b.c c�������������, �������������� �� � ��������� ��������� ���. ��������������� ���������� ����������.

XCII. Semaphore, Shared Memory and IPC Functions

This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

Semaphores may be used to provide exclusive access to resources on the current machine, or to limit the number of processes that may simultaneously use a resource.

This module prov >

Table 1. Limits of Shared Memory by the Unix OS

SHMMAX max size of shared memory, normally 131072 bytes
SHMMIN minimum size of shared memory, normally 1 byte
SHMMNI max amount of shared memory segments on a system, normally 100
SHMSEG max amount of shared memory segments per process, normally 6

The messaging functions may be used to send and receive messages to/from other processes. They provide a simple and effective means of exchanging data between processes, without the need for setting up an alternative using unix domain sockets.

Note: This extension is not available on Windows platforms.

No external libraries are needed to build this extension.

Support for this functions are not enabled by default. To enable System V semaphore support compile PHP with the option —enable-sysvsem . To enable the System V shared memory support compile PHP with the option —enable-sysvshm . To enable the System V messages support compile PHP with the option —enable-sysvmsg .

The behaviour of these functions is affected by settings in php.ini .

Table 2. Semaphore Configuration Options

Name Default Changeable
sysvmsg.value «42» PHP_INI_ALL
sysvmsg.string «foobar» PHP_INI_ALL

This extension has no constants defined.

Don’t use semaphores to serialize access to an undefined number of resources. There is no way (yet) to know before locking if a semaphore is already locked, thus not being able to fully release the semaphore and occupying a semaphore resource for an undefined time.

A possible solution is to build a shared mem pool and store there the current number of locks for a semaphore id.

Cheers,
Horaci Cuevas

Here is a quick utility to dump the contents of a shm_ format memory segment:

If you going to work with semaphore, which was created by some external program, you can try the following code for this program (C example):

#define SVSEM_MODE (SEM_R | SEM_A | SEM_R>>3 | SEM_R>>6) /* 0644 */
#define PHP_SEM_NEED_NUMBER 3

/*. */
int sem > struct sembuf semptr;
union semun semopts;
/*. */
if( (sem >= 0 ) <
semopts.val = 1; /* initial value for sem */
if( semctl( semid, 0, SETVAL, semopts) >
else


/*. */
/* If you want acquire the sem */
semptr.sem_num = 0;
semptr.sem_op = -1; /* lock it */
semptr.sem_flg = SEM_UNDO;
while( semop(semid, &semptr, 1)

Samlpe code for using most of the functions here:

$MEMSIZE = 512;// size of shared memory to allocate
$SEMKEY = 1; // Semaphore key
$SHMKEY = 2; // Shared memory key

echo «Start.\n»;
// Get semaphore
$sem_ > if ($sem_ > <
echo «Fail to get semaphore»;
exit;
>
else
echo «Got semaphore $sem_id.\n»;

// Accuire semaphore
if (! sem_acquire($sem_id))
<
echo «Fail to aquire semaphore $sem_id.\n»;
sem_remove($sem_id);
exit;
>
else
echo «Success aquire semaphore $sem_id.\n»;

$shm_ > if ($shm_ > <
echo «Fail to attach shared memory.\n»;
sem_remove($sem_id);
exit;
>
else
echo «Success to attach shared memory : $shm_id.\n»;

// Write variable 1
if (!shm_put_var($shm_id, 1, «Variable 1»))
<
echo «Fail to put var 1 on shared memory $shm_id.\n»;
sem_remove($sem_id);
shm_remove ($shm_id);
exit;
>
else
echo «Write var1 to shared memory.\n»;

// Write variable 2
if (!shm_put_var($shm_id, 2, «Variable 2»))
<
echo «Fail to put var 2 on shared memory $shm_id.\n»;
sem_remove($sem_id);
shm_remove ($shm_id);
exit;
>
else
echo «Write var2 to shared memory.\n»;

// Read variable 1
$var1 = shm_get_var ($shm_id, 1);
if ($var1 === false)
<
echo «Fail to retrive Var 1 from Shared memory $shm_ > >
else
echo «Read var1=$var1.\n»;

// Read variable 1
$var2 = shm_get_var ($shm_id, 2);
if ($var1 === false)
<
echo «Fail to retrive Var 2 from Shared memory $shm_ > >
else
echo «Read var2=$var2.\n»;

// Release semaphore
if (!sem_release($sem_id))
echo «Fail to release $sem_id semaphore.\n»;
else
echo «Semaphore $sem_id released.\n»;

// remove shared memory segmant from SysV
if (shm_remove ($shm_id))
echo «Shared memory successfully removed from SysV.\n»;
else
echo «Fail to remove $shm_id shared memory from SysV.\n»;

// Remove semaphore
if (sem_remove($sem_id))
echo «semaphore removed successfully from SysV.\n»;
else
echo «Fail to remove $sem_id semaphore from SysV.\n»;
echo «End.\n»;

XCIII. Semaphore, Shared Memory and IPC Functions

This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

Semaphores may be used to provide exclusive access to resources on the current machine, or to limit the number of processes that may simultaneously use a resource.

This module prov >

Table 1. Limits of Shared Memory by the Unix OS

SHMMAX max size of shared memory, normally 131072 bytes
SHMMIN minimum size of shared memory, normally 1 byte
SHMMNI max amount of shared memory segments on a system, normally 100
SHMSEG max amount of shared memory segments per process, normally 6

The messaging functions may be used to send and receive messages to/from other processes. They provide a simple and effective means of exchanging data between processes, without the need for setting up an alternative using Unix domain sockets.

Note: This extension is not available on Windows platforms.

No external libraries are needed to build this extension.

Support for this functions are not enabled by default. To enable System V semaphore support compile PHP with the option —enable-sysvsem . To enable the System V shared memory support compile PHP with the option —enable-sysvshm . To enable the System V messages support compile PHP with the option —enable-sysvmsg .

CXXXII. Semaphore, Shared Memory and IPC Functions

This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

Semaphores may be used to provide exclusive access to resources on the current machine, or to limit the number of processes that may simultaneously use a resource.

This module prov >

������� 1. Limits of Shared Memory by the Unix OS

SHMMAX max size of shared memory, normally 131072 bytes
SHMMIN minimum size of shared memory, normally 1 byte
SHMMNI max amount of shared memory segments on a system, normally 100
SHMSEG max amount of shared memory segments per process, normally 6

The messaging functions may be used to send and receive messages to/from other processes. They provide a simple and effective means of exchanging data between processes, without the need for setting up an alternative using Unix domain sockets.

���������: ��� Windows-�������� ��� ���������� ����������.

��� ������� ������ ��������.

Support for this functions are not enabled by default. To enable System V semaphore support compile PHP with the option —enable-sysvsem . To enable the System V shared memory support compile PHP with the option —enable-sysvshm . To enable the System V messages support compile PHP with the option —enable-sysvmsg .

��������� ���� ������� ������� �� ��������� � php.ini .

������� 2. Semaphore Configuration Options

Name Default Changeable Changelog
sysvmsg.value «42» PHP_INI_ALL
sysvmsg.string «foobar» PHP_INI_ALL

������������� ���� ��������� ���������� ������ ����������� � ����� ���� �������� ������ � ��� ������, ���� PHP ��� ������ � ���������� ����� ���������� ��� �� � ��� ������, ���� ������ ���������� ������������ �� ����� ����������.

XCI. Semaphore, Shared Memory and IPC Functions

This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

Semaphores may be used to provide exclusive access to resources on the current machine, or to limit the number of processes that may simultaneously use a resource.

This module prov >

Table 1. Limits of Shared Memory by the Unix OS

SHMMAX max size of shared memory, normally 131072 bytes
SHMMIN minimum size of shared memory, normally 1 byte
SHMMNI max amount of shared memory segments on a system, normally 100
SHMSEG max amount of shared memory segments per process, normally 6

The messaging functions may be used to send and receive messages to/from other processes. They provide a simple and effective means of exchanging data between processes, without the need for setting up an alternative using unix domain sockets.

Note: This extension is not available on Windows platforms.

No external libraries are needed to build this extension.

Support for this functions are not enabled by default. To enable System V semaphore support compile PHP with the option —enable-sysvsem . To enable the System V shared memory support compile PHP with the option —enable-sysvshm . To enable the System V messages support compile PHP with the option —enable-sysvmsg .

Илон Маск рекомендует:  Как сделать иконку
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL