[운영체제] 프로세스 동기화

변지현·2021년 1월 21일
0

운영체제

목록 보기
3/5
post-custom-banner

Critical Seaction(임계영역)

 동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역Ciritical Section이라고 한다.

Critical Section Problem(임계영역 문제)

 프로세스들이 Critical Section을 동시에 접근하였을 때 발생하는 동기화 문제

임계영역 문제를 해결하기 위한 기본 조건

  • Mutual Exclution(상호배제)
    어떤 프로세스가 Critical Section에서 실행중이라면, 다른 프로세스는 그들이 가진 Critical Section에서 실행될 수 없다.
  • Progress(진행)
    Critical Section에서 실행중인 프로세스가 없다면, 다른 프로세스가 접근할 수 있도록 한다.
  • Bounded Waiting(한정된 대기)
    같은 프로세스가 임계구역을 독점하지 못하게 한다. 다른 프로세스의 starvaion을 막기 위해 한번 하나의 프로세스가 critical section에 들어가려고 요청한 이후부터는 한정된 대기 횟수 안에 해당 프로세스가 critical section에 들어가야한다.

critical section 문제의 해결책

Lock

 하드웨어 기반 해결책으로써, 동시에 공유 자원에 접근하는 것을 막기 위해 critical section에 진입하는 프로세스는 lock을 획득하고 critical section에 진입하는 프로세스는 lock을 획득하고 critical section을 빠져나올 때, lock을 방출함으로써 동시에 접근이 되지 않도록 한다.
 critical section으로의 진입 가능성 확인과 동시에 진입 거부를 원자적으로 한번에 처리한다.

단점
  • 락이 걸려있는 경우 인터럽트가 되지 않기 때문에 다중 처리기 환경에서는 효율성 측면에서 적용할 수 없다.

Semaphore(세마포)

 소프트웨어상에서 Critical Section 문제를 해경하기 위한 동기화 도구

종류
  • 카운팅 세마포
    가용한 개수를 가진 자원에 대한 접근 제어용으로 사용되며, 세마포는 그 가용한 자원의 개수로 초기화 된다. 자원을 사용하는 프로세스가 생기면 세마포가 감소, 방출하면 세마포가 증가한다.
  • 이진 세마포
    MUTEX라고도 부르며, 상호배제(Mutual Exclution)의 머릿글자를 따서 만들어졌다. 이름 그대로 0과 1의 값만 사용 가능하며, 다중 프로세스들 사이의 Critical Section 문제를 해결하기 위해 사용된다.
단점
  • Busy Waiting
    Spin Lock이라고 불리는 Semaphore 초기 버전에서 Critical Section에 진입해야하는 프로세스는 진입을 계속 시도하기 때문에, CPU 시간을 낭비했었다. 이를 Busy Waiting이라고 부르며 특수한 상황이 아니면 비효율적이다. 일반적으로는 Semaphore에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 Block시킨 뒤, Critical Section에 자리가 날 때 다시 깨우는 방식을 사용한다. 이 경우 Busy Waiting으로 인한 시간 낭비 문제가 해결된다.

모니터

  • 고급 언어의 설계 구조물로서, 개발자의 코드를 상호배제하게끔 만든 추상화된 데이터 형태이다.
  • 공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리한다(세마포는 직접 키 해제와 공유자원 접근 처리가 필요하다).

Deadlock(교착상태)

 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태이다. 둘 이상의 프로세스가 각자 공유 자원을 할당받은 후 다음 처리를 위해 다른 공유자원을 할당받아야할 때, 각자 필요한 자원이 상대방에게 할당되어있는 경우 프로세스들이 다음 처리를 위한 공유 자원을 획득하기 위해 서로 무한정 대기하는 상태이다.

profile
23살 개발자 변지점프의 더 나은 사람 되기 프로젝트
post-custom-banner

0개의 댓글