Computer Security

#19 파일을 이용한 동기화 (실습) 본문

리눅스 시스템 프로그래밍

#19 파일을 이용한 동기화 (실습)

쿠리 Kuri 2022. 9. 24. 18:30
반응형

flock을 이용하여, 여러개의 프로세스를 만드는데 각 프로세스가 동일한 파일을 통해서 동기화를 하는 상황을 만들어보자.

 


1. 기본 뼈대를 잡아준다.

main

 

 

 

 


2. lock의 주체가 되는 열린 파일을 하나 만들어 주자.

open

 

 

 

 

 

 


3. lock을 잡고 lock을 푸는 코드를 짜준다. (SH 예시)

lock

 

 

 

 

 


4. lock을 잡고 푸는 사이에 시간을 기다리는 부분을 getc API를 이용해 작성 해준다.

사용자의 입력을 기다린다.

 

 

 

 

 


5. 프로그램을 실행하면서 첫번째 파라미터가 exclusive 면 exclusive lock을 잡고 shared면 shared lock을 잡는 코드를 작성하자.


i) argc를 테스트한다. (파라미터를 한개를 받길 원하니 2보다 작으면 에러처리)

 

 

 

 


ii) 첫번째 argv 파라미터가 ex인지 sh인지 테스트해주는 코드를 짜보자.

 argv 체크해서 sh 을 잡을지 ex를 잡을지 입력을 받는다.

 

 

 

 


iii) main 함수의 flock을 예외처리 해준다.

flock

 

 

 

 

 

 

 


6. 전체 코드이다.

flock.c

1. 파라미터를받아오고 파일을 연다.

 

2. flock을 이용해서 (shared,exclusive) lock을 잡는다.

 

3. 사용자 입력 기다렸다가 lock을 풀고 나온다.

 

 

 

 

 

 


7. gcc 명령어를 이용해 컴파일 한 뒤, 실행 시켜보자.

실행에 앞서, 여러 창을 띄워서 테스트 해보자.

test 터미널

 

 

 


i) ./flock

./flock

파라미터를 잘못 넣었다 에러 

 

 

 

 


ii) shared lock 끼리 경쟁 하는 상황

./flock sh

1,2,3번째 프로세서 모두 shared lock을 잡은 상태이다.

 

 

 

 

 


iii) shared lock 이 걸린 상태에서 exclusive lock을 시도하는 상황

./flock ex

exclusive lock은 lock을 잡으러 들어가서 기다리는 중이된다.

위의 shared lock을 잡고있는 두개의 프로세서를 밖으로 빠져나오게 해주면 그제서야 잡게 된다.

 

 

 

 

 

 


iv) exclusive lock을 잡고있을 때 shared lock을 시도하는 상황

exclusive lock이 먼저 잡힌 상태에서는 shared lock이 안잡히는 것을 확인 할 수 있다.

 

이 역시 exclusive lock이 풀리면,  shared lock이 잡히는 것을 볼 수 있다.

 

 

 

 

 

 


v) exclusive lock 이 잡힌 상태에서 shared lock을 2개의 프로세서가 시도할 때

역시나 shared lock들이 안잡힌다.

exclusive lock을 해제하는 순간 shared lock이 동시에 잡히는 것을 볼 수 있다.

 

반응형

'리눅스 시스템 프로그래밍' 카테고리의 다른 글

#21 파일 속성 제어 (실습)  (2) 2022.09.26
#20 파일 속성 제어  (0) 2022.09.25
#18 파일을 이용한 동기화(Race condition)  (2) 2022.09.23
#17 Memory map (실습)  (0) 2022.09.22
#16 Memory map  (2) 2022.09.21
Comments