본문 바로가기
~ 2024.03/컴퓨터 구조 + 운영체제

[컴퓨터 구조] 프로세스 동기화

by Monett 2024. 1. 4.
반응형

혼자 공부하는 컴퓨터 구조 + 운영체제(강민철 저, 한빛미디어)를 공부하며 내용을 정리한 글 입니다.
현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다.

 

동기화

동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고 받으며 협력한다.

따라서 아무렇게나 동시에 실행되어서는 안되며, 동기화가 필요하다.

 

프로세스 동기화란 프로세스들 사이의 수행 시기를 맞추는 것이다.

프로세스들 사이의 수행 시기를 맞추는 것은 아래 두 가지를 말한다.

  • 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
  • 상호 배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기

 

동시에 접근해서는 안되는 자원을 공유 자원, 공유 자원에 접근하려는 코드 영역을 임계구역으로 부른다.

 

두 개 이상의 프로세스가 임계 구역에 진입하려고 하면 하나는 대기해야만 한다.

잘못된 실행 시 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하는 레이스 컨디션이 발생하여 데이터 일관성을 해칠 수 있다.

이는 저급 언어로 변환된 여러 줄의 코드가 실행되는 동안 문맥 교환이 일어날 수 있어 발생 가능하다.

 

이를 방지하기 위한 세 가지 원칙

  • 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 진입할 수 없다.
  • 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 진입해야 한다.
  • 유한 대기 : 한 프로세스가 임계 구역에 진입하고자 한다면 언젠가는 진입해야 한다.

동기화 기법

뮤텍스 락

동시에 접근해서는 안 되는 자원에 동시에 접근하지 않도록 만드는 상호 배제를 위한 동기화 도구

 

구현 방식

  • 자물쇠 : 전역 변수 lock
  • 잠금 : acquire 함수 (프로세스가 진입 전 호출)
  • 해제 : release 함수 (프로세스 작업 후 호출)

대기하는 프로세스는 반복적으로 lock을 확인한다. 이를 바쁜 대기라고 한다.

세마포

공유 자원이 여러 개 있는 상황에서도 적용 가능

 

구현 방식

  • 진입 가능한 프로세스 개수 : 전역 변수 S
  • 임계 구역 접근 가능 확인 및 접근: 함수 wait
  • 뒤 프로세스에 가능하다고 신호 : 함수 signal

바쁜 대기를 해결하기 위해 wait 함수에서 사용 가능 자원이 없는 경우, 해당 프로세스를 대기 상태로 만들고 대기 큐에 집어넣을 수 있다.

 

세마포는 S를 0으로 만든 후, 먼저 실행할 프로세스 뒤에 signal을, 다음 프로세스 앞에 wait을 붙여 실행 순서도 제어 가능하다.

모니터

최근에 등장한 방식이다. 세마포는 일일이 wait과 signal을 사용해주어야하는 불편함이 있다.

모니터는 공유 자원과 그에 접근하기 위한 인터페이스를 묶어 관리하고, 오직 인터페이스를 통해서만 접근하도록 한다.

조건 변수에 대한 wait과 signal을 두어 순서도 제어 가능하다.

ex)

x.wait();
x.signal();

 

반응형