운영체제 (12) - 메모리 공유, IPC, Signal, Pipe

@JHSHIN·2023년 4월 13일
0
post-thumbnail

운영체제 수업을 수강하며 정리한 내용을 작성하려고 합니다.

Shared memory (메모리 공유)

  • 프로세스의 특정 메모리 영역을 공유
  • 공유한 메모리 영역에 읽기/쓰기를 통해서 프로세스간 통신을 수행
    • 프로세스 간 통신은 유저 프로세스 간 수행
    • OS는 통신 과정 자체에는 관여하지 않음
    • OS는 공유 메모리를 생성하고 각 프로세스의 주소 공간에 공유 메모리 영역을 매핑하는 역할을 함
  • 이슈: 두 프로세스가 공유된 영역을 동시에 접근하고 수정한다면?
    • 공유된 영역: inconsistency 발생 가능
    • inconsistency를 막기 위한 방법: 동기화(synchronization)

Message passing (메시지 전달)

  • 프로세스간 메모리 공유 없이 동작 가능
  • 주고받고자 하는 메시지를 별도의 공유된 변수 없이 “보내고”, “받는” 동작을 통해 통신 수행(함수 호출, 시스템 콜)
    • Send(message)
    • receive(message)
    • 메시지의 길이는 1.고정 또는 2.가변 둘 다 가능
  • 커널을 통해 메시지가 프로세스 간 복사
    • 메시지 교환을 구현하는 다양한 메커니즘들 존재

IPC의 기본적인 동작방식 정리

  • 메모리 공유 방식
    • Read and Write
    • 프로세스의 주소 공간의 일부를 공유 메모리 영역으로 설정하여 프로세스에서 바로 접근
  • 메시지 전달 방식
    • Send and receive
    • 커널을 경유하여 메시지 전송 → Mode switch가 반드시 발생
    • ~~문맥전환이 발생할 수 있음 - 오버헤드~~

IPC에서 동기화의 필요성

  • 메모리 공유 방식 - 사용자가 제공
    • 메모리 영역에 대한 동시적인 접근을 제어하기 위한 방법이 필요
    • 동시적인 접근에 대한 제어를 “동기화”라고 함
      • 동기화 방식은 lock이나 세마포어 등 존재
  • 메시지 전달 방식 - 커널이 동기화 제공
    • send와 receive와 같은 연산에 대해서는 커널이 동기화
    • send와 receive를 수행할 때에는 프로그램에서 동기화에 대한 고려 없이 사용 가능

Signal

  • 특정 프로세스에게 이벤트를 전달하는 기법
    • 이벤트의 종류는 시그널
  • 송신 프로세스 : 여러 신호 중 하나를 특정 프로세스에 보냄
    • 이 동작은 수신할 프로세스의 상태에 무관, 비동기적
    • 운영체제 또한 송신 프로세스가 될 수 있음 (e.g., SIGINT signal)
  • 수신 프로세스 : signal 수신 시 동작을 구현할 수 있음
    • Ignore : 무시 (이 경우에도 SIGSTOP, SIGKILL 등은 무시되지 않음)
    • Block : 신호를 붙잡아 둠 (나중에 처리)
    • Handle : 시그널을 유저 프로그램이 바로 처리 (signal handler를 구현)
    • 커널이 수신 프로세스가 시그널을 처리하도록 함
      • 모든 프로세스는 signal 처리를 위한 default 코드(handler)를 지니게 됨
  • 시그널의 비동기적인 동작
    • Process A가 Process B에게 시그널을 보냄
    • 시그널 처리는 Process B가 스케줄링 되어야 가능

Pipe

  • 하나의 프로세스가 다른 프로세스로 데이터를 직접 전달하는 (것처럼 보이는) 기법
  • 데이터는 한 쪽 방향으로만 이동, 단방향 (half duplex)
    • 양방향 통신을 위해서는 두 개의 파이프 필요(full duplex)
    • 1대1 의사소통만 가능
  • 보내진 순서대로만 받음 (ordering)
  • Pipe에 쓰여지는 데이터는 커널(buffer)에 저장되고 관리됨
    • 동기화 보장
    • 한 시점에 하나의 프로세스만 접근 가능

Message Queue

  • 고정된 크기를 갖는 메시지 큐를 이용하는 기법
    • 일종의 메일함과 유사함
  • 프로세스메시지 큐(메일함)을 생성할 수 있음
  • 메시지 단위의 통신
    • 메시지의 형태는 통신하고자 하는 프로세스간의 약속 필요
    • 메시지의 형태는 사용자가 정의하여 사용
  • send, recieve되는 메시지는 커널의 메시지 큐에 저장, 관리됨
    • “원자적” 연산이 보장(동기화 보장)

Socket

  • 소켓 : endpoint for communication
    • 통신에 참여하는 송수신자를 식별할 수 있게 함
    • 식별을 위한 주소값을 가짐
  • 소켓의 주소값: concatenation of IP address(interface) and port(프로세스 구분)
    • e.g., socket 161.25.19.8:1625: Port #1625 on the host 161.25.19.8
  • 프로세스의 위치에 independent
    • 동일한 운영체제 내 IPC 뿐만 아니라, 다른 OS 내의 프로세스와 통신 가능
    • Local 또는 remote
      • Local : loopback address(한 컴퓨터 내 소켓통신)
      • Remote의 경우 IP주소 + 포트번호 조합으로 식별
  • 연결 방식(connection semantics)을 정할 수 있음
    • Reliable, 패킷의 전달을 보장(TCP) / Unreliable(UDP)

소켓의 특성: communication endpoint

  • Machine boundary를 넘어 통신을 위한 endpoint를 나타냄
    • 프로세스는 여러 개의 socket을 사용 가능
    • 특정 인터페이스(IP주소) 및 포트 번호를 지님
  • Port : 통신을 위한 식별 번호

Port examples

  • Well-known, Registered, Dynamic port
    • Well-known ports: 0 ~ 1023
    • Registered ports: 1024 ~ 49151
    • Dynamic ports: 49152 ~ 65535

RPC (remote procedure call)

  • Socket은 데이터를 읽고 쓰는 동작을 수행함 (procedure call)
  • RPC: 반대편 컴퓨터의 프로세스에 procedure call을 유도
    • 1984, birrell & nelson, Mechanism to call procedures on other machines
    • 클라이언트 입장에서는 서버의 함수를 직접 호출하는 것처럼 동작, 리턴값까지 받아옴
  • stub: 상이한 프로세스 간 호환을 위해 메모리 주소, 파라미터 등 변환
profile
We Need Better UX

0개의 댓글