프로세스 상호배제
지난주 복습
- 스레드는 하나의 프로세스 내에서 코드, 전역 데이터, 힙 등의 자원을 공유하면서 독립적으로 동작하는 실행 단위이다.
-
스레드는 프로세스 보다 더 적은 비용으로 생성될 수 있으면서 해당 프로그램의 처리 성능을 향상시킬 수 있다.*
- 스레드는 사용자 수준 스레드와 커널 스레드로 구분된다. 사용자 수준 스레드는 커널에서 구분하지 목하기 때문에 문맥교환이 발생하지 않는 장점이 있지만, 하나의 스레드가 대기 상태가 되면 다른 스레드들도 모두 실행이 멈춘다.
- 커널 수준 스레드는 문맥교환이 발생하면서 프로세스와 동등한 수준의 기능을 제공 받는다.
- exec 계열의 시스템 호출을 이용하여 프로세스가 전혀 다른 프로그램을 적재하여 동작할 수 있다.
학습목표
- 병형 프로세스가 발생하는 원인과 이로 인한 문제점을 해결할 수 있다.
- 병행 프로세그간의 동기화 기법과 상호배제로 활용되는 여러 가지 알고리즘을 설명할 수 있다.
학습내용
퀴즈로 확인하기
정리하기
- 컴퓨팅 시스템의
처리효율을 높이기 위해서 여러 프로세스를 동시에 실행하는 것처럼 병행으로 동작 시킨다. - 다른 프로세스와 상호작용 하면서 동작하는 협력 프로세스의 경우 동시에 동일한 자원이나 데이터에 접근하면서 비정상적인 결과를 생성할 수 있다.
- 협력 프로세스가 공유 자원에 접근하고 있는 상황에서 다른 프로세스가 동일한 공유 자원에 접근하지 못하도록 하는 것을
상호배제라고 한다. -
프로세스간에 진행 순서를 맞추는 제어 행위를
동기화라고 한다. -
임계영역은 프로세스 코드의 일부분으로서 다른 프로세스와 공유하는 데이터를 변경시키는 부분을 말한다. 한 프로세스가 입계영역에서 동작하는 동안에는 다른 프로세스가 동일한 임계영역에 들어가지 못하도록 함으로서 상호배제를 보장한다. - 상호 배제를 구현하기 위하여 소프트웨어적으로 데커 알고리즘, 피터슨 알고리즘 등이 있으며, 하드웨어적으로 TestAndSet, CompareAndSwap 방법 등이 있다.
-
다릭스트라의 제안으로 도입된 동기화 도구인 세마포를 이용하여 상호배제를 이룰 수 있다.
- 프로그래머의 오류 가능성을 감소시키기 위한 고급 병행 제어 구조로서 모니터의 개념이 도입되었으며, 객체구조로 공유 데이터, 초기화코드, 프로시저로 구성된다.