Inter-process Sync

happiyoung_·2026년 1월 30일

운영체제

목록 보기
5/11

1. 임계 영역

하나의 프로세스가 수정가능한 공유자원을 액세스하고 있을때, 그 프로세스에 의해 참조되는 프로그램의 부분을 의미

  • 하나의 프로세스가 공유데이터를 접근하면 다른 프로세스는 그 공유데이터를 접근해서는 안됨 → 여러 프로세스들 중에 하나의 프로세스만이 임계영역을 사용할 수 있도록 하여 임계영역에서 공유변수 값의 무결성 보장
  • 인터럽트, 교착상태, 무한반복이 발생하지 않도록 해야한다. → 인터럽트 수행을 완료하거나 교착상태가 해제될 때까지 임계영역을 벗어날 수 없기 때문

코드영역

  • 프로세스가 임계영역에 진입하려면 진입허가 요청 필요 → 진입영역
  • 임계영역을 이용한 이후 임계영역을 빠져나왔음을 알리는 진출영역
  • 그 밖의 나머지 코드 부분 → 잔류 영역

요구조건

1) 상호 배제 ( mutual exclusion)

한 프로세스가 공유자원을 사용하고 있을때, 다른 프로세스들이 사용하지 못하도록 배제

  • 하나의 공유자원을 상호 배타적으로 이용 동시에 불가

2) 한정대기 (bounded waiting)

어떤 프로세스든 대기를 한 이후에는 반드시 임계영역으로 진입할 수 있도록 함

  • 세마포어 내에서 무한히 기다리는 바쁜 대기 (계속해서 확인하는 대기)

3) 진행 조건

  • 하나만 선택되어 임계영역으로 진입가능

동기화 기법

1) 상호배제

여러개의 병렬프로세스가 공유자원에 접근시 접근중인 임의의 시점에서 하나의 프로세스만이 그 접근을 허용하도록 제어

2) 세마포어

세마포어 s는 정수값을 가진 변수로서 초기화를 제외하고는 단지, 두개의 연산 P (wait), V(signal) 만으로 접근가능한 특수한 변수

  • 세마포어에 대한 연산은 처리 도중에 인터럽트 되어서는 안된다.
  • 여러 프로세스가 동시에 세마포어 값을 수정 불가능
  • 프로세스 사이의 동기를 유지하고 상호배제의 원리를 보장
  • 동일한 공유자원이 여러개 있는 경우 signal(s) 연산을 먼저 수행했을때 교착상태 발생 가능
wait(s) : if (s >0) s = s+1 # wait 연산은 진입영역
					else 현재의 프로세스를 블록하고 대기 큐에 추가 # 잔류영역
signal(s) : if (1개 이상의 프로세스가 s에서 대기중) 그중 한개 프로세스만 진행
						else s = s+1 # signal(s) 연산은 진출영역

3) 모니터 (monitor)

순차적으로만 사용할 수 있는 공유자원을 할당하는 데 사용되는 데이터와 이들 데이터를 처리하는 연산의 집합으로 이루어진 병행성 고급 구조체

  • 반드시 해당 모니터 진입부를 호출, 여러개의 프로세스들이 동시에 모니터에 들어가려 할 경우 모니터 자체는 상호배제 실시
  • 모니터 내부의 변수는 허가된 모니터 내부 프로세스만이 접근 가능 외부 프로세스는 모니터 내부를 직접 액세스 불가
  • 정보은폐기법 이용

0개의 댓글