KR20130010467A - 듀얼 모드 리더 라이터 락 - Google Patents

듀얼 모드 리더 라이터 락 Download PDF

Info

Publication number
KR20130010467A
KR20130010467A KR1020127024673A KR20127024673A KR20130010467A KR 20130010467 A KR20130010467 A KR 20130010467A KR 1020127024673 A KR1020127024673 A KR 1020127024673A KR 20127024673 A KR20127024673 A KR 20127024673A KR 20130010467 A KR20130010467 A KR 20130010467A
Authority
KR
South Korea
Prior art keywords
lock
locks
original
computer
data processing
Prior art date
Application number
KR1020127024673A
Other languages
English (en)
Other versions
KR101442369B1 (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 KR20130010467A publication Critical patent/KR20130010467A/ko
Application granted granted Critical
Publication of KR101442369B1 publication Critical patent/KR101442369B1/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
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

듀얼 모드 리더 라이터 락을 위한 방법, 시스템 및 컴퓨터 사용가능 프로그램 제품에 관한 것이다. 경쟁 상태는 오리지널 락을 사용하는데 있어서 결정된다. 상기 오리지널 락은 데이터 처리 시스템에서 실행되는 여러 프로세스들에 의해서 리소스에 대한 리드 및 라이트 액세스를 관리한다. 실시 예는 상기 오리지널 락과 함께 사용을 위해서 확장 락들의 한 세트를 생성한다. 상기 오리지널 락과 상기 확장 락들의 세트는 상기 듀얼 모드 리더 라이터 락을 형성하고, 이는 상기 리소스에 대한 리드 및 라이트 액세스를 관리하도록 동작한다. 상기 오리지널 락 내에 인덱스를 사용하여, 각각의 확장 락은 인덱스 되는데, 그 결과 각각의 확장 락은 상기 인덱스를 사용하여 찾을 수 있다(locatable). 경쟁 상태는 상기 오리지널 락 및 상기 확장 락들의 세트에 걸친 여러 프로세스들에 의해서 상기 리소스에 대한 리드 액세스 및 라이트 액세스를 획득 및 해제하기 위한 요청들을 분산함으로써 해결된다.

Description

듀얼 모드 리더 라이터 락{DUAL MODE READER WRITER LOCK}
본 발명은 일반적으로 개선된 데이터 처리 시스템에 관한 것이며, 특히 듀얼 모드 리더 라이터 락(a dual mode reader writer lock) (DML)을 위한 컴퓨터 구현 방법(a computer implemented method), 시스템, 및 컴퓨터 사용가능 프로그램 코드(usable program code)에 관한 것이다.
데이터 처리 시스템에서 실행되는 프로세스들(processes)은 다양한 리소스들(resources)과 관련된(associated) 데이터를 리드하고(read) 라이트한다(write). 디스크 상의 데이터 파일(data file), 메모리 로케이션(memory location), 및 어드레스(address)는 그러한 리소스의 일부 예들이다.
데이터 처리 시스템에서 실행되는 프로세스가 리소스로부터 데이터를 리드하거나 리소스에 라이트할 때, 운영체제는 그러한 리드/라이트 요청들을 일정한 순서로 배열하고(sequence) 컨트롤(control)하여야 한다. 이 컨트롤은 동일 리소스에 대해서 다수의 프로세스들이 리드 및 라이트 요청을 하는 경우 상기 리소스의 데이터 무결성(integrity)을 손상시키지 않도록 하는데 중요하다. 예를 들어, 한 프로세스는 다른 프로세스가 데이터를 라이트하고 있는 동안은 그 데이터를 리드하는 것이 허용될 수 없다. 다수의 프로세스들이 동일 데이터를 동시에 리드하는 것은 허용될 수 있지만, 그 데이터를 라이트 하려고 시도하는 하나 혹은 그 이상의 프로세스들과는 함께 허용될 수 없다.
데이터를 리드하고 라이트하기 위한 이들 및 다른 규칙들(rules)을 구현하기 위해서, 운영체제들은 락들(locks)을 구현한다. 리드 라이트 락(read write lock)은 하나의 데이터 구조(a data structure)이며, 이 구조의 데이터는 프로세스가 관련 리소스의 데이터를 리드 혹은 라이트하기 전에 세트(set) 혹은 리세트(reset), 혹은 인크리멘트(incremented), 혹은 디크리멘트(decremented) 되어야 한다. 그러한 락은 또한 리더 라이터 락(a reader writer lock) (RWL) 혹은 콤플렉스 락( a complex lock)으로도 알려져 있다.
RWL을 세팅(setting) 혹은 인크리멘팅(incrementing) 하는 것을 락을 획득(acquiring) 혹은 취득(getting)한다고 한다. RWL을 리세팅(resetting) 혹은 디크리멘팅(decrementing) 하는 것을 락을 해제(releasing) 혹은 해방(freeing)한다고 한다. 리더 락(reader lock) 혹은 리드 락(read lock)은 프로세스 혹은 쓰레드(thread)가 RWL과 관련된 리소스를 리드하도록 허가한 RWL의 상태(state)이다. 다수의 프로세스들 혹은 쓰레드들이 동시에 공동의 리소스(common resource) 상의 리드 락을 획득할 수 있다. 라이터 락(writer lock) 혹은 라이트 락(write lock)은 쓰레드(thread)가 RWL과 관련된 리소스에 데이터를 라이트 하도록 허가한 RWL의 상태이다. 주어진 시간에 오직 하나의 쓰레드만 상기 리소스 상에서 하나의 라이트 락을 획득할 수 있고, 다른 쓰레드가 상기 리소스 상에서 라이트 락을 보유하고(hold) 있는 동안 어떠한 쓰레드도 리드 락을 보유하거나 획득할 수 없다.
통상적으로, RWL은 단일의 데이터 워드(a single data word)를 사용하여 구현된다. 데이터 워드는 운영체제의 아키텍처에서 동시에 처리되는 비트들의 지정된 수(a specific number of bits)이다. 어떤 경우에, 데이터 워드의 크기는 데이터 처리 시스템의 특정 프로세서 내의 단일의 레지스터(a single register)에 저장될 수 있는 비트들의 수일 수 있다. 다른 경우에, 데이터 워드의 크기는 주어진 메모리에서 주어진 프로세서로 전송될 수 있는 비트들의 최소 수 일 수 있다. 일반적으로 이용 가능한 운영체제들은 데이터 워드 크기를 16비트, 32비트, 64비트, 및 128비트로 구현한다. 데이터 워드는 어떤 특정 구현에 적합할 경우 어느 크기든 될 수 있다.
운영체제가 RWL을 조작(manipulate)할 때, 그 조작은 상기 락의 완전성(integrity)을 위해서 인터럽트(interrupt)되어서는 안 된다. 다시 말하면, RWL을 세팅 혹은 리세팅, 혹은 인크리멘팅 혹은 디크리멘팅 하기 위한 모든 명령들은 다른 프로세스에 의해서 인터럽트되거나 혹은 선취되는(preempted) 일이 없이 시작(start)부터 완료(finish)까지 실행되어야 한다. 명령들의 세트가 이런 방식으로 실행 되어야만 하는 연산을 원자 연산(an atomic operation)이라 부른다. RWL의 조작은 원자 연산이다. 락을 획득하고 락을 해제하는 것은 원자 연산들로서 수행되는 락 조작들의 예들이다.
데이터 처리 시스템의 연산 중 임의의 주어진 시간에(at any given time), 여러 프로세스들 혹은 쓰레드들이 서로 일시적으로 근접하여 공동의 리소스를 위한 락을 획득하기를 원할 수 있다. 그 락을 이미 획득한 다른 여러 프로세스들 혹은 쓰레드들은 그 락을 동시에 혹은 근접한 시간에 해제하기를 원할 수도 있다. 락을 획득 혹은 해제하기를 원하는 일부 프로세스들 혹은 쓰레드들은 상기 리소스 상에서 리드 락들을 처리하려고 할 수 있고, 한편 다른 프로세스들 혹은 쓰레드들은 라이트 락들을 처리하려고 할 수 있을 것이다.
예시적인 실시 예들이 듀얼 모드 리더 라이터 락을 위한 방법, 시스템, 및 컴퓨터 사용가능 프로그램 제품을 제공한다. 본 발명의 한 실시 예는 오리지널 락의 사용에서 경쟁 상태(a contention condition)를 결정한다. 상기 오리지널 락은 데이터 처리 시스템 상에서 이용 가능한 리소스에 대응한다. 상기 오리지널 락은 데이터 처리 시스템에서 실행되는 여러 프로세스들에 의해서 리소스에 대한 리드 액세스 및 라이트 액세스를 관리한다. 상기 실시 예는 상기 오리지널 락과 함께 사용을 위해서 한 세트의 확장 락들을 생성한다. 상기 오리지널 락 및 상기 확장 락들의 세트는 듀얼 모드 리더 라이터를 형성한다. 상기 듀얼 모드 리더 라이터 락은 리소스에 대한 리드 액세스 및 라이트 액세스를 관리한다. 상기 실시 예는 상기 오리지널 락 내에서, 인덱스(an index)를 사용하여, 상기 확장 락들의 세트 내의 각각의 확장 락을 인덱스 하는데, 상기 인덱스를 사용하여 각각의 확장 락을 찾아내는 것이 가능하게 된다(locatable). 상기 실시 예는 경쟁 상태를 해결하는데, 상기 오리지널 락 및 상기 확장 락들의 세트에 걸친(across) 여러 프로세스들에 의해서 상기 리소스에 대한 리드 액세스 및 라이트 액세스를 획득 및 해제하기 위한 요청들을 분산함으로써 한다.
다른 실시 예에서, 상기 오리지널 락은 기존의 리더 라이터 락의 변형된 형태(a modified form of a preexisting reader writer lock)이며, 그렇게 하여 상기 기존의 리더 라이터 락은 상기 확장 락들의 세트와 함께하는 동작(operation)에서 사용할 수 있는 한 세트의 식별자들(a set of identifiers)을 보유(hold)할 수 있다. 상기 실시 예는 또한 상기 확장 락들의 세트에서 하나의 확장 락을 리더 락으로 지정한다. 그렇게 지정함으로써, 상기 지정된 확장 락은 상기 리소스 상에서 오직 하나의 리드 락을 획득, 보유, 및 해제하기 위해 사용가능 하게 된다.
다른 실시 예는 또한 프로세스로부터, 리소스 상의 리드 락을 획득 혹은 해제하기 위한 요청을 수신한다. 상기 실시 예는 그 요청을 듀얼 모드 리더 라이터 락 내의 확장 락에 할당한다.
다른 실시 예에서, 리소스 상의 라이트 락을 획득 혹은 해제하기 위해 상기 프로세스로부터 제 2의 요청이 상기 오리지널 락에 할당된다.
다른 실시 예에서, 상기 확장 락은 상기 확장 락들의 세트로부터 선택되는데, 상기 프로세스와 관련된 식별자로부터 인덱스 값을 계산함에 의해서 한다. 상기 인덱스 값은 상기 확장 락에 환원된다(resolve).
다른 실시 예에서, 상기 확장 락은 상기 확장 락들의 세트로부터 선택되는데, 상기 확장 락이 데이터 처리 시스템의 프로세서와 밀접성(affinity)을 갖도록 선택된다.
다른 실시 예는 또한 상기 리소스에 관하여 라이트 락을 획득 혹은 해제하기 위한 요청을 수신한다. 상기 실시 예는 상기 요청을 상기 듀얼 모드 리더 라이터 락의 오리지널 락에 할당한다.
다른 실시 예에서, 상기 듀얼 모드 리더 라이터 락은 경쟁 상태가 존재하지 않을 때는 오직 오리지널 락만을 사용하는 제 1의 모드로 동작한다. 상기 듀얼 모드 리더 라이터 락은 경쟁 상태가 존재할 때는 상기 오리지널 락 및 상기 확장 락의 세트를 사용하는 제 2의 모드로 동작한다. 상기 듀얼 모드 리더 라이터 락은 경쟁 상태가 발생될(arise) 때는 상기 제 1의 모드에서 상기 제 2의 모드로 전환(switch)한다. 상기 듀얼 모드 리더 라이터 락은 경쟁 상태가 중단될(abate) 때는 상기 제 2의 모드에서 상기 제 1의 모드로 전환(switch)한다.
다른 실시 예에서, 상기 제 1의 모드에서 상기 제 2의 모드로의 전환은 상기 경쟁 상태를 제거하며, 이는 상기 리소스 상의 락들을 위한 여러 원자 연산들이 상기 오리지널 락 및 상기 확장 락들 세트 내 하나의 확장 락에 관하여, 혹은 상기 확장 락들의 세트 내 두 개의 확장 락들에 관하여, 동시에 실행되는 것을 허용함으로써 한다.
다른 실시 예는 또한 락들로서 사용을 위해 메모리 내에 하나의 영역(a region)을 할당한다. 상기 확장 락들의 생성은 상기 영역 내에 상기 확장 락들의 세트를 위한 한 세트의 공간들(a set of spaces)을 지정한다.
본 발명의 특징으로 믿어지는 신규한 특징들은 첨부된 청구항들에 기재되어 있다. 그러나 본 발명 및 바람직한 사용 모드와 함께 더 나아가 목적들 및 장점들은 아래의 예시적인 실시 예들에 대한 상세한 설명을 참고하여 첨부된 도면들과 함께 읽을 때 가장 이해가 될 것이다.
도 1은 예시적인 실시 예들이 구현될 수 있는 데이터 처리 시스템의 네트웍을 도시한다.
도 2는 예시적인 실시 예들이 구현될 수 있는 데이터 처리 시스템의 블록도를 도시한다.
도 3은 예시적인 실시 예들이 구현될 수 있는 데이터 처리 시스템과 관련하여 데이터 처리 시스템에서 RWL을 사용하는 동작들의 블록도를 도시한다.
도 4는 예시적인 실시 예들에 따른 DML의 블록도를 도시한다.
도 5는 예시적인 실시 예들에 따라 확장 락들을 사용하는 DML 구성의 블록도를 도시한다.
도 5a는 예시적인 실시 예들에 따라 DML의 다른 실시 예의 블록도를 도시한다.
도 5b는 예시적인 실시 예들에 따라 DML의 또 다른 실시 예의 블록도를 도시한다.
도 6은 예시적인 실시 예들에 따라 확장 락 혹은 리더 락 엘리멘트의 예시적 구성의 블록도를 도시한다.
도 7은 예시적인 실시 예들에 따라 DML 내의 지정된 오리지널 혹은 확장 락들에 프로세스들 혹은 쓰레드들을 할당하는 예시적 방법의 블록도를 도시한다.
도 8은 예시적인 실시 예들에 따라 DML을 사용하여 리드 및 라이트 락들을 관리하는 블록도를 도시한다.
도 9는 예시적인 실시 예들에 따라 DML을 생성하는 예시적 프로세스의 흐름도를 도시한다.
도 10은 예시적인 실시 예들에 따라 확장 락들을 위해 메모리 공간을 할당하는 프로세스의 흐름도를 도시한다.
도 11은 예시적인 실시 예들에 따라 특정의(certain) 확장 락들을 전문화(specialize) 하는 프로세스의 흐름도를 도시한다.
도 12는 예시적인 실시 예들에 따라 DML 내 지정된 오리지널 혹은 확장 락들에 대해 쓰레드들 혹은 프로세스들을 할당하는 프로세스의 흐름도를 도시한다.
특정 상황들 하에서, 여러 프로세스들 혹은 쓰레드들로부터 락을 획득 혹은 해제하기 위한 각각의 요청을 위해 여러 원자 연산들(several atomic operations)이 데이터 처리 시스템에 계류 중(pending)일 수 있다. 본 발명은 RWL을 위해 여러 원자 연산들이 데이터 처리 시스템에 한꺼번에 몰리는 것(inundating)은 데이터 처리 시스템의 성능에 부정적으로 영향을 미칠 수 있다는 점을 해결하기 위한 것이다.
설명을 명확하게 하기 위해서, “프로세스”는 하나의 프로세스 혹은 한 프로세스의 하나의 쓰레드를 의미하기 위해 사용된다. 한 프로세스와 관련된 하나의 연산은 비슷하게 하나의 쓰레드에 적용할 수 있고, 하나의 쓰레드에 관련된 연산은 비슷하게 본 발명의 범위 내에서 하나의 프로세스에 적용될 수 있다.
본 발명은 또한 특정의 다른 상황들 아래에서, 상기 락의 데이터 구조가 포화되어 락의 요청들을 더 이상 수용할 수 없음을 알게 되었다. 예를 들어서, 두 개의 비트들로 구성된 가상의 크기(hypothetical size)의 데이터 워드는 만일 4개의 쓰레드들이 관련 리소스 상에서 리드 락들을 이미 보유하고 있다면 포화될 것이다. 왜냐하면 두 개의 비트들은 오직 0에서 4까지 만 계수하는데 사용될 수 있기 때문이다. 리드 락을 요청하는 다섯 번째 쓰레드는 리드 락을 보유하고 있는 다른 4개의 프로세스들 중 하나가 자신의 리드 락을 해제할 때까지는 수용될 수 없다. 본 발명은 데이터 처리 시스템에서 RWL에 관하여 실행하기 위해 대기 중인 원자 연산들의 백로그(a backlog)는 또한 데이터 처리 시스템의 성능에 부정적으로 영향을 줄 수 있음을 알게 되었다.
이들 상황들은 데이터 처리 시스템에서 RWL들에 관한 경쟁이 발생하는 시나리오의 예들이다. 본 발명은 RWL에 관해서 경쟁하는 프로세스들 혹은 쓰레드들의 수가 쓰레시홀드 수(a threshold number)를 넘어서 증가할 경우 RWL에 관한 경쟁이 데이터 처리 시스템에서 일어날 수 있음을 알게 되었다. 본 발명은 또한 데이터 처리 시스템에서 프로세서들의 수가 증가할수록, 예를 들어 멀티프로세서 데이터 처리 시스템 혹은 논리적 파티션에서는, 프로세스들 및 쓰레드들의 수는 또한 증가하고 이는 RWL 경쟁들을 초래함을 알게 되었다.
본 발명을 설명하기 위해 사용된 예시적 실시 예들은 일반적으로 RWL들과 관련된 전술한 문제들 및 다른 문제들을 해결한다. 상기 예시적 실시 예들은 듀얼 모드 리더 라이터 락을 위한 방법, 컴퓨터 사용가능 프로그램 제품, 및 데이터 처리 시스템을 제공한다.
본 발명의 한 실시 예는 원자 연산들의 수가 쓰레시홀드 수에 도달할 때 현재 구성된 데이터 처리 시스템과 비교하여 시스템 성능 상에 적은 영향(a reduced affect)을 가지면서 RWL을 위한 원자 연산들을 데이터 처리 시스템이 처리하게 할 수 있다. 예를 들어, 하나의 RWL을 위해 동일 수의 원자 연산들이 수행될 때, 본 발명의 실시 예를 구현하는 데이터 처리 시스템은 본 발명의 실시 예가 없는 데이터 처리 시스템과 비교하여 더 우수한 시스템 성능을 보일 수 있다.
본 발명의 한 실시 예는 또한 현재 구성된 데이터 처리 시스템과 비교하여 시스템 성능 상의 부정적 효과는 줄이면서 동시에 더 많은 프로세스들 및 쓰레드들이 락들을 획득 및 해제하도록 허용할 수 있다. 예를 들어, 동일 시스템 성능을 위해서라면, 본 발명의 실시 예를 채용하는 데이터 처리 시스템이 본 발명의 실시 예가 없는 데이터 처리 시스템과 비교하여 더 많은 프로세스들이 리소스 상의 리드 락들을 획득하도록 허용할 수 있다
예시적 실시 예들은 데이터, 데이터 구조들 및 식별자들에 관하여 오직 예로서만 설명된다. 그러한 설명들은 본 발명에 관하여 제한하려는 의도가 없다. 예를 들어, 64 비트 데이터 워드에 관하여 설명된 한 예시적 실시 예는 본 발명의 범위 내에서 128비트 데이터 워드를 사용하여 비슷하게 구현될 수 있다.
더 나아가서, 예시적 실시 예들은 모든 종류의 데이터 처리 시스템에 관하여 구현될 수 있다. 예를 들어, 멀티 프로세서 스탠드얼론 데이터 처리 시스템에 관하여 설명된 한 예시적 실시 예는 본 발명의 범위 내에서 멀티프로세서 논리 파티션 시스템에서 구현될 수 있다.
예시적 실시 예들은 또한 특정 파라미터들, 속성들 및 구성들에 관해서 설명될 수 있는데, 이들은 오직 예들로서만 설명된다. 그러한 설명들은 본 발명에 관해서 제한하려는 의도가 없다. 본 발명의 한 실시 예는 모든 종류의 데이터 처리 시스템, 예를 들어, 모든 종류의 클라이언트 시스템, 서버 시스템, 플랫폼, 혹은 그들의 조합에 관하여 구현될 수 있다.
실시 예를 구현하는 어플리케이션은 데이터 객체들(data objects), 코드 객체들(code objects), 캡슐화된 명령들(encapsulated instructions), 어플리케이션 프래그멘트들(application fragments), 서비스들(services), 및 데이터 처리 환경에서 이용 가능한 기타 종류의 소프트웨어 구현들의 형태를 취할 수 있다. 예를 들어, 자바 가상 머신(Java? Virtual Machine) (JVM?), 자바 객체(Java? object), 엔터프라이즈 자바 빈(an Enterprise Java Bean) (EJB?), 서브렛(a servlet), 혹은 어플렛(an applet)은 본 발명이 구현될 수 있는 한 어플리케이션의 예들이 될 수 있으며, 본 발명은 이에 관하여, 이 안에서, 혹은 이를 이용하여 구현될 수 있다(Java, JVM, EJB, 및 기타 Java 관련 용어들은 미국 내 그리고 기타 나라들에서 Sun Microsystems, Inc.의 등록 상표이다).
예시적 실시 예는 하드웨어로, 소프트웨어로, 혹은 그들의 조합으로 구현될 수 있다. 이 상세한 설명에서의 예들은 설명을 명확하게 하기 위하여 사용된 것이며 예시적 실시 예들에 관하여 제한하지 않는다. 추가의 혹은 다른 정보, 데이터, 연산들, 액션들, 태스크들, 액티비티들 및 조작들이 이 상세한 설명으로부터 유사한 목적을 위해 착안될 수 있으며 그리고 동일의 것들이 상기 예시적인 실시 예들의 범위 내에서 고안될 수 있다.
예시적 실시 예들은 특정 코드, 데이터 구조들, 파일 시스템들, 디자인들, 아키텍처들, 레이아웃들, 도식들, 및 툴들을 사용하여 설명되는데, 이들은 오직 예들로서만 사용된 것이며 상기 실시 예들에 관하여 제한하지 않는다. 더 나아가서, 상기 예시적 실시 예들은 일부의 경우에 특정 데이터 처리 환경들을 사용하여 설명되는데, 오직 설명의 명확성을 위해서만 사용된다. 상기 예시적 실시 예들은 다른 비교할만한 혹은 유사한 목적의 구조들, 시스템들, 어플리케이션들, 혹은 아키텍처들과 함께 사용될 수 있다.
여기서 나열한 모든 장점들은 오직 예들로서 소개된 것이며 상기 예시적 실시 예들에 관해서 제한하려는 의도를 가진 것은 아니다. 추가의 혹은 다른 장점들이 특정 예시적 실시 예들에 의해서 실현될 수 있다. 더 나아가서, 특정의 예시적 실시 예는 위에서 나열한 장점들의 일부 또는 전부를 갖거나 혹은 아무것도 갖지 않을 수 있다.
도면들, 특히 도 1 및 도 2를 참조하면, 이들 도면들은 본 발명의 예시적 실시 예들이 구현될 수 있는 데이터 처리 환경들의 예시적 도면들이다. 도 1 및 도 2는 오직 예들이며 다른 실시 예들이 구현될 수 있는 환경들에 관하여 어떠한 제한을 선언하거나 암시하려는 의도는 없다. 특정 구현은 아래의 설명들에 기초하여 상기 설명한 환경들에 관하여 많은 변형들을 만들 수 있다.
도 1은 예시적 실시 예들이 구현될 수 있는 데이터 처리 시스템들의 네트웍을 나타낸 도면이다. 데이터 처리 환경(100)은 예시적 실시 예들이 구현될 수 있는 컴퓨터들의 네트웍이다. 데이터 처리 환경(100)은 네트웍(102)를 포함한다. 네트웍(102)는 데이터 처리 환경(100) 내에서 다양한 디바이스들과 함께 연결된 컴퓨터들 사이에 통신 링크들을 제공하기 위해 사용된 매체이다. 네트웍(102)는 유선(wire), 무선(wireless) 통신 링크들, 혹은 파이버 옵틱 케이블들(fiber optic cables)과 같은 커넥션들을 포함한다. 서버(104) 및 서버(106)은 스토리지 유닛(108)과 함께 네트웍(102)에 결합된다. 소프트웨어 어플리케이션들은 데이터 처리 환경(100)의 모든 컴퓨터 상에서 실행될 수 있다.
또한, 클라이언트들(110, 112, 및 114)도 네트웍(102)에 결합된다. 서버(104 혹은 106), 혹은 클라이언트(110, 112, 혹은 114)와 같은 데이터 처리 시스템은 데이터를 포함하고, 소프트웨어 어플리케이션들 혹은 그 위에서 실행되는 소프트웨어 툴들(tools)을 가질 수 있다.
서버(104)는 다수의 프로세서들(105)를 포함할 수 있다. 다른 도시된 데이터 처리 시스템들도 또한 유사한 방식으로 하나 이상의 프로세서들(도시하지 않음)을 포함할 수 있다. 서버(104)는 또한 DML(107)을 포함할 수 있다. DML(107)은 본 발명의 실시 예에 따른 DML이 될 수 있다. DML(107)은 아무런 제한 없이 다른 RWL들과 함께 서버(104) 내에 구현될 수 있다. 더 나아가서, DML(107)은 서버(104)가 아닌 데이터 처리 시스템 - 예를 들어 서버(106) - 에도 구성될 수 있으며, 네트웍(102)를 통해서 서버(104)에 접속될 수도 있다.
서버(104 및 106), 스토리지 유닛(108), 및 클라이언트들(110, 112, 및 114)은 유선 커넥션들, 무선 통신 프로토콜들, 혹은 기타 적합한 데이터 접속 수단을 사용하여 네트웍(102)에 결합될 수 있다. 크라이언트들(110, 112, 및 114)는, 예를 들어 개인용 컴퓨터들 혹은 네트웍 컴퓨터들이 될 수 있다.
상기 도시된 예에서, 서버(104)는, 부트 파일들(boot files)과 같은, 데이터, 운영체제 이미지들, 및 클라이언트들(110, 112, 및 114)에 대한 어플리케이션들을 제공할 수 있다. 이 예에서, 클라이언트들(110, 112, 및 114)는 서버(104)에 대한 클라이언트들일 수 있다. 클라이언트들(110, 112, 및 114) 혹은 그들의 조합은 자신들의 데이터, 부트 파일들, 운영체제 이미지들, 및 어플리케이션들을 가질 수 있다. 데이터 처리 환경(100)은 추가의 서버들, 클라이언트들, 및 기타 도시하지 않은 디바이스들을 포함할 수 있다.
상기 도시한 예에서, 데이터 처리 환경(100)은 인터넷이 될 수 있다. 네트웍(102)는 서로 통신을 하기 위해 전송 제어 프로토콜/인터넷 프로토콜(TCP/IP) 및 기타 프로토콜들을 사용하는 네트웍들 및 게이트웨이들(gateways)의 집합을 나타낼 수 있다. 인터넷의 중심에는, 데이터 및 메시지들을 라우트하는(route) 수천 개의 상업, 정부, 교육, 및 기타 컴퓨터 시스템들을 포함하는, 주요 노드들 혹은 컴퓨터들 사이의 데이터 통신 링크들의 백본(a backbone)이 있다. 물론, 데이터 처리 환경(100)은 또한 수많은 다른 종류의 네트웍들, 예를 들어, 인터라넷(intranet), 근거리 네트웍(LAN), 혹은 원거리 네트웍(WAN)으로서 구현될 수 있다. 도 1은 하나의 예로서 도시된 것이며 다른 예시적 실시 예들에 대해 아키텍처 제한으로서 의도된 것이 아니다.
다른 용도들 중에서, 데이터 처리 환경(100)은 예시적 실시 예들이 구현될 수 있는 클라이언트 서버 환경을 구현하기 위해 사용될 수 있다. 클라이언트 서버 환경은 소프트웨어 어플리케이션들 및 데이터를 네트웍에 걸쳐서 분산되게 할 수 있는데, 그 결과 어플리케이션은 클라이언트 데이터 처리 시스템과 서버 데이터 처리 시스템 사이의 상호동작(interactivity)을 통해 처리된다. 데이터 처리 환경(100)은 또한 서비스 지향 아키텍처(service oriented architecture)를 채용할 수 있는데, 그렇게 하면 네트웍에 걸쳐서 분산된 호환 가능한(interoperable) 소프트웨어 컴포넨트들이 코히어런트 비즈니스 어플리케이션들(coherent business applications)로서 함께 패키지화 될 수 있다.
도 2를 참조하면, 이 도면은 예시적 실시 예들이 구현될 수 있는 데이터 처리 시스템의 블록도를 도시한다. 데이터 처리 시스템(200)은 도 1의 서버(104) 혹은 클라이언트(110)과 같은 컴퓨터의 예로서, 예시적 실시 예들을 위해 프로세스들을 구현하는 컴퓨터 사용가능 프로그램 코드 혹은 명령들이 위치할 수 있다.
도시된 예에서, 데이터 처리 시스템(200)은 노쓰 브리지(North Bridge) 및 메모리 컨트롤러 허브(NB/MCH)(202)와 사우쓰 브리지(south bridge) 및 입출력 컨트롤러 허브(SB/ICH)(204)를 포함하는 허브 아키텍처(a hub architecture)를 채용할 수 있다. 처리 유닛(206), 메인 메모리(208), 및 그래픽 프로세서(210)은 노쓰 브리지 및 메모리 컨트롤러 허브(NB/MCH) (202)에 결합된다. 처리 유닛(206)은 하나 혹은 그 이상의 프로세서들을 포함할 수 있고, 하나 혹은 그 이상의 이종 프로세서 시스템들을 사용하여 구현될 수 있다. 그래픽 프로세서(210)은 특정 구현들에서는 가속 그래픽 포트(accelerated graphics port) (AGP)를 통해서 NB/MCH에 결합될 수 있다.
도시된 예에서, 근거리 네트웍(LAN) 어댑터(212)는 사우쓰 브리지 및 I/O 컨트롤러 허브(SB/ICH) (204)에 결합된다. 오디오 어댑터(216), 키보드 및 마우스 어댑터(220), 모뎀(222), 판독전용 메모리(ROM) (224), 유니버설 직렬 버스(USB) 및 기타 포트들(232), 및 PCI/PCIe 디바이스들(234)는 버스(238)을 통해서 사우쓰 브리지 및 I/O 컨트롤러 허브(204)에 결합된다. 하드 디스크 드라이브(HDD) (226) 및 CD-ROM (230)은 버스(240)을 통해서 사우쓰 브리지 및 I/O 컨트롤러 허브(204)에 결합된다. PCI/PCIe 디바이스들은, 예를 들어, 이더넷 어댑터들(Ethernet adapters), 애드-인 카드들(add-in cards), 및 노트북 컴퓨터들을 위한 PC 카드들을 포함할 수 있다. PCI는 카드 버스 컨트롤러를 사용하지만, PCIe는 사용하지 않는다. ROM (224)는, 예를 들어, 플래시 바이너리 입출력 시스템(BIOS)이 될 수 있다. 하드 디스크 드라이브(226) 및 CD-ROM(230)은, 예를 들어, 집적된 드라이브 일렉트로닉스(an integrated drive electronics) (IDE) 혹은 직렬 개선된 기술 부착(serial advanced technology attachment) (SATA) 인터페이스를 사용할 수 있다. 수퍼 I/O (SIO) 디바이스(236)은 사우쓰 브리지 및 I/O 컨트롤러 허브(204)에 결합될 수 있다.
운영체제는 처리 유닛 (206) 상에서 실행된다. 운영 체제는 도 2의 데이터 처리 시스템 내에서 다양한 컴포넨트들을 조정하고 제어한다. 상기 운영 체제는 상업적으로 이용 가능한 운영 체제 일 수 있는데, 이들에는 Microsoft? Windows? (Microsoft 및 Windows는 미국 및 다른 나라들에서 Microsoft Corporation의 상표들이다), 혹은 Linux? (Linux 는 미국 및 다른 나라들에서Linus Torvalds의 상표이다) 가 포함된다. 자바 프로그래밍 시스템(Java™ programming system)과 같은 객체 지향 프로그래밍 시스템(object oriented programming system)이 상기 운영 체제와 함께 실행될 수 있으며, 이는 데이터 처리 시스템(200) 상에서 실행되는 Java™프로그램들 혹은 어플리케이션들로부터 상기 운영 체제에 콜(calls)을 제공한다(Java 는 미국 및 다른 나라들에서 Sun Microsystems, Inc.의 상표이다).
운영체제, 객체-지향 프로그래밍 시스템, 및 어플리케이션들 혹은 프로그램들을 위한 명령들은 하드 디스크 드라이브(226)과 같은 스토리지 디바이스들 상에 위치하며, 실행을 위해 처리 유닛 (206)에 의해서 메인 메모리 (208)에 로드될 수 있다. 예시적 실시 예들의 프로세스들은 컴퓨터 구현 명령들을 사용하여 처리 유닛 (206)에 의해서 수행될 수 있는데, 이 명령들은, 예를 들어 메인 메모리 (208), 판독전용 메모리(224)와 같은 메모리에, 혹은 하나 혹은 그 이상의 주변 디바이스들에 위치할 수 있다.
도 1-2에서 하드웨어는 구현에 따라서 달라질 수 있다. 플래시 메모리, 등가의 비휘발성 메모리, 혹은 광 디스크 드라이브들 및 이와 유사한 것들과 같은 다른 내부 하드웨어 혹은 주변 디바이스들이 도 1-2에 도시된 하드웨어에 추가하여 혹은 대신하여 사용될 수 있다. 또한, 상기 예시적 실시 예들의 프로세스들은 멀티프로세서 데이터 처리 시스템에도 적용될 수 있다.
일부 예시적 실시 예들에서, 데이터 처리 시스템(200)은 개인용 디지털 어시스턴트(PDA)일 수 있다. 이 PDA는 일반적으로 운영체제 파일들 및/또는 사용자-생성 데이터를 저장하기 위한 비휘발성 메모리를 제공하기 위해 플래시 메모리로 구성된다. 버스 시스템은 하나 혹은 그 이상의 버스들을 포함할 수 있는데, 이들에는 시스템 버스, I/O 버스, 및 PCI 버스가 포함된다. 물론, 상기 버스 시스템은 모든 종류의 통신 패브릭 혹은 아키텍처를 사용하여 구현될 수 있으며, 이는 상기 패브릭 혹은 아키텍처에 접속된 다른 컴포넨트들 혹은 디바이스들 사이에 데이터 전송을 제공한다.
통신 유닛은, 모뎀 혹은 네트웍 어댑터와 같이, 데이터를 송수신하기 위해 사용되는 하나 혹은 그 이상의 디바이스들을 포함할 수 있다. 메모리는, 예를 들어, 메인 메모리(208) 혹은 노쓰 브리지 및 메모리 컨터롤러 허브(202)에서 발견되는 캐시와 같은 캐시가 될 수 있다. 처리 유닛은 하나 혹은 그 이상의 프로세서들 혹은 CPU들을 포함할 수 있다.
도 1-2에서 도시된 예들 및 전술한 예들은 아키텍처 제한을 암시하려는 것은 아니다. 예를 들어, 데이터 처리 시스템(200)은 또한 태블릿 컴퓨터, 랩탑 컴퓨터, 혹은 PDA 형태 이외의 전화 디바이스도 될 수 있다.
도 3을 참조하면, 이 도면은 예시적 실시 예가 구현될 수 있는 데이터 처리 시스템에서 RWL을 사용하는 연산들의 블록도를 도시한다. 프로세스들(302, 304 및 306)은, 도 1의 서버 (104)와 같은, 데이터 처리 시스템 내의 프로세스들 혹은 쓰레드들이 될 수 있다.
프로세스들(302, 304, 및 306)은 락 워드(lock word) (308)을 사용하여 구현된 RWL을 획득 혹은 해제하기 위해 경쟁하고 있을 수 있다. 락 워드(308)의 RWL은 프로세스들 (302, 304, 및 306)이 리드 혹은 라이트를 위해 경쟁하고 있을 수 있는 리소스(310)과 관련될 수 있다. 락 워드(308)의 RWL은 현재 이용 가능한(presently available) 운영 체제에서 사용된 RWL일 수 있다. 예를 들어, 프로세스(302)는 리소스(310) 상의 리드 락을 획득하기 위해 요청하고 있을 수 있다. 프로세스(304)는 리소스(310) 상의 라이트 락을 획득하기 위해 요청하고 있을 수 있다. 프로세스(306)은 리소스(310) 상에서 이전에 획득된 리드 락을 해제하기 위해 요청하고 있을 수 있다.
리소스(310) 상의 락을 획득 혹은 해제하기 위한 각각의 요청은 원자 연산이 락 워드(308) 상에 실행되거나 혹은 실행이 예정되도록 한다. 원자 연산들(312)는 하나 혹은 그 이상의 락 워드(308) 상의 원자 연산들을 나타낸다.
락 워드(308)을 구현하고, 원자 연산들(312)를 실행하는 운영 체제는 락 워드(308)에 의해서 표시되는 RWL을 획득 혹은 해제하기 위한 요청인 프로세스들, 혹은 프로세스들(302, 304, 및 306)과 유사한 쓰레드들이 많아지면 성능이 저하된다.
예를 들어, 도 3에 도시한 바와 같이 동작하는 데이터 처리 시스템의 수용가능 성능(acceptable performance)은 쓰레시홀드 값 혹은 그 이상에서 남아있는 성능 메트릭(a performance metric remaining at or above a threshold value)에 의해서 정의될 수 있다. 한 실시 예에서, 프로세스들의 쓰레시홀드 수를 초과하는, 프로세스들(302, 304, 및 306)에 유사한 프로세스들의 총 수는 데이터 처리 시스템의 성능을 수용 불가능으로 하는 것으로 해석될 수 있다. 예를 들어, 한 예시적 구성에서, 여러 RWL들 상에서 원자 연산들을 실행하기 위해 경쟁하는 총 쓰레드들 혹은 프로세스들의 수가 5000인 경우, 이는 데이터 처리 시스템의 성능을 수용 불가능하게 하는 것으로 해석될 수 있다.
다른 실시 예에서, 특정 RWL을 위한 프로세스들의 쓰레시홀드 수를 초과하는, 프로세스들(302, 304, 및 306)에 유사한 프로세스들의 총 수는 데이터 처리 시스템의 성능을 수용 불가능하게 하는 것으로 해석될 수 있다. 예를 들어, 한 예시적 구성에서, 락 워드(308)을 사용하여 락을 획득 혹은 해제하기 위해 경쟁하는 1000 혹은 그 이상의 쓰레드들은 저하된 성능(degraded performance)의 원인으로 간주될 수 있다.
또 다른 실시 예에서, 프로세서들의 수(the number of processors)에 대한 프로세스들의 쓰레시홀드 비율(a threshold ratio)을 초과하는, 프로세스들(302, 304, 및 306)에 유사한 프로세스들의 총 수는 데이터 처리 시스템의 성능을 수용 불가능하게 하는 것으로 해석될 수 있다. 예를 들어, 한 예시적 구성에서, RWL을 획득 혹은 해제하기 위해 경쟁하는 프로세서 당 1000 혹은 그 이상의 쓰레드들은 저하된 성능(degraded performance)의 원인으로 간주될 수 있다.
도 4를 참조하면, 이 도면은 예시적 실시 예에 따라 DML의 블록도를 도시한다. 한 실시 예에 따른 DML(400)은 오리지널 락(402)를 포함한다. 오리지널 락(402)는 도 3의 락 워드(308)과 같이, 기존의 RWL을 표시하기 위해 사용되는 락 워드일 수 있고, DML(400)으로 확장가능 하도록 본 발명의 한 실시 예에 따라 변형된다. 오리지널 락(402)는 또한 “컨테이닝 락(containing lock)” 혹은 락의 “컨테이닝 엘리멘트(containing element)”라 부른다.
DML(400)은 또한 확장 락들(404, 406, 408, 및 410)을 포함한다. 오리지널 락(402) 및 확장 락들(404, 406, 408, 및 410)은 리소스 상에서 단일의 락(a single lock)으로서 연산되며, 이는 RWL이 DML(400)으로 변환되기 전에 기존의 RWL에 의해서 관리되었다. 다시 말하면, 오리지널 락(402) 및 확장 락들(404, 406, 408, 및 410)의 각각은 단일 락의 락 엘리멘트들을 형성한다. 운영 체제의 컴포넨트와 같은, 락 관리 메커니즘은 각각의 락 엘리멘트에 관하여 동일 리소스 상에서 락들을 관리하기 위해 동일 락 - DML(400) - 내의 다른 락 엘리멘트들에 관한 연산들과 분리하여, 개별적으로, 그리고 독립적으로 연산될 수 있다.
확장 락들(404-410)의 각각은 락 정보를 저장하기 위해 사용가능한 메모리 공간들일 수 있다. 예를 들어, 한 실시 예에서, 부트 업이 되면(upon boot up), 운영 체제는 RWL 혹은 DML과 함께 락 워드들을 생성 및 저장하거나 혹은 다른 사용을 위해서 유보된 적당한 크기의 적당한 메모리 영역을 지정할 수 있다. 확장 락은 또한 “확장 엘리멘트(expanded element)” 혹은 “리더 락 엘리멘트(reader lock element)”라 부른다.
확장 락들(404-410)은 그러한 지정된 메모리 영역 내의 동일 혹은 다른 크기의 메모리 공간들일 수 있다. 예를 들어, 한 실시 예에서, 확장 락들(404-410)은 각각이 크기가 단일인 워드(a single word in size)일 수 있다. 다른 실시 예에서, 확장 락들(404-410)의 일부는 크기가 1 워드이고, 한편 확장 락들(404-410)의 다른 확장 락들은 특정 구현에 적합하게 더 크거나 더 작을 수 있다.
또 다른 실시 예에서, 모든 메모리 영역은 확장 락들(404-410)을 저장하기 위해 사용될 수 있다. 예를 들어, 분산 데이터 처리 환경에서, 확장 락들(404-410)의 일부 확장 락들은 한 프로세서에 더 근접한 한 메모리 영역에 위치할 수 있고, 다른 확장 락들은 다른 프로세서에 더 근접한 다른 메모리 영역에 위치할 수 있다. 다시 말하면, 확장 락들(404-410)은 프로세서들에 대한 밀접성(affinity), 디바이스들에 대한 근접성(proximity), 혹은 다른 고려사항들을 고려하여 메모리의 모든 영역(any region)에 분산될 수 있다.
도 4에는 4개의 확장 락들이 도시되어 있는데, 이는 설명을 명확하게 하기 위한 예로서만 도시된 것이다. 본 발명의 범위 내에서, 확장 락들의 수는 임의의 수(any number)로 생성될 수 있고, 다른(different) 오리지널 락들은 다르게(differently) 확장될 수 있다. 예를 들어, 하나의 RWL을 확장하기 위한 하나의 구현은 예시된 실시 예와 같은 방식으로 4개의 확장 락들을 생성할 수 있다. 다른 RWL을 확장하기 위한 구현은 8, 16 혹은 다른 임의의 수(any other number)의 확장 락들을 생성할 수 있다.
또한, 오리지널 락(402) 및 확장 락들(404-410)은 논리적 고찰을 위해서만 인접한 것으로 도시된 것이며, 설명된 발명에 관하여 제한하려는 의도는 없다. 오리지널 락 및 확장 락들(404-410)의 각각은 본 발명의 범위 내에서 특정 구현에 적합하다면 주어진 메모리 내 어디에서든지 위치할 수 있다.
한 예시적 실시 예에 따라, 오리지널 락(402)는 확장 락들(404-410)을 사용하여 확장된다. 이런 방식으로 오리지널 락(402)를 확장하는 것은 상기 락의 데이터가 메모리 공간의 하나 이상의 락 워드에 걸쳐서 유지되고 조작될 수 있도록 해 준다. 락은 이제 집단적으로 오리지널 락(402)와 확장 락들(404-410)에 의해서 표시된다. 이와 같이 표시된(thus-represented) DML(400)에 관한 원자 연산들은 오리지널 락(402) 혹은 확장 락들(404-410) 중 어느 것의 메모리 공간에 관하여 따로따로(discretely) 진행될 수 있다.
예를 들어, 오리지널 락(402)와 확장 락들(404-410)의 각각은 크기가 하나인 데이터 워드(one data word in size)이다. 특정 프로세스들은 오리지널 락(402)의 상기 데이터 워드를 사용하여 DML(400)을 획득 혹은 해제할 수 있다. 그러한 락 연산들과 관련된 원자 연산들은 오리지널 락(402)를 표시하는 상기 데이터 워드에 관하여 실행될 것이다. 특정의 다른 프로세스들도 확장 락(406)의 상기 데이터 워드를 사용하여 비슷하게 DML(400)을 획득 혹은 해제할 수 있다. 그러한 락 연산들과 관련된 원자 연산들은 일반적으로 확장 락(406)을 표시하는 상기 데이터 워드에 관하여 실행될 것이다. 다른 프로세스들도 오리지널 락(402) 혹은 확장 락들(404-410) 중 하나에 비슷하게 할당될 수 있다.
특정의 상태들(certain conditions)은 하나의 확장 락에 할당된 프로세스가 상기 오리지널 락 혹은 다른 확장 락에 관하여 연산을 실행하도록 할 수 있다. 더 나아가서, 모든 라이트 락들은 오리지널 락(402)를 사용하는 모든 프로세스에 의해서 획득되고, 보유되며, 그리고 해제된다. 여러 프로세스들에 의해서 획득되고, 보유되며 그리고 해제된 리드 락들은 본 발명의 한 실시 예의 방식으로 오리지널 락(402)와 확장 락들(404-410) 중 하나에 걸쳐 분산될 수 있다.
그 결과, RWL을 조작하기 위한 두 개 혹은 그 이상의 원자 연산들은 지금 사용 중인 RWL의 메모리 공간 상에서 순차적으로 실행되기 위해 대기해야 한다. 이 실시 예에 따라 RWL을 DML(400)으로 확장하는 것은 운영 체제가 그러한 두 개 혹은 그 이상의 원자 연산들을 상기 동일 DML과 관련된 다른 메모리 공간들 상에서 수행할 수 있도록 하는 장점이 있다.
DML(400)은 두 개의 모드로 연산한다. 리소스 상의 락에 대한 경쟁이 쓰레시홀드 값 아래 일 때, DML(400)은 확장 락들(404-410)을 사용하지 않을 수 있고 오직 오리지널 락(402)만 사용하여 연산한다. 그러한 상황에서, 상기 리소스 상의 모든 리드 및 라이트 락들은 오리지널 락 (402)를 사용하여 획득되고, 보유되며 그리고 해제된다. 상기 락들에 대한 경쟁이 임계값에 도달하거나 혹은 임계값을 초과하면, DML(400)은 확장 락들(404-410) 중 임의의 수를 사용하기 위해 확장되고 실시 예의 방식으로 연산한다.
도 5를 참조하면, 이 도면은 예시적 실시 예에 따른 확장 락들을 사용하기 위한 DML의 구성에 관한 블록도를 도시한다. DML(500)은 도 4의 DML(400)과 유사할 수 있다. 오리지널 락 (502)는 도 4의 오리지널 락(402)로서 사용될 수 있다. 확장 락들(504)의 일부는 도 4의 확장 락들(404-410)의 대응 일부로서 사용될 수 있다.
오리지널 락(502)는 락 카운트(506)을 포함한다. 락 카운트(506)은 어떤 주어진 시간에 오리지널 락(502)에 보유되는 락들의 수를 저장하는 한 세트의 비트들이다. 한 세트의 비트들은 하나 혹은 그 이상의 비트들이다.
오리지널 락(502)는 또한 한 세트의 인디케이터들(a set of indicators)을 포함한다. 인디케이터는 특정의 상태(a particular condition) 혹은 상태의 특정 값(a particular value of a condition)을 표시하는 한 세트의 비트들(a set of bits)이다. 한 세트의 인디케이터들은 하나 혹은 그 이상의 인디케이터들이다. 인디케이터는 또한 규칙(a rule)이 실행되어야 하는지 혹은 실행 되었는지를 결정하기 위해 사용될 수 있다.
한 예시적 인디케이터는 단지 1 비트로 구성될 수 있는데, 이는 디바이스의 온/오프 상태, 데이터 혹은 옵션의 이용가능/이용가능하지 않음의 상태, 그리고 기타 유사한 상태들을 표시하기 위해서 세트 혹은 리세트 될 수 있다. 다른 예시적 인디케이터는 여러 비트들, 예를 들어 2비트로 구성될 수 있는데, 이는 특정 상태의 0에서 4까지의 카운트를 저장할 수 있다. 락 카운트(506)은 그러한 멀티-비트 인디케이터의 한 예가 될 수 있다.
오리지널 락(502)는 또한 “리드-모드(read-mode)”인디케이터(508), “인터락(interlock)” 인디케이터(510), “업그레이드(upgraded)” 인디케이터(512), “확장” 인디케이터(514), “확장가능” 인디케이터(516), 및 확장 락들의 인덱스(518)을 포함할 수 있다. 인디케이터들(508-516)은 예시적인 인디케이터들의 세트이며 예시적인 실시 예를 설명하기 위해서 선택된 것이고 본 발명의 범위를 제한하려는 것은 아니다.
리드-모드 인디케이터(508)은 오리지널 락(502)가 오직 리드 락들만 보유하기 위해 사용되고 있는지 혹은 리드락들 및 라이트 락들 모두를 보유하기 위해 사용되고 있는 지를 표시하기 위해 사용될 수 있다. 예를 들어, 만일 리드-모드 인디케이터(508)이 단일 비트 인디케이터로서 구현된다면, 비트 값 0은 오리지널 락(502)가 락 카운트(506)에 라이트 락 카운트를 보유하고 있는 상태를 표시할 수 있다. 비트 값 0은 또한 오리지널 락(502)가 락 카운트(506)의 모두에 아무런 락들도 보유하고 있지 않아서 모든 종류의 락을 보유하기 위해 이용 가능하다는 것을 표시할 수 있다. 반대로 비트 값 1은 오리지널 락(502)가 락 카운트(506) 내에 적어도 하나의 리드 락 카운트를 보유하고 있는 상태를 표시할 수 있다.
인터락 인디케이터(510)은 DML(500)의 사용 동안 발생하는 특정 상태들을 처리하기 위해 사용될 수 있다. 예를 들어, 오리지널 락(502)가 원자 연산에 의해 업데이트되어 오리지널 락(502)의 특정 상태로 되었을 때, 어떤 규칙이 그러한 연산 전에 인터락 인디케이터(510)이 세트될 것을 요구할 수 있다.
확장 인디케이터(514)는 DML(500)이 확장 락들(504)를 사용하고 있는 지를 프로세스에 표시할 수 있다. 예를 들어, 만일 확장 인디케이터(514)가 단일 비트 인디케이터로 구현된다면, 비트 값 0은 DML(500)이 확장 락들(504)를 사용하고 있지 않는 상태를 표시할 수 있다. 반대로, 비트 값 1은 DML(500)이 확장 락들(504)의 하나 혹은 그 이상의 확장 락들을 사용하기 위해 확장된 상태를 표시할 수 있다.
업그레이드 인디케이터(512)는 상기 락에 관하여 과거에 발생된 경쟁 상태가 단순 RWL을 DML(500)으로 변환되게 하여 상기 락이 DML(500)의 형식으로 존재하는 것을 표시하기 위해 사용될 수 있다. 다시 말하면, 업그레이드 인디케이터(512)는 DML(500)이 동작하는 두 개의 모드들 중 하나의 프로세스를 알리기(inform) 위해 사용될 수 있다. 예를 들어, 만일 업그레이드 인디케이터(512)가 단일 비트로 구현된다면, 비트 값 0은 DML(500)이 오직 오리지널 락(502)만을 사용하여 동작 중이라는 상태를 표시할 수 있다. 반대로, 비트 값 1은 DML(500)이 오리지널 락(502)와 함께 확장 락들(504)를 사용 중인 상태를 표시할 수 있다.
확장 가능 인디케이터(516)은 DML(500)이 확장 가능한지 혹은 확장 락들(504)를 사용할 수 있는 지를 표시할 수 있다. 예를 들어, 만일 확장 가능 인디케이터(516)이 단일 비트 인디케이터로서 구현된다면, 비트 값 0은 DML(500)이 확장 락들(504)를 사용할 수 없는 상태를 표시할 수 있다. 반대로, 비트 값 1은 DML(500)이 확장 락들(504)에서 하나 혹은 그 이상의 확장 락들을 사용하도록 확장될 수 있는 상태를 표시할 수 있다. 예를 들어, 특정의 RWL들은 확장 폼(expanded form)보다 확장되지 않은 폼(non-expanded form)에서 선호될 수 있고, 확장 가능 인디케이터(516)은 그러한 선택을 하기 위해 이용될 수 있다.
확장 가능 인디케이터(516)은 한 실시 예에서 선택적일 수 있다. 한 실시 예에서 사용되었을 때, 확장 가능 인디케이터(516)은 스위치로서 사용될 수 있는데, 이는 그 실시 예가 어떤 이유로 모든 락들이 확장되지 않도록 선택하는 경우이다. 확장 가능 인디케이터(516)을 이런 식으로 사용하면 상기 실시 예는 특정 락들에 대하여 선택적으로 확장을 허용하지 않을 수 있다. 확장 가능 인디케이터(516)이 없는 한 실시 예에서, 그 실시 예는 모든 락들이 확장 가능한 것으로 간주할 수 있다.
확장 락들의 인덱스(518)은 확장 락들(504)에서 확장 락들의 임의의 수(any number) 각각에 대한 참조들을 보유하도록 구성될 수 있다. 인덱스(518)을 사용하면, 락을 획득 혹은 해제하기 위해 요청하는 프로세스는 그 요청에 대응하는 관련 동작을 수행하기 위해 오리지널 락(502)로부터 확장 락들(504)의 모든 확장 락까지 트래버스(traverse)할 수 있다.
도 5A를 참조하면, 이 도면은 예시적 실시 예에 따라 DML의 다른 실시 예의 블록도를 도시한다. DML(550)은 도 5의 DML(500)과 유사할 수 있다. DML(550)의 오리지널 락(552)는 도 5의 오리지널 락(502)와 유사할 수 있다.
이 도면의 실시 예는 오리지널 락(552)가 라이트 락을 저장하기 위해 사용될 때 사용가능 할 수 있다. 도 5의 락 카운트(506)은 상기 라이트 락을 저장하기 위해서 DML(550)을 사용할 수 있는 쓰레드와 관련된 식별자를 보유하기 위해 사용될 수 있다. 그러한 쓰레드는 상기 라이트 락의 오너(owner)일 수 있다. 따라서, 도 5의 락 카운트(506)의 일부 혹은 모든 비트들은 락 카운트 혹은 락 오너 식별자(554)를 저장하기 위해서 사용될 수 있다.
도 5b를 참조하면, 이 도면은 예시적 실시 예에 따른 DML의 또 다른 실시 예의 블록도를 도시한다. DML(570)은 도 5의 DML(500)과 유사할 수 있다. DML(570)의 오리지널 락(572)는 도 5의 오리지널 락(502)와 유사할 수 있다.
이 도면의 실시 예는 오리지널 락(572)가 라이트 락을 저장하기 위해 사용될 때 다른 대안으로서(alternatively) 사용 가능할 수 있다. 락 카운트(574)는 도 5의 락 카운트(506)과 유사할 수 있다. 오리지널 락(572)는 또한 라이트 락 오너 식별자(576)을 포함할 수 있다. 식별자(576)은 상기 라이트 락을 저장하기 위해 DML(570)을 사용할 수 있는 쓰레드와 관련된 식별자를 보유하기 위해 사용될 수 있다. 락 카운트(574)는 도 5의 락 카운트(506)과 유사한 값들을 계속 보유할 수 있다.
도 6을 참조하면, 이 도면은 예시적 실시 예에 따라 확장 락 혹은 리더 락 엘리멘트의 예시적 구성에 관한 블록도를 도시한다. 확장 락(602)는 도 5의 확장 락들(504)의 확장 락들 중 어느 것으로도 구현될 수 있다.
확장 락(602)는 락 카운트(604)를 포함한다. 락 카운트(604)는 확장 락(602)에 보유된 락들의 수를 추적한다. 락 카운트(604)는 비트로 동작하며 도 5의 락 카운트(504)의 비트들과 유사한 방식으로 사용 가능하다. 도 6의 확장 락(602)를 사용하여 도 5의 DML(500)과 같은, DML의 구현에서, 어느 주어진 시간에 상기 DML에 의해서 보유되는 락들의 총 수는 그 시간에 사용 중인 오리지널 락 및 각각의 확장 락의 락 카운트들의 값의 합이다.
확장 락(602)는 또한 한 세트의 인디케이터들을 포함한다. 확장 락(602)에서 인디케이터들의 세트는 도 5의 오리지널 락(502)에서 인디케이터들의 세트와 유사하게 변형되거나 확장될 수 있다. 리드-모드 인디케이터(606)은 확장 락(602)에서의 인디케이터일 수 있다. 한 실시 예에서, 리드-모드 인디케이터(606)은 도 5의 리드-모드 인디케이터(508)과 유사한 방식으로 동작할 수 있다. 다른 실시 예에서, 리드-모드 인디케이터(606)은 확장 락(602)가 오직 리드 락들만 혹은 다른 종류의 락들의 조합을 보유하기 위해 사용되고 있는 지를 표시하기 위해 사용될 수 있다.
확장 락(602)는 또한 업그레이드 인디케이터(608)을 포함할 수 있다. 한 실시 예에서, 업그레이드 인디케이터(608)은 확장 락(602)가 도 5의 오리지널 락(502)의 업그레이드에서 확장 락임을 표시하기 위해 도 5의 오리지널 락(502)의 업그레이드 인디케이터(512)에 대응될 수 있다. 다른 실시 예에서, 업그레이드 인디케이터(608)은 확장 락(602) 자체의 업그레이드를 표시하기 위해 이용될 수 있다. 예를 들어, 확장 락(602)는 확장 락(602)의 사용으로 일어날 수 있는 모든 경쟁을 처리하기 위해 한 세트의 확장 락들로 확장될 수 있다. 한 세트의 확장 락들은 하나 혹은 그 이상의 확장 락들이다.
이 상세한 설명에서 명백한 다른 인디케이터들의 예로서, 확장 락(602)의 구현은 선택적으로 멀티-비트 락-넘버 인디케이터 (multi-bit lock-number indicator) (610)를 포함할 수 있다. 락-넘버 인디케이터(610)은 확장 락(602)를 참조하기 위해 도 5의 확장 락들(518)의 인덱스 대신에 혹은 인덱스에 추가하여 사용될 수 있다.
도 5의 오리지널 락(502) 및 도 6의 확장 락(602)는 전술한 정보 모두(all of the described information)를 저장하기 위해 임의의 수의 비트들(any number of bits)을 포함할 수 있다. 오리지널 락(502) 혹은 확장 락(602)는 또한 정보의 어떤 특정 조각(any particular piece of information)을 저장하기 위해서 임의의 수의 비트들을 사용할 수 있다. 예를 들어, “리드-모드” 인디케이터 혹은 “확장 가능” 인디케이터와 같은 인디케이터들 중 어느 것이라도 한 비트 이상을 사용하여 저장될 수 있다. 유사한 인디케이터가 확장 락 뿐만 아니라 오리지널 락에 사용될 경우, 다른 수의 비트들이 유사한 인디케이터들의 값을 보유하기 위해 사용될 수 있다.
더 나아가서, 이들 인디케이터들은 예시된 실시 예들의 범위 내에서 유사한 기능들을 수행하기 위해 변형되거나, 보충되거나, 증대되거나, 강화되거나 혹은 달리 변경될 수 있다. 이들 인디케이터들은 인디케이터들의 세트를 제한하려는 의도가 없으며 오직 예시된 실시 예의 명확성을 위해서 여기에서 선택되고 설명된 것이다. 추가의 인디케이터들은 이 명세서에서 명백하며 본 발명의 범위 내에서 고려된 것이다.
도 5 및 도 6에 도시된 인디케이터들의 세트는 예로서 구성된 것이며 본 발명의 범위 내에서 어떤 특정 인디케이터가 보유할 수 있는 비트 포지션들을 제한하지 않는다. 이들 및 기타 다른 인디케이터들은 본 발명의 범위를 벗어남이 없이 도 5의 오리지널 락(502) 혹은 도 6의 확장 락(602)의 메모리 공간 내에 순서에 관계없이 임의의 적합한 비트를 보유할 수 있다.
도 7을 참조하면, 이 도면은 예시적 실시 예에 따라 프로세스들 혹은 쓰레드들을 DML내의 지정된 오리지널 혹은 확장 락들에 할당하는 예시적 방법에 관한 블록도를 도시한다. 락 넘버(702)는 오리지널 락 혹은 DML 내의 지정된 확장 락(a specific expanded lock)과 관련된 수 혹은 인덱스일 수 있다. 예를 들어, 락 넘버(702)는 도 5에 도시한 DML(500)의 확장 락들(504) 중 특정의 확장 락을 참조할 수 있는 확장 락들(518)의 인덱스 내의 엔트리(an entry)일 수 있다.
쓰레드(704)는 상기 DML을 사용하여 락을 획득 혹은 해제하도록 요청하는 예시적 프로세스의 예시적 쓰레드일 수 있다. 쓰레드(704)는 상기 예시적 실시 예를 명확히 설명하기 위해서만 사용된 것이며 본 발명에 관하여 제한하려는 의도는 없다. 쓰레드(704)는 데이터 처리 환경에서 락들을 획득 및 해제할 수 있는 하나의 쓰레드, 프로세스, 혹은 기타 메커니즘일 수 있다.
쓰레드(704)는 쓰레드(704)가 실행될 경우 데이터 처리 시스템에서 쓰레드(704)를 고유하게 식별하기 위해 사용될 수 있는 것과 관련된 식별자를 가질 수 있다. 쓰레드 식별자(706)은 하나의 그러한 식별자일 수 있다.
하나의 예시적 실시 예에서, 락 넘버(lock number) (702)는 쓰레드 식별자(thread identifier) (706)으로부터 계산되고, 이에 의해서 쓰레드(704)와 락 넘버(702)와 관련된 상기 오리지널 혹은 확장 락 사이에 연관성(association), 밀접성(affinity), 관련성(relationship), 혹은 어사인먼트(assignment)를 형성할 수 있다. 예를 들어, 예시적인 DML은 주어진 인스턴스(a given instance)에서 하나의 오리지널 락과 4개의 확장 락들을 사용하고 있을 수 있다. 쓰레드 식별자(706)은 0과 4 사이의 한 수를 산출하기 위해 해시(hash)될 수 있다. 만일 그 해시 값이 0이면, 쓰레드(704)는 상기 오리지널 락에 할당되고 쓰레드(704)가 상기 관련 리소스에서 수행하는 락들의 모든 획득들 혹은 해제들은 상기 오리지널 락을 사용하여 추적된다. 이와 유사하게, 만일 상기 해시 값이 1, 2, 3, 혹은 4이면, 쓰레드(704)는 확장 락 1, 2, 3, 혹은 4에 각각 할당될 수 있다.
한 실시 예에서, 상기 해시 값은 리드 락들을 저장하기 위해 - 라이트 락들은 오리지널 락에 저장됨 - 어느 확장 락이 사용되는지를 표시할 수 있다. 다시 말하면, 만일 리드 락이 업그레이드 되었다면 상기 리드 락은 오리지널 락에 저장되지 않으며, 상기 해시 값은 리드 락들이 저장되어야 하는 확장 락을 식별하기 위해 사용된다. 예를 들어, 해시 값 0은 확장 락들 1, 2, 및 3이 존재할 수 있는 리드 카운트를 저장하기 위해 리더 락 0의 사용을 표시할 수 있다.
해싱은 계산(708)의 예로서만 설명된 것이다. 계산(708)은 쓰레드(704)를 DML 내의 오리지널 혹은 확장 락의 인덱스, 수, 혹은 식별자와 고유하게 관련시키기 위해 사용 가능한 모든 적합한 계산이 될 수 있다.
도 8을 참조하면, 이 도면은 예시적 실시 예에 따라 DML을 사용하여 리드 및 라이트 락들을 관리하는 블록도를 도시한다. 쓰레드(802)는 도 7의 쓰레드(704)와 유사할 수 있다. 오리지널 락(804) 및 확장 락(806)은 도 7의 설명에서 사용된 DML의 대응 컴포넨트들일 수 있다.
확장 락(806)은 도 7의 락 넘버(702)에 의해서 참조되고(referenced), 인덱스되고(indexed) 혹은 숫자가 부여될(numbered) 수 있다. 도 8에 도시된 구성의 시점에서, 쓰레드(802)는 상기 락 넘버를 사용하여 확장 락(806)에 매핑되었거나 혹은 달리(otherwise) 관련되어있다.
한 실시 예에 따르면, 쓰레드(802)가 라이트 락(808)을 획득하기 위해 요청할 때, 라이트 락(808)을 위한 그 요청은 오리지널 락(804)로 전송된다. 라이트 락(808)을 해제하기 위한 요청들도 또한 오리지널 락(804)에 전송된다. 라이트 락(808)의 획득 혹은 해제에 관련되는 모든 원자 연산들은 오리지널 락(804)를 사용하여 수행된다.
쓰레드(802)가 리드 락(810)을 획득하기 위해 요청할 때, 리드 락(810)을 위한 요청은 오리지널 락(804) 혹은 확장 락(806)으로 보내질 수 있다. 리드 락(810)을 해제하기 위한 요청들은 오리지널 락(804), 확장 락(806) 혹은 다른 확장 락(812)로 보내질 수 있다. 리드 락(810)의 획득 혹은 해제와 관련한 모든 원자 연산들은 확장 락(806)을 사용하여 수행되는 것이 바람직하다. 리드 락(810)의 획득 혹은 해제와 관련한 원자 연산들은 특정 상태들(certain conditions)이 확장 락(806)과 관련하여 존재할 때 오리지널 락(804) 혹은 다른 확장 락(812)를 사용하여 수행될 수 있다.
도 9를 참조하면, 이 도면은 예시적 실시 예에 따라 DML을 생성하는 예시적 프로세스의 흐름도를 도시한다. 프로세스(900)은 데이터 처리 시스템 내 락들을 관리하는 어플리케이션, 예를 들어 운영 체제 혹은 관련 컴포넨트에 구현될 수 있다.
프로세스(900)은 오리지널 락에 대한 경쟁 상태를 검출함으로서 시작된다(단계 902). 단계(902)에서 오리지널 락은 지금 사용된(presently used) RWL, 혹은 한 실시 예에 따른 DML에서 사용가능 할 수 있는 오리지널 락일 수 있다. 만일 단계(902)의 오리지널 락이 지금 사용된 RWL이면, 프로세스(900)에서 추가의 단계들(도시하지 않음)은 지금 사용된 RWL을 예시적 실시 예에서 사용가능 할 수 있는 오리지널 락으로 변환할 수 있다.
프로세스(900)은 상기 오리지널 락과 함께 사용할 적절한 수의 확장 락들을 결정한다(단계 904). 프로세스(900)은 메모리의 하나 혹은 일부를 확장 락들로 사용하기 위해 지정한다(단계 906).
프로세스(900)은 상기 오리지널 락에서 확장 락들의 인덱스를 생성한다(단계 908). 프로세스(900)은 그 후 종료된다. 단계(908)의 한 실시 예에서, 프로세스(900)은 상기 오리지널 락 내 확장된 락들의 인덱스에, 확장 락들이 생성된 여러 메모리 위치들의 주소들의 정렬된 목록(an ordered list)을 저장할 수 있다. 다른 실시 예에서, 프로세스(900)은 단계(908)에서 임의의 다른 종류(any another type)의 인덱스를 저장할 수 있다. 예를 들어, 단계(908)은 상기 확장 락들의 하나 혹은 그 이상의 그러한 주소들, 상기 확장 락들의 순서(order), 혹은 그들의 조합을 드러내기 위해(reveal) 변환될 수 있는 값들의 목록을 생성할 수 있다.
도 10을 참조하면, 이 도면은 예시적 실시 예에 따라 확장 락들을 위해 메모리 공간을 할당하는 프로세스의 흐름도를 도시한다. 프로세스(1000)은 도 9의 프로세스(900)과 함께 구현될 수 있다.
한 실시 예에서, 락들로서 사용하기 위한 메모리 공간은 도 9의 프로세스(900)의 시작 전에, 예를 들어 부트 시에(at boot time) 운영 체제에 의해서 이미 할당되었을 수 있다. 그러한 실시 예에서, 프로세스(900)은 그 미리 할당된 메모리의 특정 부분을 도 9의 프로세스(900)의 단계(906)에서 확장 락들로 사용하기 위해 단순히 지정할 수 있다.
다른 실시 예에서, 도 9의 프로세스(900)보다 프로세스(1000)이 먼저 올 수 있다. 프로세스(1000)은 락들로서 사용을 위해 메모리의 한 영역을 할당함에 의해서 시작된다(단계 1002). 그 다음 프로세스(1000)은 단계(906)에서 도 9의 프로세스(900)을 실행하고 도 9의 프로세스(900)의 종료에서 종료될 수 있다. 도 9의 단계(906)은 프로세스(900)에서 확장 락들로서 사용하기 위해 메모리의 하나 혹은 그 이상의 부분들을 단계(1002)에서 할당된 메모리의 영역으로부터 지정 혹은 할당할 수 있다.
도 11을 참조하면, 이 도면은 예시적 실시 예에 따라 특정 확장 락들을 전문화하는(specializing) 프로세스의 흐름도를 도시한다. 프로세스(1100)은 도 9의 프로세스(900)과 함께 구현될 수 있다.
도 9의 단계(908) 다음에, 프로세스(900)은 프로세스(1100)을 실행할 수 있다. 프로세스(1100)은 리더 락들로서 하나 혹은 그 이상의 확장 락들을 지정함에 의해서 시작한다(단계 1102). 프로세스(1100)은 그 후 종료한다. 예를 들어, 프로세스(1100)은 하나 혹은 그 이상의 확장 락들에서 리드-모드 인디케이터 비트를 그 확장 락들이 관련 리소스 상에 오직 리드 락들만 보유하기 위해 사용된다는 것을 표시하기 위해 세트 시킬 수 있다.
도 12를 참조하면, 이 도면은 예시적 실시 예에 따라 DML 내의 지정 오리지널 락 혹은 확장 락들(specific original or expanded locks)에 대하여 쓰레드들 혹은 프로세스들을 할당하는 프로세스를 도시한다. 프로세스(1200)은 데이터 처리 시스템에서 락들을 관리하는 어플리케이션, 예를 들어 운영 체제 혹은 관련 컴포넨트에 구현될 수 있다.
프로세스(1200)은 DML을 사용하여 리소스 상의 락을 요청하는 쓰레드 혹은 프로세스와 관련된 식별자를 검출함에 의해서 시작한다(단계 1202). 프로세스(1200)은 상기 요청이 리드락에 관한 것인지 혹은 라이트 락에 관한 것인 지를 결정한다(단계 1204).
만일 상기 요청이 리드 락을 획득 혹은 해제하는 것이라면(단계 1204의 “리드” 경로), 프로세스(1200)은 상기 락 요청을 위해 사용할 락 넘버 혹은 인덱스를 계산한다(단계 1206). 예를 들어, 프로세스(1200)은 그 리소스에 대한 오리지널 및 확장 락들의 총 수까지 수를 산출하기 위해 단계(1202)로부터 식별자를 해시할 수 있다.
프로세스(1200)은 상기 쓰레드의 요청을 상기 계산된 락 넘버 혹은 인덱스에 대응하는 락에 할당한다(단계 1208). 프로세스(1200)은 그 후 종료한다. 단계(1208)에서 할당된 락의 특정 상태들 하에서, 프로세스(1200)은 추가의 단계들을 수행하거나 혹은 다른 프로세스를 실행할 수 있다. 그러한 추가의 단계들 혹은 다른 프로세스는 상기 할당된 락이 아닌 오리지널 혹은 확장 락을 사용하여 락 연산을 수행할 수 있다.
단계(1204)로 다시 돌아가서, 만일 상기 요청이 라이트 락에 관한 것이면(단계 1204의 “라이트” 경로), 프로세스(1200)은 상기 쓰레드의 요청을 상기 오리지널 락에 할당한다(단계 1210). 프로세스(1200)은 그 후 종료한다.
전술한 블록도들에서의 컴포넨트들 및 흐름도들에서의 단계들은 오직 예들로서만 설명된 것이다. 상기 컴포넨트들 및 단계들은 설명을 명확히 하기 위해서 선택된 것이며 본 발명의 예시적 실시 예들에 관하여 제한하지 않는다. 예를 들어, 특정 구현은 상기 컴포넨트들 혹은 단계들 중 어느 것을 상기 예시적 실시 예들의 범위를 벗어남이 없이 조합하거나(combine), 누락하거나(omit), 더 나아가 세부적으로 분할하거나(subdivide), 변형하거나(modify), 추가하거나(augment), 감축하거나(reduce), 혹은 대체하여 구현할 수 있다. 더 나아가서, 전술한 프로세스들의 단계들은 본 발명의 범위 내에서 다른 순서로 수행될 수 있다.
따라서, 컴퓨터 구현된 방법, 장치, 및 컴퓨터 프로그램 제품이 듀얼 모드 리더 라이터 락을 위한 상기 예시적 실시 예들에서 제공된다. 본 발명의 상기 실시 예들을 사용하여, 데이터 처리 시스템은 락 경쟁 상태들 하에서도 개선된 효율로 동작할 수 있다. 상기 실시 예를 사용하면, 데이터 처리 시스템은 RWL이 포화되어 더 이상의 락들을 보유할 수 없을 때 개선된 효율로 동작할 수 있다.
한 실시 예에 따른 DML은, 락에 대한 요청이 쓰레시홀드 값 아래 일 때, 오직 오리지널 락 구성을 사용하여 지금 사용된 RWL로서 동작할 수 있다. 락에 대한 요청이 쓰레시홀드 값에 도달하거나 혹은 초과하면, 즉, 락에 대해 경쟁 상태가 존재하면, 상기 DML은 확장 락을 사용하여 동작하도록 변환될 수 있다. 다시 말하면, 한 실시 예에 따른 DML은 락에 대한 요구에 따라서 확장 모드로 동작하도록 업그레이드될 수도 있고(upgraded) 혹은 오리지널 모드에서 동작하도록 다운그레이드될 수도 있다(downgraded).
한 실시 예에서, 기존의 RWL은 1 데이터 워드의 공간보다 더 적은 공간을 보유할 수 있다. 그러한 실시 예에서, 오리지널 락과 하나 혹은 그 이상의 확장 락들은 예시적 실시 예들의 범위 내에서 1 데이터 워드 내로 수용될 수 있다. 확장 락들은 본 발명의 일부 예시적 실시 예들로서만 락들을 보유하는 것으로 설명되었다. 적절한 수정들에서, 확장 락들은, 라이트 락들을 포함하여, 락들의 종류들의 조합을 보유하기 위해 사용될 수 있다.
본 발명의 실시 예들은 기존의 락 관리 어플리케이션들과 협력할 수 있다. 본 발명의 실시 예들은 또한 기존의 어플리케이션들 및 프로세스들이 오직 지금 사용된 RWL들을 사용하도록 만 구성되었을 경우 트랜스페어런트하게 (transparently) DML을 사용하도록 허용할 수 있다. 더 나아가서, 사용 중에, DML 모드는 변경할 수 있는데, DML을 사용하는 어플리케이션들 및 프로세스들은 그러한 변경을 알지 못하게 하면서 할 수 있다.
본 발명은 전체로서 소프트웨어 실시 예의 형태를 취할 수 있고 혹은 하드웨어와 소프트웨어 엘리멘트들을 모두 포함하는 실시 예의 형태를 취할 수도 있다. 바람직한 실시 예에서, 본 발명은 소프트웨어 혹은 프로그램 코드로 구현되는데, 이는 펌웨어, 상주 소프트웨어, 및 마이크로코드를 포함하지만 이에 한정되지는 않는다.
더 나아가, 본 발명은 컴퓨터 혹은 어떠한 명령 실행 시스템과 함께 혹은 그에 의해 사용되는 프로그램 코드를 제공하는 컴퓨터-사용가능 혹은 컴퓨터-판독가능 매체로부터 접근 가능한 컴퓨터 프로그램 제품의 형태를 취할 수도 있다. 본 발명의 상세한 설명의 목적을 위해, 컴퓨터-사용가능 혹은 컴퓨터-판독가능 매체는 상기 명령 실행 시스템, 장치 혹은 디바이스와 함께 혹은 그에 의해 사용하기 위한 프로그램을 포함, 저장, 통신, 전파, 혹은 전송할 수 있는 모든 유체물의 장치가 될 수 있다.
상기 매체는 전자, 자기, 광, 전자기, 적외선, 혹은 반도체 시스템(혹은 장치 혹은 디바이스) 혹은 전파 매체가 될 수 있다. 컴퓨터-판독가능 매체의 예들에는 반도체 혹은 고체 상태 메모리, 자기 테이프, 착탈가능 컴퓨터 디스켓, 랜덤 액세스 메모리(RAM), 판독-전용 메모리(ROM), 강 자기 디스크(a rigid magnetic disk), 및 광 디스크가 포함된다. 광 디스크들의 현재 예들에는 콤팩트 디스크-판독전용 메모리(CD-ROM), 콤팩트 디스크-리드/라이트(CD-R/W) 및 DVD가 포함된다.
또한, 컴퓨터 저장 매체는 컴퓨터-판독가능 프로그램 코드를 포함 혹은 저장할 수 있는데, 이 컴퓨터-판독가능 프로그램 코드는 컴퓨터 상에서 실행될 때, 이 컴퓨터-판독가능 프로그램 코드의 실행은 컴퓨터가 다른 컴퓨터-판독가능 프로그램 코드를 통신 링크를 통해 전송하도록 한다. 이 통신 링크는 매체를 사용할 수 있는데, 그 매체는 예를 들어 물리적 혹은 무선이든지 제한이 없다.
프로그램 코드를 저장 및/또는 실행하기에 적합한 데이터 처리 시스템은 시스템 버스를 통해 메모리 엘리멘트들에 직접 혹은 간접으로 결합된 적어도 하나의 프로세서를 포함한다. 메모리 엘리멘트들은 프로그램 코드의 실제적 실행 중 채용되는 로컬 메모리, 벌크 저장 매체, 및 캐시 메모리들을 포함할 수 있는데, 캐시 메모리들은 실행 중 벌크 저장 매체로부터 코드가 검색되어야 하는 횟수를 줄이기 위해서 적어도 일부 프로그램 코드의 일시적 저장을 제공한다.
데이터 처리 시스템은 서버 데이터 처리 시스템 혹은 클라이언트 데이터 처리 시스템으로서 기능을 수행할 수 있다. 서버 및 클라이언트 데이터 처리 시스템들은 데이터 저장 매체를 포함할 수 있는데, 그것은 컴퓨터 사용가능, 즉 컴퓨터 판독가능 하다. 서버 데이터 처리 시스템과 관련된 데이터 저장 매체는 컴퓨터 사용가능 코드를 포함할 수 있다. 클라이언트 데이터 처리 시스템은 그러한 컴퓨터 사용가능 코드를 다운로드(download) 받을 수 있는데, 예를 들어 클라이언트 데이터 처리 시스템과 관련된 데이터 저장 매체 상에 저장하기 위해서 혹은 클라이언트 데이터 처리 시스템에서 사용하기 위해서 그렇게 할 수 있다. 서버 데이터 처리 시스템도 비슷하게 클라이언트 데이터 처리 시스템으로부터 컴퓨터 사용가능 코드를 업로드(upload)할 수 있다. 상기 예시적 실시 예들의 컴퓨터 사용가능 프로그램 제품 실시 예로부터 나온 컴퓨터 사용가능 코드는 이런 방식으로 서버 및 클라이언트 데이터 처리 시스템들을 사용하여 업로드되거나 혹은 다운로드될 수 있다.
입출력 혹은 I/O 디바이스들(키보드들, 디스플레이들, 포인팅 디바이스들등을 포함하나 이에 한정되지는 않음)은 상기 시스템에 직접 혹은 I/O 컨트롤러들을 통해서 결합될 수 있다.
네트웍 어댑터들 또한 상기 시스템에 결합되어서 데이터 처리 시스템이 사설 혹은 공중 네트웍들을 통해서 다른 데이터 처리 시스템들 혹은 원격 프린터들 혹은 저장 디바이스들에 결합될 수 있게 한다. 모뎀들, 케이블 모뎀 및 이더넷 카드들은 네트웍 어댑터들의 현재 이용 가능한 종류들 중 단지 몇 가지이다.
본 발명의 설명은 예시와 설명의 목적을 위해서 제공된 것이며, 이것이 전부라거나 혹은 여기 설명된 형태의 발명으로 한정하려는 의도가 있는 것은 아니다. 많은 수정들 및 변경들이 당업자에게는 명백할 것이다. 상기 실시 예는 본 발명의 원리들, 실제적 적용을 설명하기 위해서 그리고 이 분야의 다른 통상의 지식을 가진 자들이 특정 사용에 적합한 다양한 수정들을 갖는 실시 예들에 대해서 본 발명을 이해하도록 선택되고 설명되었다.

Claims (32)

  1. 듀얼 모드 리더 라이터 락(a dual mode reader writer lock)을 위해 컴퓨터 구현 방법(a computer implemented method)에 있어서, 상기 컴퓨터 구현 방법은:
    오리지널 락(an original lock)을 사용하는데 있어서 경쟁 상태(a contention condition)을 결정하는 단계 - 상기 오리지널 락은 데이터 처리 시스템 상에서 이용가능한 리소스에 대응하고, 상기 오리지널 락은 상기 리소스(resource)에 대한 리드 액세스 및 라이트 액세스를 데이터 처리 시스템에서 실행하는 복수의 프로세스들에 의해서 관리함 -;
    상기 오리지널 락과 함께 사용하기 위해 한 세트의 확장 락들(a set of expanded locks)을 생성하는 단계 - 상기 오리지널 락과 상기 한 세트의 확장 락들은 상기 듀얼 모드 리더 라이터 락을 형성하고, 상기 듀얼 모드 리더 라이터 락은 상기 리소스에 대한 상기 리드 액세스 및 라이트 액세스를 관리하기 위해 동작함 -;
    상기 오리지널 락 내에서 인덱스(an index)를 사용하여, 상기 한 세트의 확장 락들 내의 각각의 확장 락을 인덱싱하는 단계 - 각각의 확장 락은 상기 인덱스를 사용하여 찾을 수 있도록(locatable) 함 -; 및
    상기 오리지널 락 및 상기 확장 락들의 세트에 걸친 복수의 프로세스들에 의해서 상기 리소스에 대한 상기 리드 액세스 및 라이트 액세스를 획득하고 해제하기 위한 요청들을 분산함에 의해서 상기 경쟁 상태를 해결하는 단계(resolving)를 포함하는
    컴퓨터 구현 방법.
  2. 제 1항에 있어서, 상기 오리지널 락은 기존의 리더 라이터 락(a preexisting reader writer lock)이 상기 확장 락들의 세트와 함께 동작하는데 사용 가능한 한 세트의 식별자들(a set of identifiers)을 보유할 수 있도록 상기 기존의 리더 라이터 락의 변형된 형태(a modified form)이고, 상기 컴퓨터 구현 방법은:
    상기 확장 락들의 세트 내 확장 락을 리더 락(a reader lock)으로서 지정하는 단계를 더 포함하며, 이에 의해서 상기 지정된 확장 락이 상기 리소스 상에서 오직 리드 락만(only a read lock)을 획득, 보유, 및 해제하기 위해 사용가능한
    컴퓨터 구현 방법.
  3. 제 1항 혹은 제 2항에서, 상기 컴퓨터 구현 방법은:
    상기 리소스 상에서 리드 락을 (i)획득(acquire), 및 (ii)해제(release)하는 것 중 하나에 대한 요청(a request)을, 프로세스(a process)로부터, 수신하는 단계; 및
    상기 요청을 상기 듀얼 모드 리더 라이터 락 내의 확장 락에 할당하는 단계를 더 포함하는
    컴퓨터 구현 방법.
  4. 제 3항에서, 상기 리소스 상에서 라이트 락(a write lock)을 (i)획득, 및 (ii)해제하는 것 중 하나에 대한 상기 프로세스로부터의 제 2의 요청이 상기 오리지널 락에 할당되는
    컴퓨터 구현 방법.
  5. 제 3항 혹은 제 4항에 있어서, 상기 확장 락은 상기 프로세스와 관련된 식별자(an identifier)로부터 인덱스 값을 계산함 의해서 상기 확장 락들의 세트로부터 선택되며, 상기 인덱스 값은 상기 확장 락에 환원되는(resolving)
    컴퓨터 구현 방법.
  6. 제 3항, 제4항 혹은 제 5항에 있어서, 상기 확장 락은 상기 데이터 처리 시스템의 프로세서에 대해 밀접성(affinity)을 갖도록 상기 확장 락들의 세트로부터 선택되는
    컴퓨터 구현 방법.
  7. 상기 항들 중 어느 한 항에서, 상기 컴퓨터 구현 방법은:
    상기 리소스 상에서 라이트 락(a write lock)을 (i)획득(acquire), 및 (ii)해제(release)하는 것 중 하나에 대한 요청을 수신하는 단계; 및
    상기 요청을 상기 듀얼 모드 리더 라이터 락 내의 상기 오리지널 락에 할당하는 단계를 더 포함하는
    컴퓨터 구현 방법.
  8. 상기 항들 중 어느 한 항에서,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 존재하지 않을 때는 상기 오리지널 락만을 사용하는 제 1의 모드(a first mode)로 동작하고,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 존재할 때는 상기 오리지널 락 및 상기 확장 락들의 세트를 사용하는 제 2의 모드(a second mode)로 동작하며,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 발생될(arise) 때는 상기 제 1의 모드에서 상기 제 2의 모드로 전환하고(switch),
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 중지될(abate) 때는 상기 제 2의 모드에서 상기 제 1의 모드로 전환하는
    컴퓨터 구현 방법.
  9. 제 8항에 있어서, 상기 제 1의 모드에서 상기 제 2의 모드로의 전환은 상기 리소스 상의 락들을 위한 복수의 원자 연산들(atomic operations)이 (i) 상기 오리지널 락 및 상기 확장 락들의 세트에서 하나의 확장 락과 (ii) 상기 확장 락들의 세트에서 두 개의 확장 락들 중 하나에 관하여 동시에 실행되도록(execute) 허용함으로써 상기 경쟁 상태를 제거하는
    컴퓨터 구현 방법.
  10. 상기 청구항들 중 어느 한 항에 있어서, 상기 컴퓨터로 구현된 방법은:
    메모리 내의 한 영역(a region in a memory)을 락들로서 사용을 위해 할당하는 단계를 더 포함하되, 상기 확장 락들의 세트를 생성하는 단계는 상기 영역 내에서 상기 확장 락들의 세트를 위해 한 세트의 공간들(a set of spaces)을 지정하는
    컴퓨터 구현 방법.
  11. 컴퓨터 사용가능 코드를 포함하는 컴퓨터 사용가능 저장 매체를 포함하는 컴퓨터 사용가능 프로그램 제품에 있어서, 상기 컴퓨터 사용가능 코드는:
    오리지널 락을 사용하는데 있어서 경쟁 상태를 결정하기 위한 컴퓨터 사용가능코드 - 상기 오리지널 락은 데이터 처리 시스템 상에서 이용 가능한 하나의 리소스에 대응되며, 상기 오리지널 락은 상기 데이터 처리 시스템에서 실행되는 복수의 프로세스들에 의해서 상기 리소스에 대한 리드 액세스 및 라이트 액세스를 관리함 -;
    상기 오리지널 락과 함께 사용하기 위해 확장 락들의 한 세트를 생성하기 위한 컴퓨터 사용가능 코드 - 상기 오리지널 락 및 상기 확장 락들의 세트는 듀얼 모드 리더 라이터 락을 형성하고, 상기 듀얼 모드 리더 라이터 락은 상기 리소스에 대한 상기 리드 액세스 및 라이트 액세스를 관리하도록 동작함 -;
    상기 오리지널 락 내에서 하나의 인덱스를 사용하여 인덱싱하기 위한 컴퓨터 사용가능 코드 - 상기 확장 락들의 세트 내의 각각의 확장 락은 상기 인덱스를 사용하여 찾아낼(locatable) 수 있도록 되어 있음 -; 및
    상기 오리지널 락 및 상기 확장 락들의 세트에 걸쳐서 상기 복수의 프로세스들에 의해서 상기 리소스에 대한 리드 액세스 및 라이트 액세스를 획득 및 해제하는 요청들을 분산함으로써 상기 경쟁 상태를 해결하기(resolve) 위한 컴퓨터 사용가능 코드를 포함하는
    컴퓨터 사용가능 프로그램 제품.
  12. 제 11항에 있어서, 상기 오리지널 락은 상기 기존의 리더 라이터 락(preexisting reader writer lock)이 상기 확장 락들의 세트와 함께 동작하는데 사용 가능한 한 세트의 식별자들(a set of identifiers)을 보유할 수 있도록 기존의 리더 라이터 락(the preexisting reader writer lock)의 변형된 형태이고,
    상기 컴퓨터 사용가능 프로그램 제품은:
    확장 락들의 세트 내 확장 락을 리더 락으로서 지정하기 위한 - 이에 의해서 상기 지정된 확장 락이 상기 리소스 상에서 오직 하나의 리드 락을 획득, 보유, 및 해제를 위해 사용가능한 - 컴퓨터 사용가능 코드를 더 포함하는
    컴퓨터 사용가능 프로그램 제품.
  13. 제 11항 혹은 제 12항에 있어서, 상기 컴퓨터 사용가능 프로그램 제품은:
    상기 리소스 상에서 리드 락(read lock)을 (i)획득(acquire), 및 (ii)해제(release)하는 것 중 하나에 대한 요청을, 프로세스(a process)로부터, 수신하기 위한 컴퓨터 사용가능 코드; 및
    상기 요청을 상기 듀얼 모드 리더 라이터 락 내의 확장 락에 할당하기 위한 컴퓨터 사용가능 코드를 더 포함하는
    컴퓨터 사용가능 프로그램 제품.
  14. 제 13항에 있어서, 상기 리소스 상에서 라이트 락(a write lock)을 (i)획득(acquire), 및 (ii)해제(release) 하는 것 중 하나에 대한 상기 프로세스로부터의 제 2의 요청이 상기 오리지널 락에 할당되는
    컴퓨터 사용가능 프로그램 제품.
  15. 제 13항 혹은 제 14항에 있어서, 상기 확장 락은 상기 프로세스와 관련된 식별자로부터 인덱스 값을 계산함에 의해서 상기 확장 락들의 세트로부터 선택되며, 상기 인덱스 값은 상기 확장 락에 환원되는(resolve)
    컴퓨터 사용가능 프로그램 제품.
  16. 제 13항, 제14항 혹은 제 15항에 있어서, 상기 확장 락은 상기 확장 락이 상기 데이터 처리 시스템의 프로세서에 대해 밀접성(affinity)을 갖도록 상기 확장 락들의 세트로부터 선택되는
    컴퓨터 사용가능 프로그램 제품.
  17. 제 11항 내지 제 16항 중 어느 한 항에서, 상기 컴퓨터 사용가능 프로그램 제품은:
    상기 리소스 상에서 라이트 락(a write lock)을 (i)획득(acquire), 및 (ii)해제(release)하는 것 중 하나에 대한 요청을 수신하기 위한 컴퓨터 사용가능 코드; 및
    상기 요청을 상기 듀얼 모드 리더 라이터 락 내의 상기 오리지널 락에 할당하기 위한 컴퓨터 사용가능 코드를 더 포함하는
    컴퓨터 사용가능 프로그램 제품.
  18. 제 11항 내지 제 17항 중 어느 한 항에서,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 존재하지 않을 때는 상기 오리지널 락만을 사용하는 제 1의 모드(a first mode)로 동작하고,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 존재할 때는 상기 오리지널 락 및 상기 확장 락들의 세트를 사용하는 제 2의 모드(a second mode)로 동작하며,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 발생될(arise) 때는 상기 제 1의 모드에서 상기 제 2의 모드로 전환하고(switch),
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 중지될(abate) 때는 상기 제 2의 모드에서 상기 제 1의 모드로 전환하는
    컴퓨터 사용가능 프로그램 제품.
  19. 제 18항에 있어서, 상기 제 1의 모드에서 상기 제 2의 모드로의 전환은 상기 리소스 상의 락들을 위한 복수의 원자 연산들(atomic operations)이 (i) 상기 오리지널 락 및 상기 확장 락들의 세트에서 하나의 확장 락과 (ii) 상기 확장 락들의 세트에서 두 개의 확장 락들 중 하나에 관하여 동시에 실행되도록(execute) 허용함으로써 상기 경쟁 상태를 제거하는
    컴퓨터 사용가능 프로그램 제품.
  20. 제 11항 내지 제 19항들 중 어느 한 항에 있어서, 상기 컴퓨터 사용가능 프로그램 제품은 메모리 내의 한 영역을 락들로서 사용을 위해 할당하기 위한 컴퓨터 사용가능 코드를 더 포함하되, 상기 확장 락들의 세트를 생성하기 위한 컴퓨터 사용가능 코드는 상기 영역 내에 상기 확장 락들의 세트를 위한 한 세트의 공간들(a set of spaces)을 지정하는
    컴퓨터 사용가능 프로그램 제품.
  21. 제 11항 내지 제 20항들 중 어느 한 항에 있어서, 상기 컴퓨터 사용가능 코드는 데이터 처리 시스템 내의 컴퓨터 판독가능 저장 매체에 저장되고, 상기 컴퓨터 사용가능 코드는 네트웍을 통해서 원격 데이터 처리 시스템으로부터 전송되는
    컴퓨터 사용가능 프로그램 제품.
  22. 제 11항 내지 제 21항들 중 어느 한 항에 있어서, 상기 컴퓨터 사용가능 코드는 서버 데이터 처리 시스템 내의 컴퓨터 판독가능 저장 매체에 저장되고, 상기 컴퓨터 사용가능 코드는 네트웍을 통해서 원격 데이터 처리 시스템으로 다운로드 되어서 상기 원격 데이터 처리 시스템과 관련된 컴퓨터 판독가능 저장 매체 내에서 사용되는
    컴퓨터 사용가능 프로그램 제품.
  23. 듀얼 모드 리더 라이터 락을 위한 데이터 처리 시스템에 있어서, 상기 데이터 처리 시스템은:
    저장 매체를 포함하는 저장 디바이스 - 상기 저장 디바이스는 컴퓨터 사용가능 프로그램 코드를 저장함 -;
    프로세서 - 상기 프로세서는 상기 컴퓨터 사용가능 프로그램 코드를 실행함 - 를 포함하되, 상기 컴퓨터 사용가능 프로그램 코드는:
    오리지널 락을 사용하는데 있어서 경쟁 상태를 결정하기 위한 컴퓨터 사용가능 코드 - 상기 오리지널 락은 데이터 처리 시스템 상에서 이용 가능한 하나의 리소스에 대응되며, 상기 오리지널 락은 상기 데이터 처리 시스템에서 실행되는 복수의 프로세스들에 의해서 상기 리소스에 대한 리드 액세스 및 라이트 액세스를 관리함 -;
    상기 오리지널 락과 함께 사용하기 위해 한 세트의 확장 락들을 생성하기 위한 컴퓨터 사용가능 코드 - 상기 오리지널 락 및 상기 확장 락들의 세트는 듀얼 모드 리더 라이터 락을 형성하고, 상기 듀얼 모드 리더 라이터 락은 상기 리소스에 대한 상기 리드 액세스 및 라이트 액세스를 관리하도록 동작함 -;
    상기 오리지널 락 내에서 하나의 인덱스를 사용하여 인덱싱하기 위한 컴퓨터 사용가능 코드 - 상기 확장 락들의 세트 내의 각각의 확장 락은 상기 인덱스를 사용하여 찾아낼(locatable) 수 있도록 되어 있음 -; 및
    상기 오리지널 락 및 상기 확장 락들의 세트에 걸쳐서 상기 복수의 프로세스들에 의해 상기 리소스에 대한 리드 액세스 및 라이트 액세스를 획득 및 해제하는 요청들을 분산함으로써 상기 경쟁 상태를 해결하기(resolve) 위한 컴퓨터 사용가능 코드를 포함하는
    데이터 처리 시스템.
  24. 제 23항에 있어서, 상기 오리지널 락은 상기 기존의 리더 라이터 락(preexisting reader writer lock)은 상기 확장 락들의 세트와 함께 동작하는데 사용 가능한 한 세트 식별자들(a set of identifiers)을 보유할 수 있도록 기존의 리더 라이터 락(the preexisting reader writer lock)의 변형된 형태이며,
    상기 데이터 처리 시스템은:
    상기 확장 락들의 세트에서 하나의 확장 락을 리더 락으로서 지정하기 위한 - 이에 의해서 상기 지정된 확장 락이 상기 리소스 상에서 오직 하나의 리드 락을 획득, 보유, 및 해제를 위해 사용가능 하게 하는 - 컴퓨터 사용가능 코드를 더 포함하는
    데이터 처리 시스템.
  25. 제 23항 혹은 제 24항에 있어서, 상기 데이터 처리 시스템은:
    상기 리소스 상에서 리드 락(read lock)을 (i)획득(acquire), 및 (ii)해제(release)하는 것 중 하나에 대한 요청을, 프로세스(a process)로부터, 수신하기 위한 컴퓨터 사용가능 코드; 및
    상기 요청을 상기 듀얼 모드 리더 라이터 락 내의 확장 락에 할당하기 위한 컴퓨터 사용가능 코드를 더 포함하는
    데이터 처리 시스템.
  26. 제 25항에 있어서, 상기 리소스 상에서 라이트 락(a write lock)을 (i)획득(acquire), 및 (ii)해제(release) 하는 것 중 하나에 대한 상기 프로세스로부터의 제 2의 요청이 상기 오리지널 락에 할당되는
    데이터 처리 시스템.
  27. 제 25항 혹은 제 26항에 있어서, 상기 확장 락은 상기 프로세스와 관련된 식별자로부터 인덱스 값을 계산함에 의해서 상기 확장 락들의 세트로부터 선택되며, 상기 인덱스 값은 상기 확장 락에 환원되는(resolve)
    데이터 처리 시스템.
  28. 제 25항, 제26항 혹은 제 27항에 있어서, 상기 확장 락은 상기 확장 락들의 세트로부터 선택되어서, 상기 확장 락이 상기 데이터 처리 시스템의 프로세서에 대해 밀접성(affinity)을 갖게 되는
    데이터 처리 시스템.
  29. 제 23항 내지 제 28항 중 어느 한 항에서, 상기 데이터 처리 시스템은:
    상기 리소스 상에서 라이트 락(a write lock)을 (i)획득(acquire), 및 (ii)해제(release)하는 것 중 하나에 대한 요청을 수신하기 위한 컴퓨터 사용가능 코드; 및
    상기 요청을 상기 듀얼 모드 리더 라이터 락 내의 상기 오리지널 락에 할당하기 위한 컴퓨터 사용가능 코드를 더 포함하는
    데이터 처리 시스템.
  30. 제 23항 내지 제 29항 중 어느 한 항에서,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 존재하지 않을 때는 상기 오리지널 락만을 사용하는 제 1의 모드(a first mode)로 동작하고,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 존재할 때는 상기 오리지널 락 및 상기 확장 락들의 세트를 사용하는 제 2의 모드(a second mode)로 동작하며,
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 발생될(arise) 때는 상기 제 1의 모드에서 상기 제 2의 모드로 전환하고(switch),
    상기 듀얼 모드 리더 라이터 락은 상기 경쟁 상태가 중지될(abate) 때는 상기 제 2의 모드에서 상기 제 1의 모드로 전환하는
    데이터 처리 시스템.
  31. 제 30항에 있어서, 상기 제 1의 모드에서 상기 제 2의 모드로의 전환은 상기 리소스 상의 락들을 위한 복수의 원자 연산들(atomic operations)이 (i) 상기 오리지널 락 및 상기 확장 락들의 세트에서 하나의 확장 락과 (ii) 상기 확장 락들의 세트에서 두 개의 확장 락들 중 하나에 관하여 동시에 실행되도록(execute) 허용함으로써 상기 경쟁 상태를 제거하는
    데이터 처리 시스템.
  32. 제 23항 내지 제 31항들 중 어느 한 항에 있어서, 상기 데이터 처리 시스템은 메모리 내의 한 영역을 락들로서 사용을 위해 할당하기 위한 컴퓨터 사용가능 코드를 더 포함하되, 상기 확장 락들의 세트를 생성하기 위한 컴퓨터 사용가능 코드는 상기 영역 내에 상기 확장 락들의 세트를 위한 한 세트의 공간들(a set of spaces)을 지정하는
    데이터 처리 시스템.
KR1020127024673A 2010-03-15 2011-02-15 듀얼 모드 리더 라이터 락 KR101442369B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/723,717 2010-03-15
US12/723,717 US9021491B2 (en) 2010-03-15 2010-03-15 Dual mode reader writer lock
PCT/EP2011/052189 WO2011113654A1 (en) 2010-03-15 2011-02-15 Dual mode reader writer lock

Publications (2)

Publication Number Publication Date
KR20130010467A true KR20130010467A (ko) 2013-01-28
KR101442369B1 KR101442369B1 (ko) 2014-09-17

Family

ID=43920783

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127024673A KR101442369B1 (ko) 2010-03-15 2011-02-15 듀얼 모드 리더 라이터 락

Country Status (10)

Country Link
US (2) US9021491B2 (ko)
EP (1) EP2548118A1 (ko)
JP (1) JP5818824B2 (ko)
KR (1) KR101442369B1 (ko)
CN (1) CN102792273B (ko)
AU (1) AU2011229395B2 (ko)
CA (1) CA2783449A1 (ko)
IL (1) IL220456A (ko)
SG (1) SG183093A1 (ko)
WO (1) WO2011113654A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5880542B2 (ja) * 2011-03-16 2016-03-09 富士通株式会社 マルチコアプロセッサシステムおよびスケジューリング方法
US8561067B2 (en) * 2011-05-31 2013-10-15 Red Hat, Inc. Test suites for virtualized computing environments
US20160110283A1 (en) * 2014-10-20 2016-04-21 Microsoft Corporation On-demand expansion of synchronization primitives
CN105893137B (zh) * 2014-10-21 2019-11-08 伊姆西公司 用于为对象分配锁资源的方法和装置
CN108809363A (zh) * 2018-08-27 2018-11-13 优视科技新加坡有限公司 近场数据传输方法及其装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5522077A (en) * 1994-05-19 1996-05-28 Ontos, Inc. Object oriented network system for allocating ranges of globally unique object identifiers from a server process to client processes which release unused identifiers
US6154844A (en) * 1996-11-08 2000-11-28 Finjan Software, Ltd. System and method for attaching a downloadable security profile to a downloadable
US6546443B1 (en) 1999-12-15 2003-04-08 Microsoft Corporation Concurrency-safe reader-writer lock with time out support
US6823511B1 (en) 2000-01-10 2004-11-23 International Business Machines Corporation Reader-writer lock for multiprocessor systems
US6792601B1 (en) 2000-05-18 2004-09-14 International Business Machines Corporation Multiple mode object locking method and system
US6678772B2 (en) * 2000-12-19 2004-01-13 International Businesss Machines Corporation Adaptive reader-writer lock
US7430627B2 (en) 2000-12-19 2008-09-30 International Business Machines Corporation Adaptive reader-writer lock
GB2381092B (en) * 2001-10-19 2005-10-19 Ibm Object locking in a shared VM environment
US7159221B1 (en) * 2002-08-30 2007-01-02 Unisys Corporation Computer OS dispatcher operation with user controllable dedication
EP1675916B1 (en) * 2003-10-23 2013-12-11 Basf Se Heat-stable diketopyrrolopyrrole pigment mixtures
US7603502B2 (en) 2005-04-12 2009-10-13 Microsoft Corporation Resource accessing with locking
GB0518516D0 (en) 2005-09-10 2005-10-19 Ibm Managing a resource lock
US8099538B2 (en) 2006-03-29 2012-01-17 Intel Corporation Increasing functionality of a reader-writer lock
US8145817B2 (en) * 2009-04-28 2012-03-27 Microsoft Corporation Reader/writer lock with reduced cache contention

Also Published As

Publication number Publication date
US20110225587A1 (en) 2011-09-15
US20120210074A1 (en) 2012-08-16
AU2011229395A1 (en) 2012-07-05
CA2783449A1 (en) 2011-09-22
IL220456A0 (en) 2012-08-30
US9021491B2 (en) 2015-04-28
KR101442369B1 (ko) 2014-09-17
AU2011229395B2 (en) 2014-04-03
CN102792273A (zh) 2012-11-21
JP2013522740A (ja) 2013-06-13
EP2548118A1 (en) 2013-01-23
US9021492B2 (en) 2015-04-28
IL220456A (en) 2017-01-31
SG183093A1 (en) 2012-10-30
JP5818824B2 (ja) 2015-11-18
CN102792273B (zh) 2016-08-03
WO2011113654A1 (en) 2011-09-22

Similar Documents

Publication Publication Date Title
US20210342071A1 (en) Input/output processing in a distributed storage node with rdma
US9176713B2 (en) Method, apparatus and program storage device that provides a user mode device interface
KR101442369B1 (ko) 듀얼 모드 리더 라이터 락
CN113010265A (zh) Pod的调度方法、调度器、存储插件及系统
US20120011166A1 (en) Skip list generation
JP7064181B2 (ja) トランザクションの長期実行がレコード・ロックを保持することの防止
US12050927B2 (en) Techniques for concurrently supporting virtual NUMA and CPU/memory hot-add in a virtual machine
US20200301755A1 (en) Deadlock resolution between distributed processes
US10379900B2 (en) Dispatching jobs for execution in parallel by multiple processors
US8274521B2 (en) System available cache color map
US8347045B2 (en) Using a dual mode reader writer lock
CN114365109A (zh) 启用rdma的键-值存储库
US9990303B2 (en) Sharing data structures between processes by semi-invasive hybrid approach
US10831563B2 (en) Deadlock resolution between distributed processes using process and aggregated information
JP6333370B2 (ja) キャッシュ線中で動的配列データ構造を実装するための方法
US20230236906A1 (en) Information processing device, information processing method, and program
CN112041817A (zh) 用于管理借助于加速器装置的硬件加速的请求的方法和节点
US11520713B2 (en) Distributed bus arbiter for one-cycle channel selection using inter-channel ordering constraints in a disaggregated memory system
AU2011211360B2 (en) Skip list generation

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: 20170828

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190829

Year of fee payment: 6