Persistent Java에서의 동시성 제어

이정태, 류기열, 백경원

아주대학교 컴퓨터 공학과

Abstract

본 논문에서는 Java에 Persistent 프로그래밍 언어로서의 기능을 추가한 Orthogonally Persistent Java(PJama)의 동시성 제어문제를 다룬다. Orthogonally Persistent Java를 비롯한 Persistent 프로그래밍 언어에서는 프로그래밍 언어와 데이터베이스 각각의 영역에서 다르게 정의된 동시성 제어에 대한 통합된 개념과 메커니즘을 필요로 한다.

PJama에서는 지속성 자료에 대한 동시성 제어를 위하여 트랜잭션 모형을 제공하고 있지만 현재까지 제공되는 트랜잭션 모형을 적용하는 경우 Orthogonally Persistent Principle 중, 자료의 지속성 유무에 관계없이 프로그램의 형태는 같아야 한다는 Persistent Independence Principle을 유지할 수 없다.

본 논문에서는 PJama의 프로그램 소스 코드에 대한 제어 흐름과 자료 흐름을 분석하여 트랜잭션으로 처리되어야 될 부분을 감지하고, 컴파일러가 자동으로 트랜잭션을 설정하게 함으로써 Persistent Independence Principle이 유지 될 수 있는 방안을 제안하고자 한다.

1. 서 론

기존의 데이터베이스를 이용한 CAD/CAM시스템이나 CASE Tool, GIS, 의료정보시스템 등의 구축은 오랜 개발 기간과 많은 비용을 요구한다. 뿐만 아니라 유지 보수 또한 많은 어려움과 비용을 초래한다. 이의 원인이 시스템의 구축을 위한 분석, 설계, 구현의 각 단계에서의 데이터 모형의 불일치와 부조화에 있다고 보고 좀 더 효율적인 응용 프로그램의 개발 환경을 제시하기 위한 연구가 객체 지향 시스템분야에서 활발히 전개되고 있다.

이러한 연구는 크게 네 가지 방향으로 진행되어 지고 있다. 첫째, 현존하는 시스템들을 결합시키는 방법으로 C++언어를 질의어로 사용한  O2([Deux90][Deux91])가 그 예이다. 이러한 접근방식은 프로그래밍 언어와 데이터 베이스간의 불일치문제가 완전히 해결되지는 못하는 단점을 가지고 있다([MaryE95]). 또 다른 접근 방법은 기존의 시스템을 확장시키는 방법이다. 이 방법은 데이터 베이스 그룹에서 제시한 확장된 질의어와 프로그래밍 언어그룹에서 제시한 Persistent 프로그래밍 언어로 나뉘어지며 SQL3([Kulkarni94])과 PS-algol([Atkinson83])이 그 좋은 예이다. 그리고 세 번째 접근 방식에서는 프로그래밍 언어와 데이터 베이스의 모든 기능을 통합한 하나의 시스템 모형을 제시한다. 이 경우는 단일화된 데이터 모형의 타입 시스템과, 새로운 언어를 제공하며, Napier88([Morrison94a]), Fibonacci([Albano95]), Tycoon([Mathes94])과 같은 시스템들이 제안되었다. 그러나 현재로선 데이터베이스의 일부 기능들만이 제공되고 있다. 마지막 접근 방식은 완전히 새로운 플랫폼을 제시하는 것으로 Persistent 운영 체제를 제안한 Grasshopper([Dearle94]), EOS([Gruber92][Daynes94])와 새로운 형태의 하드웨어구조까지 제시하고 있는 Rosenberg의 제안서([Rosenberg90]), DAIS([Russell94])가 그 예가 된다. 이와 같은 persistent 플랫폼의 이점은 명백하나 실제 시스템에 적용하기 앞서 적합 여부를 평가하기 어렵다는 단점을 가지며 또한 위 제안들 모두 그러한 실험을 받을 수 있을 만큼 연구, 개발되지 않았다.

위의 네 가지 접근 방식들 모두 프로그래밍 언어와 데이터 베이스 영역에서 비슷한 목적을 위해서 사용되는 개념들, 특히 프로그래밍 언어의 타입 시스템과 데이터 베이스의 데이터 모형, 프로그래밍 언어  및 데이터 베이스에서의 바인딩, 그리고 동시성 제어에 대하여 통일된 개념과 메커니즘을 찾는 것이 주요 연구 주제가 된다. 본 논문에서는 앞서 제시한 네 가지의 접근 방법 중 Persistent 프로그래밍 언어의 하나로 개발중인 Orthogonally Persistent Java ([Atkinson96a][Atkinson96b][http1], 이후 PJama라고 표기함.)의 동시성 제어에 관하여 다룬다.

본 논문의 구성은  2절과 3절에 persistent system과 PJama에 대하여 기술하고 4절에 문제 제시와 해결방안을 제안하며 5절에 결론을 맺는다.

2. Orthogonal Persistent System

오퍼래이션을 수행하던 어플리케이션의 종료 후에도 계속해서 남아있는 지속성 자료에 대한 관리의 문제는 이론적으로나 실제적으로 중요한 의미를 갖는다. 지속성에 대한 연구는 프로그래밍언어 영역과 데이터베이스 영역에서 활발히 진행되어왔으며 현재 크게 데이터 베이스 시스템, 데이터 베이스 프로그래밍언어, orthogonally persistent system의 세 부류로 구분되어 질 수 있다.

이 중 orthogonal persistence의 개념은 오랜 기간 동안 연구와 개발로 발전되고 정립되어져 왔다[Atkinson95]. Orthogonal persistence는 아래의 세 가지 principle로 정의되어진다.

Persistence Independence

어떤 프로그램의 형태는 접근하는 자료의 지속성에 관계없이 동일하다.

Data Type Orthogonality

모든 자료는 그들의 타입에 관계없이 지속성의 모든 범위에 대하여 허용되어야 한다.  자료의 타입에 따라 수명이 짧게 또는 길게 처리되는 특수한 경우는 없어야 한다.

Persistence Identification

지속성 자료를 제공하고 규정하는 방법에 대한 선택은 그 시스템의 논의의 영역에 대하여 일괄되어야 한다. 지속성 자료를 규정하는 방법은 그 타입 시스템과 연관되지 않는다.

Orthogonally persistent 프로그래밍언어의 연구 과제로는 타입 시스템과 데이터 모델의 단일화, 지속성 자료의 바인딩에 대한 메커니즘의 개발, 시스템의 진행 발전 등이 있다. 또한 지속성 매체와 메모리 사이의 효율적이고 투명한 자료의 이동, reachability에 의한 지속성의 효율적인 구현, 지속성 자료에 대한 유연한 회복기법과 동시성 제어의 효율적인 구현 등이 핵심 엔지니어링 연구 과제로 남아 있다.

3. PJama

3.1 PJama의 시스템 구조

PJama는 Java에 Orthogonal Persistence([Atkinson95])를 부여하기 위하여 설계, 구현된 것으로 Java언어 문법상의 변화를 최소화하면서 시스템의 안전성  및 성능 저하를 최소화하는 데에 중점을 두었다. 이미 초기 버전의 PJama 시스템이 구현된 상태이며 계속적으로 연구가 이루어지고 있다.

<그림 1> PJama의 시스템 구조

현재까지 구현되어진 PJama 시스템은 <그림 1>과  같은 구조를 가지며, 지속성을 갖는 객체의 저장과 관리를 위하여 PJStoreImpl과 PJStore 클래스를 제공한다. 그리고 두 클래스는 persistent storage class를 액세스하게 하는 getStore(), reachability([Atkinson95])에 의해 지속성을 갖는 객체를 persistent root로 저장하게 하는 newPRoot(), 이미 존재하는 객체를 액세스할 수 있게 하는 getPRoot(), 지속적인 객체의 stablization을 위한 stablizationAll()과  같은 인터페이스를 제공하고 있다. 현재로서는 persistent storage에 관한 부분까지만 구현된 상태이며, 회복기법과 call-backs, 트랜잭션 관리 기법은 설계 모형만을 제시하고 있다. 다음절에서는 PJama를 위해 제안된 트랜잭션 모형들을 소개하고 비교, 분석한다.

3.2 PJama의 트렌젝션 모형

PJama의 트랜잭션 처리를 위해 2가지 모형이 제안되었다. [Alex96]에서 제시한 트랜잭션 모형은 <그림 3>에서 보여지는 것처럼 Java 프로그래밍 문법상의 확장을 요한다. 그리고 2-heap model, 즉 persistent heap과 Java heap을 이용하여 트랜잭션 처리와 회복 기법이 제공된다. 반면 [Laurent96a],[Laurent96b]의 트랜잭션 모형에서는 <그림 4>과  같은 방법으로 트랜잭션 처리 프로그램을 작성할 수 있게 한다

<그림 2> 확장 가능한 트랜잭션 모형

이 경우는 TransactionShell 클래스를 사용하여 트랜잭션을 제어하게 하여 [Alex96]에서 제시한 프로그래밍 모형에 비해 다양한 형태의 프로그래밍 형태를 지원할 수 있으며, 트랜잭션 내에서 발생하는 오류와 예외 상황을 빠짐없이 TransactionShell의 인스턴스가 처리하게 한다. 또한 어떤 Runnable 객체이든지 트랜잭션이 될 수 있어 재 사용성을 향상시켜준다.

뿐만 아니라 <그림 2>에서 보여지는 바와  같이 프로그램 개발자들에게 두 레벨의 인터페이스, External API와 Internal API를 제공하여 트랜잭션 모형의 확장성을 높였다. 다시 말하면, default 트랜잭션 모형만으로도 응용 시스템의 구축이 가능한 경우라면 External API만을 사용하여 프로그래밍을 할 것이며, 새로운 트랜잭션 모형이 필요하다면 Internal API를 이용하여 새로운 트랜잭션 모형을 구축하여 사용할 수 있다. 또한 Transaction-aware 클래스를 이용하여, 어떤 트랜잭션 모형인지에 무관하게 프로그래밍하는 것도 가능하다. 본 논문에서 제시하는 동시성 제어 모형에서는 후자의 트랜잭션 모형을 기반으로 한다.

transaction {

RW_Lock.acquire_write_lock(my_obj);

…

RW_Lock.acquire_read_lock(other_obj);

…

If(other_obj == 1)

commit;

else

rollback;

}

<그림 3> Java에서의 트랜잭션 처리예제

public class GUIApp extends Frame {

TransactionShell  ts;

public boolean Debit(BankAccount ba, int debit) {

…

Runnable body = new DebitOp(ba.debit);

ts = new FlatTransaction(body);

ts.start(); //start the transaction

return(ts.claim() == TransactionShell.COMMITED);

}

}

<그림 4> TransactionShell을 이용한 예제

4. 문제 제시와 해결전략

4.1 문제 제시

PJama에서는 지속성 자료에 대한 동시성 제어를 위하여 트랜잭션 메커니즘을 제시하여 사용자가 지속성 자료에 대한 접근을 프로그램 코드 상에 명시적으로 기술하도록 되어있다.

그런데 Orhogonally Persistent System의 원리 중 하나인 Persistent Independence에서는 프로그램이 다루는 데이터의 수명에 관계없이 즉, 지속성 자료이든 아니든 프로그램의 형태는 동일해야 한다고 기술하고 있다.  PJama의 사용자는 사용하고자하는 자료의 지속성에 대하여 미리 인지하고 있어 사용시기에 적절하게 PJama에서 제공하는 트랜잭션 클래스의 메소드를 사용하여 명시적으로 지속성 자료의 사용에 대한 범위를 기술함으로서 프로그램의 형태를 달리해야 한다. 이는 Persistent Independence에 위배되며 또한 프로그램 환경에서의 수행 능력 저하를 가져 올 수 있다. 그러므로 Orhogonally Persistent System에서 프로그램 형태를 프로그램에서 접근하고자 하는 자료의 지속성에 무관하게 동일성을 유지하기 위한 연구가 필요하다.

4.2 해결전략

4.2.1 지속성 자료 대한 단위 사용 범위

객체지향 언어인 Java에서 프로그램 실행의 각 단위인 오퍼래이션에 대하여 개념적 편리를 위하여 다음과 같이 일반 자료와 지속성 자료에 대한 동작으로 정형화하고 스래드를 이들 오퍼래이션의 집합으로 표현하여 프로그램 소스 코드를 분석한다.

readp(x, p), writep(p, x), write(x, x1)

지속성 자료에 대한 제어 흐름과 자료 흐름 분석을 통해 하나의 지속성 자료에 대한 단위 사용 범위를 설정할 수 있다. 지속성 자료를 읽어와서 사용한 후 다시 임의의 결과를 그 지속성 자료에 쓰기를 실시하는 시점에서 하나의 지속성 자료를 사용하는 범위가 결정된다. 또한 하나의 지속성 자료에 대한 쓰기를 실시하는 시점에서 단위 사용 범위를 구해 낼 수 있다.  단위 사용 범위는 정형화된 스래드와 오퍼래이션을 통하여 다시 정형화 할 수 있다.

4.2.2 다수의 지속성 자료에 대한 단위 사용 범위

하나의 지속성 자료를 사용하는 범위 안에 다른 지속성 자료를 읽어들여 사용하는 경우는 두 개의 지속성 자료에 대하여 각각의 지속성 자료의 자료 흐름을 정확히 분석 추적하여야 한다. 이때 중간 계산과정에서 사용되는 임의의 자료들이 혼용될 수 있는데 두 개의 지속성 자료에 대한 각각의 단위 사용 범위를 자료 흐름을 분석 추적하여 추출해 내야하며 마찬가지로 n개의 지속성 자료를 사용하는 프로그램에서는 n개의 단위 사용 범위를 축출해 내야한다.

4.2.3 트랜잭션 범위

지속성 자료의 단위 사용 범위 안의 임의의 오퍼레이션들은 동시성 제어를 보장할 수 없기 때문에 트랜잭션으로 처리되어야 한다. 이 때 트랜잭션의 범위를 결정하는 문제가 발생한다. 하나의 프로그램이 시작하고 종료 할 때까지를 트랜잭션으로 처리하면 가장 안전하지만 효율성이 전혀 없기 때문에 일반 시스템에서는 사용하지 않는다. 본 연구에서는 안전성을 우선으로 생각하고 효율성을 높여 가는 방법을 택하기로 한다. 하나의 가장 단순하고 확실한 방법으로는 지속성 데이터를 사용하는 범위를 트랜잭션으로 처리할 수 있겠다. 지속성 데이터를 사용하는 범위는 앞에서 살펴본 단위 사용 범위라고 할 수 있고 이러한 단위 사용 범위는 서로 간에 겹쳐 질 수 있다. 우선 두 개의 단위 사용 범위에 대한 경우가 <그림 1>에서처럼 두 가지 경우가 생길 수 있는데 이에 대하여 트랜잭션의 범위는 두 단위 사용 범위를 포괄할 수 있는 범위가 안전성을 보장할 수 있다.

<그림 5 두 개의 지속성 자료에 대한 트랜잭션의 범위>

두 개의 단위 사용 범위로부터 트랜잭션 범위를 결정하는 방법에서 두 개 이상일 경우의 트랜잭션 범위를 결정하는 방법을 유추해 낼 수 있으며 겹쳐진 모든 단위 사용 범위를 하나의 트랜잭션 범위로 결정하는 것이 안전하다.

4.2.4 프로그램에서 가능한 스래드 조사

앞에서 살펴본 트랜잭션의 범위는 프로그램이 실행 된 후의 하나의 스래드에 대하여 또는 가능성 있는 하나의 스래드에 대하여 결정된 것이었다. 그러나 실제 프로그램이 실행될 때에는 프로그램의 특성, 예를 들어 분기나 객체지향 언어인 Java의 특성인 폴리몰피즘(polymorphism), 등으로 인하여 어떠한 스래드가 실행될지 알 수 없다. 그러나 프로그램 실행 전에 가능성 있는 스래드에 대하여 분석해 낼 수 있다. 앞 구문에서 제시한 분기와 객체 생성 및 할당을 조사하여 코드를 분석하여 가능성 있는 모든 스래드를 조사한다.  조사된 각 스래드에 지금까지 살펴본 방법을 적용하여 트랜잭션의 범위를 결정할 수 있다.

<그림 6 프로그램 소스코드로부터 가능 스래드의 조사>

4.2.5 구현에 대한 전략

조사된 가능성 있는 스래드들에 대하여 트랜잭션의 범위를 결정 할 수 있지만 실제 프로그램 실행 시에는 모든 가능성 있는 스래드 중 하나의 스래드 만이 실행되므로 트랜잭션의 시작과 끝을 소스 코드 상에 기술하면 오류를 발생시킬 수 있다. 이에 대한 해결 전략으로 각 스래드에 대해 실행 변수를 선언하고 실행되는 스래드의 정보를 추적하여  트랜잭션의 시작과 끝에 실행 변수의 내용을 확인한 후  해당 트랜잭션을 실행하도록 한다.

<그림7 실행 변수를 이용한 구현 전략>

5. 결론 및 향후 과제

지속성 프로그래밍 언어는 프로그래밍 언어의 타입 시스템과 데이터 베이스의 데이터 모형, 프로그래밍 언어 및 데이터 베이스에서의 바인딩, 그리고 동시성 제어에 대하여 통일된 개념과 메커니즘을 찾는 것이 주요 연구 주제가 된다. 특히 본 논문에서 초점을 두고 있는 동시성 제어에 대하여 PJama 시스템이 제안하는 트랜잭션 모델과 orthogonally persistence 사이의 오류를 지적하고 이에 대한 해결 전략을 제안하였다.

PJama에서는 지속성 자료에 대한 동시성 제어를 위하여 트랜잭션 모형을 제공하고 있지만 현재까지 제공되는 트랜잭션 모형을 적용하는 경우 Orthogonally Persistent Principle 중, 자료의 지속성 유무에 관계없이 프로그램의 형태는 같아야 한다는 Persistent Independence Principle을 유지할 수 없다.

본 논문에서는 PJama의 프로그램 소스 코드에 대한 제어 흐름과 자료 흐름을 분석하여 트랜잭션으로 처리되어야 될 부분을 감지하고, 컴파일러가 자동으로 트랜잭션을 설정하게 함으로써 Persistent Independence Principle이 유지 될 수 있는 방안을 제안하였다.

본 논문에서 제시한 해결 방안의 검증과 성능에 대한 시뮬레이션 및 평가가 우선적으로 연구되어야 하며, 시스템의 효율성 향상을 위하여 보다 세밀한 자료 흐름의 분석을 향후 과제로 남겨 놓는다. 또한 본 논문은 단일 스래드 환경에서 개발된 것으로 향후 다중 스래드에서의 프로세서간 동기화와 동시성을 제어하는 모형을 제시하여야 한다.

참고 문헌

[Albano95] Albano A., Bergamini R., Ghelli G., Orsini R., "An Introduction to the database programming language Fibonacci", VLDB Journal 4(3), 195

[Alex96] Alex Garthwaite, Scott Netles, "Transactions for Java", 1st International Workshop on Persistence and Java, 1996

[Atkinson83] Atkinson M.P., Bailey P., Chisholm K.J., Cockshott W.P., Morrison R., "An approach to persistent programming", Computer Journal, 26(4), 1983

[Atkinson96a] Atkinson M.P., Jordan M.J., Daynes L., Spence S. "Design issues for persistent Java : type-safe, object-oriented, orthogonally persistent system", 7-th International Workshop on Persistent Object Systems, 1996

[Atkinson96b] Atkinson M.P., Daynes L., Jordan M.J., Prentezis T., Spence S., "An Orthogonally Persistent Java", ACM SIGMOD, 1996

[Atkinson95] Atkinson M.P., Morrison R., "Orthogonally Persistent Object Systems", The VLDB Journal Vol. 4(3), 1995

[Daynes94] Daynes L., Gruber O., "Customizing concurrency controls using graph of locking capabilities", Proceedings of the Sixth International Workshop on Persistent Object Systems, 1994

[Dearle94] Dearle A., di Bona R., Farrow J., Henskens F., Lindstrom A., Rosenberg J., Vaughan F., "Grasshopper : An Orthogonally persistent operating system", Computer Systems 7(3), 1994

[Deux90] Deux, O. "The story of O2", IEEE Transactions on Knowledge and Data Engineering 2(1), 1990

[Deux91] Deux, O. "The O2 system", Communications of the ACM, 34(10), 1991

[Gruber92] Gruber O., Amsaleg L., Daynes L., Valduriez P., "EOS, an environment for object-based systems", Proceedings of the Twenty-fifth International Conference on Systems Sciences, Hawaii, 1992

[http1] http://www.sunlabs.com/research/forest

[Kulkarni94] Kulkarni K.G., "ADT-based type system for SQL" In : Freytag J.C., Maier D., Vossen G., eds. "Query Processing for Advanced Database Systems", Morgan Kaufmann, 1994

[Laurent96a] Laurent D., Atkinson M.P., "Efficient support for customizing concurrency control in Persistent Java", 7th International Workshop on Persistent Object Systems, 1996

[Laurent96b] Laurent D., "Extensible Transaction Management in Pjava", 1st International Workshop on Persistence and Java, 1996

[MaryE95] Mary E.S.Loomis, "Object Databases : The Essentials", Addison-Wesley, 1995

[Mathes94] Mathes F., Schmidt J.W., "Persistent threads", Proceedings of the Twennieth International Conference on Very Large Data Bases, 1994

[Morrison94a] Morrison R., Brown A.L., Connor R.C.H., Cutts Q.I., Dearle A., Kirby G.N.C., Munro D.S., "The Napier88 Reference Manual(Release 2.0)", University of St. Andrews Technical Report CS/94/8 1994

[Rosenberg90] Rosenberg J., Henskens F., Brown A.L., Morrison R., Munro D., "stability in a persistent store based on a large virtual memory", Proceedings of the International Workshop on Security and Persistence, 1990

[Russell94] Russell G., Shaw P., Cockshott W.P., "DAIS : An object-addressed processor cache", Proceedings of the Sixth International Workshop on Persistent Object Systems, 1994