티스토리 뷰

운영 체제

동기화 문제와 해결책 예시

Power Adeventurer

1. Reader-Writer 문제

공유된 데이터에 쓰려고 하는 자와 읽으려고 하는 자가 여러 명 있을 수 있다.

mutex를 사용해서 해결할 수도 있지만, 여러 명이 데이터를 읽고자 할 수도 있다.

이를 해결하기 위한 방법 중 하나가 reader-writer lock이다.

파일 수정은 한 프로세스만 가능하지만, 수정이 없는 동안은 동시에 여러 명이 파일을 읽을 수 있다는 장점이 있다. 그러나 읽기와 쓰기 중 어느 것을 위한 접근인지 구분할 수 있어야 한다.

 

read count를 mutex로 관리하고, 최초로 읽을 때는 쓰기 작업이 끝날 때까지 기다리고, 마지막으로 읽는 것을 종료할 때는 쓰기 작업 또는 읽기 작업이 시작될 수 있도록 시그널한다.

 

2. 식사하는 철학자 문제

5개의 프로세스 각각이 2개의 자원이 필요한데, 자원이 5개 있는 상황이다.

자원을 각각 한 개만 가져서 나머지 한 개가 풀릴 때까지 기다리는 상황이 무한정 발생할 수 있다. dead lock이 발생한 상황인데, 이를 해결하기 위해 다음과 같은 방법이 있다.

 

- 프로세스의 개수를 줄인다.

- 자원을 한번에 2개씩만 집을 수 있게 한다.

- 프로세스를 그룹으로 나누어 서로 겹치지 않게 자원을 얻을 수 있게 한다.

- 모니터를 통해 해결한다. 자원을 모니터의 공유 자원으로 관리하고, 양 옆의 두 프로세스가 자원을 가지고 있지 않는다는 조건을 설정하면 된다.

 

데드락을 해결했다고 해서 starvation이 사라지는 것은 아니다. 이를 해결하기 위해 오래 자원을 획득하지 못한 프로세스의 우선순위를 높이는 방법 등이 있다.

 

'운영 체제' 카테고리의 다른 글

메모리  (0) 2026.04.02
라이브락 & 데드락  (0) 2026.04.02
동기화  (0) 2026.04.02
CPU 스케쥴링  (0) 2026.04.02
쓰레드란?  (0) 2026.04.01