리눅스 프로그래머를 위한 가이드
내부 자료 구조 (Internal Data Structures)
세마퍼 집합을 위해 커널에 의해 관리되는 자료 구조를 간단히 살펴보자.
커널 semid ds 구조 (Kernel semid ds structure)
메세지 큐에서 처럼, 커널은 주소 매겨진 공간(addressinf space)에 있는 각각의 세마퍼 집합을
위한 특별한 내부 자료 구조를 관리한다. semid_ds 타입의 구조는 다음과 같이 /linux/sem.h 안에
정의되어 있다.:
/* 시스템 상에서의 각각의 세마퍼 집합에 대한 semid 자료 구조 */
struct semid_ds {
struct ipc_perm sem_perm; /* permissions .. see ipc.h */
time_t sem_otime; /* last semop time */
time_t sem_ctime; /* last change time */
struct sem *sem_base; /* ptr to first semaphore in array */
struct wait_queue *eventn;
struct wait_queue *eventz;
struct sem_undo *undo; /* undo requests on this array */
ushort sem_nsems; /* no. of semaphores in array */
};
메세지 큐에서 처럼, 구조의 동작들은 특별한 시스템 호출에 의해 수행되고 직접적으로 다루어
질 수 없다. 여기 각 필드에 대한 보다 적절한 설명이 있다.:
- sem_perm
- 이것은 linux/ipc.h에 정의된 ipc_perm 구조의 한 예이다. 이것은 세마퍼 집합에
대한 허가사항 정보를 포함한다.
- sem_otime
- 가장 마지막 semop() 동작의 수행시간
- sem_ctime
- 이 구조의 가장 마지막 변경 시간 (mode 변경 등)
- sem_base
- 배열의 첫번째 세마퍼를 가리키는 포인터
- sem_undo
- 배열안에 있는 undo의 수
- sem_nsems
- 세마퍼 집합안에 있는 세마퍼의 수
커널 sem 구조 (Kernel sem structure)
semid_ds 구조에는 세마퍼 배열 자체의 베이스(base)를 가리키는 포인터가 있다.
각각의 배열 멤버는 sem 구조 타입이다. 이것은 linux/sem.h에 정의되어있다.
/* 시스템에서의 각 세마퍼를 위한 세마퍼 구조 */
struct sem {
short sempid; /* pid of last operation */
ushort semval; /* current value */
ushort semncnt; /* num procs awaiting increase in semval */
ushort semzcnt; /* num procs awaiting semval = 0 */
};
- sem_pid
- 마지막 동작을 수행한 프로세스 ID(PID)
- sem_semval
- 세마퍼의 현재 값
- sem_semcnt
- 자원이 사용할 수 있게 되기를 기다리는 프로세스의 수
- sem_semzcnt
- 100% 자원 활용을 위해 기다리는 프로세스의 수
이전:기본 개념 (Basic Concepts)
다음:시스템 호출:semget() (SYSTEM CALL:semget())
Copyright (c) 1996,1997 by Euibeom.Hwang & SangEun.Oh All Rights Reserved
Email To:Webmaster ,
Another address
LAST UPDATE Nov 24,1997
Created Nov 24,1997