시스템 프로그래밍 - XSI 세마포어의 시스템 설정
- semctl서 IPC_INFO 명령은 세마포어의 시스템 설정을 seminfo 구조체로 읽어옴
seminfo 구조체
struct seminfo{
int semmap;
int semmni;
int semmns;
int semmnu;
int semmsl;
int semopm;
int semume;
int semusz;
int semvmx;
int semaem;
}
리눅스의 XSI 세마포어 커널 파라미터
semmap | 세마포어 정보를 저장하는 엔트리 맵 개수 |
semmni | 시스템에서 최대로 만들 수 있는 세마포어 최대 세트 개수 |
semmns | 시스템 내에 만들 수 있는 세마포어 최대 개수 |
semmnu | 시스템에서 만들 수 있는 undo구조체 최대 개수 |
semmsl |
한개 세마포어 세트내에 만들 수 있는 세마포어 개수 (semmsl<=smemns) |
semopm | semop콜의 최대값 |
semume | undo 엔트리 개수 |
semusz | undo 구조체가 사용하는 메모리 크기 |
semvmx | 세마포어 값의 최대값 |
semaem | 프로세스 종료시 복구 될 수 있는 undo 최대값 |
- 리눅스에서는 현재 semmni, semmns, semmsl, semopm만 설정 가능
- semmni가 너무 크면 시스템에 부담이되고, 너무 적으면 프로그램들이 제대로 작동하지 못함
- semmns <= semmni * semmsl
(세마포어 최대개수 <= 최대 세마포어 세트 * 한 set의 semaphore가 만들수 있는 semaphore 개수)
여기서 kernel.sem을 확인하면 1. 32000 = semmsl 2. 1024000000 = semmns 3. 500 = semopm 4. 32000 = semmni 여기에 semmns <= semmni * semmsl을 대입하면 -> 32000(semmsl) * 32000(semmni) >= 1024000000(semmns)인 것을 알 수 있다. |
- semmsl이 semmns에 근접할 수록 몇 개의 세마포어 세트가 전체 세마포어를 독식할 수 있음
(한개 세트에서 만든 세마포어 개수가 최대 만들 수 있는 세마포어 개수에 접근할수록)
- semmnu에서 undo는 세마포어로 잠금을 한 상태서 프로세스가 종료되었을 때 상태를 취소하고 되돌리는 기능이다.
- 최신에 만들어진 버전의 유닉스는 semmns(세마포어 최대 개수), semmnu(최대 undo 개수), semume(undo 엔트리개수), semvmx(세마포어의 최대값), semmap(최대 엔트리 맵 개수)등은 사라지고 있다.