Computer Science/운영체제

운영체제 4강 :: 병행 프로세스, 세마포어

HJPlumtree 2023. 4. 18. 20:59

운영체제에서 기억하고 싶은 내용

 

 

병행성(Concurrency)
여러 개의 프로세스 혹은 쓰레드가 동시 수행되는 시스템 특성

 

 

병행 프로세스

동시에 수행되고 있는 프로세스

 

CPU가 1개라도 병행 프로세스 작동

  • 인터리빙 방식
  • 하나의 CPU가 프로세스를 번갈아 가면서 병행처럼 보이게 처리

 

여러개의 CPU

  • 병렬처리 방식
  • 각 CPU가 각 프로세스 처리

 

 

뭐야 병행 프로세스가 멀티 프로세서가 되겠네?

 

멀티 프로세서 메모리 구조

강결합 시스템

여러 CPU가 하나의 메모리 공유

같은 메모리를 사용해서 정보를 공유할 수 있겠다

 

약결합 시스템

CPU 마다 메모리가 별도로 존재

정보 주고 받으려면 통신을 통해서만 가능

 

 

독립 프로세스 vs 협력 프로세스

독립 프로세스

  • 다른 프로세스에 영향을 주지도 받지도 않는다
  • 데이터, 상태를 다른 프로세스와 공유하지 않는다

프로세스의 실행이 결정적

- 실행 결과는 입력에 의해서만 결정

- 재생 가능: 같은 입력에 대해 항상 동일한 실행 결과

 

협력 프로세스

  • 다른 프로세스와 영향을 주고 받는다
  • 데이터 상태를 다른 프로세스와 공유

프로세스의 실행이 비결정적

- 실행 순서에 따라 실행 결과가 달라진다

- 재생 불가능: 같은 입력에 대해 동일한 실행결과 보장 못함 

협력 프로세스일 때 병행성 문제가 발생

 

 

병행성 문제

협력 프로세스일 때 발생 가능한 문제

상호배제, 동기화, 통신

 

상호배제

2개 이상의 프로세스가 동시에 임계영역 수행하지 못하도록

 

임계영역
2개 이상의 프로세스가 동시에 사용하면 안되는 공유자원을,
액세스하는 프로그램 코드 영역

 

프로세스 동기화

2개 이상의 프로세스에 대한 처리순서 결정

 

프로세스 간 통신(IPC)

프로세스들이 데이터 공유하기 위해 필요

 

통신 방법은

  • 하나의 변수 사용
  • 메시지 주고 받음

 

 

세마포어(Semaphore)

상호배제와 동기화 문제를 해결하기 위한 도구

Dijkstra가 제안

 

정수형 공용변수

저장값: 사용 가능한 자원의 수 혹은 잠김이나 풀린 상태

  • 상황에 맞춰 0 이상인 정수 초기화
  • 연산 P와 연산 V, 기본연산을 의해서만 사용된다
  • 인터럽트되지 않고 종료까지 간다

 

연산 P

검사, 감소시키려는 시도

예시)

void P(semaphore s)
{
  if (s > 0)
    s--;
  else
    현재 프로세스 대기
}

 

연산 V

증가

예시)

void V(semaphore s)
{
  if (대기 중인 프로세스 없냐?)
    s++;
  else
    대기 중인 프로세스 1개 진행;
}

 

세마포어마다 대기 큐가 필요

 

 

세마포어가 상호배제를 어떻게 해결하지?

상호배제의 일반적인 요구사항

  • 한 프로세스가 임계영역 수행
    • 다른 프로세스는 임계영역에 진입하면 안 됨
  • 임계영역 수행하던 프로세스가 임계영역 벗어남
    • 누군가는 임계영역을 새로 수행할 수 있어야 한다
  • 임계영역 진입 못하고 대기하는 프로세스는
    • 적절한 시간 안에 임계영역 수행을 시작할 수 있어야 한다

 

진입 영역

입계 영역 수행을 해도 되는지 확인

 

해제 영역

다른 프로세스가 임계 영역 수행을 시작할 수 있도록

 

 

5강도 병행 프로세스
세마포어로 어떻게 복잡한 문제를 해결하나 알아볼 듯!