임계구역(위험지구)과 상호배제

2020. 7. 7. 22:40컴퓨터언어/운영체제

728x90
반응형

 

👍 임계구역, 그리고 그것을 지키기 위한 상호배제

 

다중프로그래밍 방식이 되면서 운영체제는 여러 프로세스가 제한된 공유자원에 동시접근하는 것을 막아야 하는 의무가 생겼다.

여기서 공유자원이라는 것은 CPU, 메모리, 주변장치 같은 물체도 될 수 있고, 프로그램 내 변수도 될 수 있다.

즉 여러 프로세스가 동시에 프린터를 쓸 수 없는 것처럼, 커 다란 프로그램은 여러 프로세스로 분할되어 동작하기 때문에 같은 변수를 참조하는 프로세스끼리는 반드시 코드를 순차실행해야 null이 발생하지 않을 것이다.

이처럼 동시에 사용될 수 없는 공유자원(파일)을 "임계구역(Critical Section)"이라고 한다.

그리고 임계구역을 지키기 위한(동시참조를 막기 위한) 해결방안을 "상호배제"라고 한다.

만약 상호배제로도 문제가 발생하면 "교착상태"라고 한다.

프로세스X : a = 1 + 2
프로세스Y : b = a * 100
두 프로세스 모두 변수 a를 공유하므로, a를 임계구역이라고 하며 X->Y 순서로 실행시키는 것을 상호배제라고 한다.

 


👍 임계구역의 원칙

 

  • 두 개 이상의 프로세스가 동시에 사용할 수 없다.
  • 순서를 지키면서 신속하게 사용한다.
  • 하나의 프로세스가 독점해서는 안된다.
  • 사용 중에 중단, 무한반복 되어서도 안된다.

 


👍 상호배제의 4가지 요구조건

 

  • 두 개 이상의 프로세스들이 동시에 임계구역에 있으면 안된다.
  • 어떤 프로세스도 임계구역에 진입하는 것이 무한정 연기되면 안된다.
  • 임계구역 안에 있는 프로세스가 다른 프로세스의 임계구역 진입을 막을 수 있어야 한다.
  • 프로세스들의 상대적인 속도(각 프로세스들의 처리속도, 접근방법, 상태)에 대해 어떠한 가정을 하면 안된다.

 


👍 상호배제 알고리즘

👊 잠금

하나의 프로세스가 임계구역을 점유한 후, 다른 프로세스가 접근할 수 없도록 잠근다.

 

👊 인터럽트 봉쇄

인터럽트란 새로운 프로세스를 실행하기 위하여 현재 실행중인 프로세스를 종료하는 것을 말한다.

인터럽트를 봉쇄한다는 것은, 임계구역이 사용중일 때 모든 인터럽트가 발생하지 않도록 하는 것을 말하며, 이는 새로운 프로세스의 생성 및 접근을 막음으로써 임계구역을 지키는 것이다.

 

👊 엄격한 교대

두 개의 프로세스가 하나의 임계구역을 사용할 때 서로 교대로 한번씩만 임계구역에 접근하도록 하는 방법이다.

하나의 프로세스가 연속으로 접근할 수 없으며, 반드시 상대 프로세스가 임계구역을 사용하고 난 후에만 접근할 수 있다.

 


👍 잠금, 인터럽트 봉쇄, 엄격한 교대의 한계

 

세 알고리즘 모두 현재 사용중인 프로세스가 있다면 다른 프로세스가 임계구역에 접근하지 못하도록 막는 방식이다.

그런데 만약 현재 사용중인 프로세스의 실행시간이 길다면 다른 프로세스는 임계구역을 사용하고자 계속 접근을 시도할 것이다.

이를 "바쁜 대기"라고 한다.

바쁜 대기 현상이 증가하면 운영체제는 부담을 갖게 되어 컴퓨터 시스템 전체 성능이 떨어지게 된다.

바쁜 대기 현상을 제거하는 기능을 추가한 상호배제 알고리즘이 새로 나왔는데, 이것이 "세마포어"다.

2020/07/07 - [컴퓨터언어/운영체제] - 세마포어

728x90
반응형