프로세스 동기화

재능없는 개발자·2023년 2월 4일
0

동시다발적으로 실행되는 프로세스들은 공동의 목적을 올바르게 수행하기 위해 서로 협력하면서 영향을 주고 받는다.
이렇게 협력하여 실행하는 프로세스들은 실행 순서와 자원의 일관성을 보장해야하기에 동기화 되어야한다.

동기화란?

예를 들어 워드를 입력한다 할때, 입력을 받는 프로세스, 맞춤법을 검사하는 프로세스, 화면에 출력해 주는 프로세스들이 협력하며 우리의 작업을 돕는다. 이들은 수행시기를 맞추어서 실행되어야 한다.수행시기를 맞추는 것에는 두가지가 있다.

  • 실행순서 제어를 위한 동기화
    워드에 입력을 받는 프로세스와 화면에 출력해주는 프로세스가 있다면 화면에 출력해주는 프로세스는 입력을 받는 프로세스보다 나중에 실행되어야한다. 이렇게 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것이 실행순서 제어를 위한 동기화이다.
  • 상호배제를 위한 동기화
    상호배제는 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘이다. 만약 10만원이 있는 계좌에서 2만원을 출금하는 프로세스와 만원을 입금하는 프로세스가 있다면, 출금하는 프로세스와 입금하는 프로세스는 서로 10만원에 같이 접근하면 안된다. 출금 프로세스는 입금 프로세스가 시작하고 끝날때까지 대기해야만 한다.

공유자원과 임계구역

위처럼 은행의 잔고같은 동시에 접근하면 안되는 것을 공유 자원이라고 한다. 공유자원은 전역변수가 될 수도있고, 파일이 될수도 있고 여러가지가 될 수도 있다.
그리고 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 임계구역(cirtical section)라한다. critical section은 하나의 프로세스만 실행가능하다. 하지만 잘못된 실행으로 인해 두개 이상의 프로세스가 critical section에 동시에 접근하면 race condition문제가 발생한다.

임계구역의 3원칙

  • 상호 배제(mutual exclusion)
    한 프로세스가 임계 구역에 진입했다면, 다른 프로세스는 cirtical section에 들어 올 수 없다.

  • 진행
    cirtical section의 어떤 프로세스도 진입하지 않았다면, 임계구역에 진입하고자 하는 프로세스는 들어갈 수 있어야한다.

  • 유한 대기(bounded waiting)
    한 프로세스가 임계구역에 진입하고 싶다면 그 프로세스는 언젠가는 cirtical section에 들어올 수 있어야한다.

동기화 기법

Mutex lock

cirtical section에 접근하는프로세스는 내가 지금 임계 구역에 있음을 알리기 위해 mutex lock을 이용해 자물쇠를 걸어두고, 다른 프로세스는 임계 구역이 잠겨있다면 기다리고 잠겨있지 않다면 진입한다.
이 방식은 계속 다른 프로세스가 cirtical section에 들어가 있는지 확인하며 진입할 수 없다면 기다리
고 진입할 수 있다면 cirtical section에 들어가 잠근뒤 작업을 진행하고 빠져나올때는 잠금을 해제한다.

Semaphore

mutex lock은 공유 자원이 하나 있는 경우를 가정한 것이지만 semaphorecirtical section이 여러개 있는 경우를 상정한다. 즉 semaphore는 공유자원이 여러개 있는 상황에서도 적용이 가능하다.
semaphore는 임계구역에 진입할 수 있는 프로세스의 개수 s를 관리하며 s가 0이하라면 사용할 수 있는 자원이 있는지 반복적으로 확인하고 s가 1이상이면 프로세스를 하나 진입시키고 s를 1감소한다. 작업을 마치면 s를 1증가한다.하지만 이도 mutex lock과 같이 공유자원이 없는 경우(s가 0인 경우) 프로세스는 무한히 반복하며 s를확인해야 하므로 cpu주기를 낭비하게 된다.
따라서 semaphore는 s가 0이라면 들어가고 싶어하는 프로세스를 대기 상태로 만들고, 그 프로세스의 PCB를 semaphore를 위한 대기 큐에 집어넣는다. 그리고 s가 1이상이 되면 대기 중엔 프로세스를 대기 큐에서 제거하고, 프로세스를 준비 상태로 변경한 뒤 준비큐로 넣어준다.

Moniter

semaphore는 굉장히 좋은 방식이지만, 코드를 잘못사용한다면 예기치 못한 결과를 얻을 수 있다.moniter는 semaphore에 비하면 사용자가 사용하기에 훨씬 편리한 도구이다.

profile
https://www.youtube.com/watch?v=__9qLP846JE

0개의 댓글