프로세스 동기화

searchortype·2022년 3월 25일
0
post-thumbnail

프로세스 간 통신

  1. 프로세스 간 통신 개념
    • 프로세스간의 통신에는 같은 컴퓨터 내에 있는 프로세스뿐만 아니라 네트워크로 연결된 다른 컴퓨터에 있는 프로세스와의 통신도 포함된다.
    • 프로세스 내부 데이터 통신
      • 하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우의 통신
    • 프로세스 간 데이터 통신
      • 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우
    • 네트워크를 이용한 데이터 통신
      • 여러 컴퓨터가 네트워크로 연결되어 있을 때도 통신이 가능한데 이 경우 프로세스는 소켓을 이용해 데이터를 주고 받는다.
  2. 프로세스 간 통신의 분류
    1. 통신 방향에 따른 분류
      1. 양방향 통신
        • 일반적인 통신 구조로서, 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조
      2. 반양방향 통신
        • 데이터를 양쪽 방향으로 전송할 수 있지만 동시 접속은 안되고 특정시점에 한쪽 방향으로만 전송 가능
      3. 단방향 통신
        • 한쪽 방향으로만 데이터를 전송 할 수 있다. 프로세스 간 통신에서는 전역 변수와 파이프가 단방향 통신에 해당된다.
    2. 통신 구현에 따른 분류
      • 전역변수를 사용하는 통신 방식(단방향)의 가장 큰 문제는 언제 데이터를 보낼지 데이터를 받는 쪽에선믄 모른다. 때문에 데이터를 받는 쪽에서는 반복적으로 전역 변수의 값을 점검하는 수밖에 없다.
      • 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 바쁜 대기(busy waiting)라고 한다. (비효율적)
      • 바쁜 대기의 비효율을 해결하기 위해 동기화를 사용해 데이터가 도착했음을 알려준다.
    3. 동기화 기능의 유무에 따라 blocking(대기가 있는 통신)과 non-blocking(대기가 없는 통신)으로 나눈다.
      • blocking (대기가 있는 통신)
        • 동기화를 지원하는 방식이다. 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있다.
      • non-blocking(대기가 없는 통신)
        • 동기화를 지원하지 않는다. 데이터를 받는 쪽은 바쁜 대기를 사용해 데이터가 도착했는지 여부를 직접 확인한다.
        • 보내는 쪽과 받는 쪽 모두 동기화되지 않는다.
        • 통신 오버헤드는 적지만 사용자가 직접처리해야하는 작업이 많다.
  3. 프로세스 간 통신의 종류

프로세스 간 통신은 데이터를 주거나 받는 동작으로 이루어지며 이는 쓰기 연산과 읽기 연산으로 간소화할 수 있다.

  1. 전역 변수를 이용한 통신
    • 전역변수를 이용한 통신은 공동으로 관리하는 메모리를 사용하여 데이터를 주고받는 것이다. 데이터를 보낸느 꼭에서는 전역 변수나 파일에 값을 쓰고 데이터를 받는 쪽에서는 전역 변수의 값을 읽는다.
    • 동기화 문제가 발생할 수 있다. 때문에 전역 변수 값이 변할 때까지 바쁜 대기를 돌면서 주시해야한다.
  2. 파일을 이용한 통신
    • 파일 열기
      • open 함수를 이용해서 사용하고자 하는 파일이 있는지, 권한이 있는지 확인한다.
      • 파일 정상 이용이 가능하면 file descriptor를 반환한다.
    • 쓰기 또는 읽기 연산
      • write(fd, “file name”, filesize)
      • read(fd, buf, filesize)
    • 파일 닫기
      • close(fd)
    • 파일을 이용한 통신은 부모-자식 관계 프로세스 간 통신에 많이 사용되며 운영체제가 프로세스 동기화를 제공하지 않는다.
  3. 파이프를 이용한 통신
    • 프로세스 동기화 문제를 해결하는 방법 중 하나이다.
    • 운영체제가 제공하는 동기화 통신 방식
    • 단방향 통신이다. 양방향 통신을 하려면 파이프 2개를 사용해야 한다.
    • 이름 없는 파이프
      • 일반적으로 파이프라고하면 이름없는 파이프를 지칭한다.
    • 이름 있는 파이프
      • FIFO라 불리는 특수 파일을 이용해서 서로 관련 없는 프로세스 간 통신에 사용된다.
  4. 소켓을 이용한 통신
    • 네트워킹
    • 네트워킹 상황에서 통신은 원격 프로시저 호출이나 소켓을 이용한다.
    • 원격 프로시저 호출
      • 다른 컴퓨터에 있는 함수를 호출한다.
      • 원격 프로시저 호출은 소켓을 이용하여 구현한다.
      • 원격지의 시스탬 내 어떤 프로세스와 통신할지 결정해야 한다.
      • 소켓에 쓰기 연산을 하면 데이터가 전송되고 읽기 연산을 하면 데이터를 받게 된다.
    • 동기화를 지원한다.
    • 소켓은 하나만 사용해도 양방향 통신이 가능하다.

공유 자원과 임계구역

프로세스는 공유된 자원을 가지고 공동 작업을 할 수도 있다.

  1. 공유 자원의 접근
    • 공유 자원은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다.
    • 공유 자원은 공동으로 이용되기 때문에 누가 언제 데이터를 읽고 쓰냐에 따라 그 결과가 달라질 수 있다.
    • 프로세스들의 공유 자원 접근 순서를 정해서 예상치 못한 문제가 발생하지 않도록 해야 한다.
    • 경쟁 조건(race condition)이 발생할 수 있다.
      • 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 말한다.
  2. 임계 구역 (critical 앞으로의 상황에 영향을 미치는 section)
    • 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 임계구역이라고 한다.
    • 임계구역에서는 프로세스들이 동시에 작업하면 안된다. 어떤 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역 밖에서 기다려야 하며 임계구역의 프로세스가 나와야 들어갈 수 있다.
  3. 생산자-소비자 문제
    • 생산자 프로세스와 소비자 프로세스가 서로 독립적으로 작업을 한다. 생산자는 계속 물건을 생상해 버퍼에 넣고 소비자는 계속 버퍼에서 물건을 가져온다.
    • 버퍼는 작업을 계속하기 위해서 원형 버퍼를 사용한다.
    • 버퍼가 비었는지 가득 찼는지 확인하기 위해 sum이라는 전역 변수
    • 문제점
      • 생산자와 소비자가 전역 변수에 접근하는 타이밍을 못 맞추고 동시에 실행되면 문제가 발생
    • 해결
      • 한 번에 한 프로세스만 사용해야 한다.
  4. 임계구역 해결 조건
  • 상호 배제
    • 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없다.
  • 한정 대기
    • 어떤 프로세스도 무한대기하지 않아야 한다. 즈, 특정 프로세스가 임계구역에 진입하지 못하면 안된다.
  • 진행의 융통성
    • 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다는 것을 의미한다.

임계구역 해결 방법

임계구역 문제를 해결하는 단순한 방법은 잠금을 이용하는 것이다.

임계구역 해결 조건을 고려한 코드 설계

  1. 상호 배제 문제
    • 작동과정
      • P1, P2는 임계구역에 진입하기 전에 코드로 잠금여부를 확인
      • 잠겨있으면 다른 프로세스가 임계구역에서 작업하고 있다는 뜻 (잠금이 해제될 때까지 무한루프로 기다린다.)
      • 임계구역에서 프로세스가 돌아와 잠금을 해제하면 무한루프를 마치고 작업을 한다.(작업시에는 임계구역에 다른 프로세스가 못들어오게 한다.)
  2. 한정 대기 문제
    • 잠금을 2개 사용한다. 일단 잠금을 하고 다른 프로세스가 잠겼는지 확인해 두 프로세스의 상호 배제가 보장된다.
    • 단점
      • 데드락 문제, 확장성 문제
  3. 진행의 융통성 문제
    • 공유변수 lock의 값을 이용해 다른 프로세스가 임계구역에 있는지 확인하고 없으면 진입한다. 임계구역을 빠져나올 때 lock을 2로 바꾼다.
    • 상호 배제와 한정 대기를 보장한다.
    • 단점
      • 프로세사가 번갈아가면서 실행된다는 것이 문제다.
      • 경직된 동기화 문제
  4. 하드웨어적인 해결방법
    • test and set 코드를 이용하면 명령어 실행 중간에 타임아웃이 걸려 임계구역을 보호하지 못하는 문제가 발생하지 않는다.
    • 단점
      • 임계구역을 하드웨어적으로 해결하는 방법은 편리하지만 바쁜대기를 사용하여 검사하기 때문에 자원 낭비가 있다.
  5. 피터슨 알고리즘
    • turn이라는 공유변수를 사용한다.
    • 작동
      • P1은 임계구역에 진입하기 전에 먼저 잠금을 하고 turn을 2로 설정
      • P1, P2 동시에 lock을 설정했어도 turn을 이용하여 양보한다.
      • 만약 P2가 잠금을 설정하지 않았거나 잠금을 설정했더라도 turn = 1로 바꾸면
        P1은 임계구역에 진입하여 작업을 마친 후 잠금을 해제하고 임계구역을 빠져나온다.
    • 단점
      • 임계구역 해결의 3가지 조건을 모두 만족하지만 2개의 프로세스만 사용가능하다는 한계가 있다.
  6. 데커 알고리즘
    • 임계구역 해결의 세가지 조건을 모두 만족하는 알고리즘
    • 하드웨어 도움 없이 해결할 수 있다.
    • 작동
      • 프로세스 P1는 먼저 잠금을 건다.
      • 프로세스 P2의 잠금이 걸렸는지 확인한다.
      • 만약 P2도 잠겨있으면 누가 먼저인지 확인한다.
      • 만약 P1차례면 임계구역으로 진입하고, P2차례면 P1은 잠금을 풀고 프로세스 P2가 작업을 마칠 때까지 기다리다가 P2작업이 끝나면 임계구역으로 들어간다.
  7. 세마포어
    • 내부 코드
      1. semaphore(n)
        • 전역 변수 RS를 n으로 초기화한다. RS에는 현재 사용 가능한 자원 수가 저장된다.
      2. P()
        • 잠금을 수행하는 코드로
        • RS가 양수면 (사용 가능한 자원이 있음) 1만큼 감소 시키고 임계구역에 진입
        • RS가 음수면 (사용 가능한 자원 없음) 0보다 커질 때까지 기다린다.
      3. V()
        • 잠금 해제와 동기화를 같이 수행하는 코드
        • RS 값을 1증가 시키고 세마포어에서 기다리는 프로세스에게 진입해도 좋다는 wake_up신호를 보낸다.
    • 장점
      • 임계구역이 잠겼는지 직접 점검하거나 바쁜 대기를 하거나 동기화 메시지를 보낼 필요가 없다.
    • 단점
      • 잘못된 사용으로 인해 임계구역이 보호받지 못한다.
  8. 모니터
    • 공유작원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만을 제공함으로써 자원을 보호하고 프로세스 간에 동기화를 시킨다.
    • 보호할 자원을 임계구역으로 숨기고 임계구역에서 작업할 수 있는 인는 인터페이스만 제공하여 자원을 보호한다.
    • 작동 원리
      • 임계구역으로 지정된 변수나 자원에 접근하고자 하는 프로세스는 직접 p()나 v()를 사용하지 않고 모니터에게 작업을 요청한다.
      • 모니터는 요청받은 작업을 모니터 큐에 저장한 후 순서대로 처리하고 그 결과만 해당 프로세스에 알려준다.
    • 모니터는 임계구역 보호와 동기화를 위해 내부적으로 상태 변수를 사용한다.
      • wait() 모니터 큐에서 자신의 차례가 올 때까지 기다린다. 세마포어의 P()에 해당
      • signal() 모니터 큐에서 기다리는 다음 프로세스에 순서를 넘겨누다. 세마포어의 V()에 해당된다.

파일, 파이프, 소켓 프로그래밍

  1. 파일

    1. 순차파일
    • 파일 내의 데이터는 한 줄로 길게 저장되는데 이것을 순차 파일이라고 한다.
    • 예제
      • 카세트 테이프 (순차적 접근)

    b. 파일 기술자

    • open(), read()/write() close() 구조이다.
    • 파일 기술자는 파일 접근 권한, 파일이 현재 어느 위치를 읽고 있는지에 대한 정보도 보관한다.

    c. 파일을 이용한 통신

  2. 파이프

  • 동기화를 지원하는 단방향 통신 시스템
  • 서로 관련있는 프로세스 간 통신에 사용된다.
  • 파이프에서는 read 와 write의 기술자가 따로 존재해 동기화가 가능하다. (파일은 파일 기술자를 공유해서 동기화 불가)
  • 파이프는 대기가 있는 통신이기 때문에 wait()이 없다.
  1. 네트워킹
  • 소켓을 이용한 네트워킹이 제일 유명하다.
  • open, read, write close 구조다.
  • 양방향 통신을 지원하고 동기화도 지원한다.

0개의 댓글