강의자료(1117)

Download Report

Transcript 강의자료(1117)

고급 프로세스간 통신
• message queue
• semaphore
• shared memory
• fcntl 을 사용한 레코드 록킹
-읽기록
-쓰기록
-int fcntl(int filedes, int cmd, struct flock *ldata)
. cmd – F_GETLK, F_SETLK, F_SETLKW
. Ldata – l_type (F_RDLCK, F_WRLCK, F_UNLCK), l_whence,
off_t l_start, off_t l_len, pid_t l_pid)
고급 프로세스간 통신
• fcntl 을 사용한 레코드 록킹
-예제 – p251 (test1.c)
-록 정보는 fork 호출에 의해 계승되지 않는다
-fcntl 호출의 파일포인터를 변경시키지 않는다
-한 프로세스에 속한 모든 록은 그 프로세스가 죽을 때 자동적으로 제거
• deadlock (test2.c – p256)
• 실습
-파일 testfile의 0에서 4바이트까지 lock
- fork를 호출하여 자식 프로세스 생성
-자식 프로세스는 5에서 9바이트까지와 0 에서 4바이트까지를 lock하
려고 시도한다. 두번째의 lock시도는 부모프로세스가 lock한 영역이므
로 자식프로세스는 대기
-부모프로세스는 sleep를 호출하여 10초간 휴면, 자식이 두 번의 lock
을 수행할 수 있도록 한다.
-부모가 깨어나면 5 에서 9 바이트까지 lock을 시도한다