프로세스 상호배제

지난주 복습

  • 스레드는 하나의 프로세스 내에서 코드, 전역 데이터, 힙 등의 자원을 공유하면서 독립적으로 동작하는 실행 단위이다.
  • 스레드는 프로세스 보다 더 적은 비용으로 생성될 수 있으면서 해당 프로그램의 처리 성능을 향상시킬 수 있다.*

  • 스레드는 사용자 수준 스레드와 커널 스레드로 구분된다. 사용자 수준 스레드는 커널에서 구분하지 목하기 때문에 문맥교환이 발생하지 않는 장점이 있지만, 하나의 스레드가 대기 상태가 되면 다른 스레드들도 모두 실행이 멈춘다.
  • 커널 수준 스레드는 문맥교환이 발생하면서 프로세스와 동등한 수준의 기능을 제공 받는다.
  • exec 계열의 시스템 호출을 이용하여 프로세스가 전혀 다른 프로그램을 적재하여 동작할 수 있다.

학습목표

  • 병형 프로세스가 발생하는 원인과 이로 인한 문제점을 해결할 수 있다.
  • 병행 프로세그간의 동기화 기법과 상호배제로 활용되는 여러 가지 알고리즘을 설명할 수 있다.

학습내용

퀴즈로 확인하기

정리하기

  • 컴퓨팅 시스템의 처리효율을 높이기 위해서 여러 프로세스를 동시에 실행하는 것처럼 병행으로 동작 시킨다.
  • 다른 프로세스와 상호작용 하면서 동작하는 협력 프로세스의 경우 동시에 동일한 자원이나 데이터에 접근하면서 비정상적인 결과를 생성할 수 있다.
  • 협력 프로세스가 공유 자원에 접근하고 있는 상황에서 다른 프로세스가 동일한 공유 자원에 접근하지 못하도록 하는 것을 상호배제라고 한다.
  • 프로세스간에 진행 순서를 맞추는 제어 행위를 동기화라고 한다.

  • 임계영역은 프로세스 코드의 일부분으로서 다른 프로세스와 공유하는 데이터를 변경시키는 부분을 말한다. 한 프로세스가 입계영역에서 동작하는 동안에는 다른 프로세스가 동일한 임계영역에 들어가지 못하도록 함으로서 상호배제를 보장한다.

  • 상호 배제를 구현하기 위하여 소프트웨어적으로 데커 알고리즘, 피터슨 알고리즘 등이 있으며, 하드웨어적으로 TestAndSet, CompareAndSwap 방법 등이 있다.
  • 다릭스트라의 제안으로 도입된 동기화 도구인 세마포를 이용하여 상호배제를 이룰 수 있다.

  • 프로그래머의 오류 가능성을 감소시키기 위한 고급 병행 제어 구조로서 모니터의 개념이 도입되었으며, 객체구조로 공유 데이터, 초기화코드, 프로시저로 구성된다.