[컴퓨터 구조] 프로세스 동기화, 교착 상태

Yong·2023년 8월 10일
0

홍공컴운

목록 보기
5/6

12장. 프로세스 동기화

12-1. 동기화란

동기화의 의미

프로세스 동기화란 협력하는 프로세스 사이에서 실행 순서 규칙을 정하여 공유 자원의 일관성을 보장하는 것이다.

실행되고 있는 프로세스들은 서로 데이터를 주고 받으며 실행될 수 있다. 예를 들어 워드 프로세서에서는 사용자로부터 입력을 받고 동시에 맞춤법을 검사하는 프로세스가 있을 수 있다. 이러한 공동의 목표를 가진 프로세스들은 상호작용하며 실행되지만 마구잡이로 실행되서는 안되기 떄문에 동기화가 필요하다.

동기화에는 실행 순서 제어상호 배재가 있다.

실행 순서 제어는 프로세서들을 올바른 순서대로 실행하기 위한 동기화 기법이다.
상호 배재는 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기 위한 기법이다.

공유 자원과 임계 구역

동시에 접근해서 안되는 자원은 공유 자원 이라고 한다. 여러 프로세스가 공동으로 사용하는 변수, 메모리, 파일 등. 공유 자원을 접근하는 코드영역을 임계구역이라고한다. 임계 구역에서는 둘 이상의 프로세스가 동시에 접근하면 안되는 공유 자원을 다루기 때문에, 상호 배재 동기화 기법이 필요하다.

12-2. 동기화 기법

프로세스 동기화를 위한 기법 중 대표적인 기법에는 뮤텍스 락, 세마포, 모니터가 있다.

뮤텍스 락은 하나의 공유자원에 대해 하나의 프로세스만 접근할 수 있도록 하는 동기화 기법이다. 스레드는 공유 자원에 접근하기 전에 락을 획득하고, 접근이 끝나면 락을 해제한다.

세마포는 공유 자원에 대해 여러 프로세스나 스레드가 접근할 수 있도록하는 기법이다. 세마포는 정수로 표현(전역 변수 S)이 되고 wait와 signal로 조작된다.

모니터란 공유 자원에 대해 하나의 프로세스나 스레드만 접근할 수 있도록하는 잠금 기능을 제공하고, 잠금과 해제를 자동으로 처리한다.

13장. 교착 상태

13-1 교착상태란

교착상태란 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황이다.

교착 상태는 식사하는 철학자 문제로 설명해볼 수 있다. 다 명의 철학자가 원탁에 앉아 있고 각자의 앞에 스파게티가 있고 양 옆에 포크가 하나씩 있다. 철학자들은 생각하거나 식사하는 두가지 상태를 반복한다. 생각을 마치고 삭사를 하려면 양손에 포크를 들어야한다. 만약 모든 철학자가 동시에 식사를 하려고 오른쪽 포크를 들고 왼쪽 포크를 들려고 할 때, 왼쪽 포크가 없어서 교착 상태에 빠지게 된다.

게임 프로세스는 자원 A를 점유한 채 웹 브라우저가 점유하고 있는 자원 B의 사용이 끝나길 기다리고 웹브라우저는 자원 B를 점유한 채로 게임 프로세스의 자원 A 사용이 끝나길 기다리는 상황과 같다. 이렇게 프로세스들이 서로 기다리기만 하다가 실행을 못하는 상황을 두고 교착 상태라고 한다.

교착 상태 발생 조건

교착 상태가 발생하는 조건은 네가지가 있다. 상호 배제, 점유와 대기, 비선점, 원형 대기.

  • 상호 배제: 자원을 하나의 프로세스만 사용가능한 상황
  • 점유와 대기: 다른 자원을 할당받기를 기다리는 상황
  • 비선점: 자원을 사용하는 프로세스의 작업이 끝나야만 이용할 수 있는점. 강제로 빼앗지 못하는 상황
  • 원형 대기: 프로세스가 요청 및 할당받은 자원이 원의 형태를 이루었기 때문. 원의 형태로 자원을 대기하는 상황

13-2 교착 상태 해결 방법

교착 상태 예방

교착 상태를 예방하는 방법은 교창 상태 발생 조건 네 가지 중 하나를 충족하지 못하게 하는 방법이 있다.

상호 배제를 없앤다면 모든 자원을 공유하도록 만드는 것이지만 현실 적으로 상호 배제를 없애기에는 어렵다.

점유와 대기를 없애면 운영 체제는 특정 프로세스에 자원을 모두 할당하거나 아예 할당하지 않는 방식으로 배분한다. 이 방법은 자원의 활용률이 낮아질 우려가 있기 때문에 현실적인 방법이 아니다.

비선점 조건을 없애는 방법은 일부 자원에 대해서 효과적이다. CPU의 경우 한 프로세스가 다른 프로세스가 오래동안 사용중인 CPU 자원을 할당 받아 사용할 수 있다. 하지만 모든 자원이 이렇게 선점 가능한 것이 아니다. 프린터의 경우 다른 프로세스가 프린터 자원을 빼앗아 사용하기란 어렵다.

원형 대기 조건을 업애는 방법. 모든 자원에 번호를 붙이고 오름 차순으로 자원을 할당하면 원형 대기가 발생하지 않도록 할 수 있다. 철학자 문제를 예를 들어 철학자는 낮은 포크에서 높은 포크 순으로 들게한다. 한 철학자가 왼쪽에 5번 포크를 들고 오른쪽의 1번 포크를 집어 들 수 없기 때문에 원형 대기가 발생하지 않는다.

교착 상태 회피

교착 상태 회피는 교착 상태의 발생 가능성을 미리 제거하는 것이 아닌, 교착 상태가 일어날 가능성이 있을 때 적적하게 필하는 방식이다.

프로세스가 정상적으로 자원을 할당 받고 종료되는 상태를 안전 상태라고 하고 교착 상태가 발생할 수 있는 상황을 불안전 상태라고 한다. 안전 상태는 안전 순서열이 있는 상태를 안전 상태라고 하고 안전 순서열이 없는 상태를 불안전 상태라고 한다.

교착 상태 검출 후 회복

교착 상태가 발생 했을 때 조치하는 방법이다.

  • 선점을 통한 회복
    교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식이다. 교착 상태가 해결될 때까지 다른 프로세스로 부터 자원을 빼앗고 한 프로세스에 할당하는 방식이다.
  • 프로세스 강제 종료를 통한 회복
    단순하면서도 확실한 방식. 교착 상태에 놓인 프로세스를 모두 종료하거나 한 프로세스씩 강제 종료 할 수 있다. 단점으로는 작업 내역을 잃게 될 가능성이 있고 교착 상태가 없어졌는지 확인 과정에서 오버헤드를 야기한다.

확인 문제

profile
If I can do it, you can do it.

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기