티스토리 뷰
운영 체제
동기화 문제와 해결책 예시
1. Reader-Writer 문제
공유된 데이터에 쓰려고 하는 자와 읽으려고 하는 자가 여러 명 있을 수 있다.
mutex를 사용해서 해결할 수도 있지만, 여러 명이 데이터를 읽고자 할 수도 있다.
이를 해결하기 위한 방법 중 하나가 reader-writer lock이다.
파일 수정은 한 프로세스만 가능하지만, 수정이 없는 동안은 동시에 여러 명이 파일을 읽을 수 있다는 장점이 있다. 그러나 읽기와 쓰기 중 어느 것을 위한 접근인지 구분할 수 있어야 한다.
read count를 mutex로 관리하고, 최초로 읽을 때는 쓰기 작업이 끝날 때까지 기다리고, 마지막으로 읽는 것을 종료할 때는 쓰기 작업 또는 읽기 작업이 시작될 수 있도록 시그널한다.
2. 식사하는 철학자 문제
5개의 프로세스 각각이 2개의 자원이 필요한데, 자원이 5개 있는 상황이다.
자원을 각각 한 개만 가져서 나머지 한 개가 풀릴 때까지 기다리는 상황이 무한정 발생할 수 있다. dead lock이 발생한 상황인데, 이를 해결하기 위해 다음과 같은 방법이 있다.
- 프로세스의 개수를 줄인다.
- 자원을 한번에 2개씩만 집을 수 있게 한다.
- 프로세스를 그룹으로 나누어 서로 겹치지 않게 자원을 얻을 수 있게 한다.
- 모니터를 통해 해결한다. 자원을 모니터의 공유 자원으로 관리하고, 양 옆의 두 프로세스가 자원을 가지고 있지 않는다는 조건을 설정하면 된다.
데드락을 해결했다고 해서 starvation이 사라지는 것은 아니다. 이를 해결하기 위해 오래 자원을 획득하지 못한 프로세스의 우선순위를 높이는 방법 등이 있다.