학교수업

시스템 프로그래밍 - XSI 세마포어의 시스템 설정

3년안에 내집 마련 2019. 6. 3. 23:17
반응형

 - 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 개수)

semmns <= semmni * semmsl

   여기서 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(최대 엔트리 맵 개수)등은 사라지고 있다.

반응형