감자튀김 공장🍟

[OS] 상호배제(Mutual exclusion)이란? 본문

Study/Operating System

[OS] 상호배제(Mutual exclusion)이란?

Potato potage 2022. 4. 6. 11:53
반응형

앞서 읽고 오기

  • https://good-potato.tistory.com/60
  • 상호배제 : 멀티 스레드가 실행되는 환경에서, 한 스레드가 임계 구역을 진입하면 배타적으로 실행되도록 보장하는 기법이다.

 

상호배제를 포함한 프로그램 작성

  • 임계구역 코드의 앞 뒤 부분에는 임계구역에 대한 상호 배제를 만들기 위해 임계구역 진입 코드(entry 코드)와 임계구역 진출 코드(exit 코드)가 반드시 있어야 한다.

 

  • 일반 코드 - 공유 데이터를 액세스하지 않는 코드 부분
  • 임계구역 진입 코드 (entry code)
    • 임계구역에 진입하기 전 필요한 코드
    • 다른 스레드가 임계구역에 들어가 있는지 검사하여 임계구역에 들어가 있는 스레드가 없는 경우 다른 스레드가 들어오지 못하도록 조치를 취함
    • 만일 임계구역에 이미 들어가 있는 스레드가 있다면, 이 스레드가 임계구역을 벗어날 때까지 현재 스레드를 대기시키는 코드
  • 임계구역 코드
    • 공유 데이터를 접근하는 코드를 포함
    • 한 스레드에 의해서만 배타적으로 사용되도록 보장되어야 함
    • 짧을수록 좋음
  • 임계구역 진출 코드 (exit code)
    • 임계구역의 실행을 마칠 때 필요한 코드
    • 대기 중인 스레드나 다른 스레드가 임계구역에 진입할 수 있도록, entry 코드에서 취한 조치를 풀어 놓는 코드
    • entry code와 exit code는 짝을 이루어서 구현해야한다.

 

상호배제 구현

  • 소프트웨어적 방법 - Peterson's 알고리즘
  • 하드웨어적 방법 - 인터럽트 서비스 금지, 원자 명령 사용 < 최근에 사용 중인 방법

 

상호배제 방법1 - 인터럽트 서비스 금지

  • 임계구역으로 진입할 때, entry 코드에서 인터럽트 서비스를 금지하는 명령어를 싱행하는 방법이다. 이렇게 하면, 스레드가 임계구역을 실행하고 있을 때 선점(preemption) 되지 않는다.
  • 문제점 : 멀티코어를 비롯한 다중 CPU 시스템에서는 활용할 수 없다. CPU가 모든 인터럽트를 무시하게 될 수 있기 때문이다.

 

상호배제 방법2 - 원자 명령(atomic instruction) 사용

  • 문제 상황
    • lock 값을 읽어 들이는 명령과 lock 변수에 1을 저장하는 명령어 사이에 컨텍스트 스위칭이 발생할 때 문제가 발생한다.

 

  • 해결 방법
    • lock 값을 읽어 들이는 명령과 lock 변수에 1을 저장하는 명령 사이에 컨텍스트 스위칭이 일어나지 않도록 이 두 명령을 하나의 명령으로 만드는 것이다.
    • 이를 원자 명령(atomic instruction) 혹은 TSL(Test and Set Lock) 명령어라고 부른다.

 

 

 

참고

운영체제(Operating system), 황기태 지음

 

반응형
Comments