※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


Remote Procedure Call(RPC)를 공부해보자.

위키피디아에서 RPC를 이렇게 설명하고 있다.



In computer science, a remote procedure call (RPC) is an inter-process communication that allows a computer program to cause a subroutine or procedure to execute in another address space (commonly on another computer on a shared network) without the programmer explicitly coding the details for this remote interaction. That is, the programmer writes essentially the same code whether the subroutine is local to the executing program, or remote. When the software in question uses object-oriented principles, RPC is called remote invocation or remote method invocation.


즉, RPC는 하나의 프로그램이 네트워크에 연결되어있는 다른 컴퓨터에서 서브루틴이나 프로시저를 실행할수 있도록 한 IPC(프로세스간의 통신)이라고 되어있다. 쉽게 말하면, 내 프로그램이 다른 다른 컴퓨터에서 실행되고 있는 프로그램 내의 함수를 실행할 수 있도록 하는 것이다. 일종의 서버 클라이언트 개념으로 생각해도 되겠다.


RPC에서 stub이라는 개념은 굉장히 중요하다. stub은 클라이언트와 서버 양쪽에 존재하여 중요한 역할을 수행한다. stub의 역할은 다음과 같다.


1. 파라미터를 전달해준다.

생각해보자. 함수들은 파라미터가 필요하다. (물론 아닌 것도 있다.) 파라미터가 필요한데 요청은 클라이언트 컴퓨터에 하고, 함수 자체는 서버 컴퓨터에서 수행된다. 그러면, 어떤 방법을 써서 클라이언트 컴퓨터가 서버 컴퓨터에게 파라미터를 전달해줘야 하지 않겠니? 그것을 가능케 하는 것이 stub이다.


2. 메모리 주소를 바꿔준다.

생각을 해보자. 내 컴퓨터의 메모리 주소와 서버 쪽의 메모리 주소가 당연히 다를 것이다. 그런데 어떻게 내 컴퓨터에서 실행시킨 명령어가 서버쪽의 적당한 곳에 push되는 것일까?(명령어가 메모리 스택에 push되는 것은 당연한 것이다.) 클라이언트 쪽의 주소가 서버쪽의 유효한 곳으로 바뀌려면 그것을 해주는 무언가, stub,가 있어야 한다. 


3. Data representation을 호환 가능하게 한다.

integer type의 경우, 각 시스템은 big-endian 또는 little-endian방식을 사용하여 데이터를 표현한다. 이러한 부분에 대한 호환이 없으면 정보가 제대로 전달이 되지 않겠지? 따라서 이러한 부분을 맞춰준다. 일종의 통역기 기능이라고 보면 된다. 이러한 것을 external data representation(XDR)이라고 한다.


위키피디아에서 stub의 역할이 굉장히 잘 설명되어 있는 듯 하다. Reference 참조해라.


이제 예제를 통해서 RPC를 이해해보자. 참고로 예제는 publib.boulder.ibm.com에서 참고했다. 


RPC 예제이므로 서버쪽과 클라이언트 쪽을 전부 작성해야 한다.

위의 사이트에서 제공해준 코드들은 에러도 많다. 그러나 알아서 수정해봅시다. 그렇게 수정해서 실행시켜보면 다음과 같이 작동한다. 참고로 해당 RPC 프로그램은 단순히 클라이언트의 요청에 따라 hello world를 출력하는 프로그램이다.


※ 서버 : 192.168.179.131

※ 클라이언트 : 192.168.179.129


서버에서 RPC 서버를 실행시키면 다음과 같다.



클라이언트에서 RPC 클라이언트를 실행시킨다.


서버는 RPC 요청을 받고 실제 프로시저를 실행시킨다.


위의 프로그램 수행시킬 때 패킷도 캡처했다. 캡처한 내용을 보면.. 전~혀 이해가 가지 않는다. 내가 무슨 짓을 했는지 원... 이해하면 바로 포스팅 가겠습니다.


Reference : 

http://en.wikipedia.org/wiki/Remote_procedure_call

http://en.wikipedia.org/wiki/Stub_(distributed_computing)

http://publib.boulder.ibm.com

'Operating Systems' 카테고리의 다른 글

[OS] Deadlock Prevention and Deadlock Avoidance  (0) 2013.02.03
[OS] Deadlock  (0) 2013.02.03
[OS] Scheduling Algorithm  (2) 2013.01.13
[OS] Process Scheduling  (0) 2013.01.13
[OS] Preemption and Non-Preemption  (0) 2013.01.13
Posted by 빛나유
,