마샬링은 인 프로세스에서는 필요하지 않은 개념이지만
아웃 오브 프로세스에서는 무척이나 중요한 개념이다.
컴 클라이언트와 컴 서버가 하나의 프로세스 내에서 동작하는 인 프로세스와는 달리
서로 다른 프로세스로 동작하는 아웃 오브 프로세스는 기본적으로
메모리의 공유가 불가능하다.
윈도우의 각 프로세스는 실제 메모리를 쓰지 않고
각 프로세스마다 4G에 달하는 가상 메모리 공간을 사용하기 때문이다.
즉, 프로세스 동작 중의 메모리 주소는
실제 물리적 메모리의 주소와는 전혀 관계가 없다는 얘기다.
COM은 이 문제를 해결하기 위해
LPC(Local Procedure Call) 와 RPC(Remoto Procedure Call) 을 사용한다.
LPC는 하나의 시스템.
즉, 로컬 컴퓨터 내부에서 컴 클라이언트와 컴 서버가 동작할 경우에 쓰이고
RPC는 서로 다른 두개의 시스템.
즉, 서로 다른 두대 또는 그 이상의 컴퓨터에서
컴 클라이언트와 컴 서버가 동작할 경우에 쓰인다.
컴 클라이언트 <-> 컴 서버 프록시 <- 프로세스 경계 영역 -> 스텁 <-> 컴 서버
LPC와 RPC 는 둘 다 위의 과정을 거친다.
차이라면 단지 프로세스 경계 영역의 실제 거리의 차이 뿐이다.
초록색으로 표시된 부분이 클라이언트 프로세스 영역이고
보라색으로 표시된 부분이 서버 프로세스 영역이다.
컴 클라이언트 영역에서는 컴 서버 프록시 코드를 로드하고
컴 서버 영역에서는 스텁 코드가 로드 된다.
그리고 컴 서버 프록시와 스텁 사이에는 IPC 채널을 통해
데이타를 NDR(Network Data Representation) 이라고 하는 형식으로
변환해서 주고 받는 과정이 일어난다.
바로 이 과정 그러니까 컴 서버 프록시와 스텁 사이의 데이타 교환을 위해
데이타를 NDR 형식으로 변환하는 과정을 마샬링.
이 NDR형식을 다시 적절한 형식으로 변환하는 과정을 언마샬링이라 한다.
'IT_etc > 유용한 전산 지식들..' 카테고리의 다른 글
프로그래머에 유용한 사이트 (0) | 2007.08.23 |
---|---|
플래시 액션스크립트 내용 (0) | 2007.08.22 |
[펌] ping 명령이란!! (0) | 2007.06.22 |
[펌] 버추얼 메모리(Virtual Memory:가상 메모리) (0) | 2007.05.31 |
[펌] Open API (0) | 2007.05.31 |