IT_etc/유용한 전산 지식들..

마샬링(mashaling)의 이해

JJun ™ 2007. 7. 1. 00:47

마샬링은 인 프로세스에서는 필요하지 않은 개념이지만

아웃 오브 프로세스에서는 무척이나 중요한 개념이다.

 

컴 클라이언트와 컴 서버가 하나의 프로세스 내에서 동작하는 인 프로세스와는 달리

서로 다른 프로세스로 동작하는 아웃 오브 프로세스는 기본적으로

메모리의 공유가 불가능하다.

 

윈도우의 각 프로세스는 실제 메모리를 쓰지 않고

각 프로세스마다 4G에 달하는 가상 메모리 공간을 사용하기 때문이다.

즉, 프로세스 동작 중의 메모리 주소는

실제 물리적 메모리의 주소와는 전혀 관계가 없다는 얘기다.

 

COM은 이 문제를 해결하기 위해

LPC(Local Procedure Call) 와 RPC(Remoto Procedure Call) 을 사용한다.

 

LPC는 하나의 시스템.

즉, 로컬 컴퓨터 내부에서 컴 클라이언트와 컴 서버가 동작할 경우에 쓰이고

RPC는 서로 다른 두개의 시스템.

즉, 서로 다른 두대 또는 그 이상의 컴퓨터에서

컴 클라이언트와 컴 서버가 동작할 경우에 쓰인다.

 

컴 클라이언트 <-> 컴 서버 프록시 <- 프로세스 경계 영역 -> 스텁 <-> 컴 서버

 

LPC와 RPC 는 둘 다 위의 과정을 거친다.

차이라면 단지 프로세스 경계 영역의 실제 거리의 차이 뿐이다.

 

초록색으로 표시된 부분이 클라이언트 프로세스 영역이고

보라색으로 표시된 부분이 서버 프로세스 영역이다.

 

컴 클라이언트 영역에서는 컴 서버 프록시 코드를 로드하고

컴 서버 영역에서는 스텁 코드가 로드 된다.

 

그리고 컴 서버 프록시와 스텁 사이에는 IPC 채널을 통해

데이타를 NDR(Network Data Representation) 이라고 하는 형식으로

변환해서 주고 받는 과정이 일어난다.

바로 이 과정 그러니까 컴 서버 프록시와 스텁 사이의 데이타 교환을 위해

데이타를 NDR 형식으로 변환하는 과정을 마샬링.

이 NDR형식을 다시 적절한 형식으로 변환하는 과정을 언마샬링이라 한다.