[운영체제]세마포어(semapore) 구현
- 최초 등록일
- 2008.01.30
- 최종 저작일
- 2007.05
- 9페이지/ 한컴오피스
- 가격 2,000원
소개글
운영체제 과목수강중에 나왔던 레포트인
세마포어구현에 관한 레포트입니다.
프로그램에 대한 자세한 주석을 달아놓아서
레포트로 참고하시기에
많은 도움이 되실거라 생각합니다.
유용하게 사용하세요..^^
컴파일 실행환경
[문제]다음 Linux C 프로그램을 읽고 아래 물음에 답하시오.
(1) 이 프로그램에서 사용된 세마포어 관련 시스템 호출들을 찾아내어, 그 목적 및 사용 방법에 대해 설명하시오.
(2) 이 프로그램의 목적 및 실행과정을 단계적으로 말해 보시오.
(3) 이 프로그램을 실행한 결과를 나타내보시오(필요한 header file이 있으면 정의하여 사용하시오).
(4) 이 프로그램을 수정하여 critical section을 가진 두 개 이상의 프로세스가 병행하여 실행되게 하여 그 결과를 나타내보시오.
본문내용
[문제]다음 Linux C 프로그램을 읽고 아래 물음에 답하시오.
(1) 이 프로그램에서 사용된 세마포어 관련 시스템 호출들을 찾아내어, 그 목적 및 사용 방법에 대해 설명하시오.
<semget>
▶ 목 적 : 세마포어의 생성혹은 기존에 만들어져 있는 세마포어에 접근하기위해서 사용
▶ 사용방법 :
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/sem.h>
int semget ( key_t key, int nsems, int semflg )
① key_t key : 세마포어의 유일한 키값을 위해서 사용하는 int 형의 키값이다. 우리는 이 key 값을 이용해서 유일한 세마포어를 생성하거나 접근할수 있게 된다.
② nsems : 세마포어가 만들어질수 있는 크기이다. 이값은 최초 세마포어를 생성하는 생성자의 경우에 크기가 필요하다(보통 1). 그외에 세마포어에 접근해서 사용하는 소비자의 경우에는 세마포어를 만들지 않고 단지 접근만 할뿐임으로 크기는 0이 된다.
③ semflg : 새로 생성되거나 기존의 세마포어에 접근하거나 하는것은 semflg 를 통해서 제어할수 있다. 다음은 semflg 의 아규먼트이다.
IPC_CREAT
만약 커널에 해당 key 값으로 존재하는 세마포어가 없다면, 새로 생성 한다.
IPC_EXCL
IPC_CREAT와 함께 사용하며, 해당 key 값으로 세마포어가 이미 존재한다면 실패값을 리턴한다.
만약 IPC_CREAT 만 사용할경우 해당 key 값으로 존재하는 세마포어가 없다면, 새로 생성하고, 이미 존재한다면 존재하는 세마포어의 id 를 넘겨준다. IPC_EXCL을 사용하면 key 값으로 존재하는 세마포어가 없을경우 새로 생성되고, 이미 존재한다면 존재하는 id 값을 돌려주지 않고 실패값(-1)을 되돌려주고, errno 를 설정한다.
이상의 내용을 정리하면 semget 은 아래와 같이 사용할수 있을것이다. 만약 최초 생성이라면
sem_num = 1;
그렇지 않고 만들어진 세마포어에 접근하는 것이라면
sem_num = 0;
sem_id = semget(12345, sem_num, IPC_CREAT|0660)) == -1)
{
perror("semget error : ");
return -1;
}
semget 은 성공할경우 int 형의 세마포어 지사자를 되돌려주며, 모든 세마포어에 대한 접근은 이 세마포어 지시자를 사용하게 된다.
위의 코드는 key 12345 를 이용해서 세마포어를 생성하며 퍼미
참고 자료
Operating System, Nutt, Thrid Edition