운영체제-Operating System Concepts-5-Interprocess Communication

taehee kim·2021년 6월 2일
0

1.Independent vs Cooperating processes

  • 프로세스간에 공유하는 데이터가 있는지 여부

2.IPC(cooperating)

:cooperating processes 는 정보를 교환할 기술이 필요할텐데 그 기술이 IPC(interprocess communication)이다. ipc를 통해 데이터를 주고 받을 수 있다.

  • shared memory
  • message passing
    두 가지 방법으로 통신을 할 수 있다.

3.Shared memory

Producer-Consumer Problem

:producer는 data 를 만들고 consumer는 그 data를 소비한다.
ex) a compiler produces assembly code, and assembler consumes it.

이때, Producer와 Consumer가 concurrent하게 실행된다면 문제는 Producer는 메모리가 다 차있을 경우 무작정 데이터를 저장하면 안되고 기다리고있어야한다. 또한 Consumer 또한 데이터가 없을 경우 기다리고있어야 한다.
shared-memory는 Producer-Consumer Problem 에서의 메모리 공간과 같은 문제를 갖게 된다. 즉, concurrency를 만족하고 producer, consumer의 동작이 무분별하게 일어나지 않도록 제한해주어야 한다.
circular Q를 이용하여 shared memory를 유사하게 구현할 수 있을 것이다.

이 방식의 한계는 응용프로그램을 짜는 사람이 shared memory의 사용을 원할 경우 직접적으로 접근하여 manipulating해야한다는 점이다. 따라서 사용자 관점에서 사용이 까다롭다.

Message-passing에서는 os api를 제공하여 shared memory 의 producer consumer problem의 문제를 해결해준다.(shared memory에서는 응용프로그램 개발자가 직접 해결해야한다.)

4.Message-Passing

:Message-passing방식에서는 communication link를 형성한후 단순히 send, receive 시스템 콜을 사용하면 데이터를 버퍼에 저장하고, 받을 수 있다.

  • direct, indirect
  • synchronous, asynchronous
    (blocking i/o, non-blocking i/o)

  1. direct방식에서는 프로세스 p1에서 p2로 직접 메시지를 전송한다. 따라서 두 p1, p2간에 유일한 link가 형성되어 메시지를 전송한다.
    send(q, message)-q에게 메시지를 보낸다.
    receive(p, message)-p에게서온 메시지를 받는다.
  2. indirect방식에서는 프로세스가 send, receive할때 mailbox(port)에 한다.
    send(A, message)-포트 A에 메시지를 보낸다.
    send(A, message)-포트 A에 있는 메시지를 읽고 지운다.
    이 경우에는 여러 프로세스가 포트에 접근 할 수 있으므로 관여된 프로세스가 여럿 있을 수 있다.

Indirect 방식을 위해 필요한 os 기능

  • create a new mailbox
  • send, receive to from mailbox
  • delete mailbox

  1. synchronous방식에서는 send, receive가 실행된후 끝나기 전까지 block되어 대기하면서 프로세스가 진행되지 않는다.-blocking send
    즉, synchronous라는 말은 지금의 동작을 완벽하게 끝내야만 다음 동작을 실행하는 것이다.

  2. asynchronous방식에서는 send, receive가 완전히 끝나지않아도 다음 동작을 실행하는 것이다. 이 방식의 장점은 non-bloking i/o이므로 send하지 않는 시간에 다른 일을 처리할 수 있다.
    하지만, send, receive가 완전히 끝났음을 확신할 수가 없기 때문에 send, receive의 완전한 종료가 다음 프로세스에 영향을 줄때는 사용하면 안된다.
    예를 들어, 동영상을 2g만큼 전송하는데 asynchronous에서는 동영상이 일단 다 보내졌다고 가정하고 다음작업을 하므로 동영상 데이터 전송료를 2g만큼 책정하여 부과한다. 하지만 동영상을 받는 입장에서 다 받았는지 아닌지와 상관없이 send가 완료되었다고 판단하므로 이런 경우에는 synchronous방식이 적합하다고 할 수 있다.

5.shared memory : portable operating system interface(for unix)

unix os의 표준화를 시도함.
shm_open, ftruncate, mmap함수이용

6. message passing : pipe

ordinary pipes-하나의 컴퓨터 안에서 메시지를 주고 받을때.
:int fd[2]인 배열을 pipe(fd);
로 실행하면, fd[0], fd[1]에 각각 read_end, write_end file descriptor가 생성되고 데이터를 제공하는 쪽은 fd[1]에 write하고 읽는 쪽은 read하면 된다.


fork()하여 생성된 자식 프로세스가 데이터를 부모 프로세스로 부터 제공받는다.

네트워크 상에서는 어떻게 데이터를 주고 받을까? shared memory, pipe로는 불가능하다.

Sockets
: are defiend as endpoints for communication
ip + port(프로세스에 대응되는 mailbox와 유사한 개념, pipe end point에서 발전된 개념.)

identified by an ip address concatenated with a port number.

  • socket class: connection-oriented (tcp)
  • DatagramSocket class : connectionless(udp)
  • multicastsocket class : multiple recipents
profile
Fail Fast

0개의 댓글