[운영체제] Message Passing 및 Thread

한상진·2021년 4월 11일
0

운영체제

목록 보기
1/4






📕Message Passing

IPC는 Message Passing에서 두 가지 작동을 제공한다.
🎈send
🎈receive

만약 프로세스 P와 Q가 통신을 하고 싶을 때, 'Communication Link(pipe)'가 먼저 성립되고 send/receive라는 호출함수로 통신이 오고간다.

Message Passing은 비록 Shared Memory보다 성능이 떨어지고, 한 번에 보낼 수 있는 메세지 사이즈도 제한이 있지만, 사용 방법이 쉽다는 장점이 있다.
추가적으로 직접/간접 통신, 동기화/비동기화 라는 개념이 있다.

직접 통신(Ordinary Pipes)

🎈두 프로세스 사이에서는 오직 한 쌍의 Communication Link가 생성되고, 오직 이 Link에서만 통신이 가능하며 주로 쌍방향 통신이다.
🎈프로세스 P와 Q는 각각 서로를 대상으로 send/receive 함수를 호출한다.

간접 통신(Named Pipes)

🎈두 프로세스는 mailbox 를 통해 통신한다.
🎈각 mailbox는 고유번호가 존재하며, 두 프로세스가 동시에 mailbox를 공유할 때만 통신할 수 있다.
🎈mailbox에는 서로 통신중인 P와 Q 프로세스 뿐만 아니라, 다른 프로세스들도 들어올 수 있다.
🎈특히 P와 Q는 한 가지 고유의 mailbox에서만 통신할 수 있는 것이 아닌, 또 다른 mailbox에서도 통신이 이루어질 수 있다.
🎈mailbox는 Communication Link와 다르게 한 방향으로만 통신이 가능하다.
🎈간접 통신에서는 프로세스들이 통신이 이루어지기 전 mailbox를 생성해야하며, 통신이 끝나면 mailbox는 파기한다.

동기화(blocking)

두 프로세스는 각각 send/receive함수를 처리하는 동안 다른 처리를 할 수 없다.

비동기화(Non-blocking)

두 프로세스는 각각 send/receive함수를 처리하는 동안 다른 처리가 가능하다.


📕Thread

Application에서 다중 작업은 분리된 쓰레드들로 구현될 수 있다.
예) 일정 업데이트, 날짜 가져오기, 네트워크 응답 등

🎈프로세스를 생성하는 것은 무거운 반면에, 쓰레드를 생성하는 것은 가볍기 때문에 여러 쓰레드를 생성하여 활용하는 것이 유용하다.
🎈프로세스보다 쓰레드를 사용하는 것이 효율적이고 코드가 간결해질 수 있다.
🎈커널은 일반적으로 다수의 쓰레드들로 이루어져있다(멀티쓰레드).

즉, 반응성, 경제성, 속도, 확장성의 측면에서 장점을 갖고 있다.

쓰레드들은 각자 자신들의 고유의 레지스터 정보와 스택 정보를 보유하고 있지만, 코드와 전역변수, 리소스의 사용 상태 등의 정보는 공유를 하여 프로세스보다 훨씬 가벼운 것이다.

다만, 멀티 코어에서 효율을 발휘하는 것이며 싱글 코어에서는 Context Switching을 하는 과정에서 시간이 소요되기 때문에 효율적이진 않다.

profile
공부방

0개의 댓글