로컬 프로세스 간 통신

Local Inter-Process Communication

로컬 프로세스통신[1](LPC, Local Procedure Call 또는 Lightweight Procedure Call이라고도 함)은 마이크로소프트 윈도우즈 NT 커널에서 동일한 컴퓨터의 프로세스 간에 경량 IPC를 위해 제공하는 내부적이고 문서화되지 않은 프로세스통신 시설이다.위해 고속 확장 가능한 커뮤니케이션 방법 효율적으로 그user-mode 부품들과 함께 효율적인 의사 소통 채널이 필요한 User-Mode 드라이버 프레임워크(UMDF), 시행의 필요성을 제공하기 위해 WindowsVista의 LPC한 비동기 지방 Inter-Process Communication[1](육군 군수 정책 위원회, 종종 고급 로컬 프로시저 호출)로 고쳐 써 왔다.u경영진에 있는 MDF의 구성 요소.[2]

(A)LPC 인터페이스는 Windows NT의 등록되지 않은 네이티브 API의 일부로서, 응용 프로그램은 직접 사용할 수 없다.그러나 다음과 같은 경우에는 간접적으로 사용할 수 있다.

  • Microsoft RPC API를 사용하여 로컬로 통신할 때, 즉 동일한 시스템의 프로세스 간에 통신할 때
  • (A)LPC로 구현된 Windows API를 호출함(아래 참조)

실행

(A)LPC는 보안이 가능한 커널 "포트" 객체를 사용하여 구현되며(: ACL과 함께, 특정 SID만 사용할 수 있음) 연결의 반대편에서 프로세스를 식별할 수 있다.개별 메시지도 증권화할 수 있다. 애플리케이션은 메시지별 SID를 설정할 수 있으며 (A)LPC 메시지와 관련된 토큰에서 보안 컨텍스트의 변경도 테스트할 수 있다.

서버와 클라이언트 간의 일반적인 통신 시나리오는 다음과 같다.

  1. 서버 프로세스는 먼저 명명된 서버 연결 포트 개체를 만들고 클라이언트가 연결될 때까지 기다린다.
  2. 클라이언트가 연결 메시지를 전송하여 명명된 포트에 대한 연결을 요청함
  3. 서버가 연결을 허용할 경우, 다음 두 개의 이름 없는 포트가 생성된다.
    • 클라이언트 통신 포트 - 클라이언트 스레드에서 특정 서버와 통신하는 데 사용
    • 서버 통신 포트 - 서버가 특정 클라이언트와 통신하기 위해 사용함, 클라이언트당 하나의 포트가 작성됨
  4. 클라이언트는 클라이언트 통신 포트로 핸들을 받고, 서버는 서버 통신 포트로 핸들을 받고, 프로세스 간 통신 채널이 구축된다.

(A)LPC는 서버와 클라이언트 간의 메시지 교환의 세 가지 모드를 지원한다.[3]

  • 짧은 메시지(256바이트보다 작음)의 경우, 커널은 프로세스 간, 송신 프로세스의 주소 공간부터 시스템 주소 공간, 거기서 수신 프로세스의 주소 공간까지 메시지 버퍼를 복사한다.
  • 256바이트보다 긴 메시지의 경우 공유 메모리 섹션을 사용하여 데이터를 전송해야 하며 (A)LPC 서비스가 송신과 수신 프로세스 간에 매핑한다.먼저 송신자는 데이터를 공유 메모리에 배치한 다음, (A)LPC의 첫 번째 방법을 사용하여, 공유 메모리 섹션에서 송신된 데이터를 가리키는 수신 프로세스에 통지(예: 작은 메시지)를 전송한다.
  • 공유 섹션에 맞추기에는 데이터 양이 너무 많을 경우, 서버는 클라이언트의 주소 공간에서 직접 데이터를 읽고 쓸 수 있다.

ALPC는 LPC가 독점적으로 사용하는 동기식 요청/응답 메커니즘 대신 I/O 완료 포트를 사용하도록 구성할 수 있어 기존 LPC 인터페이스에 비해 성능이 우수하다.[4]이를 통해 ALPC 포트는 메시지 수와 스레드의 균형을 자동으로 맞추는 고속 통신을 가능하게 한다.또한 사용자 모드/커널 모드 스위치를 최소화하기 위해 ALPC 메시지를 일괄적으로 일괄 처리할 수 있다.

알려진 사용법

(A)LPC는 Windows NT에서 내부 서브시스템 간의 통신에 많이 사용된다.Win32 하위 시스템 사용량(A)클라이언트와 서브시스템 서버(CSRSS) 간의 통신에 대한 LPC의 비중이 크다.퀵 LPC는 윈도 NT의 3.51 버전에 도입되어 이러한 통화의 속도를 높였다.이 방법은 성능상 중요한 서버 부분을 커널모드(win32k.sys)로 이동하는 것을 위해 버전 4.0에서 대부분 폐기되었다.

LSASS(Local Security Authority Subsystem Service), Session Manager(SMSS), Service Control Manager 모두 클라이언트 프로세스와 통신하기 위해 (A)LPC 포트를 직접 사용한다.WinlogonSecurity Reference Monitor는 이를 사용하여 LSASS 프로세스와 통신한다.

전술한 바와 같이, Microsoft RPC는 클라이언트와 서버가 같은 기계에 있을 때 (A)LPC를 전송으로 사용할 수 있다.로컬 컴퓨터에서만 통신하도록 설계된 많은 서비스들은 RPC를 통한 유일한 전송으로 (A)LPC를 사용한다.많은 경우에 원격 OLE와 DCOM의 구현은 지역 통신에도 (A)LPC를 사용한다.

참고 항목

메모들

  1. ^ a b "LPC (Local procedure calls) Part 1 architecture". Microsoft Docs.
  2. ^ 루시노비치, 솔로몬 & 아이오네스쿠(2009:201)
  3. ^ 루시노비치, 솔로몬 & 아이오네스쿠(2009:203)
  4. ^ 루시노비치, 솔로몬 & 아이오네스쿠(2009:204)

참조

외부 링크