-
semaphores....etclinux study 2018. 11. 30. 13:01
race condition
경쟁 상태란 원하지 않으면서도 동시에 여러개의 연산이 한 장소에서 수행되는 상태를 말한다.
예)) 한 장소에 물건이 n개 있다고 하자. A 프로세스는 그 장소의 물건의 개수를 확인하고 1개를 더해 n+1의 상태로 만든다..
B프로세스는 그 장소의 물건의 개수를 확인하고 하나를 빼온다. 그러면 물건의 개수는 n개가된다. A프로세스는 n+1개의 물건 개수를 예상하고 그장소의 물건을 확인 했을때 n개가 있는 것 을 확인하게 되고 물건의 개수가 맞지 않는 상황에 직면한다.
이를 막기 위해
semaphore를 도입하는 방법이 있다.
semaphore
는 정수형 변수와 기다리는 상태의 프로세스 목록, 그리고 up() down() 함수가 있다.
semaphore 값이 0보다 작으면 실행 상태의 프로세스를 세마포어 목록에 추가 한다. 그리고 스케줄러러를 호출한다.
semphore 값이 0보다 크거나 같으면, 세모포어 목록의 프로세스를 실행 시킨다.
원자적인 연산 수행 방법으로도 해결 가능하나 많은 커널 자료구조들은 하나의 연산으로 접근이 불가능하다.
또한 어떤 구역에 작업이 끝나야만 다른 작업이 그 구역에서 수행될 수 있는 곳을 critical region 이라 한다.
spin lock 방법
프로세스 목록이 없고, 프로세스는 다른 프로세스들로 부터 잠긴 프로세스를 찾고 잠김을 풀린때까지 반복한다.
dead lock
가장 간단한 dead lock의 예는 프로세스 p1이 a 자료에 접근하고 프로세스 p2는 자료 b에 접근했을때 p1은 b자료에 접근하고 기다리고
p2는 a자료에 접근시도 하면서 기다리는 것을 말한다.
'linux study' 카테고리의 다른 글
memory protection과 그 기법들....현상들.... (0) 2019.02.01 segementation in hardware (0) 2018.12.06 Reenterant kernel (0) 2018.11.30 memory address (0) 2018.11.30 리눅스 커널 공부 (0) 2018.11.27