KR20090095619A - 보호 영역 경계들에서의 오브젝트 호출 방법, 시스템 및 장치 - Google Patents

보호 영역 경계들에서의 오브젝트 호출 방법, 시스템 및 장치 Download PDF

Info

Publication number
KR20090095619A
KR20090095619A KR1020097013633A KR20097013633A KR20090095619A KR 20090095619 A KR20090095619 A KR 20090095619A KR 1020097013633 A KR1020097013633 A KR 1020097013633A KR 20097013633 A KR20097013633 A KR 20097013633A KR 20090095619 A KR20090095619 A KR 20090095619A
Authority
KR
South Korea
Prior art keywords
memory
kernel
server
client
input
Prior art date
Application number
KR1020097013633A
Other languages
English (en)
Other versions
KR101177971B1 (ko
Inventor
켈리 브라이언 에이치
크리스토퍼 에스. 어쿼하트
라메쉬 찬드라세카
로버트 지. 워커
Original Assignee
콸콤 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 콸콤 인코포레이티드 filed Critical 콸콤 인코포레이티드
Publication of KR20090095619A publication Critical patent/KR20090095619A/ko
Application granted granted Critical
Publication of KR101177971B1 publication Critical patent/KR101177971B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)

Abstract

보호 메모리 시스템에서 원격 프로세스 콜들을 호출하고 프로세스간 통신을 용이하게 하는 방법, 장치, 시스템 및 컴퓨터 프로그램 제품은 시스템 콜에 의한 오브젝트들의 원격 호출을 지원하는 커널을 이용한다. 시스템 콜은 오브젝트 식별자와 입력 및 출력 버퍼에 대한 한 세트의 메모리 포인터들을 포함할 수 있다. 커널은 개별 서버 프로세스 영역에서 지정된 오브젝트의 위치를 찾고 서버 영역 내의 서버 스레드를 깨워 오브젝트를 호출한다. 제공되는 메모리 포인터들을 사용하여 커널은 데이터를 중간 버퍼에 복사할 필요 없이 입력 및 출력 데이터를 보호 영역들 전역으로 복사할 수 있다. 이는 종래의 보호 메모리 시스템들에 필요한 다수의 데이터 복사 단계의 오버헤드를 없앤다.

Description

보호 영역 경계들에서의 오브젝트 호출 방법, 시스템 및 장치{METHODS, SYSTEMS, AND APPARATUS FOR OBJECT INVOCATION ACROSS PROTECTION DOMAIN BOUNDARIES}
본 특허 출원은 "METHODS, SYSTEMS, AND APPARATUS FOR OBJECT INVOCATION ACROSS PROTECTION DOMAIN BOUNDARIES"라는 명칭으로 2006년 11월 29일자 제출된 예비 출원 60/867,787호에 대한 우선권을 주장하며, 이 출원은 본원의 양수인에게 양도되었고 본원에 참조로 포함된다.
설명되는 형태는 데이터 처리 방법들에 관한 것으로, 보다 구체적으로는 서로 다른 보호 영역으로 나누어진 컴퓨터 시스템의 보호 영역 경계들에서 효율적으로 오브젝트들을 호출하고 데이터를 복사하는 방법 및 시스템에 관한 것이다.
보호 모드 운영 시스템들을 구현하는 컴퓨터 시스템들은 물리적 메모리를 특정 프로세스들 또는 보호 영역들에 의해 액세스 가능한 분리된 가상 어드레스 공간들 또는 영역들로 분할한다. 어떤 메모리는 커널 공간 또는 커널 영역으로 지칭되는 컴퓨터 시스템의 커널에 할당되어 이 커널에 의해서만 액세스 가능할 수도 있는 한편, 다른 메모리는 사용자 공간 또는 사용자 영역으로 지칭되는 애플리케이션들에 의해 액세스 가능하게 된다. 다수의 프로세스가 동시에 작동하고 있을 때 각 프로세스에는 각자의 가상 메모리 공간 또는 메모리 영역이 할당되고, 명백하게 제공되지 않는 한 다른 프로세스들의 메모리 영역에 액세스할 수 없다. 이러한 메모리 영역들의 보호는 프로세스들이 서로 간섭하거나 시스템의 동작을 간섭할 기회를 줄임으로써 시스템 신뢰도를 향상시킨다.
많은 동작에서, 어떤 보호 영역의 사용자 프로세스는 다른 보호 영역에 위치하는(즉, 저장되어 있거나 실행하고 있는) 오브젝트 또는 함수의 콜(call) 또는 액세스를 필요로 할 수도 있다. 이러한 상황에서, 시스템은 각각의 보호 영역에서의 통신을 가능하게 할 필요가 있다. 이러한 프로세스간 통신을 제공하기 위한 많은 방법은 "파이프", 커널 서비스, 메시지 전달, 가상 메모리 재매핑 및 공유 메모리를 포함한다. 그러나 이러한 종래의 방법들은 바람직하지 않은 비효율성을 나타낸다.
예를 들어, 보호 영역 시스템은 우선 어떤 한 사용자 보호 메모리 영역으로부터의 데이터를 커널 영역으로 복사한 다음, 커널 영역으로부터의 동일 데이터를 다른 사용자 보호 영역의 메모리 공간으로 복사함으로써 프로세스간 통신을 제공하도록 파이프들을 구현할 수 있다. 입력 및 출력 데이터가 전달될 필요가 있는 원격 오브젝트 콜의 경우, 이러한 프로세스는 출력 데이터가 보호 영역들 전역에서 원격 오브젝트 콜을 시작한 프로세스로 되돌아올 때 반복된다. 따라서 파이프들을 이용하는 프로세스간 통신은 각 방향에서 2개의 개별적인 복사 동작이 수반되기 때문에 비효율적이다.
프로세스간 통신에 공유 메모리가 사용될 수도 있지만, 공유 메모리의 구현 은 2개의 보호 영역이 비일반 데이터 공유 방식에 동의할 것을 요구한다. 특히, 수신 프로세스가 데이터를 수신하게 되는 방식을 호출 프로세스가 예측할 필요가 있기 때문에 비일반 데이터 공유 방식에 대한 동의는 쉽게 이루어지지 않는다.
다양한 형태들은 보호 메모리 구조 시스템에서 효율적으로 원격 프로세스 콜들을 호출하고 프로세스간 통신을 용이하게 하는 방법들과 시스템들을 제공한다. 한 형태에서는, 시스템 콜에 의한 오브젝트들의 원격 호출을 지원하는 커널이 제공된다. 이러한 시스템 콜은 오브젝트 식별자와 입력 및 출력 버퍼에 대한 한 세트의 메모리 포인터들을 포함할 수 있다. 시스템 콜을 이용하여 커널은 서버 프로세스 영역에 지정된 오브젝트를 배치할 수 있고 서버 영역 내의 서버 스레드를 깨워 오브젝트를 호출할 수 있다. 제공되는 메모리 포인터들을 사용하여 커널은 입력 데이터를 서버 프로세스에 복사할 수 있고 서버 프로세스로부터의 출력 데이터를 클라이언트 프로세스에 복사할 수 있다.
다른 형태에서, 서버 스레드가 입력 데이터를 요청하고 완료된 요청들에 응답할 수 있게 하는 하나 이상의 추가 시스템 콜이 구현될 수 있다. 어떤 한 구현에서, 시스템 콜은 호출된 서버 프로세스가 입력 데이터를 특정 어드레스에 복사하거나 출력 버퍼를 지정된 데이터로 채울 수 있게 한다. 한 형태에서, 커널은 인수(argument)를 복사하고, 원격 오브젝트 호출 상황에서 요청을 유효화하며, 클라이언트 프로세스에 의해 제공되는 입력 및 출력 설명서들을 사용할 수 있다. 어떤 한 구현에서, 호출되는 오브젝트는 (임의의 다른 클라이언트 메모리로부터가 아닌) 클라이언트 입력 버퍼들로부터의 판독 및 (임의의 다른 클라이언트 메모리로가 아닌) 클라이언트 출력 버퍼들로의 기록이 허용될 수 있다.
또 다른 형태에서, 호출되는 오브젝트는 커널 영역 또는 서버 프로세스 영역에 상주할 수 있다. 다른 형태에서, 커널에 대한 시스템 콜의 인수들은 다른 오브젝트들을 호출하는 능력(예를 들어, 자격 등)을 오브젝트들에 제공하는 오브젝트 참조들을 포함할 수 있다. 다른 형태에서, 커널은 호출을 시작하는 동안 한정된 양의 입력 데이터를 그리고 프로시저 콜을 종료하는 동안 한정된 양의 출력 데이터를 복사할 수 있다. 또 다른 형태에서, 각각의 호출 스레드와 관련된 공유 메모리 버퍼에 인수들이 배치되어, 호출된 오브젝트의 보호 영역에 의해 데이터가 판독 및 기록될 수 있게 할 수도 있다.
개시된 형태들은 아래에서 개시된 형태들을 한정이 아닌 예시하기 위해 제공되는 첨부 도면들과 관련하여 설명되며, 동일한 명칭들이 엘리먼트들을 나타낸다.
도 1은 한 형태에 따른 서로 다른 보호 영역으로 분할된 컴퓨터 시스템의 프로그램 상태의 개략도이다.
도 2는 한 구현에 따른, 도 1에 나타낸 형태의 프로세스들 간의 통신에 관한 호출 흐름도이다.
도 3은 한 형태에 따른, 도 1에 나타낸 형태를 구현하기 위한 예시적인 방법의 프로세스 흐름도이다.
도 4는 다른 형태에 따른 서로 다른 보호 영역으로 분할된 컴퓨터 시스템의 프로그램 상태의 개략도이다.
도 5a 및 도 5b는 한 구현에 따른, 도 4에 나타낸 형태를 구현하기 위한 예시적인 방법들의 프로세스 흐름도이다.
도 6a 및 도 6b는 다른 형태에 따른, 호출되는 원격 오브젝트가 커널에 상주하는 컴퓨터 시스템의 프로그램 상태의 개략도이다.
도 7은 한 형태에 따른, 도 6a 및 도 6b에 나타낸 형태들의 프로세스들 간의 통신에 관한 호출 흐름도이다.
도 8은 다른 구현에 따른, 도 6a 및 도 6b에 나타낸 형태를 구현하기 위한 예시적인 방법들의 프로세스 흐름도이다.
도 9는 한 형태에 따른 데이터 블록 시스템 내에 상주하는 오브젝트에 직접 액세스할 권한이 부여된 원격 오브젝트의 원격 호출 동안 시스템의 프로그램 상태의 개략도이다.
도 10은 다른 형태에서 프로세스들 간의 통신에 관한 호출 흐름도이다.
도 11은 한 형태에 따른, 도 10에 나타낸 형태를 구현하기 위한 예시적인 방법의 프로세스 흐름도이다.
도 12는 다른 형태에 따른, 클라이언트 프로세스 및 서버 프로세스가 메모리 영역을 공유하는 오브젝트의 클라이언트 프로세스의 원격 호출 동안 시스템의 프로그램 상태의 개략도이다.
도 13은 한 형태에 다른, 도 12에 나타낸 형태를 구현하기 위한 예시적인 방법의 프로세스 흐름도이다.
도 14는 한 형태에 따른, 도 12에 나타낸 형태를 구현하기 위한 다른 방법의 프로세스 흐름도이다.
도 15는 다양한 형태들을 구현하기에 적합한 시스템의 시스템 블록도이다.
도 16은 다양한 형태들의 모바일 핸드셋 구현의 컴포넌트 블록도이다.
아래에서는 설명하는 형태들이 도시된 첨부 도면들을 참조로 본 시스템들, 디바이스들, 장치들, 방법들, 컴퓨터 프로그램 제품들 및 기계 판독 가능 매체들이 보다 상세히 설명된다. 그러나 시스템들, 디바이스들, 장치들, 방법들 및 기계 판독 가능 매체들은 많은 여러 가지 형태로 구현될 수 있으며, 여기서 설명하는 형태들로 한정되는 것으로 해석되지 않아야 하며, 오히려 본 형태들은 해당 개시가 철저하고 완벽해지도록, 그리고 당업자들에게 발명의 범위를 전달하도록 제공된다. 전체적으로 동일 부호들은 동일 엘리먼트에 관련된다.
상기 외에도, 여기서 "예시적인"이란 단어는 예시, 실례 또는 예증이 되는 것의 의미로 사용된다. 여기서 "예시적인" 것으로서 설명하는 어떤 형태나 설계도 다른 형태들이나 설계들보다 바람직하거나 유리한 것으로 해석되는 것은 아니다. 오히려, 예시적인이라는 용어의 사용은 개념들을 명확한 방식으로 표현하기 위한 것이다.
여기서 사용되는 "커널"이라는 용어는 당업자들에 의해 이해되는 바와 같이 메모리 보호 프로세서 구조 내의 신뢰성 있는 프로세스들을 말한다. 컴퓨터 과학에서, 커널은 통상적으로 소프트웨어 프로세스들과 하드웨어 엘리먼트들 간의 통신 을 포함하여, 시스템 자원들의 관리를 담당하는 컴퓨터 운영 시스템들의 중심 컴포넌트이다. 따라서 커널은 컴퓨터 과학 기술에서 당업자들에 의해 이해되는 바와 같이 마이크로커널 구조 내의 하나 이상의 커널 또는 운영 시스템일 수 있다.
설명의 편의를 위해, 여기서는 "클라이언트 프로세스", "사용자 프로세스" 및 "서버 프로세스"에 대한 참조들이 보호 영역 시스템 내의 개별 프로세스 및 메모리 영역들을 지시하는데 사용된다. 특히, "클라이언트 프로세스" 및 "사용자 프로세스"에 대한 참조들은 원격 오브젝트, 연산 또는 메소드의 함수 콜(call) 또는 호출(invocation)의 소스를 식별하기 위한 것인 반면, "서버 프로세스"라는 용어는 클라이언트 프로세스에 직접 액세스 가능하지 않은 호출된 오브젝트, 연산 또는 메소드를 호스팅하는 개별 프로세스 또는 메모리 영역을 식별하기 위한 것이다. 이러한 개별 프로세스들 및 영역들은 동일한 컴퓨터(즉, 프로세스 및 메모리) 내에 포함될 수도 있다. 따라서 "클라이언트" 및 "서버"에 대한 참조들은 청구범위를 특정 클라이언트-서버 구조로 한정하거나 개별 프로세서 또는 네트워크화된 프로세서를 지칭하는 것으로 이해되지 않아야 한다.
여기서는 "시스템 콜들을 실행"하고, 서로 메시지들을 "전송" 및 "전달"하는 커널 및 프로세스들에 대한 참조가 이루어진다. 이러한 참조들은 시스템 내의 개별 프로세스 간의 동작들을 조정하기 위한 컴퓨터 기술들에 공지된 모든 방법을 포함하는 것이다. 당업자들 중 하나가 인식하는 바와 같이, 이러한 방법들은 메모리에 플래그들을 설정하고, (프로세서 스택과 같은) 메모리에 특정 값들을 저장하고, 상태 머신에서 상태의 변화를 나타내며, 프로세스에 인터럽트를 전송 또는 설정하 고, 보호 영역들 전역으로 심벌들을 전송하는 것 등을 포함한다. 설명의 편의상 시스템 콜의 실행은 "전송" 및 "수신" 프로세스가 동일한 물리적 프로세서 및 메모리 공간 내에서 실행되고 있더라도 요청 및 정보가 보호 영역들 사이에서 전달되고 있음을 반영하여 메시지의 "전송" 또는 "전달"로 지칭될 수 있다. 따라서 메시지의 "전달" 또는 "전송"에 대한 참조들은 상세한 설명 또는 청구범위를 특정 타입의 통신 또는 메시지 프로토콜로 한정하거나 시스템 콜의 "실행"과 다른 타입의 프로세스간 통신을 수반하는 것으로 이해되지 않아야 한다.
여기서 사용되는 바와 같이, "버퍼"라는 용어는 더 큰 랜덤 액세스 메모리 내의 메모리 어드레스들과 같이 특정 데이터가 저장될 수 있는 메모리 위치를 말한다. 여기서 사용되는 바와 같이, "보호 영역" 및 "영역"이라는 용어는 더 큰 랜덤 액세스 메모리 내의 메모리 어드레스들일 수도 있는, 특정 프로세스들에 할당되는 메모리 어드레스 공간을 말한다. 시스템 내의 개별 랜덤 액세스 메모리 칩들 및 디스크 드라이브들 내에 다양한 메모리 위치가 있을 수도 있지만 버퍼, 보호 영역 및 영역에 대한 참조들은 개별 메모리 디바이스가 필요함을 의미하는 것은 아니다.
한 형태에서, 호출 프로세스 외부 오브젝트들의 동기 호출을 위해 시스템 콜을 제공함으로써 오브젝트의 원격 호출을 지원하는 커널이 메모리 보호 구조를 갖는 시스템에 제공된다. 인수들로서, 시스템 콜은 호출되는 오브젝트에 대한 식별자, 호출되는 오브젝트에 대해 이용 가능하게 되는 데이터를 포함하는 입력 버퍼(들)에 대한 한 세트의 포인터(들), 및 호출되는 오브젝트가 데이터를 저장할 수 있는 출력 버퍼(들)에 대한 한 세트의 포인터(들)를 수락 또는 포함한다. 예시적 인 시스템 콜은 SysCall(INVOKE, nObjID, 입력 버퍼, 출력 버퍼)로서 나타날 수 있다. 시스템 콜을 이용하여, 커널은 지정된 오브젝트를 개별 서버 영역에 배치할 수 있고 서버 영역 내의 서버 스레드를 깨워 오브젝트를 호출할 수 있다.
개관에서 설명한 하나 이상의 형태는 메모리 보호 시스템 구조에서 효율적인 동기 프로세스간 통신 및 원격 오브젝트 콜 추출을 가능하게 하는 커널 동작들을 제공한다. 하나 이상의 형태에 따르면, 커널 내에 또는 메모리 보호를 엄격히 시행하지는 않지만 이를 시뮬레이션하는 다른 시스템들에서 방법들이 구현될 수 있다. 보호 메모리 구조의 특징을 이루는 임의의 컴퓨터 기반 시스템에 다양한 형태가 구현될 수 있지만, 가전제품과 같이 한정된 프로세서 용량을 갖는 시스템들에 특히 적용 가능하다. 주목할만한 형태는 보호 메모리 구조로 상기 형태의 방법들 중 하나 이상을 구현하는 운영 시스템을 구현하는 프로세서 및 메모리를 갖는 모바일 핸드셋(예를 들어, 셀룰러폰)이다.
도 1은 하나의 형태에 따른 서로 다른 보호 메모리 영역으로 분할되는 컴퓨터 시스템의 프로그램 상태(100)의 개략도를 제공한다. 시스템은 커널 보호 영역을 갖는 커널(106)과 각각 메모리 보호 영역을 갖는 클라이언트 및 서버 프로세스(102, 104)를 포함한다. 도 2는 클라이언트 및 서버 프로세스(102, 104)와 커널(106) 간의 통신을 나타내는 호출 흐름도(200)이다. 도 3에 나타낸 프로세스 흐름도로 이 실시예를 구현하는 방법의 동작 단계들의 예가 설명된다.
도 1, 도 2 및 도 3을 함께 참조하면, 단계(302)에서 클라이언트 프로세스(102)가 커널(106)에 대한 시스템 콜(116)을 실행함으로써 서버 프로세스(104)에 상주하는 원격 오브젝트 B(108)에서 동작하는 함수를 호출한다. 시스템 콜(116)의 인수들로서, 클라이언트 프로세스(102)는 인수들로서 오브젝트 B(108)의 로컬 오브젝트 식별자, 및 호출되는 오브젝트에 의해 요구되는 입력 데이터를 포함하는 클라이언트 프로세스 메모리 공간의 버퍼 어드레스(들)에 대한 메모리 포인터(들)를 포함한다. 시스템 콜(116)은 또한 호출된 오브젝트로부터 전달되는 출력 데이터가 복사되어야 하는 클라이언트 프로세스 메모리 공간의 버퍼 어드레스(들)에 대한 메모리 포인터(들)를 포함할 수 있다. 도 1에 나타낸 예시적인 형태에서, 클라이언트 프로세스(102)는 버퍼(110, 112)에 저장된 2개의 입력을 필요로 하는 함수인, 서버 프로세스(104)에 있는 오브젝트 B(108)를 호출할 것을 커널(106)에 요청하는 시스템 콜(116)을 발생시킨다. 물론, 다양한 형태에서는 시스템 콜(116)에 포함된 관련 어드레스 포인터들을 갖는 임의의 수의 버퍼가 사용될 수 있다.
시스템 콜(116)의 실행시, 커널(106)은 우선 단계(304)에서 오브젝트를 호출하는(즉, 시스템 콜을 실행하는) 프로세스가 오브젝트 호출 허가를 받았음을 검증한다. 클라이언트 프로세스가 오브젝트 호출 허가를 받는다면, 단계(306)에서 커널(106)은 오브젝트 B(108)가 커널 영역에 상주하는 오브젝트인지 사용자 영역에 상주하는 오브젝트인지를 결정한다. 커널(106)은 오브젝트들과 각종 보호 영역들 간 관계를 기억하고 있기 때문에 오브젝트(108)의 위치를 결정할 수 있다. 커널(106)은 예를 들어 식별자(예를 들어, 표 안의 인덱스) 및 오브젝트 인터페이스에 대한 포인터로 오브젝트들을 식별하는 각 클라이언트/서버 프로세스에 대한 표를 유지하는 것을 포함하여, 많은 방법 중 임의의 방법으로 오브젝트 위치들을 기 억할 수 있다. 다른 예로서, 커널(106)은 오브젝트 식별자들을 프로세스 영역들에 그리고 포인터들을 오브젝트 인터페이스에 매핑하는 오브젝트들의 전체적인 표를 보유할 수 있다. 다른 예로서, 커널(106)은 사용자 프로세스들을 오브젝트들에 관련(매핑)시키는 해싱을 보유할 수도 있다. 당업자들 중 하나에 의해 인식되는 바와 같이, 오브젝트들을 프로세스들에 매핑하는 능력은 보호 메모리 구조에서 커널들의 일반적인 특징이다. 예를 들어, 유닉스 커널들은 프로세스들에 의해 유지되는 오픈 소켓들을 기억할 수 있다.
커널(106)이 오브젝트 B(108)가 커널(106) 내에 상주하지 않는다고 결정하면, 커널(106)은 단계(308)에서 오브젝트 B(108)를 호스팅하는 서버 프로세스(104)의 위치를 찾아낸다. 당업자들 중 하나에 의해 인식되는 바와 같이, 커널(106)은 하나의 동작으로(예를 들어, 상술한 바와 같이 전체 표에서 오브젝트의 위치를 찾아냄으로써) 호출된 오브젝트의 위치 및 서버 프로세스를 결정할 수 있으며, 따라서 단계(306, 308)가 결합할 수 있다.
커널(106)이 오브젝트 B(108)의 위치를 결정하면, 커널은 단계(310)에서 클라이언트 프로세스(102)에 의한 오브젝트의 원격 호출을 서버 프로세스(104)에 알리는 메시지(128)를 전송한다. 이러한 통신은 시스템 콜에서 클라이언트 프로세스(102)에 의해 제공되는 오브젝트 ID를 포함할 수 있다. 한 형태에서, 서버 프로세스(104)는 오브젝트 ID를 수신하기 위해 커널(106)에 알려지는 미리 결정된 버퍼 위치를 가질 수 있다. 한 형태에서, 커널(106)은 단계(312)에서 오브젝트 B(108)를 호출하도록 동작하는 서버 프로세스(104) 내의 (도 1에 별도로 나타내지 않은) 서버 스레드를 깨운다. 당업자들에 의해 인식되는 바와 같이, 서버 스레드는 임의의 적절한 공지된 방법에 의해 깨워질 수 있다. 한 형태에서, 커널(106)은 단계(316)에서 서버 프로세스(104)에 오브젝트 ID를 제공한다.
서버 프로세스(104)는 단계(318)에서, 예를 들어 겟 버퍼(Get Buffer)(130) 동작을 실행함으로써 커널(106)로부터의 입력 데이터를 요청할 수 있다. 이 겟 버퍼(130) 동작은 클라이언트 프로세스의 호출 요청과 관련된 입력 데이터를 요청하고, 입력 데이터가 복사될 서버 프로세스 영역 내의 입력 버퍼(118, 120)에 대한 포인터들을 제공한다. 겟 버퍼 동작(130)에 의해 입력 버퍼(118, 120)에 대한 포인터들을 포함함으로써, 서버 프로세스(104)는 데이터가 요청된 시점에 커널(106)에 목적지 위치(들)를 알린다. 이는 시스템 유연성을 향상시키는데, 서버 프로세스(104)가 크기(오브젝트 입력 데이터 요건들이 달라짐) 및 타이밍 면에서 개발자가 예상하기 어려운 인수 입력들을 수신하기 위한 메모리를 파기할 필요가 없기 때문이다.
어떤 구현들에서는, 뒤에 더 상세히 설명하는 바와 같이, 서버 프로세스(104)는 입력 데이터를 수신하기 위해 커널(106)에 알려지는 미리 결정된 버퍼 위치(때때로 인수들에 대한 "랜딩 패드"로 지칭됨)를 가질 수도 있다. 이러한 구현은 커널(106)이 단일 단계에서 오브젝트를 호출하고 필수 인수들을 전달할 수 있게 함으로써 겟 버퍼 실행 단계의 필요성을 없앤다. 이러한 대안은 도 3에 점선 화살표 A로 나타낸다.
서버 프로세스(104)로부터 입력 데이터 요청(130)의 수신시, 커널(106)은 단 계(320)에서 클라이언트 프로세스 버퍼(110, 112)에 상주하는 데이터를 서버 프로세스의 버퍼(118, 120)에 복사할 수 있다. 이와 같이 하면, 커널은 도 1에 점선(122, 124)으로 각각 나타낸 것과 같이, 단일 단계에서 클라이언트 프로세스 버퍼(110, 112)로부터의 데이터를 직접 서버 프로세스 버퍼(118, 120)로 대응하게 복사한다. 커널(106)은 클라이언트 프로세스 및 서버 프로세스 메모리 공간들에 대한 판독 및 기록 액세스를 갖기 때문에 클라이언트 프로세스(102)로부터의 데이터를 서버 프로세스(104)로 직접 복사할 수 있다. 이러한 제한 없는 판독 및 기록 액세스는 커널(106)의 능력이다. 이와 같이, 커널(106)은 시스템 콜(116)에서 커널(106)로 전달되는 클라이언트 버퍼 포인터들을 사용하여 클라이언트 프로세스(102)의 입력 버퍼(110, 112)로부터 직접 입력 데이터를 얻을 수 있다. 마찬가지로, 커널(106)은 겟 버퍼(130) 메시지에 제공되는 메모리 위치들(또는 어떤 형태에서는 미리 정의된 메모리 위치들)에 대한 포인터들을 사용하여 입력 데이터를 서버 프로세스(104)의 입력 버퍼(118, 120)에 직접 기록할 수 있다. 이러한 클라이언트 메모리 영역 버퍼(110, 112)로부터 서버 메모리 영역 버퍼(118, 120)로의 입력 데이터 직접 복사는 점선(122, 124)으로 나타낸 것과 같이, 클라이언트 및 서버 프로세스(102, 104)에 직접 복사 동작으로서 나타난다.
서버 프로세스(104)는 오브젝트 B(108)의 클라이언트 프로세스의 호출에 응답하는 중이기 때문에 서버 프로세스(104)가 클라이언트 프로세스 버퍼(110, 112) 내에 포함된 입력 데이터(1A, 1B)에 대한 겟 버퍼 동작(130)을 실행할 수 있는 것은 아무런 가치가 없다. 이러한 호출은 서버 프로세스(104)에 입력 데이터의 이용 가능성을 알려, 단계(318)에서 겟 버퍼(130) 동작의 발생을 일으킨다. 호출된 동작의 지속기간 동안 클라이언트 프로세스(102)에 의해 클라이언트 프로세스(102)의 버퍼(110, 112) 내에 포함된 데이터의 판독 허가가 부여되었기 때문에 겟 버퍼(130) 동작은 커널(106)에 의해 수행될 수 있다. 뒤에 더 상세히 설명하는 하나 이상의 형태에서, 서버 프로세스(104)에는 또한 오브젝트 호출의 일부로서 입력 데이터 버퍼(110, 112)에 대한 임시 판독 액세스가 승인될 수 있다. 이는 서비스 콜의 지속기간 동안 서비스 프로세스(104)에 메모리에 대한 임시 액세스를 제공하는 서비스 콜(116)을 실행하는데 사용되는 API에 의해 구현될 수 있다. 하나 이상의 형태에서, 이러한 판독 허가는 제한된 시간 동안, 특히 오브젝트 B(108)의 클라이언트 프로세스 호출의 지속기간 동안 부여된다.
클라이언트 프로세스 입력 버퍼(110, 112) 내에 포함된 데이터가 서버 프로세스 입력 버퍼(118, 120)에 복사되었다면, 단계(322)에서 커널(106)은 메시지(132)에 의해 서버 프로세스(104)로 다시 실행의 제어를 리턴한다. 이 시점에서, 서버 프로세스(104)는 커널(106)로부터의 데이터를 요청하기 위해 다른 겟 버퍼(130)를 실행하는 등에 의해 더 많은 입력 데이터를 요청할 수 있으며, 따라서 도 3에 점선 화살표 B로 나타낸 것과 같이 단계(318)를 반복할 수 있다. 서버 프로세스(104)는 상당량의 입력 데이터를 복사하기 위해 다수의 겟 버퍼(130) 요청을 실행할 수 있다. 각각의 겟 버퍼(130) 요청은 예를 들어 서버 프로세스(104) 내의 표를 집단화(populate)하는 등 서로 다른 버퍼 위치에 대한 포인터들을 식별할 수 있다. 또한, 서버 프로세스(104)는 다수의 겟 버퍼(130) 요청을 실행하는 동시에 식별된 오브젝트 B(108)에 대해 호출된 함수를 실행할 수 있다. 커널(106)은 단계(320, 322)를 참조로 상술한 바와 같이 각 겟 버퍼(130) 요청에 응답한다. 이러한 능력은 커널(106) 또는 클라이언트 프로세스(102) 소프트웨어에 대한 수정을 필요로 하지 않으면서 클라이언트 프로세스(102)로부터 서버 프로세스(104)로의 데이터 전송을 최적화하도록 애플리케이션 개발자에게 유연성을 제공한다.
서버 프로세스 입력 버퍼(118, 120)에 모든 입력 데이터가 복사되었다면, 단계(324)에서 서버 프로세스(104)는 오브젝트 B(108)에 대한 콜 연산을 시작할 수 있다. 서버 프로세스(104)가 식별된 객체(108)에 대해 호출된 함수를 수행했을 때 서버 프로세스(104)는 단계(326)에서, 예를 들어 풋 버퍼(Put Buffer) 요청(134)을 실행함으로써, 복사될 출력 데이터를 커널(106)에 통보한다. 풋 버퍼(134) 메시지는 실행을 커널(106)로 넘겨 서버 프로세스 출력 버퍼(들)(122) 내에 포함된 출력 데이터를 클라이언트 프로세스 영역으로 복사한다. 풋 버퍼(134) 메시지는 서버 프로세스(104) 출력 버퍼(들)(122)에 대한 포인터(들)를 포함한다. 최초 시스템 콜(116) 내에 포함된 포인터들로부터, 커널(106)은 클라이언트 프로세스 출력 버퍼(114)의 메모리 위치를 식별한다. 이와 같이 통지되면, 단계(328)에서 커널(106)은 서버 프로세스 출력 버퍼(122)에 상주하는 데이터를 클라이언트 프로세스 출력 버퍼(114)로 직접 복사할 수 있다. 이러한 서버 메모리 영역 출력 버퍼(122)로부터 서버 메모리 영역 출력 버퍼(114)로의 출력 데이터 직접 복사는 도 1에서 점선(126)으로 나타낸 것과 같이 클라이언트 및 서버 프로세스(102, 104)에 직접 복사 동작으로서 나타난다. 어떤 구현들에서, 서버 프로세스는 출력 데이터 를 커널(106)에 알려져 있는 미리 정의된 메모리 위치들에 배치하여, 풋 버퍼 동작에 대한 필요성을 없앨 수도 있다.
커널(106)이 클라이언트 프로세스 출력 버퍼(114)에 출력 데이터를 복사했다면, 단계(330)에서 커널(106)은 메시지(136)에 의해 서버 프로세스(104)로 다시 실행의 제어를 리턴한다. 겟 버퍼(130) 동작에서와 같이, 서버 프로세스(104)는 단계(326)를 반복하여 (점선 화살표 D로 나타낸 것과 같이) 다수의 풋 버퍼(134) 메시지를 실행함으로써, 상술한 바와 같이 커널(106)이 단계(328, 330)를 반복하게 할 수 있다. 각각의 풋 버퍼(134) 요청은 서버 프로세스(104) 내의 표를 판독하기 위해 예를 들어 서로 다른 출력 버퍼 위치에 대한 포인터들을 식별할 수 있다. 이는 서버 프로세스(104)가 데이터 블록 메모리 판독 동작으로 발생할 수 있는 것과 같은 상당량의 데이터를 다시 클라이언트 프로세스(102)로 전송할 수 있게 한다. 이러한 능력은 커널(106) 또는 클라이언트 프로세스(102) 소프트웨어에 대한 수정, 출력 데이터 블록 크기의 사전 인식, 또는 출력 데이터 블록들의 허용 가능한 크기에 대한 임의의 제약을 필요로 하지 않으면서 서버 프로세스(102)로부터 서버 프로세스(104)로의 출력 데이터 전송을 최적화하도록 애플리케이션 개발자에게 유연성을 제공한다.
오브젝트 B(108)를 호출하는 시스템 콜이 완료되면, 단계(332)에서 서버 프로세스(104)는 메시지(138)에 의해 커널(106)로 실행을 리턴한다. 어떤 오브젝트들(108)은 다른 프로세스를 활성화하기 위한 원격 콜이나 디바이스 표시자(예를 들어, 디스플레이 또는 LED)와 같은 데이터를 출력하지 않기 때문에 서버 프로세 스(104)는 데이터의 출력(단계(326-330))을 무시하고, 도 3에서 점선 화살표 C로 나타낸 것과 같이 단계(332)에서 메시지(138)에 의해 커널(106)로 실행의 제어를 리턴할 수 있다. 실행 제어의 리턴은 단계(334)에서 커널(106)이 클라이언트 서버(102)로 실행 제어(140)를 리턴하게 한다. 이 시점에서, 원격 오브젝트 호출이 완료된다.
당업자들 중 하나가 인식하는 바와 같이, 데이터를 복사하는 상술한 프로세스간 단일 단계는 커널이 시스템의 모든 오브젝트 및 자원에 대한 공공연한 액세스 권한을 갖기 때문에 가능해진다. 클라이언트 프로세스(102) 및 서버 프로세스(104)는 각자의 메모리 어드레스 공간과 관련된 오브젝트 및 자원에만 액세스할 수 있다. 이에 반해, 커널(106)은 클라이언트 프로세스 메모리 어드레스 공간에 있는 데이터를 판독 및 기록할 권한을 갖기 때문에 커널(106)은 클라이언트 프로세스 입력 버퍼(110, 112) 내의 데이터를 얻을 수 있다. 동일한 방식으로, 커널(106)은 서버 프로세스 메모리 어드레스 공간에 있는 데이터를 판독 및 기록할 권한을 갖기 때문에 커널(106)은 서버 프로세스 입력 버퍼(118, 120)에 직접 데이터를 기록할 수 있다. 따라서, 도 1 - 도 3에 나타낸 형태는 그렇지 않은 경우에 요구되는 2번의 데이터 복사 동작(즉, 커널 버퍼로의 입력 데이터 복사 및 커널 버퍼로의 출력 데이터 복사)을 실질적으로 제거한다. 이는 상당량의 데이터 이동을 수반하는 원격 동작들에 대해서 특히 시스템 오버헤드를 감소시킨다.
당업자들 중 하나는 또한 상술한 형태에서 커널(106)이 복사되는 데이터를 임시로 유지하기 위해 커널의 어떠한 버퍼 공간도 할당할 필요 없이 한 프로세스 영역에서 다른 프로세스 영역으로 데이터를 복사할 수 있다. 즉, 이 형태에서 커널은 클라이언트 프로세스 버퍼 공간들을 벗어나 커널 공간으로 그리고 이후에는 커널 버퍼 공간들을 벗어나 그리고 서버 프로세스의 버퍼 공간들로 데이터를 복사할 필요가 없다. 이는 커널 구조를 간소화하는 동시에 커널 메모리 할당을 최소화하며, 이는 오디오 및 비디오 표현 및 복사 애플리케이션에서 일어날 수 있는 것과 같이 상당량의 데이터의 전송을 수반하는 동작들을 지원하는데 특히 유리할 수 있다. 이와 같이, 다수의 겟 버퍼(130) 및/또는 풋 버퍼(134) 동작을 실행하는 서버 프로세스(104)에 의해, 시스템은 작은 입력 또는 출력 버퍼를 사용하여 그리고 (만약 존재한다면) 한정된 할당 커널 메모리로 보호 영역들 사이에서 무한한 양의 데이터를 교환할 수 있다.
상술한 형태들은 콜 인수들로 구성된 임의의 소스 및 목적지 어드레싱으로 보호 영역들 전역에 데이터의 단일 이동 복사를 제공한다. 따라서 클라이언트 프로세스(102)의 관점에서(그리고 클라이언트 프로세스 개발자의 관점에서), 그렇지 않은 경우에 시스템에 의해 금지되는 보호 영역들 전역의 데이터 복사를 포함하는 원격 오브젝트의 구현은 클라이언트 및 오브젝트 소프트웨어의 재작성 또는 이에 대한 걱정 없이 단일 표시 콜 및 임시 입력/출력 버퍼로 효율적으로 이행된다.
추가로, 다양한 형태에 따른 커널(106)은 원격 오브젝트들의 동기 호출을 지원한다. 이는 클라이언트 프로세스(102)가 서버 프로세스(104)와의 커널(106) 상호 작용의 상세를 알아야하거나 이와 관계하지 않고도 커널(106)을 통해 오브젝트에 대한 동기 호를 수행할 수 있게 한다(그 반대도 성립함). 따라서 오브젝트를 호출하기 위해, 클라이언트 프로세스(102)는 단지 호출되는 오브젝트만 식별할 필요가 있으며, 어떤 형태들에서는 오브젝트 호출 동작의 지속기간 동안 클라이언트 프로세스(102)의 메모리 공간에 대한 데이터의 판독 및 기록에 대한 허가를 승인할 필요가 있다.
상술한 바와 같이, 어떤 오브젝트들과 어떤 형태들을 위해, 서비스 콜(116)이 서버 프로세스(104) 내의 스레드를 활성화할 수도 있다. 어떤 구현에서, 스레드는 오브젝트 B(108)의 호출을 기다리는 서버 프로세스(104)에 있을 수도 있다. 오브젝트 B(108)가 호출되면, 대응하는 스레드가 깨워진다. 다른 형태에서, 커널(106)은 스레드 이동을 지원할 수 있다. 스레드 이동은 서버 프로세스에서 실행하는 스레드와 클라이언트 프로세스 영역으로부터의 서비스 콜을 동기화하기 위한 어떤 메커니즘을 말한다. 스레드 이동에서, 서버 프로세스(104)에 스택이 할당되고, 마치 스레드가 보호 영역들을 전환한 것처럼 실행의 제어가 클라이언트에서 서버로 전환한다. 이동 스레드의 실행은 마치 클라이언트 프로세스(102)의 스레드가 호출의 지속기간 동안 보호 영역들을 변경한 것처럼 서버 프로세스(104)에서 시작할 수 있다.
도 4, 도 5a 및 도 5b는 클라이언트 프록시(146)를 사용함으로써 시스템 콜과 관련된 항목들이 클라이언트 프로세스(102)로부터 가려질 수 있는 대안적인 형태들을 나타낸다. 마찬가지로, 시스템 콜에 응답하는 서버 프로세스(104)와 관련된 프로세스간 데이터 교환 항목들은 서버 프록시(146)를 사용함으로써 서버 프로세스(104)로부터 가려질 수 있다. 원격 오브젝트를 호출하고 보호 영역들 간에 데 이터를 교환하는 프로세스들은 두 가지 추가 사항과 함께 도 1 - 도 3을 참조로 상술한 형태와 비슷하다. 첫째, 시스템 콜(116)을 실행하는 단계, 입력 데이터를 입력 데이터 버퍼에 배치하는 단계, 및 커널(106)로부터 출력 데이터를 수신하는 단계가 클라이언트 프로세스(102)에 대한 프록시로 작용하는 중간 소프트웨어에 의해 다뤄질 수 있다. 둘째, 커널(106)로부터 오브젝트 콜을 수신하는 단계, 겟 버퍼(130) 및 풋 버퍼(134) 동작을 생성하는 단계, 및 입력 및 출력 데이트를 처리하는 단계가 서버 프로세스(104)에 대한 프록시로서 작용하는 중간 소프트웨어에 의해 실행될 수 있다. 원격 오브젝트를 호출하는 애플리케이션은 프로세스가 커널에 의해 어떻게 실행될지에 관계없이 단지 일반적인 포맷으로 인수들을 제공하고 출력 데이터를 수신할 필요가 있기 때문에 클라이언트 프록시(146) 및 서버 프록시(148)의 사용은 클라이언트 및 서버 애플리케이션 소프트웨어의 개발을 더 간소화한다.
도 4에 나타낸 예시적인 형태에서, 시스템 콜은 서버 프로세스(104) 영역 내의 시스템 메모리에 저장된 데이터 블록(150)을 판독하기 위해 클라이언트 프로세스(102)에 의해 호출되는 판독 방법(142)이다. 도 4와 도 5a를 같이 참조하면, 단계(402)에서 클라이언트 프로세스(102)는 클라이언트 프록시(146)에 대해 동작 및 원하는 데이터 블록을 식별함으로써 데이터 블록(150)에 대한 판독 동작(142)을 호출한다. 클라이언트 프록시(146) 코드는 클라이언트 프로세스(102) 영역 내에 상주하며, 따라서 클라이언트 프로세스 메모리(즉, 버퍼) 공간에 대한 충분한 액세스를 갖는다. 단계(404)에서, 클라이언트 프록시(146) 코드는 원격 호출의 명칭 및 원격 호출의 인수들을 클라이언트 프록시가 커널(106)에 전송하는 시스템 콜(116) 에 정렬한다. 이 형태는 마치 데이터 블록(150)이 시스템 메모리의 클라이언트 프로세스(102) 영역 내에 상주하는 것처럼 클라이언트 프로세스(102)가 데이터 블록(150)에 대한 판독 방법(142)을 호출할 수 있게 한다.
동작에서, 클라이언트 프로세스(102)는 단계(402)에서 클라이언트 프록시(146)에 대한 판독 방법 콜(142)을 수행하여 판독 방법(142)에 필요한 인수들을 전달한다. 단계(404)에서, 클라이언트 프록시(146)는 인수들을 시스템 콜(116)에 넣고 실행의 제어를 커널(106)로 전달하는 시스템 콜(116)을 실행한다. 예시적인 형태에서, 클라이언트 프록시(146)에 의해 생성된 시스템 콜(116)은 인수들로서 입력 및 출력 데이터에 대한 포인터들 및 오브젝트 식별자를 포함하는 INVOKE 시스템이다. 예를 들어, 콜은 SysCall(INVOKE, nObjID, 입력 포인터, 출력 포인터)일 수 있다. 입력 데이터는 또 데이터 블록 오브젝트의 크기를 포함할 수 있다. 인식되는 바와 같이, 클라이언트 프로세스(102)에 의해 호출되는 판독 방법은 클라이언트 프록시(146)에 의해 생성되는 INVOKE 시스템 콜에 직접 대응한다.
나머지 프로세스는 도 1 - 도 3을 참조로 상술한 것과 비슷한 방식으로 진행한다. 이에 따라, 도 3의 상기 설명들은 여기서 도 5a에 나타낸 동일 번호의 단계들에 대해 통합된다. 호출된 동작의 마지막에, 단계(434)에서 커널(106)은 실행의 제어를 클라이언트 프록시(142)로 리턴한다.
도 4 및 도 5b에 나타낸 다른 형태에서, 서버 프로세스(104) 영역 내의 서버 프록시(148)는 커널(106)과 서버 프로세스(104) 간의 통신을 관리한다. 이 형태에서, 커널(106)은 호출된 동작을 위해 서버 프로세스(104)에 의해 요구되는 데이터 를 수집하는 매개로서 동작하는 서버 프록시(148)와 통신한다. 호출된 오브젝트는 예를 들어 서버 프록시(148)로 IRemoteCall 인터페이스 포인터를 전달하는 등으로 데이터를 요청할 수 있다. 당업자들 중 하나에 의해 인식되는 바와 같이, 서버 프록시(148)는 요청 메시지(152) 내에 채워진 원격 호출 콜에 직접 대응하는 함수 콜을 구현할 수 있다.
도 5b에 나타낸 많은 단계는 도 1 - 도 3과 도 5a를 참조로 상술한 것과 비슷한 방식으로 진행한다. 이에 따라, 도 3 및 도 5a에 관한 상기 설명들은 여기서 도 5b에 나타낸 동일 번호의 단계들에 대해 통합된다. 단계(410)에서, 커널(106)은 오브젝트가 호출되고 있음을 서버 프록시(148)에 알려, 서버 프록시에 오브젝트 ID를 제공한다. 서버 프록시는 도 1 - 도 3을 참조로 더 상세히 상술한 바와 같이, 단계(320)에서 커널(106)이 클라이언트 프로세스 버퍼(110, 112)로부터 서버 프로세스 버퍼(118, 120)로 입력 데이터를 복사하는 것에 응답하여, 단계(418)에서 커널(106)에 대한 겟 버퍼(130) 콜 등으로 입력 데이터를 요청할 수 있다. 대안으로, 서버 프록시(148)는 커널(106)에 의해 복사된 입력 데이터를 클라이언트 프로세스(102) 입력 데이터 버퍼들로부터 수신할 수 있다. 복사 동작이 완료되면, 커널(106)은 단계(422)에서 실행의 제어를 서버 프록시(148)로 리턴한다. 서버 프록시(148)가 필요한 모든 입력 데이터를 수신했으면, 서버 프록시(148)는 단계(423)에서 호출되는 원격 오브젝트를 불러낸다. 그 다음, 서버 프로세스(104)는 클라이언트 프로세스(102)에 의해 호출된 동작(도 4에서 판독 방법(142)으로서 나타냄)을 수행한다. 나머지 프로세스는 단계(430, 432)에서 커널(106)과의 통신이 서버 프 록시에 의해 관리된다는 점을 제외하고, 대체로 도 3을 참조로 상술한 것과 같이 진행한다.
한 예시적인 형태에서, 판독될 데이터 블록(150)이 서버 프로세스(104) 내의 임시 출력 버퍼(154)에 복사될 수 있다. 데이터 블록(150)이 서버 프로세스(104)의 출력 버퍼(154)에 복사되면, 데이터는 도 1 - 도 3을 참조로 상술한 단일 단계 프로세스간 복사 방법들을 이용하여, 도 4에 점선 화살표로 나타낸 것과 같이 커널(106)에 의해 클라이언트 프로세스(102)의 적절한 출력 버퍼(예를 들어, 도 1의 버퍼(114))로 복사된다.
도 4에 나타내고 상술한 서버 프로세스(104) 내에 데이터를 임시 복사하는 단계는 의무적이지 않다. 다른 형태에서, 버퍼(154)는 데이터 블록(150) 자체 내에 정의될 수 있다. 다른 구현에서, 커널(106)은 클라이언트 및 서버 프로세스 영역 모두에 대한 액세스를 갖기 때문에 커널은 데이터 블록(150)으로부터 직접 클라이언트 프로세스(102)의 버퍼로의 단일 단계 프로세스간 복사를 간단히 수행할 수 있다. 따라서 애플리케이션 전개를 간소화하기 위한 클라이언트 및 서버 프록시(146, 148)의 구현은 다양한 실시예에 의해 가능한 프로세스간 통신들에 오버헤드를 추가할 필요가 없다. 데이터의 단일 단계 프로세스간 복사를 수행하는 이러한 커널(106)의 능력은 서버 프로세스(104)에서 커널(106)로 그리고 커널(106)을 벗어나 클라이언트 프로세스로의 데이터 복사와 관련된 오버헤드를 실질적으로 제거한다. 상술한 바와 같이, 데이터의 단일 단계 프로세스간 복사를 가능하게 하는 것은 보호 영역들 전역으로 상당량의 데이터가 복사될 필요가 있을 때 특히 유리하 다. 큰 클래스의 함수들에 대해, 마이크로커널 구조와 관련된 데이터 이동 오버헤드는 프로세스간 복사가 원격 함수에서 암시적일 수 있는 사본들을 오버랩할 수 있기 때문에 실질적으로 0으로 감소할 수 있다. 예를 들어, 파일 시스템으로부터의 판독시, 프로세스간 복사는 파일 시스템 캐시로부터 클라이언트 버퍼로 직접 메모리를 이동시킬 수 있어 단 한 번의 복사를 필요로 할 수 있다. 복사 동작이 "판독" 함수에 암시되어 있기 때문에, 호출이 프로세스 경계를 가로지를 필요가 없을 때에도 한 번의 복사가 필요하다.
도 6a - 도 8에 나타낸 다른 형태에서, 클라이언트 프로세스(102)에 의해 호출된 원격 오브젝트 C(156)가 커널(106) 자체 내에 상주한다. 이런 식으로 커널 기반 프로세스들을 구현하는 것은 호출되는 원격 오브젝트의 위치와 상관없이, 클라이언트 프로세스(102) 또는 클라이언트 프록시(146)에 의해 시작되는 시스템 콜(116)을 구조적으로 그리고 기능적으로 동일하게 할 수 있다. 도 6a 및 도 6b는 이 형태에서 호출되는 프로세스들, 메모리 영역들 및 버퍼들의 상호 관계를 나타낸다. 도 7은 클라이언트 프로세스(102)와 커널(106) 간의 통신을 나타내는 호출 흐름도이다. 이러한 형태의 프로세스(500)의 동작 단계들의 예가 도 8의 프로세스 흐름도로 설명된다.
도 6a 내지 도 8을 함께 참조하면, 클라이언트 프로세스(102)는 단계(502-504)에서 커널(106)에 의해 시스템 콜(116)을 실행하여 커널(106)에 상주하는 원격 오브젝트 C(108)를 호출한다. 도 4 및 도 5a를 참조로 상기에 상세히 설명한 바와 같이, 어떤 형태들에서 클라이언트 프로세스(102)는 단계(502)에서 클라이언트 프 록시(146)에 함수 콜을 전송하고, 클라이언트 프록시(146)에 함수 콜의 인수들을 전달함으로써 이를 수행할 수 있다. 단계(504)에서 클라이언트 프록시(146)는 필요한 인수들을 정렬하고, 원격 함수 호출 및 오브젝트 C(156)의 관련 인수들과 로컬 오브젝트 식별자를 포함하는 시스템 콜(116)을 생성하여 실행한다. 예를 들어, 오브젝트 C(156)의 로컬 오브젝트 식별자 외에도, 클라이언트 프록시(146)는 오브젝트 C(156)에 이용 가능하게 될 입력 데이터 IP 1A를 포함하는 클라이언트 프로세스(102) 입력 버퍼(110)에 대한 포인터 및 오브젝트 C(156)로부터의 데이터가 복사될 수 있는 출력 버퍼(114)에 대한 포인터를 전달할 수 있다.
클라이언트 프록시(146)로부터 시스템 콜(116)을 수신한 후, 단계(506)에서 커널(106)은 클라이언트가 오브젝트를 호출하기 위해 필요한 허가를 받았음을 확인함으로써 호출을 검증하고 오브젝트 C(156)가 커널(106)에 상주하는 오브젝트인지 사용자 프로세스에 상주하는 오브젝트인지 결정한다. 커널(106)이 오브젝트 C(156)가 커널(106)에 상주한다고 결정하면, 커널(106)은 단계(508)에서 시스템 콜(116)의 실행 제어를 커널 프록시(158)로 넘길 수 있다. (커널(106)이 오브젝트가 서버 영역에 상주한다고 결정했다면, 커널(106)은 도 1 - 도 5b를 참조로 상술한 것과 비슷한 방식으로 진행하게 된다는 점에 유의한다.) 예시적인 실시예에서, 커널(106)은 단계(508)에서 커널 프록시(158)에 IRemoteCall 인터페이스 포인터를 전달할 수 있다. 당업자들 중 하나는 커널 프록시(148)에 의해 구현되는 이러한 함수 콜이 시스템 콜(116)의 원격 함수 호출에 직접 대응함을 인식할 것이다. 오브젝트가 커널 동작에 관계할 필요 없이 커널 프록시(158)와 상호 작용하도록 프로 그램 가능하기 때문에 커널 프록시(158)의 사용자는 커널 영역 내의 구현을 위한 오브젝트들의 개발을 간소화한다. 그러나 커널 프록시(158)의 사용자는 의무적이지 않으며, 대안적인 실시예에서 커널(106)은 호출된 오브젝트 C(156)를 직접 구현할 수 있다.
커널(106)은 클라이언트 프로세스(102) 메모리 공간 내에서 데이터를 판독 및 기록할 권한을 갖기 때문에 단계(510)에서 커널(106)은 시스템 콜(116)에 제공된 포인터들을 사용하여 입력 데이터 IP 1A를 커널 입력 버퍼(160)에 직접 복사할 수 있다. 커널 프록시(158)는 단계(512)에서 입력 데이터를 수신한 다음, 커널(106) 내에서 호출되는 오브젝트 C(156)를 불러낼 수 있다. 단계(512)에서 커널(106)은 호출된 오브젝트(또는 함수나 스레드)를 수행한다. 출력 데이터 OP K1은 (출력 데이터가 생성된다면) 커널 출력 버퍼(162)에 임시 저장될 수 있다. 커널(106)은 단계(514)에서 커널(106)에 의해 데이터를 클라이언트 서버(102)의 적절한 출력 버퍼에 복사한다. 대안적인 실시예에서, 커널(106)은 클라이언트 프로세스(102) 메모리 공간에 기록할 권한을 갖기 때문에 커널은 호출된 오브젝트에 의해 생성된 데이터를 직접 클라이언트 프로세스(102) 출력 버퍼(114)에 기록할 수 있다. 커널(106) 또는 커널 프록시(158)는 단계(516)에서 실행의 제어(140)를 클라이언트 프로세스(102)로 리턴한다.
도 6b에 나타낸 것과 같이, 이러한 형태의 변형으로, 커널(106)은 클라이언트 영역 버퍼(110)로부터 입력 데이터를 판독하여 데이터를 커널 버퍼에 복사하지 않고 데이터를 호출된 오브젝트로 직접 제공할 수 있다. 이러한 형태는 커널 버퍼 들에 대한 필요성이 없다는 점을 제외하고, 도 6a, 도 7 및 도 8을 참조로 상술한 것과 동일한 방식으로 기능한다. 커널(106)은 클라이언트 프로세스(102) 메모리 공간에 대한 판독 및 기록 액세스를 모두 갖기 때문에, 커널(106)은 클라이언트 프로세스 입력 버퍼(110)에 대한 포인터를 획득하여 입력 데이터 IP 1A에 직접 액세스할 수 있다. 한 예시적인 구현에서, 커널(106)은 "Acquire In Ptr" 및 "Acquire Out Ptr" 동작을 각각 이용함으로써 클라이언트 프로세스 버퍼(110, 114)에 대한 포인터를 얻을 수 있다. 이런 식으로, 커널(106)은 클라이언트 프로세스(102)로부터 커널(106)로 그리고 커널(106)을 벗어나 다시 클라이언트 프로세스(102)로의 데이터 복사와 관련된 임의의 추가 복사 동작들을 수행할 필요가 없다.
도 9에 나타낸 것과 같은 다른 구현에서, 클라이언트 프로세스(102)는 파일 시스템 메모리 영역(172) 내에 위치하는 제 2 오브젝트(174)를 호출할 수 있는 서버 프로세스(104) 영역 내의 원격 오브젝트(170)를 호출할 수 있다. 이러한 구현에서, 호출된 원격 오브젝트 D(170)에는 파일 시스템 영역(172) 내에 상주하는 데이터 블록(174)과 같은 다른 오브젝트에 액세스할 권한이 부여된다. 따라서 시스템 콜은 인수들과 버퍼 포인터들을 제공하는 것 외에도 오브젝트들(성능들)을 호출하는 능력을 부여한다.
도 9를 참조하면, 클라이언트 프로세스(102)는 도 3 및 도 5a를 참조로 상술한 것과 비슷한 방식으로 오브젝트 D(170)의 원격 호출을 요청하는 시스템 콜(116)을 커널(106)로 전송한다. 오브젝트 D(170)에 대한 오브젝트 식별자 외에도, 시스템 콜(116)은 파일 시스템 메모리 영역(172) 내에 상주하는 오브젝트 E(174)에 대 한 오브젝트 참조를 더 포함한다. 이 구현에서, 오브젝트 참조는 원격 오브젝트 D(170)에 다른 오브젝트 E(174)를 직접 호출할 권한을 부여한다. 이러한 권한 부여는 오브젝트들 각각에 액세스할 수 있는 프로세스들뿐만 아니라 모든 오브젝트의 위치를 기억할 수 있는 커널(106)에 의해 레코딩된다. 다른 오브젝트를 호출하는 권한 부여는 또한 출력 시스템 콜들에 출력 파라미터로서 포함될 수 있다. 따라서 시스템 콜은 오브젝트에 다른 오브젝트를 호출할 권한을 주는 입력 파라미터를 포함할 수 있고 그리고/또는 시스템 콜은 다른 오브젝트를 호출할 권한을 클라이언트 프로세스로 리턴하는 출력 파라미터를 포함할 수도 있다.
이러한 형태의 예시적인 구현은 신뢰성 이는 멀티미디어 프로세스에 상주하는 멀티미디어 플레이어 오브젝트 D(170)이다. 보호 메모리 구조에서, 클라이언트 프로세스(102) 및 멀티미디어 프로세스(서버 프로세스(104))는 각각의 다른 메모리 공간들에 액세스할 수 없다. 이러한 형태를 구현함으로써, 클라이언트 프로세스(102)는 플레이 또는 정지 기능을 호출함으로써 멀티미디어 플레이어 오브젝트(170)를 제어할 수 있다. 멀티미디어 플레이어 오브젝트(170)가 미디어(예를 들어, 음악 또는 비디오)의 재생을 시작하게 하기 위해, 클라이언트 프로세스(102)는 멀티미디어 플레이어 오브젝트(170)가 직접 호출 및 액세스(176)할 수 있는 파일 시스템 메모리 영역(172)에 상주하는 멀티미디어 데이터 블록(174)에 대한 참조를 멀티미디어 플레이어에 제공한다. 한 형태에서, 멀티미디어 플레이어 오브젝트(170)에는 클라이언트 프로세스(102)에 의해 발생한 시스템 콜(116)을 통해 멀티미디어 플레이어 오브젝트(170)로 전송되는 데이터 블록 참조에 의해 파일 시스템 메모리 영역(172) 내의 오브젝트 E(174)를 호출 및 액세스할 권한이 주어진다.
호출된 원격 오브젝트에 비교적 큰 입력 데이터 블록이 효율적으로 제공될 수 있는 다른 형태가 도 10 및 도 11에서 설명된다. 이 구현은 큰 입력 데이터 블록들에 대해 작용하는 원격 오브젝트들의 효율적인 호출을 제공할 수 있다. 도 10은 이러한 형태의 프로세스(600)의 호출 흐름도이고, 도 11은 프로세스(600)의 프로세스 흐름도이다. 단계들 중 여러 개는 도 3을 참조로 상술한 것과 비슷하기 때문에 이들 설명들은 여기서 도 11에 나타낸 동일 번호의 단계들에 대해 통합된다.
도 10과 도 11을 함께 참조하면, 단계(302)에서 클라이언트 프로세스(102)는 커널(106)에 대한 시스템 콜(116)을 실행한다. 시스템 콜(116)은 원격 오브젝트의 오브젝트 식별자, 입력 데이터가 상주하는 클라이언트 프로세스(102)의 메모리 여역에 대한 포인터들, 및 서버 프로세스(104)에 의해 출력된 데이터가 복사될 클라이언트 프로세스(102) 메모리 영역에 대한 포인터들을 커널(106)에 제공한다. 이에 응답하여, 커널(106)은 단계(304)에서 시스템 콜을 확인(즉, 클라이언트 프로세스가 오브젝트의 호출을 허가받았음을 확인)하고, 단계(306)에서 호출되는 오브젝트를 호스팅하는 서버 프로세스(104)의 위치를 찾는다.
서버 프로세스(104)를 깨우기 전에, 단계(620)에서 커널(106)은 미리 결정된 양의 데이터를 클라이언트 프로세스(102)의 메모리 공간으로부터 서버 프로세스(104) 메모리 공간 내의 미리 지정된 메모리 영역으로 복사한다. 한 형태에서, 커널(106)과 서버 프로세스(104)는 커널(106)에 의해 클라이언트 서버(102)로부터 직접 복사될 데이터를 수신하기 위한 서버 프로세스(104) 메모리 공간의 영역을 지 정하기 위해 협의할 수 있다. 한 구현에서, 서버 프로세스(104)가 서버 프로세스(104)에 처음 복사된 미리 결정된 양의 데이터에 포함되지 않는 나머지 데이터를 요청하기 위해 결국 커널(106)을 호출할 것이라는 가정 하에 데이터가 복사된다. 이러한 입력 데이터에 대한 추가 요청들은 도 3(단계(318-324))을 참조로 상술한 바와 같이 다수의 겟 버퍼(130) 동작을 발생시키는 서버 프로세스(104)(또는 서버 프록시(148))에 의해 이행될 수 있다.
입력 데이터 블록이 서버 프로세스(104) 메모리 공간에 복사되었으면, 커널(106)은 단계(622)에서 메시지(128)를 전송하여 클라이언트 프로세스(102)에 의해 전송된 요청 메시지를 클라이언트 서버에 알림으로써 호출된 서버 스레드를 깨운다. 이때, 서버 프로세스(104)는 입력 데이터를 얻기 위해 (프록시가 구현된다면) 서버 프록시(148)를 호출할 수 있다. 서버 프로세스(104) 메모리에 프리로드된 입력 데이터로, 서버 프로세스(104) 또는 서버 프록시(148)는 커널(106)에 대한 겟 입력(Get Input) 요청을 실행할 필요 없이 입력 데이터를 얻을 수 있다. 대신, 서버 프로세스(104) 또는 서버 프록시(148)는 단계(624)에서 서버 버퍼의 데이터에 액세스한다. 이 형태는 특히 작은 버퍼들을 포함하는 구현들 및 애플리케이션들에 적용된다. 더 큰 버퍼들이 사용되는 경우에, 서버 프로세스(104) 또는 서버 프록시(148)는 서버 프로세스(104) 메모리에 대한 겟 버퍼(164) 동작을 발생시킬 수 있다. 따라서 이 형태는 커널로부터의 입력 데이터를 요청할 필요성을 실질적으로 제거할 수 있어, 커널(106)에 대해 필요한 시스템 콜의 수를 줄일 수 있다.
단계(324)에서 서버 프로세스(104)가 호출된 스레드를 완료했으면, 서버 프 록시(148)는 단계(326)에서 커널(106)이 서버 프로세스(104)의 버퍼 내에 포함된 데이터를 클라이언트 프로세스(102)의 출력 버퍼로 복사할 것을 요청하는 풋 버퍼 요청(134)을 실행한다. 단계(328)에서 커널(106)이 서버 프로세스(102) 버퍼로부터의 출력 데이터를 클라이언트 프로세스(104) 출력 버퍼로 직접 복사하면, 단계(330)에서 커널은 메시지(136)에 의해 실행의 제어를 서버 프로세스(104)로 리턴한다. 호출된 동작이 완료하면, 서버 프로세스(104)는 단계(332)에서 실행의 제어(138)를 커널(106)로 리턴하고, 단계(334)에서 커널(106)이 실행의 제어(140)를 클라이언트 프로세스(102)로 리턴하게 한다.
도 12 및 도 13은 공유 메모리를 사용함으로써 커널(106)에 의해 데이터를 복사할 필요성을 제거하는 다른 형태를 나타낸다. 여러 단계는 도 3을 참조로 상술한 것과 비슷하기 때문에 이들 설명은 여기서 도 13에 나타낸 동일 번호 단계들에 대해 통합된다.
도 12 및 도 13을 참조하면, 클라이언트 프로세스(102) 입력 데이터 IP 1A는 클라이언트 프로세스(102)와 서버 프로세스(104)에 의해 모두 액세스 가능한 공유 메모리 공간(180) 내의 입력 버퍼(182)에 상주한다. 클라이언트 프로세스(102)는 입력 버퍼(182)에 입력 데이터를 유지할 수도 있고, 또는 원격 오브젝트를 호출하기 직전에 데이터를 입력 버퍼(182)에 복사할 수도 있다. 동작에서, 클라이언트 프로세스(102)는 단계(302)에서 시스템 콜(116)을 실행함으로써 서버 프로세스(104)에 상주하는 원격 오브젝트 B(108)를 호출한다. 버퍼(182, 184)에 대한 포인터들뿐 아니라 오브젝트 B(108)의 식별자도 시스템 콜(116)에 포함된다. 커 널(106)은 단계(304)에서 시스템 콜을 확인하고, 단계(306, 308)에서 오브젝트가 어디에 위치하는지를 결정하며, 단계(310)에서 서버 프로세스(104)에 호출 요청을 알린다. 한 형태에서, 커널은 단계(312)에서 호출된 서버 스레드를 깨울 수 있고, 서버 스레드는 단계(702)에서 입력 데이터를 요구하는 요청을 커널(106)에 전송할 수 있다. 예를 들어, 서버 프로세스(104)는 "Acquire In Ptr" 및 "Acquire Out Ptr" 동작을 실행하여 데이터 버퍼들에 대한 포인터들을 얻을 수 있다. 응답하여, 커널(106)은 단계(704)에서 입력 및 출력 버퍼(182, 184)에 대한 포인터들을 서버 스레드에 제공한다. 대안으로, 커널(106)은 단계(704)에서 암시 없이 서버 프로세스(104)에 입력 및 출력 버퍼(182, 187)에 대한 포인터들을 제공할 수 있다. 서버 프로세스(104)는 공유 메모리(180)에 대한 액세스 권한을 갖고 따라서 이에 상주하는 입력 및 출력 버퍼(182, 184)에 대한 액세스 권한을 갖기 때문에, 서버 프로세스(104)는 단계(706)에서 버퍼(182) 내의 입력 데이터 IP 1A에 직접 액세스할 수 있다. 이는 클라이언트 프로세스(102)로부터 서버 프로세스(104)로 데이터를 복사하는 커널(106)의 오버헤드를 제거한다. 이때, 단계(324)에서 서버 프로세스(104)는 호출된 프로세스를 수행한다. 완료시, 단계(708)에서 서버 프로세스(104)는 임의의 출력 데이터를 공유 메모리(180) 내의 출력 버퍼(184)에 직접 기록한다. 이때, 서버 프로세스(104)는 단계(332)에서 실행의 제어를 커널(106)로 리턴하여 함수가 완료했음을 지시하고, 단계(334)에서 커널(106)이 실행의 제어를 클라이언트 프로세스(102)로 리턴하게 한다.
당업자들 중 하나는 도 11을 참조로 상술한 것과 비슷한 방식으로 프로세스 를 깨우기 전에 입력 및 출력 버퍼(182, 184)에 대한 포인터들이 서버 프로세스(104)에 제공될 수 있으며, 이로써 서버 프로세스(104)가 커널(106)에 전송할 필요가 있는 요청의 수를 줄일 수 있음을 인식할 것이다.
이 형태의 선택적인 변형으로, 클라이언트 프로세스(102)는 호출되는 각 스레드에 대한 클라이언트 메모리의 공유 가능 메모리 영역을 설정하도록 커널(106)과 조정한다. 예컨대, 클라이언트 프로세스의 시스템 콜(116)에 포함된 인수들은 호출된 스레드에 액세스 가능하게 된 클라이언트 메모리의 영역 내에 위치하는 입력 및 출력 데이터 버퍼들을 지정(즉, 이에 대한 포인터들을 포함)할 수 있다. 이 형태에서, 커널(106)은 단계(710)에서 클라이언트 프로세스(102)의 지시된 입력 및 출력 데이터 버퍼 부분들이 서버 프로세스(104)에서 볼 수 있도록 메모리 관리 유닛(MMU)에 지시할 수 있다. 예를 들어, 공유될 데이터는 클라이언트 프로세스(102) 메모리의 특정 페이지에 있을 수 있어, MMU가 특정 페이지에 대한 액세스 권한을 서버 프로세스(104)에 부여할 수 있다. 통상적으로, 이러한 액세스는 시스템 콜의 지속기간 동안에만 부여될 것이다. 이는 커널(106)이 서버 프로세스(104)로부터 리턴되는 시스템 콜의 수신시 클라이언트 프로세스(102) 메모리에 대한 서버 프로세스(104) 액세스를 제거할 것을 MMU에 요청함으로써 이루어질 수 있다.
이러한 형태의 다른 변형으로, 도 14에 나타낸 것과 같이 클라이언트 프로세스(102) 및 서버 프로세스(104)가 메모리의 동일 영역에 대한 액세스를 갖지 않을 때 커널(106)은 호출의 지속기간 동안 클라이언트의 버퍼가 서버 프로세스(104)에 이용 가능하게 할 것을 MMU에 지시할 수 있다. 호출 시작시, 커널(106)은 서버 프 로세스(104)에 의해 하나 이상의 입력 버퍼가 판독 가능하도록 서버 프로세스(104)의 가상 어드레스 공간을 수정할 수 있다. 마찬가지로, 커널(106)은 서버 프로세스(104)에 의해 하나 이상의 출력 버퍼가 기록 가능하도록 서버 프로세스(104)의 가상 어드레스 공간을 수정할 수 있다. 이는 서버 프로세스 가상 어드레스들을 입력 또는 출력 버퍼가 상주하는 물리적 메모리 어드레스들에 매핑할 것을 MMU에 지시하는 것을 필요로 한다. 커널(106)은 단계(812)에서 서버 프로세스(104)에 오브젝트를 호출하기 위한 요청을 통지할 수 있다. 커널 통지가 입력 데이터의 위치를 포함하지 않았다면, 단계(814)에서 서버 프로세스(104)는 커널(106)로부터의 데이터를 요청할 수 있다. 이에 응답하여, 커널(106)은 단계(816)에서 서버 프로세스(104)에 입력 데이터의 위치를 제공한다. 이때, 서버 프로세스는 단계(818)에서 새로 매핑된 가상 메모리 어드레스들로부터 입력 데이터에 직접 액세스할 수 있고, 단계(820)에서 오브젝트에 대해 호출된 동작을 수행하여, 단계(822)에서 결과적인 출력을 새로운 공유 메모리 공간에 저장할 수 있다. 동작을 완료하기 위해, 서버 프로세스(104)는 단계(824)에서 출력 데이터의 공유 메모리의 위치를 커널(106)에 알리고, 이는 단계(826)에서 커널(106)이 클라이언트 프로세스에 출력 데이터 위치를 알릴 수 있게 한다. 클라이언트 프로세스(102)로 실행의 제어를 리턴하기 전에, 커널(106)은 버퍼들을 서버 프로세스(104)에 이용 가능하게 하기 위해 제자리에 두었던 가상 메모리 매핑들을 제거하게 된다.
이러한 구현은 입력 및 출력 데이터가 프로세스들에 의해 직접 액세스되게 하여, 커널(106)이 보호 경계들에 걸쳐 데이터를 복사할 필요성을 없앤다. 이는 많은 이점을 갖는다. 첫 번째 이점은 클라이언트 프로세스(즉, 호출하는 프로세스)와 서버 프로세스(즉, 호출된 프로세스) 사이에 클라이언트 프로세스(102)에 의해 수행되는 어떠한 복사도 없이 입력 및 출력 데이터가 "이동"할 수 있다는 점이다. 두 번째 이점은 서버 프로세스가 입력들의 위치 및/또는 크기를 예측하거나 클라이언트 프로세스로 리턴한 후 출력 데이터의 복사를 유지할 필요가 없다는 점이다. 대신, 서버 프로세스(104)는 단지 입력 데이터를 직접 판독하여 클라이언트 프로세스 영역 내의 버퍼로 데이터를 출력한다. 세 번째 이점은 서버 프로세스(104)가 메모리의 모든 입력 및 출력 인수를 동시에 보유하기에 충분한 메모리를 가질 필요가 없다는 점이다.
상술한 형태들의 이벤트들을 구현하기 위해 사용되는 하드웨어는 한 세트의 명령들을 실행하도록 구성된 처리 엘리먼트들 및 메모리 엘리먼트들일 수 있으며, 한 세트의 명령들은 상술한 이벤트들에 대응하는 방법 단계들을 수행하기 위한 것이다. 대안으로, 어떤 이벤트들은 소정의 기능에 지정된 회로에 의해 수행될 수 있다. 도 15는 상술한 형태들을 구현하는 시스템의 통상의 컴포넌트들을 나타낸다. 이러한 시스템은 랜덤 액세스 메모리(2)에 연결된 프로세서(1) 및 메모리 관리 유닛(MMU; 3)을 포함한다. 시스템은 또한 커널 소프트웨어 명령들을 저장하는데 사용될 수 있는 판독 전용 메모리를 포함할 수 있다. 동작에서, 클라이언트 프로세스(102), 서버 프로세스(104) 및 커널(106)은 랜덤 액세스 메모리(2)에 액세스하는 프로세서(1)에서 구동하는 개별 소프트웨어 명령 스레드로서 존재한다.
모바일 핸드셋의 다양한 형태의 특정 구현이 도 16에 설명된다. 상기한 바 와 같이, 다양한 형태는 그 제한된 프로세스 및 메모리 용량으로 인해 모바일 핸드셋에 특히 유리하다. 모바일 핸드셋(10)은 셀룰러폰, 멀티미디어 인터넷 가능 셀룰러폰, 개인 디지털 보조기기, 전자 음악 데이터 블록(예를 들어, MP3) 플레이어 및/또는 무선 전자 메일 수신기 중 임의의 것일 수 있다. 이러한 모바일 핸드셋(10)은 메모리(12) 및 디스플레이(13)에 연결된 프로세서(11)를 포함할 수 있다. 모바일 핸드셋(10)은 또한 예를 들어 셀룰러폰 데이터 수신기, 유선(예를 들어, 파이어 와이어(Fire Wire)) 데이터 링크, 블루투스 무선 데이터 링크 및 적외선 데이터 링크(도시 생략)와 같은 다수의 데이터 입력/출력 인터페이스를 포함할 수 있다. 예를 들어, 모바일 핸드셋(10)은 (도시하지 않은) 무선 네트워크 송신기/수신기 노드로부터 전자기 신호들을 수신하는 안테나(14), 및 안테나(14)에 연결되어 무선 신호를 수신하고 신호들을 프로세서(11)로 중계되는 디지털 데이터로 변환하는 무선 트랜시버(15)를 포함할 수 있다. 비슷하게, 블루투스 및 비슷한 로컬 무선 데이터 링크는 수신된 무선 신호를 프로세서(11)로 중계되는 디지털 신호로 변환하는 WiFi, 블루투스, WLAN, WiMax 등의 트랜시버(18)에 접속된 안테나(14)(또는 별도로 도시하지 않은 다른 안테나)를 포함할 수 있다. 데이터는 또한 파이어 와이어, USB, 시리얼(예를 들어, RS-232) 또는 이더넷 데이터 링크와 같은 유선 데이터 링크에 의해 모바일 핸드셋(10)으로 또는 모바일 핸드셋(10)으로부터 전송될 수도 있다. 예를 들어, 커넥터(19)로부터 수신된 데이터를 프로세서(11)로 중계하는 디지털 데이터로 변환하는 파이어 와이어 모뎀 회로(20)에 접속된 파이어 와이어 데이터 커넥터(19)에 의해 데이터가 전송될 수 있다. 공지된 바와 같이, 다른 유 선 데이터 링크들은 특정 데이터 링크에 적합한 비슷한 회로를 수반한다. 모바일 핸드셋(10) 내의 데이터 입력 및 출력 디바이스 중 임의의 디바이스가 데이터 통신 기능들을 수행하기 위해 서버 프로세스와 같이 클라이언트 프로세스(102)에 의해 액세스 가능한 것은 아무런 가치가 없다.
다양한 형태들은 설명한 방법들 중 하나 이상을 구현하도록 구성된 소프트웨어 명령들을 실행하는 프로세서(11)에 의해 구현될 수 있다. 이러한 소프트웨어 명령들은 디바이스의 운영 시스템, 운영 시스템에 의해 구현되는 API들의 시리즈, 또는 실시예의 방법을 구현하는 컴파일된 소프트웨어로서 메모리(12)에 저장될 수 있다. 또한, 소프트웨어 명령들은 시스템 내의 메모리 칩(2, 12)과 같은 랜덤 액세스 메모리(2, 12) 모듈이나 USB 접속 가능 외부 메모리(예를 들어, "플래시 드라이브"), 판독 전용 메모리(4), 하드 디스크 메모리 디바이스, 플로피 디스크, 콤팩트 디스크와 같은 외부 메모리 칩을 포함하는 임의의 형태의 유형 프로세스 판독 가능 메모리에 저장될 수 있다.
당업자들은 본원에 개시된 실시예들에 관련하여 설명한 다양한 예시적인 논리 블록, 모듈, 회로 및 알고리즘 단계들은 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이 둘의 조합으로 구현될 수 있는 것으로 인식한다. 이러한 하드웨어와 소프트웨어의 호환성을 명확히 설명하기 위해, 각종 예시적인 컴포넌트, 블록, 모듈, 회로 및 단계들은 일반적으로 그 기능과 관련하여 상술하였다. 이러한 기능성이 하드웨어로 구현되는지 소프트웨어로 구현되는지는 전체 시스템에 부과된 특정 애플리케이션 및 설계 제약에 좌우된다. 당업자들은 설명한 기능을 특정 애플리케이션 마다 다른 방식으로 구현할 수도 있지만, 이러한 구현 결정은 본 발명의 범위를 벗어나는 것으로 해석되지 않아야 한다.
본원에 개시된 형태들과 관련하여 설명된 방법 또는 알고리즘의 단계들은 하드웨어에 직접, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이 둘의 조합으로 구현될 수 있다. 소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터, 하드디스크, 착탈식 디스크, CD-ROM, 또는 공지된 임의의 다른 형태의 저장 매체에 상주할 수 있다. 예시적인 저장 매체는 프로세서가 저장 매체로부터 정보를 읽고 저장 매체에 정보를 기록할 수 있도록 프로세서에 연결된다. 대안으로, 저장 매체는 프로세서에 통합될 수도 있다. 프로세서 및 저장 매체는 ASIC에 상주할 수도 있다. ASIC는 사용자 단말에 상주할 수도 있다. 대안으로, 프로세서 및 저장 매체는 사용자 단말에 개별 컴포넌트로서 상주할 수도 있다. 추가로, 어떤 형태들에서 방법 또는 알고리즘의 단계들 및/또는 동작들은 코드들 및/또는 명령들 중 하나 또는 임의의 조합 또는 세트로서 기계 판독 가능 매체 및/또는 컴퓨터 판독 가능 매체에 상주할 수 있음, 이러한 매체들은 컴퓨터 프로그램 제품으로 통합될 수 있다.
다양한 형태들은 종래 기술에 비해 많은 이점을 제공한다. 구현들은 입력 및 출력 데이터가 호출하는(즉, 클라이언트) 프로세스와 호출된(즉, 서버) 프로세스 사이에서 단일 복사에 의해, 이전 시스템에 제한, 복잡도 및 추가 오버헤드를 발생시키지 않으면서 이동되게 할 수 있다. 예를 들어, 본 구현들에서, 서버 프로세스는 데이터 입력들의 크기 및/또는 위치를 예측할 필요가 없다. 또한, 서버 프 로세스는 호출하는 프로세스로 리턴한 후 출력 데이터의 복사를 유지할 필요가 없다. 또한, 서버 프로세스는 메모리에 모든 입력 또는 출력 인수를 동시에 보유하기에 충분한 메모리를 가질 필요가 없다. 큰 클래스의 함수들에 대해, 다양한 형태는 프로세스간 복사가 원격 함수에서 암시적일 수 있는 사본들을 오버랩할 수 있기 때문에 마이크로커널 구조의 데이터 이동 오버헤드를 0으로 감소시킨다. 예를 들어, 데이터 블록으로부터의 판독시, 클라이언트 프로세스로의 복사는 메모리를 파일 시스템 캐시로부터 클라이언트 프로세스로 이동시킬 수 있다. 이러한 복사는 원격 "판독" 함수에 의해 암시되기 때문에, 호출자가 동일한 프로세스에 상주할 때에도 복사가 필요하다.
다양한 형태/구현의 상기 설명은 당업자들이 본 발명을 제작 또는 사용할 수 있도록 제공된다. 이들 형태/구현에 대한 다양한 변형이 당업자들에게 쉽게 명백할 것이며, 본원에 정의된 일반 원리들은 개시의 진의 또는 범위를 벗어나지 않고 다른 형태/구현에 적용될 수 있다. 따라서 본 개시는 본원에 나타낸 형태/구현으로 한정되는 것이 아니라 본원에 개시된 원리 및 신규한 특징들에 부합하는 가장 넓은 범위에 따라야 한다.

Claims (37)

  1. 커널을 가진 메모리 보호 구조에서 데이터의 프로세스간 통신을 이행하기 위한 방법으로서,
    상기 커널에서, 제 2 메모리 영역에 있는 오브젝트의 호출(invocation)을 요청하는, 제 1 메모리 영역 내의 클라이언트 프로세스에 의한 시스템 콜(call)을 실행하는 단계 - 상기 시스템 콜은 상기 제 1 메모리 영역에서 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 상기 제 1 메모리 영역에서 출력 데이터가 복사될 클라이언트 출력 버퍼를 식별함 -;
    상기 커널에서 상기 오브젝트의 위치로서 상기 제 2 메모리 영역을 식별하는 단계;
    상기 제 2 메모리 영역의 서버 프로세스에 상기 호출 요청을 통지하는 단계;
    상기 커널에서, 상기 서버 프로세스에 의한 입력 데이터의 입력 요청을 실행하는 단계 - 상기 입력 요청은 상기 제 2 메모리 영역에서 상기 입력 데이터를 수신하기 위한 서버 입력 버퍼를 식별함 -;
    상기 제 1 메모리 영역의 클라이언트 입력 버퍼로부터 입력 데이터를 직접 상기 제 2 메모리 영역의 서버 입력 버퍼로 복사하는 단계;
    상기 커널에서, 상기 제 2 메모리 영역으로부터의 출력 데이터를 복사하기 위한 출력 요청을 실행하는 단계 - 상기 출력 요청은 상기 출력 데이터를 포함하는 서버 출력 버퍼를 식별함 -; 및
    상기 제 2 메모리 영역의 서버 출력 버퍼로부터 상기 출력 데이터를 직접 상기 제 1 메모리 영역의 클라이언트 입력 버퍼로 복사하는 단계를 포함하는, 프로세스간 통신 방법.
  2. 제 1 항에 있어서,
    상기 시스템 콜은 상기 제 1 메모리 위치 내의 클라이언트 프록시에 의해 생성되고, 상기 입력 요청 및 상기 출력 요청은 상기 제 2 메모리 위치 내의 서버 프록시에 의해 생성되는, 프로세스간 통신 방법.
  3. 제 1 항에 있어서,
    상기 서버 프로세스에 상기 호출 요청을 통지하는 단계 전에 상기 입력 데이터의 적어도 일부를 상기 제 2 메모리 영역으로 복사하는 단계를 더 포함하는, 프로세스간 통신 방법.
  4. 제 1 항에 있어서,
    상기 시스템 콜은 상기 오브젝트에 다른 오브젝트를 호출할 권한을 주는 입력 파라미터, 또는 다른 오브젝트를 호출할 권한을 상기 클라이언트 프로세스로 리턴하는 출력 파라미터를 포함하는, 프로세스간 통신 방법.
  5. 제 1 항에 있어서,
    상기 커널에서, 입력 버퍼에 대한 직접 액세스를 위해 판독 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 단계; 및
    상기 커널에서, 출력 버퍼에 대한 직접 액세스를 위해 기록 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 단계를 더 포함하며,
    상기 커널은 상기 서버 프로세스가 상기 클라이언트 프로세스에 의해 지정된 적절한 종류의 메모리 액세스를 가짐을 검증할 경우 상기 요청들을 만족하는, 프로세스간 통신 방법.
  6. 커널을 가진 메모리 보호 구조에서 데이터의 프로세스간 통신을 이행하기 위한 방법으로서,
    상기 커널에서 클라이언트 프로세스에 의한 시스템 콜을 실행하는 단계 - 상기 시스템 콜은 서버 프로세스에 있는 오브젝트의 호출을 요청하고, 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 출력 데이터가 복사될 출력 버퍼의 메모리 위치들을 식별함 -;
    상기 입력 버퍼를 판독하고 상기 출력 버퍼에 기록하기 위한 권한들을 상기 서버 프로세스에 부여할 것을 메모리 관리 유닛에 지시하는 단계;
    상기 서버 프로세스에 상기 호출 요청을 통지하는 단계;
    상기 서버 프로세스에 상기 식별된 메모리 위치들을 통보하는 단계;
    상기 커널에서, 상기 오브젝트가 호출되었다는 표시를 상기 서버 프로세스로 부터 수신하는 단계;
    상기 식별된 메모리 위치들에 대해 데이터를 판독 및 기록하기 위한 서버 프로세스 권한들을 무효로 할 것을 상기 메모리 관리 유닛에 지시하는 단계; 및
    실행의 제어를 상기 클라이언트 프로세스로 리턴하는 단계를 포함하는, 프로세스간 통신 방법.
  7. 메모리 보호 구조로 동작하는 컴퓨터 시스템으로서,
    메모리; 및
    상기 메모리에 연결되어, 제 1 메모리 영역으로 제한된 메모리 판독 및 기록 액세스를 갖는 클라이언트 프로세스, 제 2 메모리 영역으로 제한된 메모리 판독 및 기록 액세스를 갖는 서버 프로세스, 및 상기 제 1 및 제 2 메모리 영역과 커널 영역에 대한 메모리 판독 기록 액세스를 갖는 커널 프로세스를 포함하는 프로세서 실행 가능 명령들을 구현하는 프로세서를 포함하며,
    상기 프로세서는,
    상기 커널에서, 제 2 메모리 영역에 있는 오브젝트의 호출을 요청하는, 제 1 메모리 영역 내의 클라이언트 프로세스에 의한 시스템 콜을 실행하는 단계 - 상기 시스템 콜은 상기 제 1 메모리 영역에서 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 상기 제 1 메모리 영역에서 출력 데이터가 복사될 클라이언트 출력 버퍼를 식별함 -;
    상기 커널에서 상기 오브젝트의 위치로서 상기 제 2 메모리 영역을 식 별하는 단계;
    상기 제 2 메모리 영역의 서버 프로세스에 상기 호출 요청을 통지하는 단계;
    상기 커널에서, 상기 서버 프로세스에 의한 입력 데이터의 입력 요청을 실행하는 단계 - 상기 입력 요청은 상기 제 2 메모리 영역에서 상기 입력 데이터를 수신하기 위한 서버 입력 버퍼를 식별함 -;
    상기 제 1 메모리 영역의 클라이언트 입력 버퍼로부터 입력 데이터를 직접 상기 제 2 메모리 영역의 서버 입력 버퍼로 복사하는 단계;
    상기 커널에서, 상기 제 2 메모리 영역으로부터의 출력 데이터를 복사하기 위한 출력 요청을 실행하는 단계 - 상기 출력 요청은 상기 출력 데이터를 포함하는 서버 출력 버퍼를 식별함 -; 및
    상기 제 2 메모리 영역의 서버 출력 버퍼로부터 상기 출력 데이터를 직접 상기 제 1 메모리 영역의 클라이언트 입력 버퍼로 복사하는 단계를 수행하기 위한 소프트웨어 명령들로 구성되는, 컴퓨터 시스템.
  8. 제 7 항에 있어서,
    상기 프로세서는 상기 시스템 콜이 상기 제 1 메모리 위치 내의 클라이언트 프록시에 의해 생성되고, 상기 입력 요청 및 상기 출력 요청이 상기 제 2 메모리 위치 내의 서버 프록시에 의해 생성되도록 소프트웨어 명령들로 구성되는, 컴퓨터 시스템.
  9. 제 7 항에 있어서,
    상기 프로세서는 상기 서버 프로세스에 상기 호출 요청을 통지하는 단계 전에 상기 입력 데이터의 적어도 일부를 상기 제 2 메모리 영역으로 복사하는 단계들을 추가 수행하기 위한 소프트웨어 명령들로 구성되는, 컴퓨터 시스템.
  10. 제 7 항에 있어서,
    상기 프로세서는 상기 시스템 콜이 상기 오브젝트에 다른 오브젝트를 호출할 권한을 주는 입력 파라미터, 또는 다른 오브젝트를 호출할 권한을 상기 클라이언트 프로세스로 리턴하는 출력 파라미터를 포함하도록 소프트웨어 명령들로 구성되는, 컴퓨터 시스템.
  11. 제 7 항에 있어서,
    상기 프로세서는,
    커널에서, 입력 버퍼에 대한 직접 액세스를 위해 판독 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 단계; 및
    상기 커널에서, 출력 버퍼에 대한 직접 액세스를 위해 기록 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 단계를 수행하기 위한 소프트웨어 명령들로 추가 구성되며,
    상기 커널은 상기 서버 프로세스가 상기 클라이언트 프로세스에 의해 지정된 적절한 종류의 메모리 액세스를 가짐을 검증할 경우 상기 요청들을 만족하는, 컴퓨터 시스템.
  12. 메모리 보호 구조로 동작하는 컴퓨터 시스템으로서,
    메모리; 및
    상기 메모리에 연결되어, 제 1 메모리 영역으로 제한된 메모리 판독 및 기록 액세스를 갖는 클라이언트 프로세스, 제 2 메모리 영역으로 제한된 메모리 판독 및 기록 액세스를 갖는 서버 프로세스, 및 상기 제 1 및 제 2 메모리 영역과 커널 영역에 대한 메모리 판독 기록 액세스를 갖는 커널 프로세스를 포함하는 프로세서 실행 가능 명령들을 구현하는 프로세서를 포함하며,
    상기 프로세서는,
    상기 커널에서 클라이언트 프로세스에 의한 시스템 콜을 실행하는 단계 - 상기 시스템 콜은 서버 프로세스에 있는 오브젝트의 호출을 요청하고, 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 출력 데이터가 복사될 출력 버퍼의 메모리 위치들을 식별함 -;
    상기 입력 버퍼를 판독하고 상기 출력 버퍼에 기록하기 위한 권한들을 상기 서버 프로세스에 부여할 것을 메모리 관리 유닛에 지시하는 단계;
    상기 서버 프로세스에 상기 호출 요청을 통지하는 단계;
    상기 서버 프로세스에 상기 식별된 메모리 위치들을 통보하는 단계;
    상기 커널에서, 상기 오브젝트가 호출되었다는 표시를 상기 서버 프로 세스로부터 수신하는 단계;
    상기 식별된 메모리 위치들에 대해 데이터를 판독 및 기록하기 위한 서버 프로세스 권한들을 무효로 할 것을 상기 메모리 관리 유닛에 지시하는 단계; 및
    실행의 제어를 상기 클라이언트 프로세스로 리턴하는 단계를 수행하기 위한 소프트웨어 명령들로 구성되는, 컴퓨터 시스템.
  13. 메모리 보호 구조로 동작하는 모바일 핸드셋으로서,
    메모리; 및
    상기 메모리에 연결되어, 제 1 메모리 영역으로 제한된 메모리 판독 및 기록 액세스를 갖는 클라이언트 프로세스, 제 2 메모리 영역으로 제한된 메모리 판독 및 기록 액세스를 갖는 서버 프로세스, 및 상기 제 1 및 제 2 메모리 영역과 커널 영역에 대한 메모리 판독 기록 액세스를 갖는 커널 프로세스를 포함하는 프로세서 실행 가능 명령들을 구현하는 프로세서를 포함하며,
    상기 프로세서는,
    상기 커널에서, 제 2 메모리 영역에 있는 오브젝트의 호출을 요청하는, 제 1 메모리 영역 내의 클라이언트 프로세스에 의한 시스템 콜을 실행하는 단계 - 상기 시스템 콜은 상기 제 1 메모리 영역에서 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 상기 제 1 메모리 영역에서 출력 데이터가 복사될 클라이언트 출력 버퍼를 식별함 -;
    상기 커널에서 상기 오브젝트의 위치로서 상기 제 2 메모리 영역을 식별하는 단계;
    상기 제 2 메모리 영역의 서버 프로세스에 상기 호출 요청을 통지하는 단계;
    상기 커널에서, 상기 서버 프로세스에 의한 입력 데이터의 입력 요청을 실행하는 단계 - 상기 입력 요청은 상기 제 2 메모리 영역에서 상기 입력 데이터를 수신하기 위한 서버 입력 버퍼를 식별함 -;
    상기 제 1 메모리 영역의 클라이언트 입력 버퍼로부터 입력 데이터를 직접 상기 제 2 메모리 영역의 서버 입력 버퍼로 복사하는 단계;
    상기 커널에서, 상기 제 2 메모리 영역으로부터의 출력 데이터를 복사하기 위한 출력 요청을 실행하는 단계 - 상기 출력 요청은 상기 출력 데이터를 포함하는 서버 출력 버퍼를 식별함 -; 및
    상기 제 2 메모리 영역의 서버 출력 버퍼로부터 상기 출력 데이터를 직접 상기 제 1 메모리 영역의 클라이언트 입력 버퍼로 복사하는 단계를 수행하기 위한 소프트웨어 명령들로 구성되는, 모바일 핸드셋.
  14. 제 13 항에 있어서,
    상기 프로세서는 상기 시스템 콜이 상기 제 1 메모리 위치 내의 클라이언트 프록시에 의해 생성되고, 상기 입력 요청 및 상기 출력 요청이 상기 제 2 메모리 위치 내의 서버 프록시에 의해 생성되도록 소프트웨어 명령들로 구성되는, 모바일 핸드셋.
  15. 제 13 항에 있어서,
    상기 프로세서는 상기 서버 프로세스에 상기 호출 요청을 통지하는 단계 전에 상기 입력 데이터의 적어도 일부를 상기 제 2 메모리 영역으로 복사하는 단계들을 추가 수행하기 위한 소프트웨어 명령들로 구성되는, 모바일 핸드셋.
  16. 제 13 항에 있어서,
    상기 프로세서는 상기 시스템 콜이 상기 오브젝트에 다른 오브젝트를 호출할 권한을 주는 입력 파라미터, 또는 다른 오브젝트를 호출할 권한을 상기 클라이언트 프로세스로 리턴하는 출력 파라미터를 포함하도록 소프트웨어 명령들로 구성되는, 모바일 핸드셋.
  17. 제 13 항에 있어서,
    상기 프로세서는,
    커널에서, 입력 버퍼에 대한 직접 액세스를 위해 판독 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 단계; 및
    상기 커널에서, 출력 버퍼에 대한 직접 액세스를 위해 기록 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 단계를 수행하기 위한 소프트웨어 명령들로 추가 구성되며,
    상기 커널은 상기 서버 프로세스가 상기 클라이언트 프로세스에 의해 지정된 적절한 종류의 메모리 액세스를 가짐을 검증할 경우 상기 요청들을 만족하는, 모바일 핸드셋.
  18. 메모리 보호 구조로 동작하는 모바일 핸드셋으로서,
    메모리; 및
    상기 메모리에 연결되어, 제 1 메모리 영역으로 제한된 메모리 판독 및 기록 액세스를 갖는 클라이언트 프로세스, 제 2 메모리 영역으로 제한된 메모리 판독 및 기록 액세스를 갖는 서버 프로세스, 및 상기 제 1 및 제 2 메모리 영역과 커널 영역에 대한 메모리 판독 기록 액세스를 갖는 커널 프로세스를 포함하는 프로세서 실행 가능 명령들을 구현하는 프로세서를 포함하며,
    상기 프로세서는,
    상기 커널에서 클라이언트 프로세스에 의한 시스템 콜을 실행하는 단계 - 상기 시스템 콜은 서버 프로세스에 있는 오브젝트의 호출을 요청하고, 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 출력 데이터가 복사될 출력 버퍼의 메모리 위치들을 식별함 -;
    상기 입력 버퍼를 판독하고 상기 출력 버퍼에 기록하기 위한 권한들을 상기 서버 프로세스에 부여할 것을 메모리 관리 유닛에 지시하는 단계;
    상기 서버 프로세스에 상기 호출 요청을 통지하는 단계;
    상기 서버 프로세스에 상기 식별된 메모리 위치들을 통보하는 단계;
    상기 커널에서, 상기 오브젝트가 호출되었다는 표시를 상기 서버 프로세스로부터 수신하는 단계;
    상기 식별된 메모리 위치들에 대해 데이터를 판독 및 기록하기 위한 서버 프로세스 권한들을 무효로 할 것을 상기 메모리 관리 유닛에 지시하는 단계; 및
    실행의 제어를 상기 클라이언트 프로세스로 리턴하는 단계를 수행하기 위한 소프트웨어 명령들로 구성되는, 모바일 핸드셋.
  19. 메모리에 연결된 프로세서로 하여금 단계들을 수행하게 하도록 구성된 프로세서 실행 가능 명령들을 저장한 유형의(tangible) 프로세서 판독 가능 메모리로서, 상기 단계들은,
    상기 커널에서, 제 2 메모리 영역에 있는 오브젝트의 호출을 요청하는, 제 1 메모리 영역 내의 클라이언트 프로세스에 의한 시스템 콜을 실행하는 단계 - 상기 시스템 콜은 상기 제 1 메모리 영역에서 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 상기 제 1 메모리 영역에서 출력 데이터가 복사될 클라이언트 출력 버퍼를 식별함 -;
    상기 커널에서 상기 오브젝트의 위치로서 상기 제 2 메모리 영역을 식별하는 단계;
    상기 제 2 메모리 영역의 서버 프로세스에 상기 호출 요청을 통지하는 단계;
    상기 커널에서, 상기 서버 프로세스에 의한 입력 데이터의 입력 요청을 실행 하는 단계 - 상기 입력 요청은 상기 제 2 메모리 영역에서 상기 입력 데이터를 수신하기 위한 서버 입력 버퍼를 식별함 -;
    상기 제 1 메모리 영역의 클라이언트 입력 버퍼로부터 입력 데이터를 직접 상기 제 2 메모리 영역의 서버 입력 버퍼로 복사하는 단계;
    상기 커널에서, 상기 제 2 메모리 영역으로부터의 출력 데이터를 복사하기 위한 출력 요청을 실행하는 단계 - 상기 출력 요청은 상기 출력 데이터를 포함하는 서버 출력 버퍼를 식별함 -; 및
    상기 제 2 메모리 영역의 서버 출력 버퍼로부터 상기 출력 데이터를 직접 상기 제 1 메모리 영역의 클라이언트 입력 버퍼로 복사하는 단계를 포함하는, 유형의 프로세서 판독 가능 메모리.
  20. 제 19 항에 있어서,
    상기 저장된 프로세서 실행 가능 명령들은 상기 시스템 콜이 상기 제 1 메모리 위치 내의 클라이언트 프록시에 의해 생성되고, 상기 입력 요청 및 상기 출력 요청이 상기 제 2 메모리 위치 내의 서버 프록시에 의해 생성되도록 추가 구성되는, 유형의 프로세서 판독 가능 메모리.
  21. 제 19 항에 있어서,
    상기 저장된 프로세서 실행 가능 명령들은 상기 서버 프로세스에 상기 호출 요청을 통지하는 단계 전에 상기 입력 데이터의 적어도 일부를 상기 제 2 메모리 영역으로 복사하는 단계들을 더 포함하는 단계들을 상기 프로세서가 수행하게 하도록 추가 구성되는, 유형의 프로세서 판독 가능 메모리.
  22. 제 19 항에 있어서,
    상기 저장된 프로세서 실행 가능 명령들은 상기 시스템 콜이 상기 오브젝트에 다른 오브젝트를 호출할 권한을 주는 입력 파라미터, 또는 다른 오브젝트를 호출할 권한을 상기 클라이언트 프로세스로 리턴하는 출력 파라미터를 포함하도록 구성되는, 유형의 프로세서 판독 가능 메모리.
  23. 제 19 항에 있어서,
    상기 저장된 프로세서 실행 가능 명령들은 상기 프로세서로 하여금,
    커널에서, 입력 버퍼에 대한 직접 액세스를 위해 판독 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 단계; 및
    상기 커널에서, 출력 버퍼에 대한 직접 액세스를 위해 기록 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 단계를 더 포함하는 단계들을 수행하게 하도록 추가 구성되며,
    상기 커널은 상기 서버 프로세스가 상기 클라이언트 프로세스에 의해 지정된 적절한 종류의 메모리 액세스를 가짐을 검증할 경우 상기 요청들을 만족하는, 유형의 프로세서 판독 가능 메모리.
  24. 메모리에 연결된 프로세서로 하여금 단계들을 수행하게 하도록 구성된 프로세서 실행 가능 명령들을 저장한 유형의 프로세서 판독 가능 메모리로서, 상기 단계들은,
    상기 커널에서 클라이언트 프로세스에 의한 시스템 콜을 실행하는 단계 - 상기 시스템 콜은 서버 프로세스에 있는 오브젝트의 호출을 요청하고, 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 출력 데이터가 복사될 출력 버퍼의 메모리 위치들을 식별함 -;
    상기 입력 버퍼를 판독하고 상기 출력 버퍼에 기록하기 위한 권한들을 상기 서버 프로세스에 부여할 것을 메모리 관리 유닛에 지시하는 단계;
    상기 서버 프로세스에 상기 호출 요청을 통지하는 단계;
    상기 서버 프로세스에 상기 식별된 메모리 위치들을 통보하는 단계;
    상기 커널에서, 상기 오브젝트가 호출되었다는 표시를 상기 서버 프로세스로부터 수신하는 단계;
    상기 식별된 메모리 위치들에 대해 데이터를 판독 및 기록하기 위한 서버 프로세스 권한들을 무효로 할 것을 상기 메모리 관리 유닛에 지시하는 단계; 및
    실행의 제어를 상기 클라이언트 프로세스로 리턴하는 단계를 포함하는, 유형의 프로세서 판독 가능 메모리.
  25. 시스템으로서,
    상기 시스템의 중심 동작을 제어하는 커널 수단;
    제 1 메모리 영역 내의 클라이언트 프로세스;
    제 2 메모리 영역 내의 서버 프로세스;
    상기 클라이언트 프로세스 수단에 의한 시스템 콜을 실행하는 수단 - 상기 시스템 콜은 상기 서버 프로세스에 있는 오브젝트의 호출을 요청하고, 상기 제 1 메모리 영역에서 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 상기 제 1 메모리 영역에서 출력 데이터가 복사될 클라이언트 출력 버퍼를 식별함 -;
    상기 커널에서 상기 오브젝트의 위치로서 상기 제 2 메모리 영역을 식별하는 수단;
    상기 제 2 메모리 영역의 서버 프로세스에 상기 호출 요청을 통지하는 수단;
    상기 커널에서 상기 서버 프로세스에 의한 입력 데이터의 입력 요청을 실행하는 수단 - 상기 입력 요청은 상기 제 2 메모리 영역에서 상기 입력 데이터를 수신하기 위한 서버 입력 버퍼를 식별함 -;
    상기 제 1 메모리 영역의 클라이언트 입력 버퍼로부터 입력 데이터를 직접 상기 제 2 메모리 영역의 서버 입력 버퍼로 복사하는 수단;
    상기 제 2 메모리 영역으로부터의 출력 데이터를 복사하기 위한 출력 요청을 수신하는 수단 - 상기 출력 요청은 상기 출력 데이터를 포함하는 서버 출력 버퍼를 식별함 -; 및
    상기 제 2 메모리 영역의 서버 출력 버퍼로부터 상기 출력 데이터를 직접 상기 제 1 메모리 영역의 클라이언트 입력 버퍼로 복사하는 수단을 포함하는, 시스템.
  26. 제 25 항에 있어서,
    상기 시스템 콜은 상기 제 1 메모리 위치 내의 클라이언트 프록시에 의해 생성되고, 상기 입력 요청 및 상기 출력 요청은 상기 제 2 메모리 위치 내의 서버 프록시에 의해 생성되는, 시스템.
  27. 제 25 항에 있어서,
    상기 서버 프로세스에 상기 호출 요청을 통지하기 전에 상기 입력 데이터의 적어도 일부를 상기 제 2 메모리 영역으로 복사하는 수단을 더 포함하는, 시스템.
  28. 제 25 항에 있어서,
    상기 시스템 콜은 상기 오브젝트에 다른 오브젝트를 호출할 권한을 주는 입력 파라미터, 또는 다른 오브젝트를 호출할 권한을 상기 클라이언트 프로세스로 리턴하는 출력 파라미터를 포함하는, 시스템.
  29. 제 25 항에 있어서,
    상기 커널에서, 입력 버퍼에 대한 직접 액세스를 위해 판독 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 수단; 및
    상기 커널에서, 출력 버퍼에 대한 직접 액세스를 위해 기록 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하는 수단을 더 포함 하며,
    상기 커널은 상기 서버 프로세스가 상기 클라이언트 프로세스에 의해 지정된 적절한 종류의 메모리 액세스를 가짐을 검증할 경우 상기 요청들을 만족하는, 시스템.
  30. 시스템으로서,
    상기 시스템의 중심 동작을 제어하는 커널 수단;
    제 1 메모리 영역 내의 클라이언트 프로세스;
    제 2 메모리 영역 내의 서버 프로세스;
    상기 커널에서 클라이언트 프로세스에 의한 시스템 콜을 실행하는 수단 - 상기 시스템 콜은 서버 프로세스에 있는 오브젝트의 호출을 요청하고, 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 출력 데이터가 복사될 출력 버퍼의 메모리 위치들을 식별함 -;
    상기 입력 버퍼를 판독하고 상기 출력 버퍼에 기록하기 위한 권한들을 상기 서버 프로세스에 부여할 것을 메모리 관리 유닛에 지시하는 수단;
    상기 서버 프로세스에 상기 호출 요청을 통지하는 수단;
    상기 서버 프로세스에 상기 식별된 메모리 위치들을 통보하는 수단;
    상기 커널에서, 상기 오브젝트가 호출되었다는 표시를 상기 서버 프로세스로부터 수신하는 수단;
    상기 식별된 메모리 위치들에 대해 데이터를 판독 및 기록하기 위한 서버 프 로세스 권한들을 무효로 할 것을 상기 메모리 관리 유닛에 지시하는 수단; 및
    실행의 제어를 상기 클라이언트 프로세스로 리턴하는 수단을 포함하는, 시스템.
  31. 컴퓨터 프로그램 물건으로서,
    컴퓨터 판독 가능 매체를 포함하며, 상기 컴퓨터 판독 가능 매체는,
    컴퓨터로 하여금, 커널에서 제 2 메모리 영역에 있는 오브젝트의 호출을 요청하는, 제 1 메모리 영역 내의 클라이언트 프로세스에 의한 시스템 콜을 실행하게 하기 위한 적어도 하나의 명령 - 상기 시스템 콜은 상기 제 1 메모리 영역에서 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 상기 제 1 메모리 영역에서 출력 데이터가 복사될 클라이언트 출력 버퍼를 식별함 -;
    컴퓨터로 하여금, 상기 커널에서 상기 오브젝트의 위치로서 상기 제 2 메모리 영역을 식별하게 하기 위한 적어도 하나의 명령;
    컴퓨터로 하여금 상기 제 2 메모리 영역의 서버 프로세스에 상기 호출 요청을 통지하게 하기 위한 적어도 하나의 명령;
    컴퓨터로 하여금, 상기 커널에서 상기 서버 프로세스에 의한 입력 데이터의 입력 요청을 실행하게 하기 위한 적어도 하나의 명령 - 상기 입력 요청은 상기 제 2 메모리 영역에서 상기 입력 데이터를 수신하기 위한 서버 입력 버퍼를 식별함 -;
    컴퓨터로 하여금 상기 제 1 메모리 영역의 클라이언트 입력 버퍼로부 터 입력 데이터를 직접 상기 제 2 메모리 영역의 서버 입력 버퍼로 복사하게 하기 위한 적어도 하나의 명령;
    컴퓨터로 하여금, 상기 커널에서 상기 제 2 메모리 영역으로부터의 출력 데이터를 복사하기 위한 출력 요청을 실행하게 하기 위한 적어도 하나의 명령 - 상기 출력 요청은 상기 출력 데이터를 포함하는 서버 출력 버퍼를 식별함 -; 및
    컴퓨터로 하여금 상기 제 2 메모리 영역의 서버 출력 버퍼로부터 상기 출력 데이터를 직접 상기 제 1 메모리 영역의 클라이언트 입력 버퍼로 복사하게 하기 위한 적어도 하나의 명령을 포함하는, 컴퓨터 프로그램 물건.
  32. 제 31 항에 있어서,
    상기 컴퓨터 판독 가능 매체는,
    컴퓨터로 하여금 상기 제 1 메모리 위치 내의 클라이언트 프록시에서 상기 시스템 콜을 생성하게 하기 위한 적어도 하나의 명령; 및
    컴퓨터로 하여금 상기 제 2 메모리 위치 내의 서버 프록시에 의해 상기 입력 요청 및 상기 출력 요청을 생성하게 하기 위한 적어도 하나의 명령을 더 포함하는, 컴퓨터 프로그램 물건.
  33. 제 31 항에 있어서,
    상기 컴퓨터 판독 가능 매체는,
    컴퓨터로 하여금 상기 서버 프로세스에 상기 호출 요청을 통지하기 전에 상 기 입력 데이터의 적어도 일부를 상기 제 2 메모리 영역으로 복사하게 하기 위한 적어도 하나의 명령을 더 포함하는, 컴퓨터 프로그램 물건.
  34. 제 31 항에 있어서,
    상기 컴퓨터 판독 가능 매체는,
    컴퓨터로 하여금 상기 오브젝트에 다른 오브젝트를 호출할 권한을 주는 입력 파라미터, 또는 다른 오브젝트를 호출할 권한을 상기 클라이언트 프로세스로 리턴하는 출력 파라미터를 포함하는 시스템 콜을 생성하게 하기 위한 적어도 하나의 명령을 더 포함하는, 컴퓨터 프로그램 물건.
  35. 제 31 항에 있어서,
    상기 컴퓨터 판독 가능 매체는,
    컴퓨터로 하여금, 상기 커널에서 입력 버퍼에 대한 직접 액세스를 위해 판독 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하게 하기 위한 적어도 하나의 명령; 및
    컴퓨터로 하여금, 상기 커널에서 출력 버퍼에 대한 직접 액세스를 위해 기록 가능한 메모리 어드레스를 상기 서버 프로세스에 제공하기 위한 요청을 실행하게 하기 위한 적어도 하나의 명령을 더 포함하며,
    상기 커널은 상기 서버 프로세스가 상기 클라이언트 프로세스에 의해 지정된 적절한 종류의 메모리 액세스를 가짐을 검증할 경우 상기 요청들을 만족하는, 컴퓨 터 프로그램 물건.
  36. 컴퓨터 프로그램 물건으로서,
    컴퓨터 판독 가능 매체를 포함하며, 상기 컴퓨터 판독 가능 매체는,
    컴퓨터로 하여금 커널에서 클라이언트 프로세스에 의한 시스템 콜을 실행하게 하기 위한 적어도 하나의 명령 - 상기 시스템 콜은 서버 프로세스에 있는 오브젝트의 호출을 요청하고, 입력 데이터를 포함하는 클라이언트 입력 버퍼 및 출력 데이터가 복사될 출력 버퍼의 메모리 위치들을 식별함 -;
    컴퓨터로 하여금, 상기 입력 버퍼를 판독하고 상기 출력 버퍼에 기록하기 위한 권한들을 상기 서버 프로세스에 부여할 것을 메모리 관리 유닛에 지시하게 하기 위한 적어도 하나의 명령;
    컴퓨터로 하여금 상기 서버 프로세스에 상기 호출 요청을 통지하게 하기 위한 적어도 하나의 명령;
    컴퓨터로 하여금 상기 서버 프로세스에 상기 식별된 메모리 위치들을 통보하게 하기 위한 적어도 하나의 명령;
    컴퓨터로 하여금, 상기 커널에서 상기 오브젝트가 호출되었다는 표시를 상기 서버 프로세스로부터 수신하게 하기 위한 적어도 하나의 명령;
    컴퓨터로 하여금, 상기 식별된 메모리 위치들에 대해 데이터를 판독 및 기록하기 위한 서버 프로세스 권한들을 무효로 할 것을 상기 메모리 관리 유닛에 지시하게 하기 위한 적어도 하나의 명령; 및
    컴퓨터로 하여금 실행의 제어를 상기 클라이언트 프로세스로 리턴하게 하기 위한 적어도 하나의 명령을 포함하는, 컴퓨터 프로그램 물건.
  37. 컴퓨터 시스템으로서,
    커널 인터페이스; 및
    상기 커널 인터페이스와 통신하는 커널 프로세스를 포함하며, 상기 커널 프로세스는 중간 복사를 하지 않고 제 1 보호 영역과 제 2 보호 영역 사이에 직접 데이터를 복사하도록 동작 가능한, 컴퓨터 시스템.
KR1020097013633A 2006-11-29 2007-11-29 보호 영역 경계들에서의 오브젝트 호출 방법, 시스템 및 장치 KR101177971B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US86778706P 2006-11-29 2006-11-29
US60/867,787 2006-11-29
US11/946,227 US8332866B2 (en) 2006-11-29 2007-11-28 Methods, systems, and apparatus for object invocation across protection domain boundaries
US11/946,227 2007-11-28
PCT/US2007/085878 WO2008067435A1 (en) 2006-11-29 2007-11-29 Methods, systems, and apparatus for object invocation across protection domain boundaries

Publications (2)

Publication Number Publication Date
KR20090095619A true KR20090095619A (ko) 2009-09-09
KR101177971B1 KR101177971B1 (ko) 2012-08-29

Family

ID=39262579

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097013633A KR101177971B1 (ko) 2006-11-29 2007-11-29 보호 영역 경계들에서의 오브젝트 호출 방법, 시스템 및 장치

Country Status (6)

Country Link
US (1) US8332866B2 (ko)
EP (1) EP2087426A1 (ko)
JP (2) JP5096484B2 (ko)
KR (1) KR101177971B1 (ko)
CN (1) CN101535958B (ko)
WO (1) WO2008067435A1 (ko)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8726294B2 (en) 2010-10-01 2014-05-13 Z124 Cross-environment communication using application space API
US9098437B2 (en) 2010-10-01 2015-08-04 Z124 Cross-environment communication framework
US9047102B2 (en) 2010-10-01 2015-06-02 Z124 Instant remote rendering
US8966379B2 (en) 2010-10-01 2015-02-24 Z124 Dynamic cross-environment application configuration/orientation in an active user environment
US8396959B2 (en) * 2007-03-21 2013-03-12 Inetco Systems Limited Method and system for monitoring messages passed over a network
US8667504B2 (en) * 2008-06-20 2014-03-04 Netapp, Inc. System and method for achieving high performance data flow among user space processes in storage system
EP2159697B1 (en) * 2008-08-26 2013-12-04 Siemens Aktiengesellschaft Method for evaluating a production rule for a memory management analysis
JP5346608B2 (ja) * 2009-02-06 2013-11-20 Kddi株式会社 情報処理装置およびファイル検証システム
US20100268921A1 (en) * 2009-04-15 2010-10-21 Advanced Micro Devices, Inc. Data collection prefetch device and methods thereof
US9372618B2 (en) 2010-10-01 2016-06-21 Z124 Gesture based application management
WO2012044557A2 (en) 2010-10-01 2012-04-05 Imerj, Llc Auto-configuration of a docked system in a multi-os environment
US9235455B2 (en) 2011-03-16 2016-01-12 Microscan Systems, Inc. Multi-core distributed processing using shared memory and communication link
WO2013030967A1 (ja) * 2011-08-30 2013-03-07 富士通株式会社 バックアップ方法、およびバックアッププログラム
US8907906B2 (en) 2011-09-27 2014-12-09 Z124 Secondary single screen mode deactivation
KR101783312B1 (ko) * 2011-11-15 2017-10-10 삼성전자주식회사 클러스터 간의 통신으로 인한 오버헤드를 최소화하는 장치 및 방법
US8910307B2 (en) * 2012-05-10 2014-12-09 Qualcomm Incorporated Hardware enforced output security settings
US9092281B2 (en) * 2012-10-02 2015-07-28 Qualcomm Incorporated Fast remote procedure call
CN103593169B (zh) * 2013-11-29 2017-09-05 深圳中微电科技有限公司 一种多线程处理器中的指令输出装置、方法及其处理器
US9436395B2 (en) * 2014-03-14 2016-09-06 Advanced Micro Devices, Inc. Mechanisms to save user/kernel copy for cross device communications
US20150301955A1 (en) * 2014-04-21 2015-10-22 Qualcomm Incorporated Extending protection domains to co-processors
KR101563657B1 (ko) 2015-05-15 2015-10-27 주식회사 블랙포트시큐리티 샌드박싱 된 윈도우 응용프로그램 외부로의 데이터 전송방법
US9912783B2 (en) 2016-01-29 2018-03-06 Veritas Technologies Llc Securing internal services in a distributed environment
US20170223056A1 (en) * 2016-01-29 2017-08-03 Symantec Corporation Securing internal services in an appliance
JP7017161B2 (ja) * 2017-04-06 2022-02-08 富士通株式会社 プログラム、プログラムの実行方法、および端末装置
CN109002361B (zh) * 2017-06-07 2022-06-03 阿里巴巴集团控股有限公司 数据处理方法、分配方法、电子设备、客户端和存储介质
US10642657B2 (en) * 2018-06-27 2020-05-05 The Hong Kong Polytechnic University Client-server architecture for multicore computer system to realize single-core-equivalent view
CN112749397A (zh) 2019-10-29 2021-05-04 阿里巴巴集团控股有限公司 一种系统和方法
CN116684199A (zh) * 2023-07-31 2023-09-01 四川奥诚科技有限责任公司 一种基于双重代理的数据资产安全保护系统和方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03224044A (ja) 1990-01-30 1991-10-03 Fujitsu Ltd 仮想記憶方式におけるタスク間通信制御方式
JPH0485652A (ja) * 1990-07-30 1992-03-18 Nec Corp プロセス間通信方式
JPH06282515A (ja) * 1993-03-25 1994-10-07 Hitachi Ltd データ処理装置
JP3365576B2 (ja) * 1993-06-14 2003-01-14 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクトの実行方法および装置
US6226690B1 (en) * 1993-06-14 2001-05-01 International Business Machines Corporation Method and apparatus for utilizing proxy objects to communicate with target objects
JP2926630B2 (ja) * 1993-09-27 1999-07-28 株式会社ピーエフユー プロセス間通信方式
EP0701205B1 (en) * 1994-07-22 2003-05-14 Sun Microsystems, Inc. Method and apparatus for space-efficient inter-process communication
US6487607B1 (en) 1998-02-26 2002-11-26 Sun Microsystems, Inc. Methods and apparatus for remote method invocation
US6151639A (en) * 1997-06-19 2000-11-21 Sun Microsystems, Inc. System and method for remote object invocation
WO2000034883A2 (en) * 1998-12-11 2000-06-15 Microsoft Corporation Accelerating a distributed component architecture over a network using an implicit flow control
US6832266B1 (en) 2000-02-07 2004-12-14 Sun Microsystems, Inc. Simplified microkernel application programming interface
CN1266590C (zh) * 2002-12-31 2006-07-26 上海科泰世纪科技有限公司 面向构件基于系统内核的进程池/线程池管理方法
US20060265704A1 (en) * 2005-04-21 2006-11-23 Holt John M Computer architecture and method of operation for multi-computer distributed processing with synchronization

Also Published As

Publication number Publication date
JP5518946B2 (ja) 2014-06-11
JP5096484B2 (ja) 2012-12-12
WO2008067435A1 (en) 2008-06-05
CN101535958B (zh) 2013-12-04
CN101535958A (zh) 2009-09-16
US20080126762A1 (en) 2008-05-29
KR101177971B1 (ko) 2012-08-29
EP2087426A1 (en) 2009-08-12
US8332866B2 (en) 2012-12-11
JP2010511255A (ja) 2010-04-08
JP2012238316A (ja) 2012-12-06

Similar Documents

Publication Publication Date Title
KR101177971B1 (ko) 보호 영역 경계들에서의 오브젝트 호출 방법, 시스템 및 장치
Chen et al. Enabling FPGAs in the cloud
WO2021217529A1 (zh) 一种进程间通信的方法及系统
US20090125700A1 (en) Processing system having memory partitioning
US8505029B1 (en) Virtual machine communication
KR20060117869A (ko) 파티션 버스
KR20090010872A (ko) CLDC OSGi 환경에서 어플리케이션의 접속 권한을관리하는 방법 및 장치
JP2007026094A (ja) 実行装置およびアプリケーションプログラム
WO2022021896A1 (zh) 一种进程间通信的方法及装置
CN112099903B (zh) 一种虚拟机的内存管理方法、装置、cpu芯片及服务器
CN108073423B (zh) 一种加速器加载方法、系统和加速器加载装置
JP5338435B2 (ja) 情報処理プログラム、情報処理装置および情報処理方法
CN105051682A (zh) 用于硬件设备的软件接口
US20170286140A1 (en) Java-based offload service in a mainframe environment
US20120254969A1 (en) Systems and methods for implementing security services
CN105229600A (zh) 基于能力的设备驱动程序框架
JP7056870B2 (ja) 情報処理装置、情報処理方法及びプログラム
CN113326498A (zh) 权限复用方法、基于权限复用的资源访问方法及相关设备
JP2007109053A (ja) バスアクセス制御装置
US11429412B2 (en) Guest protection from application code execution in kernel mode
CN110852139A (zh) 生物特征识别方法、装置、设备以及存储介质
US10896140B2 (en) Controlling operation of multiple computational engines
CN110543351B (zh) 数据处理方法以及计算机设备
CN105051683A (zh) 用受管代码实现的高吞吐量低等待时间用户模式驱动程序
CN117692416B (zh) 网络报文处理方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160629

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170629

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee