여러 프로세스가 도시에 접근을 제어하기 위한 카운터
struct semid_ds {
struct ipc_perm sem_perm; /* 접근 허가 */
struct sem *sem_base; /* sem_base 포인터 */
unsigned short sem_nsems; /* 세마포어 값 */
time_t sem_otime; /* 마지막 semop 호출 시간 */
time_t sem_ctime; /* 마지막 수정 시간 */
}
세마포어 집합 생성, 성공 시 ID반환, 실패는 -1. nsems는 세마포어 개수(이미 생성된 건 0으로 설정)
sops에 적혀있는대로 각각의 세마포어에 대해 연산 수행
struct sembuf {
ushort sem_num; //세마포어 번호
short sem_op; //연산. samval과 연산. +면 up(증가), -면 down 연산(감소)
short sem_flg; //옵션
}
sem_flg는 옵션
- IPC_NOWAIT: 즉시 실행 불가능하면 -1리턴
- SEM_UNDO: 세마포어 연산 후 프로세스 종료 시 다시 원래대로 되돌림.(down한 만큼 다시 up함)
size_t nops: sembuf개수
세마포어 제어. semnum은 세마포어 집합 내 특정 세마포어 번호
union semun {
int val; //setval 설정
struct semid_ds *buf; //IPC_STAT이나 IPC_SET에서 이용
unsigned short int *array; //세마포어 모든 값들 가져올 수 있음.
}
int cmd
- IPC_STAT: 세마포어 정보를 arg.buf로 복사
- IPC_SET: 접근 허가와 소유권 변경 가능
- IPC_RMID: 세마포어 제거
- GETVAL: 특정 세마포어의 현재값 얻기
- SETVAL: semnum이 가리키는 세마포어값 설정
- GETPID: 세마포어 마지막으로 접근한 프로세스ID 반환
- GETNCNT: 세마포어 값이 증가되기를 기다리는 프로세스의 수 반환
- GETZCNT: 세마포어 값이 0이 되기를 기다리는 프로세스의 수 반환
- GETALL: 모든 세마포어 값을 가져옴
- SETALL: 모든 세마포어 집합의 세마포어 값을 arg.array에 지정된 값으로 설정