다음 위로 이전 목차 리눅스 프로그래머를 위한 가이드

내부 자료 구조 (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