KR100380996B1 - 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리분산 공유 시스템 및 그 방법 - Google Patents

자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리분산 공유 시스템 및 그 방법 Download PDF

Info

Publication number
KR100380996B1
KR100380996B1 KR10-2001-0035171A KR20010035171A KR100380996B1 KR 100380996 B1 KR100380996 B1 KR 100380996B1 KR 20010035171 A KR20010035171 A KR 20010035171A KR 100380996 B1 KR100380996 B1 KR 100380996B1
Authority
KR
South Korea
Prior art keywords
thread
virtual machine
java virtual
lock
distributed
Prior art date
Application number
KR10-2001-0035171A
Other languages
English (en)
Other versions
KR20020097383A (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 한국전자통신연구원
Priority to KR10-2001-0035171A priority Critical patent/KR100380996B1/ko
Publication of KR20020097383A publication Critical patent/KR20020097383A/ko
Application granted granted Critical
Publication of KR100380996B1 publication Critical patent/KR100380996B1/ko

Links

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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/544Buffers; Shared memory; Pipes
    • 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
    • G06F9/548Object oriented; Remote method invocation [RMI]

Abstract

1. 청구범위에 기재된 발명이 속하는 기술분야
본 발명은 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것임.
2. 발명이 해결하고자 하는 기술적 과제
본 발명은, 자바 가상머신 수준에서 메모리 분산 공유를 수행함으로써 이기종간의 플렛폼 독립성을 보장하며, 분산 공유 메모리를 이용해서 자바의 쓰레드가 투명하게 원격 노드에 분배되어 병렬로 수행되게 함으로써 프로그래밍의 편의성을 높일 수 있도록 한 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템 및 그 방법과 그를 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공함에 그 목적이 있음.
3. 발명의 해결방법의 요지
본 발명은, 자바 가상 머신과 하나 이상의 원격 자바 가상 머신간의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템에 있어서, 객체의 바이트 코드를 읽어서 새로운 쓰레드의 생성 및 동기화를 요청하며, 생성된 쓰레드를 바이트 코드로 수행하기 위한 바이트 코드 수행 수단; 상기 바이트 코드 수행 수단에서 새로운 쓰레드의 생성 요청시 원격 자바 가상 머신에게 쓰레드 생성을 요청하고, 다른 원격 자바 가상 머신으로부터의 쓰레드 생성 요청을 처리하기 위한 쓰레드 관리 수단;상기 쓰레드 관리 수단에서 생성된 객체들을 저장하고, 저장된 객체들의 공유 객체 위치를 기록하기 위한 공유 객체 저장 수단; 및 상기 공유 객체 저장 수단에 등록된 공유 객체간의 정보 교환을 통해 원격 자바 가상 머신에 분산 저장된 객체와의 일관성을 유지하기 위한 동기화 관리 수단을 포함한다.
4. 발명의 중요한 용도
본 발명은 자바 가상머신의 메모리 구현등에 이용됨.

Description

자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템 및 그 방법{system for maintaining object consistency and for implementating distributed shared memory in Java and its method}
본 발명은 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템 및 그 방법에 관한 것으로, 보다 상세하게는 다중 쓰레드를 이용한 병렬 자바 프로그램의 성능 향상을 위해 분산 객체간 일관성을 유지하며 쓰레드를 원격 자바 가상머신에 분배하여 수행시킴으로써 쓰레드간의 병렬성을 높이고자 한, 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다.
일반적으로 자바(JAVA)는 시스템의 비종속성, 객체 지향성 및 높은 안전성 등의 특징을 갖는 언어로서, 본래 실시간 환경을 지원하는 객체 지향 분산 시스템을 구축하기 위해서 만들어졌지만, 최근에는 시스템 비종속적인 특징으로 인해 인터넷 상의 이동형 코드(mobile code)로 더욱 많이 사용되고 있다.
특히, 자바 언어는 C++과 유사한 문법 구조를 가지지만 프로그래밍 구조를 복잡하게 하거나 오류가 발생하기 쉽게 하는 부분은 모두 제거 되었으며 다음과 같은 특징을 갖는다.
- 쓰레드, 모니터와 같은 병렬 프로그래밍 인터페이스를 언어 차원에서 지원한다.
- 예외 상황이 발생할 경우 언어적으로 예외 상황을 처리 할 수 있는 루틴을 둘 수 있도록 함으로써 여러 예외 상황을 처리할 수 있다.
- 메모리 관리 기능을 제거함으로써, 프로그래머가 메모리를 관리하지 않아도 더 이상 참조되지 않는 객체에 할당된 메모리는 쓰레기 수집자(garbage collector)가 자동으로 수거한다.
- 배열 접근시 발생하기 쉬운 첨자침범(인덱싱) 오류를 자동으로 검사한다.
- C++등에 존재하는 다중 상속등을 금지시킴으로써, 객체의 상속을 단순화 했다.
즉, 위와 같은 특징을 갖는 자바 프로그래밍 언어를 이용해 작성된 코드는 컴파일러를 통해 바이트 코드라는 중간 코드로 변형되는데, 자바 가상머신(Java Virtual Machine)은 이를 해석하고 수행하는 역할을 한다. 자바 가상머신 수준에서 바이트 코드를 수행하므로 이기종의 환경이라도 자바 가상머신만 포팅되어 있다면 코드 수정없이 수행이 가능하다.
최근에는, 상기와 같이 시스템의 비종속적인 특징들로 인해 자바를 분산 병렬 처리에 활용하려는 연구가 계속 진행중이다. 그 방향은 대체로 다음의 3가지로 나뉜다.
- 기존 RMI(Remote Method Invocation)의 성능 개선 방향.
- 자바언어의 확장을 통해 메시지 패싱, 단일 프로그램-다중 데이터(Single Program Multiple Data, 이하 "SPMD"라 한다) 형태등의 확장된 프로그래밍 인터페이스의 제공방향.
- 분산환경에서의 쓰레드간 분산 공유 메모리 제공 방향.
여기서, 상기 RMI는 자바 표준 패키지에서 지원이 되는 분산 컴퓨팅 도구로 RPC(Remote Procedure Call)를 자바의 객체 개념에 맞추어 확장한 것으로, 원격 객체의 메쏘드(Method)를 호출하기 위해서 사용되는 규약이다.
그러나, 상기 RMI는 네트웍 지연(latency)이 큰 광역 분산 환경을 위해 설계된 것이기 때문에 네트워크 장애등에 대한 예외상황 처리에 많은 부담을 가진다. 이는 계산위주의 고성능 병렬처리를 하기 위해서 쓰이는 클러스터 환경이 안정된 네트웍 전송을 보장하는 인접한 지역내의 노드들을 대상으로 한다는 점에서 성능을 저하시키는 요소로 작용한다.
또한, 상기 RMI는 객체를 분산 노드간에 주고받기 위해서 객체 직렬화(Object Serialization)라는 과정을 통해 객체를 전송하게 되는데, 이때 전송되는 객체가 참조하는 모든 객체도 동시에 전송되는 등의 부담으로 RMI는 성능상의 한계를 가진다.
또한, 프로그래머의 측면에서 볼 때 RMI는 분산 환경을 인식하고 프로그램을 작성해야 하므로 프로그램 과정을 어렵게 한다. 이러한 프로그램상의 어려움을 보완하기 위해 분산 자바 시스템(JavaParty)에서는 객체에 REMOTE라는 수식어를 붙여서 원격에 분산될 객체를 지정할 수 있게 한다. 여기서, 분산 자바 시스템(JavaParty)은 이렇게 작성된 자바 프로그램을 전처리기(preprocessor)를 통해 순수 RMI를 호출하는 프로그램으로 변환시켜서 수행하게 하는 방식을 쓰고 있다.
또한, 상기 자바에 메시지 패싱등의 확장된 인터페이스를 제공하는 방식을 사용하는 기존 시스템으로 아이스티(IceT), 티타니움(Titanium)등이 사용하고 있다. 그러나, 이러한 방식들은 새로운 프로그래밍 인터페이스로 인해 자바의 이식성을 떨어뜨리게 되는 단점을 지니고 있다.
마지막으로, 위의 두 방식의 단점인 자바 프로그램의 이식성 저하와 프로그램상의 어려움을 덜기 위해 분산 공유 메모리를 제공함으로써 사용자에게 투명한 분산처리 환경을 제공하는 방식이 있다. 여기서, 자바에 분산 공유메모리를 제공하기 위한 방법으로는 가상 머신에서 제공하는 방법, 가상 머신이 수행되는 하드웨어 또는 소프트웨어 플랫폼이 분산 공유 메모리를 지원하는 방식이 있다.
이러한 방식을 사용하는 분산 자바 시스템 중 씨제이브이엠(cJVM)은 가상 머신에 제공하는 방식에 사용하며, Java/DSM이나 하이퍼리온(Hyperion)과 같은 시스템은 가상 머신이 수행되는 하드웨어 또는 소프트웨어 플랫폼이 분산 공유 메모리를 지원하는 방식을 사용하는 대표적인 시스템이다.
상기 씨제이브이엠(cJVM)은 자바 가상 머신 수준에서 분산 공유 메모리 시스템을 제공하게 되는데 원격노드에 있는 객체를 접근하기 위해서는 자신의 노드에 프락시 객체를 생성하고, 원격 객체에 대한 접근은 프락시 객체를 통하게 된다. 이때, 상기 프락시 객체에 전달된 메시지는 원격 객체에 다시 전달되어 원격 노드에서 수행되게 된다. 이와 같이, 원격 객체를 프락시 객체를 통해서 하는 경우 객체를 지역 노드에 복사해서 수행하지 않기 때문에 병렬성이 크게 떨어지게 된다.
한편, 상기 자바(Java)/DSM의 경우 분산 공유 메모리 시스템인 쓰레드 마크(TreadMarks)가 제공하는 분산 공유 메모리 위에 자바 가상머신이 수행하도록 함으로써 자바의 쓰레드들은 쓰레드 마크(TreadMarks)가 제공하는 분산 공유 메모리 환경에서 여러 노드에 분산되어 병렬로 수행되게 된다. 이는 자바의 다중 쓰레드 프로그램들이 분산 환경에 대한 프로그래머의 고려 없이도 병렬로 수행되게 하는 장점을 가진다. 그러나, 자바/디에스엠(Java/DSM)은 노드간 공유의 단위를 페이지로 하는 쓰레드 마크(TreadMarks)시스템을 기반으로 하기 때문에 자바의 객체 모델이 전혀 고려되지 않는다. 따라서, 페이지를 공유 단위로 할 경우 하나의 페이지에 여러 개의 작은 객체들이 배치되는 경우 거짓 공유(false sharing)와 같은 현상이 일어나게 된다.
하이퍼리온(Hyperion)은 Java/DSM의 이와 같은 단점을 보완하기 위해 자바의 객체 모델을 쓸 수 있는, 즉 객체를 공유 단위로 하는 분산 공유 메모리 시스템을 사용함으로써 해결하고 있다. 그러나, 하이퍼리온(Hyperion)은 성능 향상을 위해 자바 바이트 코드(Bytecode)를 C언어 코드로 변환한 뒤 이를 일반적인 C 언어 컴파일러로 컴파일하는 방식을 사용함으로써 자바의 최대 장점이라고 할 수 있는 이기종간의 플랫폼 독립성을 상당부분 잃어버리는 단점을 가진다.
즉, 위에서 살펴본 바와 같이, 자바를 이용한 병렬처리는 여러 가지 방식으로 시도되고 있으나, 씨제이브이엠(cJVM)같은 경우 병렬성이 떨어지는 단점이 있으며, 자바/디에스엠(Java/DSM)은 부적절한 객체 공유방식으로 인한 성능이 저하되는 단점이 있으며, 하이퍼리온(Hyperion)의 경우 네이티브 코드로 컴파일하기 때문에 플랫폼 독립성이 저하되는 단점이 있었다.
이에 본 발명은, 상기와 같은 단점들을 해결하기 위해 제안된 것으로, 자바 가상머신 수준에서 분산 공유 메모리 기능을 갖는 분산 공유 시스템을 제공함으로써 이기종간의 플렛폼 독립성을 보장하며, 메모리의 분산 공유를 이용해서 자바의 쓰레드가 투명하게 원격 노드에 분배되어 병렬로 수행되게 함으로써 프로그래밍의 편의성을 높일 수 있도록 한, 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공함에 그 목적이 있다.
또한, 본 발명은 원격 접근시 지역 노드에 복사를 통해 접근하게 함으로써 병렬성을 높이며, 객체 복사에 따른 객체간의 일관성 유지는 동기화시에 최근에 락을 푼 쓰레드와 현재 락을 잡으려는 쓰레드간의 통신만으로 일관성을 유지함으로써 객체간 일관성 유지에 따른 통신 부담을 최소화할 수 있도록 한, 자바 가상머신에서 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공함에 그 목적이 있다.
도 1은 본 발명에 따른 자바 가상머신에서 분산 환경 시스템의 일실시예 구성도.
도 2는 본 발명에 따른 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템에 대한 일실시예 구성도.
도 3은 본 발명에 따른 자바 가상머신에서의 메모리 분산 공유 방법 중 자바 가상머신에서 수행되는 쓰레드 분배를 통한 메모리의 분산 공유 과정에 대한 일실시예 흐름도.
도 4는 본 발명에 따른 자바 가상머신에서의 메모리 분산 공유 방법 중 원격 자바 가상머신에서 수행되는 쓰레드 생성을 통한 메모리의 분산 공유 과정에 대한 일실시예 흐름도.
도 5는 본 발명에 적용되는 자바 가상머신에서 규약에 명시된 자바 쓰레드간의 메모리 일관성에 대한 통신 규약을 설명하는 도면.
도 6은 본 발명에 따른 자바 가상머신에서의 분산 객체간 일관성 유지 방법중 객체에 대해 락을 설정하는 과정에 대한 일실시예 흐름도.
도 7은 본 발명에 따른 자바 가상머신에서의 분산 객체간 일관성 유지 방법 중 객체에 대한 락을 해제하는 과정에 대한 일실시예 흐름도.
도 8은 본 발명에 따른 자바 가상머신에서의 분산 객체간 일관성 유지 방법 중 변경 객체의 동기화를 수행하는 과정에 대한 일실시예 흐름도.
도 9는 도 8에 도시된 원격 쓰레드를 대신해서 락을 설정할 대체 쓰레드의 생성 과정에 대한 일실시예 흐름도.
상기와 같은 목적을 달성하기 위한 본 발명은, 자바 가상 머신과 하나 이상의 원격 자바 가상 머신간의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템에 있어서, 객체의 바이트 코드를 읽어서 새로운 쓰레드의 생성 및 동기화를 요청하며, 생성된 쓰레드를 바이트 코드로 수행하기 위한 바이트 코드 수행 수단; 상기 바이트 코드 수행 수단에서 새로운 쓰레드의 생성 요청시 원격 자바 가상 머신에게 쓰레드 생성을 요청하고, 다른 원격 자바 가상 머신으로부터의 쓰레드 생성 요청을 처리하기 위한 쓰레드 관리 수단; 상기 쓰레드 관리 수단에서 생성된 객체들을 저장하고, 저장된 객체들의 공유 객체 위치를 기록하기 위한 공유 객체 저장 수단; 및 상기 공유 객체 저장 수단에 등록된 공유 객체간의 정보 교환을 통해 원격 자바 가상 머신에 분산 저장된 객체와의 일관성을 유지하기 위한 동기화 관리 수단을 포함하는 것을 특징으로 한다.
또한, 본 발명은, 자바 가상머신에서의 메모리 분산 공유 시스템에 적용되는 메모리 분산 공유 방법에 있어서, 자바 가상머신의 바이트 코드 수행부가 생성하려는 객체가 자바언어 쓰레드(java.lang.Thread) 클래스의 하위 객체인지를 확인하는 제 1 단계; 상기 제 1 단계에서 자바언어 쓰레드(java.lang.Thread) 클래스의 하위객체임이 확인됨에 따라 쓰레드 관리부를 통해 다른 자바 가상머신을 찾아 쓰레드 생성(THREAD_NEW)메시지를 다른 자바 가상머신의 쓰레드 관리자에게 전송하는 제 2 단계; 상기 다른 자바 가상머신의 쓰레드 관리자로부터 쓰레드 생성(THREAD_NEW) 메시지의 대한 쓰레드 응답(THREAD_ACK)메시지를 전송받고, 생성될 쓰레드 객체의 생성자 메쏘드를 수행하기 위해 필요한 인자로 전달된 객체들과 메쏘드(Method)의 구별자(signature)를 전송하는 제 3 단계; 및 상기 다른 자바 가상머신으로 전송된 객체들을 공유 객체로 등록하는 제 4 단계를 포함하는 것을 특징으로 한다.
또한, 본 발명은, 자바 가상머신에서 분산 객체간 일관성 유지 시스템에 적용되는 분산 객체간 일관성을 유지하기 위한 방법에 있어서, 기록된 현재의 구간값을 증가시켜 지역적으로 락을 설정하고, 락의 소유자에게 락의 소유권을 요구하여 락을 소유했던 쓰레드와의 통신으로 락을 설정하는 제 1 단계; 기록된 구간값을 증가시키고, 홈 노드의 락 객체의 락을 풀 것을 요청하여 락 객체의 복사본에 대한 지역 락을 해제하는 제 2 단계; 및 동기화에 관련된 공유 객체의 복사본을 가지는 자바 가상머신들과 자신의 구간 테이블값의 비교를 통해 변경 객체의 동기화를 수행하는 제 3 단계를 포함하는 것을 특징으로 한다.
한편, 본 발명은, 자바 가상머신에서 메모리 분산 공유를 위하여, 프로세서를 구비한 메모리 분산 공유 시스템에, 바이트 코드수행부가 생성하려는 객체가 자바언어 쓰레드(java.lang.Thread) 클래스의 하위 객체인지를 판단하는 제 1 기능; 상기 제 1 기능에서 판단 결과, 객체가 자바언어 쓰레드(java.lang.Thread) 클래스의 하위 객체일 경우 객체 쓰레드 관리부를 통해 인접한 자바 가상머신을 찾아 쓰레드 생성(THREAD_NEW) 메시지를 원격 쓰레드 관리자에서 전송하는 제 2 기능; 상기 인접한 자바 가상머신의 원격 쓰레드 관리자로부터 쓰레드 생성(THREAD_NEW) 메시지의 대한 쓰레드 응답(THREAD_ACK) 메시지를 전송받고, 생성될 쓰레드 객체의 생성자 메쏘드를 수행하기 위해 필요한 인자로 전달된 객체들과 메쏘드(Method)의 구별자(signature)를 전송하는 제 3 기능; 및 상기 인접한 자바 가상머신으로 전송된 객체들을 공유 객체로 등록하는 제 4 기능을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
또한, 본 발명은, 자바 가상머신에서 분산 객체간 일관성을 유지하기 위하여, 프로세서를 구비한 분산 객체간 일관성 유지 시스템에,기록된 현재의 구간값을 증가시켜 지역적으로 락을 설정하고, 락의 소유자에게 락의 소유권을 요구하여 락을 소유했던 쓰레드와의 통신으로 락을 설정하는 제 1 기능; 기록된 구간값을 증가시키고, 홈 노드의 락 객체의 락을 풀 것을 요청하여 락 객체의 복사본에 대한 지역 락을 해제하는 제 2 기능; 및 동기화에 관련된 공유 객체의 복사본을 가지는 자바 가상머신들과 자신의 구간 테이블값의 비교를 통해 변경 객체의 동기화를 수행하는 제 3 기능을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공함을 특징으로 한다.
여기서 상술된 목적, 특징들 및 장점은 첨부된 도면과 관련한 다음의 상세한 설명을 통하여 보다 분명해 질 것이다. 이하 첨부된 도면을 참조하여 본 발명에 따른 바람직한 일실시예를 상세히 설명한다.
도 1은 본 발명에 따른 자바 가상머신에서 분산 환경 시스템의 일실시예 구성도이다.
도 1에 도시된 바와 같이, 각각의 자바 가상머신 프로세스(101,102)는 지역 또는 분산된 프로세서 상에서 수행되고 있다. 상기 자바 가상머신 프로세스(101,102)들은 동일한 컴퓨터내에서 수행될 수도 있고 그렇지 않을 수도 있다. 분산된 환경인 경우, 상기 자바 가상머신 프로세스(101,102)들은 고속 통신 수단(118)을 통해 메시지를 주고받게 된다.
따라서, 각각의 자바 가상머신 프로세스(101,102)들은 다중 쓰레드(110,111,114)화 된 병렬 프로그램(116)을 수행 중 쓰레드를 생성할 경우, 분산되어 있는 다른 자바 가상머신 프로세스(102)에게 쓰레드 생성을 요청하게 되며 이에 필요한 인자 등을 전달하게 된다. 서로 다른 가상머신 상에서 수행중인 쓰레드간에 공유 객체(112,113)들은 서로의 일관성이 유지하게 되며, 이러한 일관성 유지 방식을 통해 분산된 자바 가상머신 프로세스(101,102)들은 통합 자바 가상 머신(103)과 같이 하나의 가상머신 역할을 하게 되며 응용 프로그램은 그 위에서 단일한 시스템 이미지를 가지고 수행되게 되는 것이다.
자바는 언어적으로 멀티 쓰레드를 이용해서 병렬 프로그래밍이 가능하도록 설계되어 있어 본 발명에 적용되는 분산 환경 시스템도 자바의 쓰레드를 병렬 수행의 최소 단위로 인식하여 수행되게 된다. 즉, 자바언어 쓰레드(Java.lang.Thread) 클래스는 쓰레드의 생성, 초기화, 정지 및 종료에 관한 모든 방법을 포함하고, 이 클래스나 하위 클래스를 상속한 객체를 생성함으로써 자바의 쓰레드가 생성된다. 자바에서는 쓰레드 역시 객체이므로 쓰레드 객체를 생성함으로써 쓰레드가 생성된다. 따라서, 이러한 점을 이용해 자바의 객체 생성 바이트 코드인 NEW 바이트 코드를 쓰레드 객체 생성을 위해 확장하게 된다.
도 2는 본 발명에 따른 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템에 대한 일실시예 구성도이다.
도 2에 도시된 바와 같이, 상기 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템은 크게 자바 가상머신(206) 및 원격 자바 가상머신(207)을 포함한다. 여기서, 상기 자바 가상머신(206)은 쓰레드를 발생하며, 원격 자바 가상머신(207)은 자바 자상머신(206)에서 발생된 쓰레드를 분배하기 위한 수단으로 한정하여 설명하지만, 상기 원격 자바 가상머신(207)이 쓰레드를 발생하고, 자바 가상머신(206)이 발생된 쓰레드를 분배할 수도 있다.
즉, 상기 자바 가상머신(206)의 구성은, 쓰레드 생성시 후술될 원격 자바 가상머신(207)에 쓰레드 생성을 요청하는 바이트 코드 수행부(Bytecode execution engine : 201), 쓰레드 생성시 원격 자바 가상머신(207)에 쓰레드 생성을 요청하거나, 요청 받았을 때 생성을 담당하는 쓰레드 관리자(thread manager : 202), 객체들이 생성되어 관리되는 객체 풀(object pool: 203), 객체 풀(203) 내부의 공유 객체의 위치를 기록하고 있는 공유 객체 테이블(shared object table : 204) 및 공유되는 객체들간의 일관성 유지를 담당하는 동기화 관리부(synchronization manager: 205)를 포함한다.
여기서, 자바 가상머신(206)상에서 발생된 쓰레드들은 쓰레드 분배 정책에 의해 원격 자바 가상머신(207)에 분배되며, 이 분배된 쓰레드들은 병렬로 수행한다.
즉, 자바 가상머신(206)은 바이트 코드 수행부(201)가 수행 중 새로운 쓰레드를 생성하게 될 경우, 자신의 쓰레드 관리자(202)에게 새로운 쓰레드의 생성을 요청하게 되며, 이때, 상기 쓰레드 관리자(202)는 다수의 인접한 자바 가상머신상의 쓰레드 관리자와의 통신을 통해 부하가 가장 적게 걸린 자바 가상머신 즉, 원격 자바 가상머신(207)을 선정하게 된다. 이때, 자바 가상머신(206)은 쓰레드 관리자(202)를 통해 원격 쓰레드 관리자(211)에게 쓰레드 생성에 필요한 init() 메쏘드의 구별자(signature)와 파라미터 객체들을 전달한다. 이때, 쓰레드를 분배받은 원격 자바 가상머신(207)의 원격 쓰레드 관리자(211)는 전달받은 파라미터 객체와 쓰레드 객체를 자신의 원격 공유 객체 테이블(214)과 원격 객체 풀(213)에 등록하게 되며, 쓰레드는 원격 바이트 코드 수행부(212)에서 수행을 하게 된다.
그러면, 상기 원격 바이트 코드 수행부(212)에서 쓰레드 수행 중에 록/언록(LOCK/UNLOCK)과 같은 동기화 관련 바이트 코드가 수행되면, 원격 바이트 코드 수행부(212)는 자신의 원격 동기화 관리자(215)에게 동기화를 요청하게 되며, 이 원격 동기화 관리자(215)는 다른 자바 가상머신 즉, 자바 가상머신(206)의 동기화 관리자(205)에게 동기화를 요청하게 된다. 이때, 동기화 관리자(205,209)들은 공유 객체에 가해진 변경을 서로 동기시키게 된다.
도 3은 본 발명에 따른 자바 가상머신에서의 메모리 분산 공유 방법 중 자바 가상머신에서 수행되는 쓰레드 분배를 통한 메모리의 분산 공유 과정에 대한 일실시예 흐름도이다.
도 3에 도시된 바와 같이, 먼저, 사용자의 응용 프로그램을 수행중인 자바 가상머신(206)의 바이트 코드 수행부(201)는 수행 중 새로운 바이트 코드를 수행할 때(301), 생성하려는 객체가 자바언어 쓰레드(Java.lang.Thread) 클래스의 하위 객체인지 여부를 판단한다(302).
상기 과정(302)에서 판단한 결과, 생성 객체가 자바언어 쓰레드(Java.lang.Thread) 클래스의 하위 객체가 아닐 경우에는 일반적인 객체를 생성하는 과정(308)으로 진행하고, 생성 객체가 자바언어 쓰레드(Java.lang.Thread) 클래스의 하위 객체일 경우에는 쓰레드 관리자를 통해 적절한 인접 자바 가상머신 즉, 원격 자바 가상머신(207)을 찾게 된다(303).
여기서, 원격 자바 가상머신(207)은 자바 가상 머신을 구현시 구현자가 결정한 것으로, 상기 자바 가상머신(206)의 쓰레드 관리자(202)는 "THREAD_NEW"라는 메시지를 원격 자바 가상머신(207)의 원격 쓰레드 관리자(211)에게 보낸다(304).
그리고, 메시지를 기다리던 원격 자바 가상머신(207)으로부터 "THREAD_NEW 메시지에 대응되는 "THREAD_ACK" 메시지를 전송 받는다(305). 이후, 자바 가상머신(206)은 생성될 쓰레드 객체의 생성자 메쏘드를 수행하기 위해 필요한 인자로 전달될 객체들과 메쏘드의 시그니쳐(signature)를 전송하게 되며(306), 이 객체들은 공유 객체로 등록되게 된다(307).
도 4는 본 발명에 따른 자바 가상머신에서의 메모리 분산 공유 방법 중 원격 자바 가상머신에서 수행되는 쓰레드 생성을 통한 메모리의 분산 공유 과정에 대한 일실시예 흐름도이다.
도 4에 도시된 바와 같이, 먼저, 상기 원격 자바 가상머신(207)의 원격 쓰레드 관리자(211)는 자바 가상머신(206)의 쓰레드 관리자(201)로부터 "THREAD_NEW"라는 메시지가 수신될 때까지 대기하고, 이 "THREAD_NEW"라는 메시지가 수신되면 그 메시지의 응답 메시지로 "THREAD_ACK" 메시지를 자바 가상머신(206)으로 전송하여 쓰레드 생성에 필요한 준비가 끝났음을 알린다(402). 그리고, 생성자 메쏘드를 수행하기 위해 필요한 객체들과 메쏘드의 시그니쳐를 전송 받는데(403), 이 공유 객체를 받아서 공유 객체 테이블에 공유 객체로써 등록을 하게 된다(404).
그리고, 전달받은 객체들을 가지고 새로운 쓰레드를 생성해서 수행을 시작하게 된다(405).
한편, 상기와 같은 메모리의 분산 공유를 위해 가상머신 규약에는 자바 가상머신내 하나의 힙 영역 즉, 동적으로 생성 및 소멸되는 객체를 저장하는 메모리 공간만이 존재하며 모든 객체는 힙 영역에 생성되므로 자바에서 모든 객체는 모든 쓰레드에서 접근 가능해야 한다고 명시하고 있다. 이를 본 발명의 분산 환경에서도 가능하게 하려면 분산된 객체들간에도 서로 다른 가상머신의 객체를 지정할 수 있는 방법이 있어야 한다. 즉, 전역적인 객체 참조값이 있어야만 한다. 분산된 쓰레드가 다른 가상머신의 객체를 지정하기 위해 본 발명은 객체를 공유되고 있는 공유 객체와 그렇지 않은 객체로 구분하고 공유 객체에는 시스템 전역적인 번호를 할당하게 된다. 따라서, 상기 공유 객체는 2개 이상의 쓰레드에서 공통적으로 참조값을 가지고 있을 경우 공유 객체가 되고, 모든 객체는 모든 쓰레드에서 잠재적으로 접근 가능하지만 해당 객체의 참조값을 가지지 못하면 접근할 수 없다. 그러므로, 상기 자바에서는 전역 변수가 없으므로 다수의 쓰레드에서 한 객체의 참조값을 공유하기 위해서는 쓰레드간에 객체 참조값이 인자로 전달되어야 한다.
여기서, 간단한 자바 프로그램을 통해 공유 객체를 살펴보면 다음과 같다.
Class Ca{
public int x;
}
Class myProg{
Ca m = new Ca();
for (I =0; I<10; I++){
new myThread(m,I).start();
}
}
상기 프로그램에서 객체 m은 생성되는 메인 쓰레드와 새로 생성된 쓰레드간에 공유되는 유일한 객체 즉, 공유 객체로 인식되게 된다. 두 가상 머신에서 공유 객체로 인식된 객체는 시스템 전체에서 유일한 객체 번호를 할당받게 되며, 각각의 가상머신내의 공유 객체 테이블에 등록되게 된다.
이 객체 번호는 추후 이 공유 객체를 참조할 때마다 사용되게 된다. 또한,공유 객체의 모든 복사본들은 동일한 객체 번호를 가지게 되는데, 각각의 복사본들은 공유 객체 번호와 자바 가상머신 고유 번호의 쌍으로써 다른 객체와 구분되게 된다. 따라서, 각 쓰레드는 객체를 접근함에 있어 지역성(locality)을 높이기 위해 접근하려는 객체가 자신이 수행중인 가상 머신상에 없을 경우 원격 자바 가상머신에서 복사를 해 온 후 접근하게 된다.
각 객체가 최초로 생성된 자바 가상머신은 해당 객체의 홈 노드가 되며, 각 객체는 자신의 홈 노드가 어느 것인지에 대한 정보를 가지게 된다. 홈 노드의 공유 객체 테이블에는 자신의 객체를 복사해간 가상 머신중 어느 가상머신이 최신의 내용을 가지고 있는지에 대한 정보를 유지하게 된다.
앞서 설명한 바와 같이 본 발명의 목적을 달성하는 시스템은 원격 객체 접근의 효율성을 높이기 위해 원본 객체를 자신의 자바 가상머신의 객체 풀에 복사해서 사용하게 된다. 이 경우 복사본 객체들간의 일관성(consistency)을 갖게 하는 것이 중요하다. 모든 가상머신들은 자바 메모리 모델에 준하는 일관성 규칙을 적용해야만 일반적인 자바 프로그램들이 올바른 수행 결과를 얻을 수 있게 된다.
도 5는 본 발명에 적용되는 자바 가상머신에서 규약에 명시된 자바 쓰레드간의 메모리 일관성에 대한 통신 규약을 설명하는 도면이다.
도 5에 도시된 바와 같이, 상기 제 1 쓰레드(506) 및 제 2 쓰레드(507)는 동일 프로세서 상에서 수행될 수도 있고 그렇지 않을 수도 있다. 자바 가상 머신의 메모리는 모든 쓰레드에서 접근 가능한 메인 메모리(503)와 각각의 쓰레드만이 접근 가능한 활동 메모리(502, 504)로 구성된다. 각각의 객체들은 메인 메모리(503)에 있으며 쓰레드는 이 객체들을 접근하기 위해 자신의 활동 메모리로 복사를 해야만 한다. 또한, 각각의 활동 메모리(502,504)에서 변경된 값들은 메인 메모리(503)로의 복사 과정이 일어난 후에만 다른 쓰레드에서 변경된 값을 볼 수 있게 된다. 자바 규약은 메인 메모리(503)와 활동 메모리(502,504)들간의 복사를 락과 관계된 동기화(synchronizaion)가 일어날 때만 일어나도록 규정하고 있다.
즉, 락을 잡을 때, 락을 잡은 쓰레드는 자신의 활동 메모리(502,504)의 모든 객체의 내용을 무효화(invalidate)시킴으로써 객체 접근 시 다시 메인 메모리(503)로부터 복사하는 과정을 거쳐야 하며, 락을 풀 때 자신이 활동 메모리에 가한 변경을 메인 메모리(503)에 복사하도록 하고 있다.
이하, 본 발명에서 위와 같은 조건을 만족시키기 위해서 사용되는 방법에 대해 구체적으로 살펴본다.
각각의 쓰레드는 자신의 수행을 구간(interval)들의 연속으로 나누고 있다. 쓰레드가 락을 잡거나 풀 때마다 새로운 구간이 시작되게 되고, 구간값은 증가하게 된다. 여기서, 상기 구간값은 각 쓰레드간의 부분적인 순서 관계(partial order)를 결정하기 위해서 사용된다. 한 쓰레드의 구간들은 쓰레드의 수행 순서에 의해 전체적인 순서가 결정되게 된다. 서로 다른 쓰레드의 경우 어떤 락을 놓은 쓰레드를 P라 하고, 다음에 락을 잡은 쓰레드를 Q라고 하면 P는 Q에 앞선다고 한다. 이러한 관계에 의해 각 쓰레드의 구간들 사이에는 부분적인 순서 관계가 성립된다. 각 쓰레드는 락을 잡거나 풀 때마다 구간 내에서 수정된 공유 객체들에 대해 공유 객체 테이블에 현재 쓰레드의 구간 번호를 기록하게 된다. 이는 각 공유 객체에 대해해당 노드의 어느 구간에서 마지막으로 수정이 가해졌는지를 나타내게 된다.
또한, 각 쓰레드는 구간 테이블을 가지는데 구간 테이블은 수행중인 쓰레드 수만큼의 원소를 가지게 된다. 구간 테이블의 각 원소는 쓰레드가 다른 쓰레드의 어느 구간까지 보았는지를 나타낸다. 예를들어, Pi j를 i번째 쓰레드의 구간 테이블에서 j번째 쓰레드에 해당하는 원소의 값을 가르킨다고 하고 그 값을 k라고 하면 i번째 쓰레드는 j번째 쓰레드의 k구간 까지의 변경을 현재 자신의 공유 객체들에게 반영 시켰음을 보인다. 그리고, Pi i는 쓰레드 자신의 현재 구간값을 나타낸다.
한편, 일관성 유지는 동기화와 함께 행해지게 되는데 크게 락을 잡는 과정, 락을 푸는 과정 그리고 각 가상머신내의 원격 동기화 관리자가 메시지를 처리하는 과정을 통해 이루어진다. 따라서, 어느 객체에 대한 락을 잡기 위해서는 항상 해당 객체의 홈 노드에 있는 객체의 락을 우선적으로 잡도록 한다. 어떤 한 객체의 락을 잡으려 경쟁하는 쓰레드들은 모두 그 객체의 홈 노드를 경유하게 되므로, 하나의 객체에 대한 접근은 모두 순서화된다.
도 6은 본 발명에 따른 자바 가상머신에서의 분산 객체간 일관성 유지 방법 중 객체에 대해 락을 설정하는 과정에 대한 일실시예 흐름도.
도 6에 도시된 바와 같이, 먼저, 락을 잡고자 쓰레드를 수행중인 자바 가상머신은 락을 잡기 전에 변경한 공유 객체에 대해 공유 객체 테이블에 현재의 구간값을 기록한다(601). 즉, 현재의 구간값이 변경될 때마다(구간값은 락을 잡거나 풀때마다 증가한다)변경된 객체에 대해 구간값을 기록함으로써 공유 객체는 어떤 구간에서 최후로 변경이 가해졌는지 공유 객체 테이블을 통해 알수 있게 된다.
그 후, 현재의 현재의 구간값을 증가시키고(602), 락을 잡고자 쓰레드를 수행중인 자바 가상머신은 락을 잡으려는 객체의 복사본에 대해 지역적으로 락을 잡는다(603). 그 후, 객체의 홈 노드(모든 공유 객체는 홈노드 필드를 갖는다)에 "LOCK_REQUEST" 메시지를 전송하여 락을 요청하게 된다(604). 그리고, 상기 요청한 락과 마지막으로 락을 얻은 노드(이러한 노드를 락의 소유자라고 한다)에 대한 정보를 얻은 후(605), 락의 소유자에게 락의 소유권을 요구한다(606).
여기서, 상기 락의 소유권을 요구하는 것은 해당 노드에서 공유 객체들에 행한 변경을 요구하는 것이다. 이때, 상기 락을 요청하는 노드 i를 받은 노드를 j라 하면 상기 j는 락의 소유자라고 정의한다.
노드 j의 원격 동기화 관리자는 공유 객체들 중 자신의 구간 테이블의 Pj i의 값보다 큰 최후 변경 구간값을 가지는 객체들의 목록과 자신의 구간 테이블을 노드 i에게 전송하게 된다(607). 그러면, 노드 i는 노드 j에게서 받은 구간 테이블과 자신의 구간 테이블의 원소들을 쌍쌍이 비교해서 큰 값을 가지는 원소의 값을 취하게 된다(608).
또한, 노드 i는 목록에 기록된 공유 객체들 중 해당 객체에 기록된 구간값이 전송되어온 목록의 해당 객체의 구간값보다 작은 경우 객체를 무효화 하는데(609), 이렇게 하면 추후 해당 공유 객체를 접근할 때는 객체를 새로 요청해서 복사를 받아야 한다. 따라서, 상기와 같은 과정을 통해 이전에 락을 잡았던 노드에서 논리적 시간상으로 앞서서 행했던 공유 객체에 대한 모든 변경은 다음에 해당 객체의 락을 잡는 노드에 그대로 전달되게 되고, 변경 객체 목록의 기록을 시작한다(610).
도 7은 본 발명에 따른 자바 가상머신에서의 분산 객체간 일관성 유지 방법 중 객체에 대한 락을 해제하는 과정에 대한 일실시예 흐름도이다.
즉, 도 7에 도시된 바와 같이, 락을 풀 경우도 구간내에서 변경된 공유 객체에 대해 현재의 구간값을 기록하고(701), 구간값을 증가시킨다(702). 그리고, 상기 락 객체의 홈노드에게 UNLOCK 메시지를 보내서 홈노드의 락 객체의 락을 풀 것을 요청한다(703). 이후, 락 객체의 복사본에 대한 지역 락을 풀게 되면(704), 변경 객체 목록의 기록을 시작한다(705).
도 8은 본 발명에 따른 자바 가상머신에서의 분산 객체간 일관성 유지 방법 중 변경 객체의 동기화를 수행하는 과정에 대한 일실시예 흐름도이다.
즉, 도 8은 본 발명에 따른 자바 가상머신에서 분산 객체간 일관성 유지 방법에서 원격 객체 동기화 관리자가 메시지를 받을 때 메시지의 종류에 따른 수행으로 일관성을 유지하기 위한 방법의 흐름도로서, 먼저, 자바 가상머신(206)의 동기화 관리자(205)는 원격 자바 가상머신(207)의 원격 동기화 관리자(215)가 보내는 메시지를 기다리게 된다(801). 메시지가 도착할 경우, 이를 읽어들여서 메시지의 종류를 분석하게 된다(802).
상기 과정(802)에서 분석 결과, 원격에서 수행중인 쓰레드가 객체의 홈 노드인 이 노드에 객체에 대한 락을 잡겠다고 LOCK_REQUEST 메시지를 보낸 경우(803)에는 이 메시지를 받은 원격 동기화 관리자는 원격 쓰레드를 대신해서 락을 잡을 대체 쓰레드(dummy thread)를 생성하게 된다(807).
상기 과정(802)에서 분석 결과, 동기화 관리자(205)가 객체를 전송하라는 메시지인 OBJECT를 받은 경우(804), 이때, 동기화 관리자(205)는 자신이 해당 객체의 최신값을 가지고 있는지를 판단한다(808).
이 과정(809)에서 판단 결과, 자신이 해당 객체의 최신값을 가지고 있을 경우(이 메시지를 받은 가상머신은 해당 객체의 홈 노드이므로 공유 객체 테이블을 보고 자신이 최신 값을 가지고 있는 노드인지의 여부를 판단할 수 있다)객체를 전송하고(812), 그렇지 않은 경우는 최신값을 가지고있는 객체를 공유 객체 테이블의 정보를 이용해서 찾아서 SEND_OBJECT 메시지를 보내게 된다(811).
상기 과정(802)에서 분석 결과, SEND_OBJECT 메시지를 받을 경우(805), 자바 가상머신은 객체의 최신 값을 가지고 있으므로 자신의 객체 풀의 공유 객체의 내용을 요구자에게 전송하게 된다(809).
상기 과정(802)에서 분석 결과, 락에 대한 소유권을 요구하는 LOCK_OWNERSHIP_REQUEST 메시지를 받은 경우(806)에는 락을 소유한 노드의 구간 테이블에서의 락의 소유권을 요구한 노드의 구간값보다 큰 최후 수정 구간을 가지는 공유 객체들의 목록을 전송하고(810), 노드의 구간 테이블을 전송한다(813).
도 9는 도 8에 도시된 원격 쓰레드를 대신해서 락을 설정할 대체 쓰레드의 생성 과정에 대한 일실시예 흐름도이다.
도 9에 도시된 바와 같이, 생성된 대체 쓰레드는 락을 이 가상 머신 내에서락을 잡기 위해 다른 쓰레드와 경쟁하게 되며(901), 락을 잡은 후 원격 쓰레드에게 락을 잡았음을 LOCK_ACK 메시지를 통해 원격 동기화 관리자에게 알리게 된다(902). 그리고, 수행을 계속하던 원격 쓰레드는 락을 풀 때도 자신의 원격 동기화 관리자를 통해 락을 풀 것을 UNLOCK 메시지를 대체 쓰레드에게 보내 알리게 되며(903), 대체 쓰레드는 이를 처리하게 되는데, 이를 받은 대체 쓰레드는 홈 노드 객체에 대한 락을 풀게 된다(904).
상술한 바와 같은 본 발명의 방법은 프로그램으로 구현되어 컴퓨터로 읽을 수 있는 기록매체(씨디롬, 램, 롬, 플로피 디스크, 하드 디스크, 광자기 디스크 등)에 저장될 수 있다.
이상에서 설명한 본 발명은 진술한 실시예 및 첨부된 도면에 의해 한정되는 것이 아니고, 본 발명의 기술적 사상을 벗어나지 않는 범위내에서 여러가지 치환, 변형 및 변경이 가능하다는 것이 본 발명이 속하는 기술분야에서 통상의 지식을 가진자에게 있어 명백할 것이다.
상기와 같은 본 발명은, 기존의 자바의 분산 수행 방식인 RMI에 비해 투명한 분산 병렬 수행 환경을 제공함으로써 프로그래머는 분산 환경을 인식하지 않고도 다중 쓰레드화된 응용 프로그램을 분산 환경에서 병렬로 수행 가능하다. 또한, 자바 가상머신 수준에서 분산 공유 메모리를 제공하는 방식에 있어서도 원격 객체 접근 시 원격 객체의 복사본을 통한 접근을 통해 병렬성을 높이고 있으며, 이들간의일관성을 자바언어 규약의 동기화 방식을 이용해서 구현할 수 있어 병렬처리에 있어서의 성능을 향상시키는 효과가 있다.

Claims (11)

  1. 자바 가상 머신과 하나 이상의 원격 자바 가상 머신간의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템에 있어서,
    객체의 바이트 코드를 읽어서 새로운 쓰레드의 생성 및 동기화를 요청하며, 생성된 쓰레드를 바이트 코드로 수행하기 위한 바이트 코드 수행 수단;
    상기 바이트 코드 수행 수단에서 새로운 쓰레드의 생성 요청시 원격 자바 가상 머신에게 쓰레드 생성을 요청하고, 다른 원격 자바 가상 머신으로부터의 쓰레드 생성 요청을 처리하기 위한 쓰레드 관리 수단;
    상기 쓰레드 관리 수단에서 생성된 객체들을 저장하고, 저장된 객체들의 공유 객체 위치를 기록하기 위한 공유 객체 저장 수단; 및
    상기 공유 객체 저장 수단에 등록된 공유 객체간의 정보 교환을 통해 원격 자바 가상 머신에 분산 저장된 객체와의 일관성을 유지하기 위한 동기화 관리 수단
    을 포함하는 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리 분산 공유 시스템.
  2. 제 1 항에 있어서,
    상기 원격 자바 가상머신은,
    전송받은 공유 객체를 자신의 공유 객체 테이블에 공유 객체를 등록하고, 새로운 쓰레드 생성을 시작하는 것을 특징으로 하는 자바 가상머신에서의 일관성 유지 및 메모리 분산 공유 시스템.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 쓰레드는,
    접근하려는 원본 객체가 자신이 수행중인 자바 가상머신상에 없을 경우 인접한 자바 가상머신에서 복사를 해 온 후 접근하는 것을 특징으로 하는 자바 가상머신에서의 일관성 유지 및 분산 공유 시스템.
  4. 자바 가상머신에서의 메모리 분산 공유 시스템에 적용되는 메모리 분산 공유 방법에 있어서,
    자바 가상머신의 바이트 코드 수행부가 생성하려는 객체가 자바언어 쓰레드(java.lang.Thread) 클래스의 하위 객체인지를 확인하는 제 1 단계;
    상기 제 1 단계에서 자바언어 쓰레드(java.lang.Thread) 클래스의 하위 객체임이 확인됨에 따라 쓰레드 관리부를 통해 다른 자바 가상머신을 찾아 쓰레드 생성(THREAD_NEW)메시지를 다른 자바 가상머신의 쓰레드 관리자에게 전송하는 제 2 단계;
    상기 다른 자바 가상머신의 쓰레드 관리자로부터 쓰레드 생성(THREAD_NEW)메시지의 대한 쓰레드 응답(THREAD_ACK)메시지를 전송받고, 생성될 쓰레드 객체의 생성자 메쏘드를 수행하기 위해 필요한 인자로 전달된 객체들과 메쏘드(Method)의 구별자(signature)를 전송하는 제 3 단계; 및
    상기 다른 자바 가상머신으로 전송된 객체들을 공유 객체로 등록하는 제 4 단계
    를 포함하는 자바 가상머신에서의 메모리 분산 공유 방법.
  5. 제 4 항에 있어서,
    상기 1 단계에서 생성하려는 객체가 자바언어 쓰레드(java.lang.Thread) 클래스의 하위 객체가 아닌 것으로 확인임에 따라 일반적인 객체를 생성하는 제 5 단계
    를 더 포함하는 자바 가상머신에서의 메모리 분산 공유 방법.
  6. 자바 가상머신에서 분산 객체간 일관성 유지 시스템에 적용되는 분산 객체간 일관성을 유지하기 위한 방법에 있어서,
    기록된 현재의 구간값을 증가시켜 지역적으로 락을 설정하고, 락의 소유자에게 락의 소유권을 요구하여 락을 소유했던 쓰레드와의 통신으로 락을 설정하는 제 1 단계;
    기록된 구간값을 증가시키고, 홈 노드의 락 객체의 락을 풀것을 요청하여 락 객체의 복사본에 대한 지역 락을 해제하는 제 2 단계; 및
    동기화에 관련된 공유 객체의 복사본을 가지는 자바 가상머신들과 자신의 구간 테이블값의 비교를 통해 변경 객체의 동기화를 수행하는 제 3 단계
    를 포함하는 자바 가상머신에서의 분산 객체간 일관성 유지 방법.
  7. 제 6 항에 있어서,
    상기 제 1 단계는,
    변경한 공유 객체에 대해 공유 객체 테이블에 현재의 구간값을 기록하고, 현재의 구간값을 증가시켜 객체의 복사본에 대해 지역적으로 락을 잡는 제 4 단계;
    객체의 홈 노드에 락 요청(LOCK_REQUEST) 메시지를 전송하고, 락과 마지막으로 락을 얻은 노드에 대한 정보를 얻어 락의 소유자에게 락의 소유권을 요구하는 제 5 단계;
    락의 소유자 원격 동기화 관리자로부터 최후 변경 구간값을 가지는 객체들의 목록과 구간 테이블을 제공받고, 자신의 구간 테이블의 원소들을 비교해서 큰값을 가지는 원소의 값을 취하는 제 6 단계; 및
    해당 객체에 기록된 구간값이 전송되어온 목록의 해당 객체의 구간값보다 작으면 객체를 무효화하고, 객체를 새로 요청하여 복사를 받아 해당 공유 객체에 접근하는 제 7 단계
    를 포함하는 자바 가상머신에서의 분산 객체간 일관성 유지 방법.
  8. 제 6 항에 있어서,
    상기 제 2 단계는,
    구간내에서 변경된 공유 객체에 대한 현재의 구간값을 기록하고, 이 기록된구간값을 증가시키는 제 4 단계;
    락 객체의 홈 노드에 락 해제(UNLOCK) 메시지를 보내서 홈노드의 락 객체의 락을 풀 것을 요청하는 제 5 단계; 및
    락 객체의 복사본에 대한 지역 락을 해제하는 제 6 단계
    를 포함하는 자바 가상머신에서의 분산 객체간 일관성 유지 방법.
  9. 제 6 항 내지 제 8 항 중 어느 한 항에 있어서,
    상기 제 3 단계는,
    다른 가상머신의 원격 동기화 관리자로부터 메시지가 도착하면, 이 도착한 메시지의 종류를 분석하는 제 8 단계;
    상기 제 8 단계의 분석 결과, 락 요청 메시지가 도착할 경우 원격 쓰레드를 대신하여 락을 잡을 대체 쓰레드를 생성하는 제 9 단계;
    상기 제 8 단계의 분석 결과, 객체를 전송하라는 메시지(OBJECT)가 도착할경우 자신이 해당 객체의 최신값을 가지고 있는지를 판단하여 최신값을 가지고 있을 경우 객체를 전송하고, 최신값을 가지고 있지 않을 경우 최신값을 가지고 있는 객체로 전송 객체(SEND_OBJECT) 메시지를 전송하는 제 10 단계;
    상기 제 8 단계의 분석 결과, 전송 객체(SEND_OBJECT) 메시지가 도착할 경우, 자신의 객체 풀의 공유 객체 내용을 요구자에게 전송하는 제 11 단계; 및
    상기 제 8 단계의 분석 결과, 락에 대한 소유권을 요구하는 메시지(LOCK_OWNERSHIP_REQUEST)가 도착할 경우, 락을 소유한 노드의 구간 테이블에서의 락의 소유권을 요구한 노드의 구간값보다 큰 최후 수정 구간을 가지는 공유 객체들의 목록을 전송하는 제 12 단계
    를 포함하는 자바 가상머신에서의 분산 객체간 일관성 유지 방법.
  10. 자바 가상머신에서 메모리 분산 공유를 위하여, 프로세서를 구비한 메모리 분산 공유 시스템에,
    바이트 코드수행부가 생성하려는 객체가 자바언어 쓰레드(java.lang.Thread) 클래스의 하위 객체인지를 판단하는 제 1 기능;
    상기 제 1 기능에서 판단 결과, 객체가 자바언어 쓰레드(java.lang.Thread) 클래스의 하위 객체일 경우 객체 쓰레드 관리부를 통해 인접한 자바 가상머신을 찾아 쓰레드 생성(THREAD_NEW) 메시지를 원격 쓰레드 관리자에서 전송하는 제 2 기능;
    상기 인접한 자바 가상머신의 원격 쓰레드 관리자로부터 쓰레드 생성(THREAD_NEW) 메시지의 대한 쓰레드 응답(THREAD_ACK) 메시지를 전송받고, 생성될 쓰레드 객체의 생성자 메쏘드를 수행하기 위해 필요한 인자로 전달된 객체들과 메쏘드(Method)의 구별자(signature)를 전송하는 제 3 기능; 및
    상기 인접한 자바 가상머신으로 전송된 객체들을 공유 객체로 등록하는 제 4 기능
    을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  11. 자바 가상머신에서 분산 객체간 일관성을 유지하기 위하여, 프로세서를 구비한 분산 객체간 일관성 유지 시스템에,
    기록된 현재의 구간값을 증가시켜 지역적으로 락을 설정하고, 락의 소유자에게 락의 소유권을 요구하여 락을 소유했던 쓰레드와의 통신으로 락을 설정하는 제 1 기능;
    기록된 구간값을 증가시키고, 홈 노드의 락 객체의 락을 풀 것을 요청하여 락 객체의 복사본에 대한 지역 락을 해제하는 제 2 기능; 및
    동기화에 관련된 공유 객체의 복사본을 가지는 자바 가상머신들과 자신의 구간 테이블값의 비교를 통해 변경 객체의 동기화를 수행하는 제 3 기능
    을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR10-2001-0035171A 2001-06-20 2001-06-20 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리분산 공유 시스템 및 그 방법 KR100380996B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR10-2001-0035171A KR100380996B1 (ko) 2001-06-20 2001-06-20 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리분산 공유 시스템 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-2001-0035171A KR100380996B1 (ko) 2001-06-20 2001-06-20 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리분산 공유 시스템 및 그 방법

Publications (2)

Publication Number Publication Date
KR20020097383A KR20020097383A (ko) 2002-12-31
KR100380996B1 true KR100380996B1 (ko) 2003-04-23

Family

ID=27710207

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-0035171A KR100380996B1 (ko) 2001-06-20 2001-06-20 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리분산 공유 시스템 및 그 방법

Country Status (1)

Country Link
KR (1) KR100380996B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100959473B1 (ko) 2003-08-21 2010-05-25 마이크로소프트 코포레이션 저장 플랫폼과 애플리케이션 프로그램 사이의 애플리케이션프로그래밍 인터페이스

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101235414B1 (ko) * 2006-08-18 2013-02-20 엘지전자 주식회사 데이터 방송 수신기에서 스레드 관리 방법
KR101394225B1 (ko) * 2012-06-22 2014-05-14 인텔렉추얼디스커버리 주식회사 다중 언어로 개발된 어플리케이션을 위한 프로파일링 수행 시스템 및 이를 이용한 프로파일링 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100959473B1 (ko) 2003-08-21 2010-05-25 마이크로소프트 코포레이션 저장 플랫폼과 애플리케이션 프로그램 사이의 애플리케이션프로그래밍 인터페이스

Also Published As

Publication number Publication date
KR20020097383A (ko) 2002-12-31

Similar Documents

Publication Publication Date Title
JP3570525B2 (ja) マイクロカーネル・アーキテクチャ・データ処理システム及びそのメモリ管理方法、オペレーティング・システム・パーソナリティ・プログラムを走行させる方法、アプリケーション・プログラムを走行させる方法
US8316190B2 (en) Computer architecture and method of operation for multi-computer distributed processing having redundant array of independent systems with replicated memory and code striping
Golm et al. The JX Operating System.
US6192514B1 (en) Multicomputer system
Zhu et al. Jessica2: A distributed java virtual machine with transparent thread migration support
US7584222B1 (en) Methods and apparatus facilitating access to shared storage among multiple computers
US6289424B1 (en) Method, system and computer program product for managing memory in a non-uniform memory access system
JP4771378B2 (ja) ファイル・システム逐次化再初期設定の装置、システム、および方法
CA2443839C (en) System, method, and article of manufacture for using a replaceable component to select a replaceable quality of service capable network communication channel component
JP2006524381A (ja) 共有リソースの同時アクセス
US7533377B2 (en) Achieving autonomic behavior in an operating system via a hot-swapping mechanism
JPH06231029A (ja) データ処理装置およびデータ処理装置においてローカル・コンピュータから遠隔ファイルをアクセスする方法
JPH1049380A (ja) スペース効率の良いオブジェクト・ロッキング・システム及び方法
Antoniu et al. The Hyperion system: Compiling multithreaded Java bytecode for distributed execution
US6424988B2 (en) Multicomputer system
US20020055965A1 (en) Method and system for accessing objects of different thread types
JPH0855035A (ja) マイクロカーネル・データ処理システム用の伝送制御の分離の方法および装置
KR100380996B1 (ko) 자바 가상머신에서의 분산 객체간 일관성 유지 및 메모리분산 공유 시스템 및 그 방법
JP2888420B2 (ja) マルチタスク・アーキテクチャにおけるプロセス間通信方法
Silcock et al. Message passing, remote procedure calls and distributed shared memory as communication paradigms for distributed systems
Fang et al. Efficient global object space support for distributed jvm on cluster
Lucci et al. Reflective-memory multiprocessor
JPH0855037A (ja) プロセス間通信方法およびプロセス間通信用のシステム
Möller et al. A software transactional memory service for grids
Lin et al. DISHM: A zero-copy intra-node communication approach in large scale simulation

Legal Events

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

Payment date: 20100401

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee