[CS][OS] 프로세스끼리의 통신

  • 동기화: 프로세스들이 서로 동작을 맞추고 정보를 공유하는 것(프로세스끼리 통신하면서 작업 언제 끝나는지, 누가 먼저 작업할지 등등 알려줌)

    • 동기화 지원 = 대기가 있다 = 데이터 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있음 / 파이프, 소켓
    • 동기화 지원 X = 대기가 없다 = 데이터 받는 쪽은 바쁜 대기 사용해서 데이터 도착했는지 여부를 직접 확인 / 전역변수, 파일

      • 바쁜 대기: 상태 변화 확인 위해 주기적으로 반복문 무한 실행 → 해결 위해 동기화 사용

1. 프로세스끼리의 통신

  • 통신 방법: Send & Receive

분류 기준

  • 통신하는 관계

    • 프로세스 내부의 통신: 프로세스 내의 스레드끼리 by 전역변수(공동으로 관리하는 메모리 사용해서 데이터 주고받음), 파일(저장장치에 파일을 읽고 쓰는 방식으로 데이터 주고 받음)
    • 프로세스끼리의 통신 (IPC, Inter-Process Communication)

      • 같은 컴퓨터에서 통신 by 파일, 파이프(파이프에 write 하면 데이터 전송되고, read하면 그 데이터 받음)
      • 다른 컴퓨터끼리 통신 by 소켓(파이프처럼 write, read 연산)

        • 네트워킹: 소켓 이용하는 프로세스간 통신방법 ( ⇒ 네트워크 프로그래밍 = 소켓 프로그래밍)
        • 프로시저 호출: 한 컴퓨터 내에 있는 함수 호출

          • 원격 프로시저 호출(RPC, Remote Procedure Calls): 다른 컴퓨터의 함수 호출

            • 주로 소켓을 이용해서 RPC 구현
  • 통신 방향

    • 양방향: 복수의 프로세스가 동시에 양쪽 방향으로 send 가능 / 예: 소켓 통신
    • 반양방향: 양방향 전송은 가능하지만 동시에는 안 됨 / 예: 무전기
    • 단방향: 예: 전역변수(전역변수가 1개이면 한쪽방향으로만 가능), 파이프 통신

2. 공유 자원과 임계 구역

  • 공유 자원 shared resource: 여러 프로세스가 공동으로 이용하는 변수, 메모리 파일 등
  • 경쟁 조건 race condition 발생: 2개 이상의 프로세스가 공유자원을 함께 읽거나 쓰려함
  • 임계구역 critical section: 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역

    • 임계 구역에 복수의 프로세스가 동시에 접근시도시, 생산자 소비자 문제(한정 버퍼 문제 bounded-buffer problem) 발생

3. 임계구역 해결 방법

  • 임계구역의 해결을 위해서는 다음 3가지를 모두 만족해야함

    • 상호 배제 mutual exclusion: 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 못 들어감
    • 한정 대기 bounded waiting: 무한 대기는 안됨. 즉 어떤 프로세스든지 임계구역 안으로 들어갈 수 있어야 한다.

      • 교착상태 deadlock(프로세스가 살아있으나 작업이 진행 안되는 상태)에 빠지지 않게 한다.
    • 진행의 융통성 progress flexibility: 겹치는 자원을 사용하는 것이 아니라면, 한 프로세스는 다른 프로세스의 진행을 방해하면 안된다.
  • 해결 방법(잠금, 잠금 해제, 동기화)

    • 뮤텍스 mutex (mutual exclusion): 공유 자원 사용 전에 설정하고, 사용한 후에 해제하는 잠금

      • 한 프로세스에 의해서만 소유 가능한 키 객체를 가지고 lock을 사용
    • 세마포어: 공유 가능한 자원 수를사용 전에 Semaphore(n)으로 나타냄(스위치처럼)
    • 모니터: 세마포어를 자동으로 처리하도록 만듦. 공유 자원은 숨기고, 공유 자원에 접근 위한 인터페이스만 제공 → 자원 보호하면서 프로세스간에 동기화

      • 임계구역으로 지정된 변수나 자원에 접근하려는 프로세스는 모니터에 작업 요청 → 모니터는 그 작업을 모니터 큐에 저장 및 순서대로 처리 → 그 결과만 그 프로세스에게 알려줌

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

1. 파일

  • 순차적 접근 sequential access: 순차파일(sequential file: 파일 내의 데이터가 한 줄로 저장)에 접근하는 방식
  • 파일 기술자 (FD)

    • 파일마다 1개씩 있음
    • open()으로 열려고 하는 함수가 있는지, 접근권한 있는지, 현재 파일의 어느 위치 읽고 있는지 등의 정보 제공

2. 파이프

  • named pipe: 일반적인 파이프. 부모 자식 혹은 같은 부모 가진 자식 프로세스끼리 서로 관련있는 프로세스 간 통신에 사용
  • unnamed pipe: 서로 관련 없는 프로세스 간 통신에 사용, FIFO 사용

3. 네트워킹


출처

  • 조성호, 쉽게 배우는 운영체제(한빛아카데미, 2022)

Written by
Sunmin
어제보다 나은 오늘을 만들기 위해 배우고, 기록하고, 회고합니다. Maker. Reader. Realistic optimist.