KR101203297B1 - 직접 업데이트 소프트웨어 트랜잭션 메모리 - Google Patents
직접 업데이트 소프트웨어 트랜잭션 메모리 Download PDFInfo
- Publication number
- KR101203297B1 KR101203297B1 KR1020087002433A KR20087002433A KR101203297B1 KR 101203297 B1 KR101203297 B1 KR 101203297B1 KR 1020087002433 A KR1020087002433 A KR 1020087002433A KR 20087002433 A KR20087002433 A KR 20087002433A KR 101203297 B1 KR101203297 B1 KR 101203297B1
- Authority
- KR
- South Korea
- Prior art keywords
- transaction
- thread
- memory location
- shared memory
- memory access
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99938—Concurrency, e.g. lock management in shared database
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99939—Privileged access
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
트랜잭션 메모리 프로그래밍 인터페이스를 이용하여 쓰레드는 한 트랜잭션 내에서 하나 이상의 공유 메모리 위치를 직접 그리고 안전하게 액세스할 수 있으면서 하나 이상의 다른 동시 쓰레드에 의한 이들 동일한 위치로의 메모리 액세스를 관리하는 제어 구조를 유지할 수 있다. 쓰레드에 의해 액세스되는 각각의 메모리 위치는 인리스트먼트 레코드와 관련되며, 각각의 쓰레드는 그 메모리 액세스의 트랜잭션 로그를 유지한다. 한 트랜잭션 내에서, 일부 중간 버퍼와는 대조적으로, 판독 동작은 메모리 위치에서 직접 수행되고, 기입 동작이 메모리 위치에서 직접 시도된다. 쓰레드는 메모리 위치의 인리스트먼트 레코드와 그 트랜잭션 로그 간에 불일치를 탐지하여, 그 트랜잭션 내의 메모리 액세스가 신뢰될 수 없고 그 트랜잭션이 재시도되어야 하는지 여부를 판정할 수 있다.
공유 메모리, 인리스트먼트 레코드, 트랜잭션 메모리, 다중 쓰레드
Description
본 발명은 일반적으로 컴퓨터 메모리 동작에 관한 것으로, 보다 구체적으로는, 직접 업데이트 소프트웨어 트랜잭션 메모리(direct-update software transactional memory)에 관한 것이다.
다중 쓰레드 프로세스(multi-thread process)의 여러 쓰레드가 동시 실행 시 공통의 메모리 위치를 공유하는 것은 일반적이다. 그 결과, 다중 쓰레드화 프로그램의 서로 다른 두 개의 쓰레드가 그 프로그램에 의해 액세스가능한 동일한 메모리 위치를 판독하고 이를 업데이트할 수 있다. 그러나, 한 쓰레드가 공유 메모리 위치의 값에 좌우되는 동작들의 시퀀스를 하고 있는 도중에 다른 쓰레드가 그 값을 변경하지 않도록 하기 위해서는 주의를 기울여야만 한다.
예를 들면, 한 프로그램이 서로 다른 두 개의 소프트웨어 객체들의 내용을 액세스하고 있으며, 이때 각각의 객체는 서로 다른 은행 계좌의 예금을 나타낸다고 가정해보자. 먼저, 제1 계좌의 예금은 $10이며 메모리 어드레스 A1에 저장되어 있으며, 반면 제2 계좌의 예금은 $200이며 메모리 어드레스 A2에 저장되어 있다. 뱅킹 프로그램의 제1 쓰레드는 A2에서 A1로 $100을 이체하도록 코딩되어 있으며, 제2 쓰레드는 이 두 계좌의 예금의 합을 계산하도록 코딩되어 있다. 제1 쓰레드는 A1의 내용에 $100을 더하는 것으로 시작하여 이를 $110으로 업데이트하고, 이어서 A2의 내용에서 $100을 차감하고 이를 $100로 업데이트한다. 그러나, 제2 쓰레드가 이 두개의 동작 사이에서 실행되는 경우, 제2 쓰레드는 제대로 된 합계 $210 대신 두 계좌 모두에 대해 잘못된 합계 $310을 계산할 수 있다.
소프트웨어 트랜잭션 메모리는 쓰레드가 일련의 공유 메모리 액세스들을 안전하게 수행할 수 있는 프로그래밍 추상화(programming abstraction)를 제공하며, 이를 통해 쓰레드는 다른 쓰레드로부터의 간섭 없이 그 트랜잭션을 완료할 수 있다. 따라서, 제1 쓰레드의 예시적인 가산 및 감산 동작을 포함하는 트랜잭션이 메모리 위치 A1 및 A2에 관해 "최소단위(atomic)"가 되어 제2 쓰레드가 두 계좌 모두의 총 금액을 제대로 계산될 수 있도록 하기 위해, 소프트웨어에 트랜잭션 메모리가 채용될 수 있다.
그러나, 소프트웨어에 트랜잭션 메모리를 구현하는 기존의 접근 방법에는 성능 문제가 있었다. 예를 들면, 하나의 기존 접근 방법에서, 쓰레드가 한 트랜잭션 내에서 메모리 위치들의 시퀀스를 액세스할 때, 쓰레드는 그 트랜잭션 동안 판독하고 업데이트하고자 하는 메모리 위치와 값의 별도의 리스트를 유지하고 있었고, 트랜잭션의 끝에서, 쓰레드는 이들 값 전부를 실제의 공유 메모리 위치에 업데이트했다. 트랜잭션 동안 쓰레드가 그 리스트의 임의의 메모리 위치를 다시 판독하거나 다시 기입하고자 하면, 쓰레드는 그 메모리 위치의 엔트리를 액세스하기 위해 그 엔트리를 리스트에서 검색해야 했으며, 이것이 프로그램적으로 느려지게 하는 문제 점이었다. 따라서, 소프트웨어에서 트랜잭션 메모리를 구현하는 간접 방법은 성능이 좋지 않았다.
본 명세서에 기술되고 주장된 구현은, 한 쓰레드가 한 트랜잭션 내에서 하나 이상의 공유 메모리 위치를 직접 그리고 안전하게 액세스할 수 있으면서 하나 이상의 다른 동시 쓰레드에 의한 이들 동일한 위치로의 메모리 액세스를 관리하는 제어 구조를 유지하는 트랜잭션 메모리 프로그래밍 인터페이스를 제공함으로써 전술된 문제를 해결한다. 쓰레드에 의해 액세스되는 각각의 메모리 위치는 인리스트먼트 레코드(enlistment record)와 관련되며, 각각의 쓰레드는 그 메모리 액세스의 트랜잭션 로그를 유지한다. 한 트랜잭션 내에서, 일부 중간 버퍼와는 대조적으로, 판독 동작이 메모리 위치에서 직접 수행되고, 기입 동작이 메모리 위치에서 직접 시도된다. 쓰레드가 메모리 위치의 인리스트먼트 레코드와 그 트랜잭션 로그 간에 불일치를 탐지하면, 쓰레드는 그 트랜잭션 내의 메모리 액세스가 신뢰될 수 없으며 그 트랜잭션이 재시도되어야 하는 것으로 판정한다. 또한, 쓰레드가 한 트랜잭션 내에서 메모리 위치에 기입하는 것을 시도하고 또 다른 쓰레드가 완료되지 않은 다른 트랜잭션 내에서 그 메모리 위치를 이미 업데이트한 것으로 판정하면, 제1 쓰레드는 대기하고 이후에 트랜잭션을 재시도하거나 또는 다른 쓰레드와의 경합(content)을 해결하고자 시도할 수 있다. 또한, 쓰레드는, 본래의 값과 위치의 어드레스를 포함하는, 트랜잭션 동안의 기입 메모리 액세스의 실행취소 로그(undo log)를 유지할 수 있으며, 이를 이용하여 쓰레드는 트랜잭션이 중단되는(abort) 경우 이들 동작의 실행을 취소할 수 있다.
일부 실시예에서, 제조 품목이 컴퓨터 프로그램 제품으로서 제공된다. 컴퓨터 프로그램 제품의 한 구현은 컴퓨터 시스템에 의해 판독가능하고 컴퓨터 프로그램을 인코딩하는 컴퓨터 프로그램 저장 매체를 제공한다. 컴퓨터 프로그램 제품의 또 다른 구현은 컴퓨터 시스템에 의해 반송파(carrier wave)에 구현되고 컴퓨터 프로그램을 인코딩하는 컴퓨터 데이터 신호에 제공될 수 있다.
다른 구현들 또한 본 명세서에서 기술되고 인용된다.
도 1은 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스를 통해 공유 메모리 위치를 액세스하는 두 개의 동시 쓰레드를 도시하는 도면.
도 2는 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스를 통해 메모리 액세스를 실행하는 동작을 도시하는 도면.
도 3은 한 트랜잭션 내에서 메모리 위치에서의 판독 동작을 인리스트하는(enlist) 예시적인 동작을 도시하는 도면.
도 4는 한 트랜잭션 내에서 메모리 위치에서의 기입 동작을 인리스트하는 예시적인 동작을 도시하는 도면.
도 5는 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스에서 트랜잭션을 커밋하는(commit) 예시적인 동작을 도시하는 도면.
도 6은 기술된 기술을 구현하는 데 유용할 수 있는 시스템을 도시하는 도면.
도 1은 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스(108 및 110)(예를 들면, 애플리케이션 프로그래밍 인터페이스 또는 API)를 통해 공유 메모리 위치(104 및 106)를 액세스하는 두 개의 동시 쓰레드(concurrent thread)(100 및 102)를 도시한다. 쓰레드(100)는, 예를 들면, (레포트(112)를 생성하는) 은행 계좌 이체의 계산을 나타내며, 쓰레드(102)는, 예를 들면, (레포트(114)를 생성하는) 두 개의 은행 계좌의 합의 계산을 나타낸다. 공유 메모리 위치(A1:104 및 A2:106)는 공유 메모리 영역(116)에 있고, 초기 값이 각각 $10와 $200인 두 개의 개별 계좌의 예금을 나타내는 값을 저장한다.
각각의 공유 메모리 위치는 시스템 내의 메모리 어드레스 어느 영역(예를 들면, 어레이, 리스트, 테이블, 소프트웨어 객체 등)과 관련될 수 있다. 직접 업데이트 소프트웨어 트랜잭션 메모리 액세스를 위한 제어 구조(control structure)로서 기능하는 e-rec(118) 또는 e-rec(120)과 같은 인리스트먼트 레코드(enlistment record)는 각각의 메모리 위치와 관련된다. 인리스트먼트 레코드는, 각각의 메모리 위치에 대해 한 인리스트먼트 레코드, 각각의 소프트웨어 객체에 대해 한 인리스트먼트 레코드, 또는 프로세스의 가상 어드레스 공간의 페이지와 같은 메모리 위치 블록에 대해 한 인리스트먼트 레코드와 같이, 각종 방식으로 메모리 위치와 관련될 수 있다. 한 실시예에서, 인리스트먼트 레코드는 버전 필드와 스크래치 필드(scratch field) 두 개의 필드를 포함하며, 버전 필드는 또한 트랜잭션 식별자를 보유할 수 있다. 또 다른 구현에서, 인리스트먼트 레코드는 하나의 버전 필드를 포함하며, 버전 필드는 또한 트랜잭션 식별자 또는 트랜잭션 로그 포인터를 보유할 수 있다. 다른 인리스트먼트 레코드 구조 또한 고려된다.
도시된 예에서, 쓰레드(100)는, 메모리 어드레스(104)에 대응하는 제1 계좌에서 메모리 위치(106)에 대응하는 제2 계좌로 $100을 이체하기 위한 단일 트랜잭션에서의 적어도 두 개의 최소단위 동작(atomic operation)을 포함한다. 제1 동작은 메모리 위치(104)에 대응하는 값에 100을 더하는 것이고, 제2 동작은 이체를 실시하기 위해 메모리 위치(106)에 대응하는 값으로부터 100을 빼는 것이다. 동시 쓰레드(102)는 두 개의 계좌의 금액을 합하는 한 트랜잭션에서의 최소단위 동작을 포함한다.
각각의 트랜잭션에 대해 안전하게 메모리를 액세스하기 위해, 쓰레드(100 및 102)는 API(108 및 110)를 이용하여 공유 메모리 위치(104 및 106)를 액세스한다. 쓰레드는 트랜잭션 내의 판독 동작을 API를 통해 메모리 위치에서 직접 수행하고, 트랜잭션 종료 시, 쓰레드가 트랜잭션의 결과를 신뢰할 수 있는지 여부를 나타내는 신호를 수신한다. 마찬가지로, 쓰레드는, 또 다른 쓰레드가 그 공유 메모리 위치에 대해 기입 동작을 이미 마크하지(mark) 않았다면, 트랜잭션 내의 기입 동작을 API를 통해 메모리 위치에서 직접 수행한다.
각각의 쓰레드는 그 직접 업데이트 트랜잭션 메모리 액세스를 관리하기 위해 트랜잭션 로그(예를 들면, 트랜잭션 로그(122) 또는 트랜잭션 로그(124))를 관리한다. 한 구현에서, 트랜잭션 로그는 판독용 그리고 업데이트용으로 두 개의 컴포넌트 리스트를 갖는다. 대안의 구현에서, 트랜잭션 로그는 단 하나의 리스트를 지니며, 리스트 엔트리는 "판독" 또는 "업데이트"로 파라미터화된다(parameterized). 각각의 트랜잭션 로그는 또한 ACTIVE, ABORTED 또는 COMMITTED를 나타내는 값을 보유하는 상태 필드를 포함한다. 개개의 리스트 엔트리는 관련 메모리 어드레스의 인리스트먼트 레코드로의 포인터(예를 들면, 참조)를 포함하고, 또한 버전 값도 포함할 수 있다. 대안의 구현에서, 리스트 엔트리는 또한 스크래치 필드를 포함할 수 있다. 실행취소 로그(undo log)라 불리는 또 다른 데이터 구조는, 그 트랜잭션 내에서 업데이트되었던 메모리 어드레스와 그것의 이전 값들(즉, 메모리 위치가 업데이트되기 이전의 값)의 리스트를 보유한다. 또 다른 구현에서, 트랜잭션 로그와 실행취소 로그의 기능이 결합된 단일 로그가 사용되며, 그 리스트 엔트리는 "판독", "업데이트"(또는 "기입") 또는 "실행취소" 엔트리로 파라미터화된다.
각각의 트랜잭션은 또한 소정의 트랜잭션의 메모리 기입 액세스를 실행취소시키는 데 사용될 수 있는 실행취소 로그(126 및 128)를 유지한다. 한 실시예에서, 실행취소 로그는 본래의 값과 그 트랜잭션의 각각의 기입 액세스와 관련된 메모리 어드레스를 기록한다. 이러한 방식으로, 트랜잭션이 중단되면(aborted), 실행취소 로그의 엔트리가 역순으로 실행되어, 트랜잭션에 의해 기입되었던 공유 메모리 위치를 그 트랜잭션 이전의 상태로 복구할 수 있다.
API(108 및 110)에 특정된 프로토콜을 따름으로써, 쓰레드(100 및 102)는, 또 다른 쓰레드에 의한 탐지되지 않는 간섭의 위험 없이, 각각의 트랜잭션 내에서 공유 메모리 위치로의 메모리 액세스 시퀀스들을 안전하게 수행할 수 있다.
도 2는 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스를 통해 한 트랜잭션 내에서 메모리 액세스들의 시퀀스를 실행하는 동작(200)을 도시 한다. 동작(200)은 하나 이상의 공유 메모리 위치를 액세스하는 개개의 쓰레드에 의해 API를 통해 만들어진 호출을 나타낸다. 예를 들면, 공유 메모리 위치는 개개의 은행 계좌에 대한 소프트웨어 객체에 대응할 수 있다. 대응하는 소프트웨어 객체의 생성 시 각각의 공유 메모리 위치는 메모리 어드레스와 인리스트먼트 레코드와 관련된다.
개시 동작(202)은 쓰레드를 위해 새 트랜잭션을 개시한다. 한 구현에서, 개시 동작(202)은 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스 내에서 "TransactionStart()" 동작으로 나타내어지며, 이것은 새 트랜잭션을 위한 트랜잭션 로그를 할당하고 초기화한다. 트랜잭션 로그는 쓰레드에 의해 액세스가능한 로컬(즉, 공유가 아닌) 메모리에 유지된다. 개시 시, 쓰레드의 트랜잭션 로그는 비어 있고 그 상태는 ACTIVE로 설정되어 있다. 한 구현에서, 개시 동작(202)은 또한 트랜잭션과 관련된 새로운 실행취소 로그를 할당하고 초기화한다.
인리스트먼트 동작(204)은 판독 동작 또는 기입 동작과 같은 메모리 액세스 동작을 위해 특정 메모리 위치를 인리스트한다. 한 구현에서, 인리스트먼트 동작(204)은 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스 내에서 "EnlistAddrForRead(Addr γ)" 동작으로 나타내어지며, 여기서 어드레스 γ은 특정 메모리 위치의 어드레스를 나타낸다. 또 다른 구현에서, 인리스트먼트 동작(204)은 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스 내에서 "EnlistAddrForWrite(Addr γ)" 동작으로 나타내어지며, 여기서 어드레스 γ은 특정 메모리 위치의 어드레스를 나타낸다. 인리스트먼트 동작의 더 상세한 기술은 이하에 제공된다.
액세스 동작(206)은 판독 동작 또는 기입 동작에 의해서와 같이 특정 메모리 위치로의 메모리 액세스를 수행한다. 한 구현에서, 액세스 동작(206)은 특정 메모리 위치에 대한 직접 판독으로 나타내어진다. 또 다른 구현에서, 액세스 동작(206)은 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스 내에서 "TransactionRead(Addr γ)" 동작으로 나타내어지며, 여기서 어드레스 γ은 특정 메모리 위치의 어드레스를 나타내며, 이 동작은 특정 메모리 위치로부터 직접 값을 판독한다. 또 다른 구현에서, 액세스 동작(206)은 특정 메모리 위치에 대한 직접 기입으로 나타내어진다. 이 구현에서, 실행취소 로그(상술됨)를 업데이트하기 위해 별도의 UpdateUndo(Addr γ)가 채용될 수 있다. 또 다른 구현에서, 액세스 동작(206)은 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스 내에서 "TransactionWrite(Addr γ, Value υ)" 동작으로 나타내어지며, 여기서 어드레스 γ은 특정 메모리 위치의 어드레스를 나타내며, 값 υ는 메모리 위치에 기입될 값을 나타내며, 이 동작은 실행취소 로그에 하나의 엔트리를 추가한다.
판정 동작(208)은 또 다른 메모리 액세스 동작이 트랜잭션 시퀀스에 남아 있는지 여부를 판정한다. 만약 그렇다면, 그리고 트랜잭션이 다음 메모리 액세스 동작의 특정 메모리 위치를 이전에 액세스하지 않았다면, 처리는 인리스트먼트 동작(204)으로 진행된다. 또는, 현재의 트랜잭션 내에 특정 메모리 위치가 이미 인리스트되어 있기 때문에 인리스트먼트 동작(204)을 뛰어넘을 수 있다.
여하튼, 트랜잭션 시퀀스에 메모리 액세스 동작이 더 이상 남아 있지 않을 때까지 트랜잭션 시퀀스의 모든 메모리 액세스에 대해 처리 단계를 밟으며, 이때 커미트먼트(commitment) 동작(210)이 트랜잭션을 커밋하고자 시도한다. 한 구현에서, 커미트먼트 동작(210)은 예시적인 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스 내에서 "TransactionCommit()" 동작으로 나타내어진다. 일반적으로, 커미트먼트 동작(210)은 다른 쓰레드에 의한 방해하는 업데이트 없이 트랜잭션 내의 모든 메모리 판독 동작들이 그 트랜잭션 내에서 완료되었는지 여부를 판정한다. 커미트먼트 동작(210)이 실패한 경우, 쓰레드는 트랜잭션이 실패하였다고 판정하고 적절하게 전체 트랜잭션을 재시도할 것이다. 커미트먼트 동작(210)이 성공하면, 쓰레드는 트랜잭션이 성공적으로 완료되었으며 쓰레드는 트랜잭션 결과(예를 들면 판독 값 및 업데이트 동작)를 신뢰할 수 있는 것으로 판정한다. 완료 시, 커미트먼트 동작(210)은 관련 메모리 위치가 다른 쓰레드에 대해 액세스가능하게 되도록 트랜잭션 인리스트먼트를 해제시킨다(stand down). 한 구현에서, 이 해제는 트랜잭션 로그의 기입 트랜잭션 엔트리 전체를 반복함으로써, 그리고 관련 인리스트먼트 레코드 각각에 대해 업데이트된 메모리 위치의 인리스트먼트 레코드의 버전 필드의 새 버전 번호(예를 들면, 버전 번호를 증분시킴)를 저장함으로써 달성될 수 있다.
버전 번호를 오버런하는(overrun) 것이 가능하다(예를 들면, 버전 필드의 사용가능한 모든 숫자가 초과하여 사용될 수 있음). 예를 들면, 버전이 매 업데이트마다 1씩 증분되어(예를 들면, 0, 1, 2, 3 등) 결국 최대 버전 번호 "N"을 초과하면, "롤오버(rollover)"하거나 또는 버전 번호의 오버플로우를 처리하는 메커니즘 이 적절할 수 있다(be in order). 한 구현에서, 초과로 수행된 트랜잭션의 개수가 N을 초과하는 경우, 그 시점에서 활성인(active) 트랜잭션이 중단될 수 있다. 또는, 초과로 수행된 트랜잭션의 개수가 N을 초과하는 경우, 그 시점에서 활성인 트랜잭션이 부분적으로 커밋되고, 그리하여 유효하지 않은 트랜잭션은 중단되고 유효한 트랜잭션만이 활성으로 남아 있게 된다. 또 다른 구현에서, 크기 N은 논리적인(reasonable) 프로세스가 절대 N을 초과할 수 없을 만큼 크게 정해질 수 있다.
직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스 내에서 "TransactionAbort()" 동작으로 제공될 수 있는 중단(Abort) 동작은, 현재의 쓰레드와 관련된 현재의 트랜잭션을 포기하고, 중단 이벤트 이전에 트랜잭션 내에서 수행된 모든 업데이트를 되돌린다. 한 구현에서, 현재의 트랜잭션 로그의 상태 필드는 ABORTED로 설정되고, 실행취소 로그의 엔트리들이 역순으로 실행되어 업데이트된 메모리 위치에 트랜잭션 이전 값들을 복구한다. 일단 중단된 트랜잭션의 업데이트가 완료되지 않으면, 중단 동작은 인리스트먼트를 "해제"시킨다.
도 3은 한 트랜잭션 내에서 메모리 위치에서 판독 동작을 인리스트하는 예시적인 동작(300)을 도시한다. 소정의 메모리 어드레스 γ에 관한 인리스트먼트-판독 동작(도 2에 관한 내용 참조)에 대한 쓰레드의 호출에 응하여, 찾아내기 동작(locating operation)(302)은 메모리 어드레스 γ과 관련된 인리스트먼트 레코드(즉, "e-rec")를 찾아낸다. 한 구현에서, 인리스트먼트 레코드는 메모리 어드레스 γ과 관련된 데이터 구조(예를 들면, 메모리 어드레스 γ의 소프트웨어 객체의 일부로서 또는 그 소프트웨어 객체에 의한 참조로서)이다.
버저닝 동작(versioning operation)(304)은 찾아낸 인리스트먼트 레코드로부터 메모리 어드레스와 관련된 버전 값을 판독한다. 판정 동작(306)은 판독된 버전값이 실제로 버전을 나타내는지, 현재 트랜잭션을 나타내는 식별자를 나타내는지 또는 또 다른 트랜잭션을 나타내는 식별자를 나타내는지의 여부를 판정한다. 판독된 버전 값이 버전을 나타내면, 로깅 동작(logging operation)(308)은 버전과 찾아낸 인리스트먼트 레코드에 대한 포인터(예를 들면, 참조)를 트랜잭션 로그의 판독 트랜잭션 리스트(예를 들면, 연결 리스트)의 엔트리에 추가한다. 이후 쓰레드는 진행되어 그 메모리 어드레스의 값을 직접 판독할 수 있다.
판독된 버전 값이 현재 트랜잭션에 의해 메모리 어드레스의 인리스트먼트 레코드에 기입된 식별자를 나타내는 경우, 트랜잭션 로그는 현재 트랜잭션에서 기입 동작에 의해 이미 업데이트되었으며 쓰레드는 그냥 계속하여(계속 동작(310)에 표시된 바와 같이) 메모리 어드레스의 값을 직접 판독할 수 있다. 계속함으로써, 쓰레드는 인리스트먼트 레코드에 대한 트랜잭션 로그 엔트리가 그 트랜잭션의 트랜잭션 로그에 이미 생성되었다는 것을 알린다(acknowledge). 트랜잭션의 식별자는 임의의 것, 고유 트랜잭션 식별자, 트랜잭션 로그의 스크래치 필드로의 포인터(예를 들면, 참조) 또는 일부 다른 고유 식별자일 수 있다.
판독된 버전 값이 또 다른 트랜잭션에 의해 메모리 어드레스의 인리스트먼트 레코드에 기입된 식별자를 나타내는 경우, 트랜잭션 로그는 그 또 다른 트랜잭션의 기입 동작에 의해 이미 업데이트되었으며, 쓰레드는 해결 동작(resolution operation)(312)을 호출하고 인리스트먼트를 재시도한다. 한 실시예에서, 예시적 인 해결 동작(312)은 실제로 인리스트먼트 동작을 스핀-대기(spin-wait)시키는 무연산 명령어(no-op instructions)이다. 또는, 스피닝을 피하기 위해 상호 배제 락(mutual exclusion lock)이 인리스트먼트 레코드와 관련될 수 있다. 또 다른 대안의 구현에서는, 각각의 트랜잭션 로그가 해제가능 락(revocable lock)과 관련될 수 있다. 이 구현에서, 이후의 액세싱 트랜잭션(T2)의 해결 동작은 이전의 트랜잭션(T1)으로부터 해제가능 락을 얻을 수 있다. 이 해제가능 락으로, T2는 T1을 대신하여 TransactionAbort()를 수행할 수 있고, 이후 T1의 해제가능 락을 해제한다. 그러므로, T2는 자신의 판독 동작을 위해 메모리 어드레스 γ을 다시 인리스트할(re-enlist) 수 있고, T1은, T1이 중단되어서 적절한 시점에 처리가 다시 시작되어야만 한다는 것을 알리는 예외처리(exception)를 호출하는 복구 함수(recovery function)로 대체될 수 있다.
대안의 구현에서, EnlistAddrForRead() 동작은 판독한 버전 값의 판정 동작(306)을 생략하고, 그냥 인리스트먼트 레코드의 버전 필드의 내용이 버전이라 가정한다. 이 구현에서, TransactionCommit() 동작은, 공유 메모리 위치의 모든 충돌(이 충돌이 버전 충돌에 의한 것이든지 또는 또 다른 쓰레드의 기입 액세스에 의한 공유 메모리 위치의 예약(reservation)에 의한 것이든지 간에)을 간파한다.
도 4는 한 트랜잭션 내에서 메모리 위치에서의 기입 동작을 인리스트하는 예시적인 동작(400)을 도시한다. 소정의 메모리 어드레스 γ에 관한 인리스트먼트-기입 동작(도 2에 관한 내용 참조)에 대한 쓰레드의 호출에 응하여, 찾아내기 동작(locating operation)(402)은 메모리 어드레스 γ과 관련된 인리스트먼트 레코 드(즉, "e-rec")를 찾아낸다. 한 구현에서, 인리스트먼트 레코드는 메모리 어드레스 γ과 관련된 데이터 구조(예를 들면, 메모리 어드레스 γ의 소프트웨어 객체의 일부로서 또는 그 소프트웨어 객체에 의해 참조로서)이다.
버저닝 동작(404)은 찾아낸 인리스트먼트 레코드로부터 메모리 어드레스와 관련된 버전 값을 판독한다. 판정 동작(406)은 판독된 버전 값이 실제로 버전을 나타내는지, 현재 트랜잭션을 나타내는 식별자를 나타내는지 또는 또 다른 트랜잭션을 나타내는 식별자를 나타내는지의 여부를 판정한다. 판독된 버전 값이 버전을 나타내면, 로깅 동작(408)은 버전과 찾아낸 인리스트먼트 레코드에 대한 포인터(예를 들면, 참조)를 트랜잭션 로그의 기입 트랜잭션 리스트(예를 들면, 연결 리스트)의 엔트리에 추가한다. 마킹 동작(marking operation)(410)은 최소단위 비교 후 교환 동작(compare-and-swap operation)을 이용하여 현재 트랜잭션을 명시하는 마크(mark)를 메모리 어드레스 γ의 인리스트먼트 레코드의 버전 필드에 설정하고, 그리하여 현재 트랜잭션을 위해 메모리 어드레스 γ(및 관련된 메모리 위치, 어느 범위의 메모리 위치, 객체들 등)을 일시적으로 예약한다. (판정 단계(412)에서 판정된 바에 의해) 비교 후 교환 동작이 성공하는 경우, 트랜잭션 로그 내의 기입 트랜잭션 리스트에 저장된 버전 값은 인리스트먼트 레코드의 스크래치 필드에 기입되고, 이후 쓰레드는 진행되어 메모리 어드레스에서 값을 직접 업데이트할 수 있다. 또는, 비교 후 교환 동작이 성공하지 못하는 경우, 버전 및 찾아낸 인리스트먼트 레코드에 대한 포인터(예를 들면, 참조)는 트랜잭션 로그 내의 기입 트랜잭션 리스트로부터 삭제되고 인리스트먼트는 찾아내기 동작(402)에서 재시도된다.
한 구현에서, 스크래치 필드는 인리스트먼트 레코드 대신 트랜잭션 엔트리에 포함될 수 있다. 이 구현에서, 인리스트먼트 레코드의 버전 필드의 트랜잭션 식별자는 트랜잭션 엔트리로의 포인터(예를 들면, 참조)이다. 이러한 방식으로, 신속한 비교 후 교환 동작이 채용되며, 버전 스크래치는 트랜잭션의 업데이트된 메모리 위치만을 위해, 로컬의 비공유 메모리에 저장된다.
판독된 버전 값이 현재 트랜잭션에 의해 메모리 어드레스의 인리스트먼트 레코드에 기입된 식별자를 나타내는 경우, 트랜잭션 로그는 현재 트랜잭션의 기입 동작에 의해 이미 업데이트되었으며, 쓰레드는 그냥 계속하여(계속 동작(416)에 표시된 바와 같이) 메모리 어드레스에서 값을 직접 업데이트할 수 있다. 판독된 버전 값이 또 다른 트랜잭션에 의해 메모리 어드레스의 인리스트먼트 레코드에 기입된 식별자를 나타내는 경우, 트랜잭션 로그는 그 또 다른 트랜잭션의 기입 동작에 의해 이미 업데이트되었다. 이와 같이, 쓰레드는 해결 동작(418)을 호출하고 인리스트먼트를 재시도한다. 예시적인 해결 동작은 해결 동작(418)과 관련하여 이미 논의되었다.
도 5는 직접 업데이트 소프트웨어 트랜잭션 메모리 인터페이스에서 트랜잭션을 커밋하는 예시적인 동작(500)을 도시한다. 로그 엔트리 동작(502)은 트랜잭션 로그의 판독 트랜잭션 리스트의 엔트리로부터 포인터(예를 들면, 참조)를 판독한다. 이 포인터를 이용하여, 인리스트먼트 레코드 동작(504)은 메모리 어드레스와 관련된 인리스트먼트 레코드의 버전 필드를 판독한다. 판정 동작(506)은 버전 필드로부터 판독된 값이 실제로 버전을 나타내는지, 현재 트랜잭션을 나타내는 마크 인지 또는 또 다른 트랜잭션을 나타내는 마크인지 여부를 판정한다.
버전 필드로부터 판독된 필드가 실제로 버전이면, 판독 동작(508)은, 로그 엔트리 동작(502)에서 포인터(예를 들면, 참조)가 판독되어졌던 트랜잭션 로그 엔트리로부터 버전을 판독한다. (판정 동작(510)에서 판정되는 바와 같이) 두 개의 버전이 일치하면, 현재의 로그와 관련된 메모리 어드레스가 트랜잭션 동안 또 다른 쓰레드에 의해 업데이트되지 않았기 때문에 쓰레드는 여전히 성공적으로 완료할 수 있다. 이것이 판독 트랜잭션 리스트의 모든 로그 엔트리에 대해 참(true)이라면, 그 메모리 어드레스에 대한 현재 트랜잭션 내의 모든 판독은 유효하며, 트랜잭션도 유효할 수 있다.
판정 동작(512)은 판독 트랜잭션 리스트에 다음 트랜잭션 로그 엔트리가 존재하는지 여부를 판정한다. 만약 그렇다면, 처리는 로그 엔트리 동작(502)으로 진행된다. 그렇지 않을 경우, 성공 동작(514)은 커미트먼트 동작으로부터 성공을 시그널링하고, 현재 트랜잭션 로그의 상태를 COMMITED로 설정한다. 버저닝 동작(520)은 기입 트랜잭션 리스트 엔트리와 관련된 모든 인리스트먼트 레코드의 버전 값을 업데이트하여 그 메모리 위치와 관련하여 트랜잭션이 성공적으로 완료되었음을 나타낸다. 종료 동작(522)은 트랜잭션 로그로부터 모든 트랜잭션 로그를 제거하고 트랜잭션 로그 자체를 삭제한다.
판정 블록(510)이 버전이 일치하지 않는 것으로 판정하는 경우, 이 불일치는, 현재 트랜잭션 동안 다른 쓰레드에 의해 메모리 어드레스가 업데이트되었기 때문에 이 메모리 위치에 대한 판독이 유효하지 않다는 것을 나타낸다. 이 경우, 처 리는 커미트먼트 동작의 실패를 알리는 실패 동작(518)으로 진행된다. 더욱이, 중단 동작은 상술된 바와 같이 트랜잭션을 중단시킨다.
판정 동작(506)이 인리스트먼트 레코드의 버전 필드로부터 판독된 값이 실제로 현재 트랜잭션을 나타내는 식별자를 나타내는 경우, 판독 동작(516)은 스크래치 필드로부터 버전 값을 판독한다. 한 구현에서, 스크래치 필드는 메모리 어드레스의 인리스트먼트 레코드의 일부이다. 대안의 구현에서, 스크래치 필드는 트랜잭션 로그의 엔트리에 저장된다. 이후 처리는 판독 동작(508) 및 판정 동작(510)으로 진행되어 스크래치 필드로부터의 버전과 트랜잭션 로그의 버전을 비교한다.
판정 블록(506)이, 인리스트먼트 레코드의 버전 필드로부터 판독된 값이 실제로 또 다른 트랜잭션을 나타내는 식별자를 나타내는 경우, 이 메모리 어드레스에 대한 업데이트는 또 다른 동시 트랜잭션의 업데이트에 의해 방해된다. 그러므로, 실패 동작(518)은 트랜잭션 실패를 알린다. 더욱이, 중단 동작은 상술된 바와 같이 트랜잭션을 중단시킨다.
본 발명을 구현하기 위한 도 6의 예시적인 하드웨어 및 운영 체제는 처리 장치(21), 시스템 메모리(22), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(21)에 동작가능하게 연결시키는 시스템 버스(23)를 포함하는 컴퓨터(20) 형태의 범용 컴퓨팅 장치를 포함한다. 여기에는 단 하나의 처리 장치 또는 둘 이상의 처리 장치(21)가 있을 수 있어, 컴퓨터(20)의 프로세서는 단일 CPU 또는 일반적으로 병렬 처리 환경이라 지칭되는 복수의 처리 장치들을 포함할 수 있다. 컴퓨터(20)는 보통의 컴퓨터, 분산 컴퓨터 또는 임의의 다른 유형의 컴퓨터일 수 있지 만, 본 발명은 제한되지 않는다.
시스템 버스(23)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스, 스위치 패브릭(switched fabric), 포인트-대-포인트 접속(point-to-point connection) 및 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 시스템 메모리는 간단히 메모리라 지칭되며, 판독 전용 메모리(ROM)(24) 및 랜덤 액세스 메모리(RAM)(25)를 포함한다. 시동 중과 같은 때에, 컴퓨터(20) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(26)은 통상적으로 ROM(24)에 저장되어 있다. 컴퓨터(20)는 또한 하드 디스크(도시 생략)에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(27), 이동식 자기 디스크(29)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(28), CD-ROM 또는 기타 광 매체 등의 이동식 광 디스크(31)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(30)를 포함한다.
하드 디스크 드라이브(27), 자기 디스크 드라이브(28) 및 광 디스크 드라이브(30)는 각각 하드 디스크 드라이브 인터페이스(32), 자기 디스크 드라이브 인터페이스(33) 및 광 디스크 드라이브 인터페이스(34)에 의해 시스템 버스(23)에 접속되어 있다. 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(20)를 위해, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터의 비휘발성 저장을 제공한다. 당업자들은, 자기 카세트, 플래시 메모리 카드, DVD(digital versatile disk), RAM, ROM 등과 같은 컴퓨터에 의해 액세스되고 데이 터를 저장할 수 있는 임의의 유형의 컴퓨터 판독가능 매체가 예시적인 운영 환경에서 사용될 수 있다는 것을 이해할 것이다.
운영 체제(35), 하나 이상의 애플리케이션 프로그램(36), 기타 프로그램 모듈(37), 및 프로그램 데이터(38)를 포함하는 많은 프로그램 모듈들이 하드 디스크, 자기 디스크(29), 광 디스크(31), ROM(24) 또는 RAM(25)에 저장될 수 있다. 사용자는 키보드(40) 및 포인팅 장치(42)와 같은 입력 장치를 통해 명령 및 정보를 퍼스널 컴퓨터(20)에 입력할 수 있다. 다른 입력 장치(도시 생략)로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 결합된 직렬 포트 인터페이스(60)를 통해 처리 장치(21)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스에 의해 접속될 수도 있다. 모니터(47) 또는 다른 유형의 디스플레이 장치도 비디오 어댑터(48)와 같은 인터페이스를 통해 시스템 버스(23)에 접속될 수 있다. 모니터 외에, 컴퓨터는 통상적으로 스피커 및 프린터 등의 기타 주변 출력 장치(도시 생략)를 포함할 수 있다.
컴퓨터(20)는 원격 컴퓨터(49)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 이들 논리적 접속은 컴퓨터(20)에 연결된 통신 장치 또는 컴퓨터(20)의 일부에 의해 이루어진다. 본 발명은 특정 유형의 통신 장치에 제한되지 않는다. 원격 컴퓨터(49)는 또 하나의 컴퓨터, 서버, 라우터, 네트워크 PC, 클라이언트, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 통상적으로 컴퓨터(20)와 관련하여 상술된 구성요소들의 대 부분 또는 그 전부를 포함하지만, 메모리 저장 장치(50)만이 도 6에 도시되어 있다. 도 6에 도시된 논리적 접속으로는 LAN(51) 및 WAN(52)이 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷(모든 유형의 네트워크)에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(20)는 네트워크 인터페이스 또는 어댑터(53)를 통해 LAN(51)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(20)는 통상적으로 모뎀(54), 네트워크 어댑터, 통신 장치의 한 유형 또는 WAN(52)을 통해 통신을 설정할 수 있는 임의의 다른 유형의 통신 장치를 포함한다. 내장형 또는 외장형일 수 있는 모뎀(54)은 직렬 포트 인터페이스(46)를 통해 시스템 버스(23)에 접속된다. 네트워크화된 환경에서, 퍼스널 컴퓨터(20) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 도시된 네트워크 접속은 예시적인 것이며 이 컴퓨터들 사이에 통신 링크를 설정하는 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
예시적인 구현에서, TransactionStart() 모듈, EnlistAddrForRead() 모듈, EnlistAddrForWrite() 모듈, TransactionRead() 모듈, TransactionWrite() 모듈, TransactionAbort() 모듈, TransactionCommit() 모듈 및 기타 모듈들이 운영 체제(35), 애플리케이션 프로그램(36) 또는 기타 프로그램 모듈(37)의 일부로서 포함될 수 있다. 트랜잭션 로그, 인리스트먼트 레코드 및 기타 데이터는 프로그램 데이터(38)로서 저장될 수 있다.
본 명세서에 기술된 기술은 하나 이상의 시스템에서 논리 동작으로서 및/또 는 모듈로서 구현된다. 논리 동작은 (1) 하나 이상의 컴퓨터 시스템에서 실행 중인 프로세서 구현 단계들의 시퀀스로서 및 (2) 하나 이상의 컴퓨터 시스템들 내의 상호 접속된 기계 또는 회로(circuit module)로서 구현될 수 있다. 마찬가지로, 각종 컴포넌트 모듈의 기술은 모듈에 의해 실행되거나 또는 이에 의해 이루어지는 동작으로 제공된다. 그 결과로 생기는 구현은 선택의 문제이며, 기술된 기술을 구현하는 기초가 되는 시스템의 성능 요건에 좌우된다. 따라서, 본 명세서에 기술된 기술의 실시예를 구성하는 논리 동작은 다양하게 동작, 단계, 객체 또는 모듈이라 지칭된다. 또한, 논리적 동작들은 명시적으로 주장되지 않는다면 임의의 순서로 수행될 수 있으며, 그렇지 않을 경우 청구항은 특정 순서가 내재될 필요가 있다는 것을 이해할 것이다.
상술된 명세서, 예 및 데이터는 본 발명의 예시적인 실시예의 사용 및 구조의 완벽한 설명을 제공한다. 본 발명의 많은 실시예가 본 발명의 취지 및 범위를 벗어나지 않고 만들어질 수 있기 때문에, 본 발명은 이하에 첨부된 청구항에 존재한다. 특히, 기술된 기술이 퍼스널 컴퓨터에 독립적으로 채용될 수 있다는 것을 이해할 것이다. 그러므로 다른 실시예도 고려된다.
Claims (24)
- 제1 쓰레드의 트랜잭션 내에서 상기 제1 쓰레드와 제2 쓰레드에 의해 액세스가능한 공유 메모리 위치로의 메모리 액세스를 관리하는 방법으로서,상기 공유 메모리 위치와 관련된 인리스트먼트 레코드(enlistment record)를 식별하는 단계 - 상기 인리스트먼트 레코드는 상기 공유 메모리 위치와 관련된 직접 업데이트 소프트웨어 트랜잭션 메모리 액세스에 대한 제어 구조임 - ;상기 인리스트먼트 레코드가 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌이 없음을 나타내는 경우, 상기 트랜잭션에 대해 상기 공유 메모리 위치를 예약하기 위해 상기 인리스트먼트 레코드를 마킹하는(makring) 단계;상기 공유 메모리 위치에 대한 참조 및 그 내용을 실행취소 로그(undo log)에 기록하는 단계; 및상기 트랜잭션의 종료 시, 상기 공유 메모리 위치의 인리스트먼트 레코드에 새 버전 값을 기입하는 단계를 포함하는 메모리 액세스 관리 방법.
- 제1항에 있어서, 상기 마킹하는 단계에 응답하여, 상기 트랜잭션 내에서 상기 공유 메모리 위치로의 기입 메모리 액세스를 수행하는 단계를 더 포함하는 메모리 액세스 관리 방법.
- 제1항에 있어서, 상기 마킹하는 단계는,상기 제1 쓰레드의 트랜잭션을 식별하는 트랜잭션 식별자를 상기 인리스트먼트 레코드에 기입하는 단계를 포함하는 메모리 액세스 관리 방법.
- 제1항에 있어서, 상기 인리스트먼트 레코드가 상기 제2 쓰레드에 의해 마킹되어 있는 경우, 상기 인리스트먼트 레코드는, 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌을 나타내는 메모리 액세스 관리 방법.
- 제1 쓰레드의 트랜잭션 내에서 상기 제1 쓰레드와 제2 쓰레드에 의해 액세스가능한 공유 메모리 위치로의 메모리 액세스를 관리하는 방법으로서,상기 공유 메모리 위치와 관련된 인리스트먼트 레코드(enlistment record)를 식별하는 단계;상기 인리스트먼트 레코드가 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌이 없음을 나타내는 경우, 상기 트랜잭션에 대해 상기 공유 메모리 위치를 예약하기 위해 상기 인리스트먼트 레코드를 마킹하는(makring) 단계;상기 공유 메모리 위치에 대한 참조 및 그 내용을 실행취소 로그(undo log)에 기록하는 단계 - 상기 실행취소 로그는 공유 메모리 위치 참조들 및 관련된 내용들의 순서화된 시퀀스를 포함함 - ; 및관련된 상기 공유 메모리 위치에 상기 내용을 기입하는 단계 - 개개의 기입 액세스들은 상기 시퀀스의 역순으로 수행됨 -를 포함하는 메모리 액세스 관리 방법.
- 제1항에 있어서,상기 인리스트먼트 레코드에 대한 참조를 포함하는 트랜잭션 로그 엔트리를 기록하는 단계를 더 포함하고, 상기 트랜잭션 로그 엔트리는 상기 트랜잭션 내의 복수의 기입 메모리 액세스의 트랜잭션 로그 엔트리를 포함하는 트랜잭션 로그에 기록되는 메모리 액세스 관리 방법.
- 제1항에 있어서,상기 인리스트먼트 레코드가 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌을 나타내는 경우, 상기 제1 쓰레드의 트랜잭션 내에서 상기 공유 메모리 위치로의 기입 메모리 액세스를 허용하도록 상기 충돌을 해결하는 단계를 더 포함하는 메모리 액세스 관리 방법.
- 제1 쓰레드의 트랜잭션 내에서 상기 제1 쓰레드와 제2 쓰레드에 의해 액세스가능한 공유 메모리 위치로의 메모리 액세스를 관리하는 방법으로서,상기 공유 메모리 위치와 관련된 인리스트먼트 레코드(enlistment record)를 식별하는 단계;상기 인리스트먼트 레코드로부터의 버전 값을 판독하는 단계;상기 인리스트먼트 레코드의 버전 값이 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌이 없음을 나타내는 경우, 상기 트랜잭션에 대해 상기 공유 메모리 위치를 예약하기 위해 상기 인리스트먼트 레코드를 마킹하는(makring) 단계; 및상기 공유 메모리 위치의 인리스트먼트 레코드에 새 버전 값을 기입하는 단계를 포함하는 메모리 액세스 관리 방법.
- 제1 쓰레드의 트랜잭션 내에서 상기 제1 쓰레드와 제2 쓰레드에 의해 액세스가능한 공유 메모리 위치로의 메모리 액세스를 관리하는 방법으로서,상기 공유 메모리 위치와 관련된 인리스트먼트 레코드(enlistment record)를 식별하는 단계;상기 인리스트먼트 레코드로부터의 버전 필드의 내용(contents)을 판독하는 단계; 및상기 인리스트먼트 레코드의 버전 필드의 내용이 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌이 없음을 나타내는 경우, 상기 트랜잭션에 대해 상기 공유 메모리 위치를 예약하기 위해 상기 인리스트먼트 레코드를 마킹하는(makring) 단계 - 상기 마킹하는 단계는, 상기 버전 필드의 내용을 스크래치 필드(scratch field)에 기록하는 단계, 및 트랜잭션 식별자를 상기 버전 필드에 기입하는 단계를 포함함 -를 포함하는 메모리 액세스 관리 방법.
- 제1항의 방법을 구현하는 컴퓨터 프로세스를 수행하기 위한 컴퓨터 실행가능 명령어를 포함하는 컴퓨터 판독가능 기록 매체.
- 제1 쓰레드의 트랜잭션 내에서 상기 제1 쓰레드와 제2 쓰레드에 의해 액세스가능한 공유 메모리 위치로의 메모리 액세스를 관리하는 방법으로서,상기 공유 메모리 위치와 관련된 인리스트먼트 레코드를 식별하는 단계;상기 인리스트먼트 레코드의 버전 필드의 내용을 판독하는 단계;상기 트랜잭션과 관련된 트랜잭션 로그 엔트리를 생성하는 단계 - 상기 트랜잭션 로그 엔트리는 상기 공유 메모리 위치와 관련된 상기 인리스트먼트 레코드를 참조함 - ;상기 제1 쓰레드에 의해 상기 트랜잭션 내에서 상기 공유 메모리 위치로의 판독 메모리 액세스를 실행하는 단계; 및상기 실행하는 단계에 응답하여, 상기 트랜잭션 로그 엔트리와 상기 참조된 인리스트먼트 레코드의 버전 필드의 내용이 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌을 나타내지 않는 경우, 상기 판독 메모리 액세스에 대하여 상기 트랜잭션을 커밋(commit)하는 단계를 포함하는 메모리 액세스 관리 방법.
- 제11항에 있어서,상기 내용이 상기 제1 쓰레드의 트랜잭션 식별자를 나타내는 경우, 상기 인리스트먼트 레코드에 대한 트랜잭션 로그 엔트리가 상기 트랜잭션 내에서 이미 생성되었음을 알리는(acknowledge) 단계를 더 포함하는 메모리 액세스 관리 방법.
- 제11항에 있어서,상기 내용이 상기 제2 쓰레드의 트랜잭션 식별자를 나타내는 경우, 상기 트랜잭션을 중단시키는(abort) 단계를 더 포함하는 메모리 액세스 관리 방법.
- 제11항에 있어서,상기 내용이 버전 값을 나타내는 경우, 상기 버전 값을 상기 트랜잭션 로그 엔트리에 기록하는 단계를 더 포함하는 메모리 액세스 관리 방법.
- 제1 쓰레드의 트랜잭션 내에서 상기 제1 쓰레드와 제2 쓰레드에 의해 액세스가능한 공유 메모리 위치로의 메모리 액세스를 관리하는 방법으로서,상기 공유 메모리 위치와 관련된 인리스트먼트 레코드를 식별하는 단계;상기 트랜잭션과 관련된 트랜잭션 로그 엔트리를 생성하는 단계 - 상기 트랜잭션 로그 엔트리는 상기 공유 메모리 위치와 관련된 상기 인리스트먼트 레코드를 참조함 - ;상기 제1 쓰레드에 의해 상기 트랜잭션 내에서 상기 공유 메모리 위치로의 판독 메모리 액세스를 실행하는 단계;상기 실행하는 단계에 응답하여, 상기 트랜잭션 로그 엔트리와 상기 참조된 인리스트먼트 레코드가 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌을 나타내지 않는 경우, 상기 판독 메모리 액세스에 대하여 상기 트랜잭션을 커밋(commit)하는 단계; 및상기 트랜잭션 로그 엔트리에 기록된 버전 값이 커밋 시에 상기 인리스트먼트 레코드에 기록된 버전 값과 일치하지 않는 경우, 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와의 충돌을 식별하는 단계를 포함하는 메모리 액세스 관리 방법.
- 제15항에 있어서, 충돌이 식별되면 상기 트랜잭션을 중단시키는 단계를 더 포함하는 메모리 액세스 관리 방법.
- 제1 쓰레드의 트랜잭션 내에서 상기 제1 쓰레드와 제2 쓰레드에 의해 액세스가능한 공유 메모리 위치로의 메모리 액세스를 관리하는 방법으로서,상기 공유 메모리 위치와 관련된 인리스트먼트 레코드를 식별하는 단계 - 상기 인리스트먼트 레코드는 버전 필드를 포함함 -상기 트랜잭션과 관련된 트랜잭션 로그 엔트리를 생성하는 단계 - 상기 트랜잭션 로그 엔트리는 상기 공유 메모리 위치와 관련된 상기 인리스트먼트 레코드를 참조함 - ;상기 제1 쓰레드에 의해 상기 트랜잭션 내에서 상기 공유 메모리 위치로의 판독 메모리 액세스를 실행하는 단계; 및상기 실행하는 단계에 응답하여, 상기 트랜잭션 로그 엔트리와 상기 참조된 인리스트먼트 레코드가 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와 충돌을 나타내지 않는 경우, 상기 판독 메모리 액세스에 대하여 상기 트랜잭션을 커밋(commit)하는 단계;상기 인리스트먼트 레코드와 관련된 스크래치 필드로부터 상기 인리스트먼트 레코드의 버전 필드에 이전에 저장된 버전 값을 판독하는 단계; 및상기 트랜잭션 로그 엔트리에 기록된 버전 값이 커밋 시에 상기 스크래치 필드에 기록된 버전 값과 일치하지 않는 경우, 상기 제2 쓰레드에 의한 상기 공유 메로리 위치로의 기입 메모리 액세스와의 충돌을 식별하는 단계를 포함하는 메모리 액세스 관리 방법.
- 제11항의 방법을 구현하는 컴퓨터 프로세스를 수행하기 위한 컴퓨터 실행가능 명령어를 포함하는 컴퓨터 판독가능 기록 매체.
- 제1 쓰레드의 한 트랜잭션 내에서 상기 제1 쓰레드와 제2 쓰레드에 의해 액세스가능한 공유 메모리 위치로의 메모리 액세스를 관리하는 방법으로서,상기 트랜잭션 내의 상기 공유 메모리 위치들을 인리스트(enlisting)하는 단계;상기 트랜잭션과 관련된 트랜잭션 로그 엔트리를 포함하는 트랜잭션 로그와 각각의 공유 메모리 위치에 대한 인리스트먼트 레코드를 유지하는 단계;상기 공유 메모리 위치로의 기입 메모리 액세스들의 엔트리들을 포함하는 실행취소 로그를 유지하는 단계 - 각각의 엔트리는 상기 기입 메모리 액세스의 공유 메모리 위치와 관련된 어드레스와 상기 공유 메모리 위치의 이전 내용을 포함함 - ;상기 공유 메모리 위치에 대해 직접 메모리 액세스를 수행하는 단계; 및상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와의 충돌이 탐지되지 않을 경우, 상기 수행하는 단계에 응답하여 상기 메모리 액세스에 대하여 상기 트랜잭션을 커밋하는 단계 - 상기 제2 쓰레드에 의한 상기 공유 메모리 위치로의 기입 메모리 액세스와의 충돌은, 상기 트랜잭션 로그 엔트리에 기록된 버전 값이 상기 인리스트먼트 레코드에 기록된 버전 값과 일치하지 않는 경우에 탐지됨 -를 포함하는 메모리 액세스 관리 방법.
- 제19항의 방법을 구현하는 컴퓨터 프로세스를 수행하기 위한 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 기록 매체.
- 제8항의 방법을 구현하는 컴퓨터 프로세스를 수행하기 위한 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 기록 매체.
- 제9항의 방법을 구현하는 컴퓨터 프로세스를 수행하기 위한 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 기록 매체.
- 제15항의 방법을 구현하는 컴퓨터 프로세스를 수행하기 위한 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 기록 매체.
- 제17항의 방법을 구현하는 컴퓨터 프로세스를 수행하기 위한 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 기록 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/192,784 US7536517B2 (en) | 2005-07-29 | 2005-07-29 | Direct-update software transactional memory |
US11/192,784 | 2005-07-29 | ||
PCT/US2006/029327 WO2007016302A2 (en) | 2005-07-29 | 2006-07-28 | Direct-update software transactional memory |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20080031039A KR20080031039A (ko) | 2008-04-07 |
KR101203297B1 true KR101203297B1 (ko) | 2012-11-20 |
Family
ID=37695711
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020087002433A KR101203297B1 (ko) | 2005-07-29 | 2006-07-28 | 직접 업데이트 소프트웨어 트랜잭션 메모리 |
Country Status (13)
Country | Link |
---|---|
US (1) | US7536517B2 (ko) |
EP (1) | EP1910929B1 (ko) |
JP (1) | JP5010601B2 (ko) |
KR (1) | KR101203297B1 (ko) |
CN (1) | CN101495976B (ko) |
AU (1) | AU2006275736A1 (ko) |
BR (1) | BRPI0613946A2 (ko) |
CA (1) | CA2616422A1 (ko) |
IL (1) | IL188665A0 (ko) |
MX (1) | MX2008001159A (ko) |
NO (1) | NO20080235L (ko) |
RU (1) | RU2008103273A (ko) |
WO (1) | WO2007016302A2 (ko) |
Families Citing this family (87)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7818513B2 (en) * | 2004-08-10 | 2010-10-19 | Oracle America, Inc. | Coordinating accesses to shared objects using transactional memory mechanisms and non-transactional software mechanisms |
US8037476B1 (en) * | 2005-09-15 | 2011-10-11 | Oracle America, Inc. | Address level log-based synchronization of shared data |
US7630991B2 (en) * | 2005-10-27 | 2009-12-08 | Microsoft Corporation | Compiling join patterns using software transactional memories |
US7747565B2 (en) * | 2005-12-07 | 2010-06-29 | Microsoft Corporation | Garbage collector support for transactional memory |
US8799882B2 (en) * | 2005-12-07 | 2014-08-05 | Microsoft Corporation | Compiler support for optimizing decomposed software transactional memory operations |
US8271994B2 (en) * | 2006-02-11 | 2012-09-18 | International Business Machines Corporation | Reduced data transfer during processor context switching |
US8065499B2 (en) * | 2006-02-22 | 2011-11-22 | Oracle America, Inc. | Methods and apparatus to implement parallel transactions |
US8028133B2 (en) * | 2006-02-22 | 2011-09-27 | Oracle America, Inc. | Globally incremented variable or clock based methods and apparatus to implement parallel transactions |
US8316352B2 (en) * | 2006-06-09 | 2012-11-20 | Oracle America, Inc. | Watchpoints on transactional variables |
US8181158B2 (en) * | 2006-06-09 | 2012-05-15 | Oracle America, Inc. | Viewing and modifying transactional variables |
US8601456B2 (en) * | 2006-08-04 | 2013-12-03 | Microsoft Corporation | Software transactional protection of managed pointers |
US7788242B2 (en) * | 2006-08-23 | 2010-08-31 | Oracle America, Inc. | Method and system for implementing a concurrent set of objects |
US8024714B2 (en) * | 2006-11-17 | 2011-09-20 | Microsoft Corporation | Parallelizing sequential frameworks using transactions |
US8010550B2 (en) | 2006-11-17 | 2011-08-30 | Microsoft Corporation | Parallelizing sequential frameworks using transactions |
US7860847B2 (en) | 2006-11-17 | 2010-12-28 | Microsoft Corporation | Exception ordering in contention management to support speculative sequential semantics |
US8132158B2 (en) * | 2006-12-28 | 2012-03-06 | Cheng Wang | Mechanism for software transactional memory commit/abort in unmanaged runtime environment |
US7908255B2 (en) * | 2007-04-11 | 2011-03-15 | Microsoft Corporation | Transactional memory using buffered writes and enforced serialization order |
US8621468B2 (en) * | 2007-04-26 | 2013-12-31 | Microsoft Corporation | Multi core optimizations on a binary using static and run time analysis |
US9009452B2 (en) | 2007-05-14 | 2015-04-14 | International Business Machines Corporation | Computing system with transactional memory using millicode assists |
US8095741B2 (en) * | 2007-05-14 | 2012-01-10 | International Business Machines Corporation | Transactional memory computing system with support for chained transactions |
US8095750B2 (en) * | 2007-05-14 | 2012-01-10 | International Business Machines Corporation | Transactional memory system with fast processing of common conflicts |
US8688920B2 (en) | 2007-05-14 | 2014-04-01 | International Business Machines Corporation | Computing system with guest code support of transactional memory |
US8117403B2 (en) * | 2007-05-14 | 2012-02-14 | International Business Machines Corporation | Transactional memory system which employs thread assists using address history tables |
US8321637B2 (en) * | 2007-05-14 | 2012-11-27 | International Business Machines Corporation | Computing system with optimized support for transactional memory |
US8719514B2 (en) * | 2007-06-27 | 2014-05-06 | Intel Corporation | Software filtering in a transactional memory system |
US7890725B2 (en) * | 2007-07-09 | 2011-02-15 | International Business Machines Corporation | Bufferless transactional memory with runahead execution |
US20090064141A1 (en) * | 2007-08-29 | 2009-03-05 | Microsoft Corporation | Efficient utilization of transactions in computing tasks |
US8245232B2 (en) * | 2007-11-27 | 2012-08-14 | Microsoft Corporation | Software-configurable and stall-time fair memory access scheduling mechanism for shared memory systems |
US7793052B2 (en) * | 2007-12-31 | 2010-09-07 | Oracle America, Inc. | System and method for implementing hybrid single-compare-single-store operations |
US8200914B2 (en) * | 2008-01-03 | 2012-06-12 | International Business Machines Corporation | Apparatus, system, and method for a read-before-write storage controller instruction |
US8359437B2 (en) * | 2008-05-13 | 2013-01-22 | International Business Machines Corporation | Virtual computing memory stacking |
US8341133B2 (en) | 2008-06-27 | 2012-12-25 | Microsoft Corporation | Compressed transactional locks in object headers |
US8769514B2 (en) * | 2008-06-27 | 2014-07-01 | Microsoft Corporation | Detecting race conditions with a software transactional memory system |
US8839213B2 (en) | 2008-06-27 | 2014-09-16 | Microsoft Corporation | Optimizing primitives in software transactional memory |
US9047139B2 (en) * | 2008-06-27 | 2015-06-02 | Microsoft Technology Licensing, Llc | Primitives for software transactional memory |
US20100017581A1 (en) * | 2008-07-18 | 2010-01-21 | Microsoft Corporation | Low overhead atomic memory operations |
US8627292B2 (en) * | 2009-02-13 | 2014-01-07 | Microsoft Corporation | STM with global version overflow handling |
JP5433676B2 (ja) * | 2009-02-24 | 2014-03-05 | パナソニック株式会社 | プロセッサ装置、マルチスレッドプロセッサ装置 |
US8688921B2 (en) * | 2009-03-03 | 2014-04-01 | Microsoft Corporation | STM with multiple global version counters |
JP5338435B2 (ja) * | 2009-03-31 | 2013-11-13 | 富士通株式会社 | 情報処理プログラム、情報処理装置および情報処理方法 |
JP5752686B2 (ja) | 2009-08-20 | 2015-07-22 | ラムバス・インコーポレーテッド | 原子メモリ装置 |
US8566524B2 (en) | 2009-08-31 | 2013-10-22 | International Business Machines Corporation | Transactional memory system with efficient cache support |
US8239635B2 (en) | 2009-09-30 | 2012-08-07 | Oracle America, Inc. | System and method for performing visible and semi-visible read operations in a software transactional memory |
US9104715B2 (en) * | 2010-06-23 | 2015-08-11 | Microsoft Technology Licensing, Llc | Shared data collections |
US8595426B2 (en) * | 2011-04-11 | 2013-11-26 | Sandisk Il Ltd. | Handling commands within a write-once read-many storage device configuration |
US9043363B2 (en) * | 2011-06-03 | 2015-05-26 | Oracle International Corporation | System and method for performing memory management using hardware transactions |
US9164753B2 (en) | 2013-01-08 | 2015-10-20 | Sap Se | Generating software updates |
WO2015047271A1 (en) * | 2013-09-26 | 2015-04-02 | Hewlett-Packard Development Company, L.P. | Undoing changes made by threads |
US9524195B2 (en) | 2014-02-27 | 2016-12-20 | International Business Machines Corporation | Adaptive process for data sharing with selection of lock elision and locking |
US9442775B2 (en) | 2014-02-27 | 2016-09-13 | International Business Machines Corporation | Salvaging hardware transactions with instructions to transfer transaction execution control |
US9442853B2 (en) | 2014-02-27 | 2016-09-13 | International Business Machines Corporation | Salvaging lock elision transactions with instructions to change execution type |
US9424072B2 (en) | 2014-02-27 | 2016-08-23 | International Business Machines Corporation | Alerting hardware transactions that are about to run out of space |
US9430273B2 (en) | 2014-02-27 | 2016-08-30 | International Business Machines Corporation | Suppressing aborting a transaction beyond a threshold execution duration based on the predicted duration |
US9411729B2 (en) | 2014-02-27 | 2016-08-09 | International Business Machines Corporation | Salvaging lock elision transactions |
US9329946B2 (en) | 2014-02-27 | 2016-05-03 | International Business Machines Corporation | Salvaging hardware transactions |
US9262206B2 (en) | 2014-02-27 | 2016-02-16 | International Business Machines Corporation | Using the transaction-begin instruction to manage transactional aborts in transactional memory computing environments |
US9471371B2 (en) | 2014-02-27 | 2016-10-18 | International Business Machines Corporation | Dynamic prediction of concurrent hardware transactions resource requirements and allocation |
US9311178B2 (en) | 2014-02-27 | 2016-04-12 | International Business Machines Corporation | Salvaging hardware transactions with instructions |
US9645879B2 (en) | 2014-02-27 | 2017-05-09 | International Business Machines Corporation | Salvaging hardware transactions with instructions |
US9336097B2 (en) | 2014-02-27 | 2016-05-10 | International Business Machines Corporation | Salvaging hardware transactions |
US9361041B2 (en) | 2014-02-27 | 2016-06-07 | International Business Machines Corporation | Hint instruction for managing transactional aborts in transactional memory computing environments |
US9465673B2 (en) | 2014-02-27 | 2016-10-11 | International Business Machines Corporation | Deferral instruction for managing transactional aborts in transactional memory computing environments to complete transaction by deferring disruptive events handling |
US20150242216A1 (en) | 2014-02-27 | 2015-08-27 | International Business Machines Corporation | Committing hardware transactions that are about to run out of resource |
US9575890B2 (en) | 2014-02-27 | 2017-02-21 | International Business Machines Corporation | Supporting atomic accumulation with an addressable accumulator |
US9524187B2 (en) | 2014-03-02 | 2016-12-20 | International Business Machines Corporation | Executing instruction with threshold indicating nearing of completion of transaction |
US9336047B2 (en) | 2014-06-30 | 2016-05-10 | International Business Machines Corporation | Prefetching of discontiguous storage locations in anticipation of transactional execution |
US9448939B2 (en) | 2014-06-30 | 2016-09-20 | International Business Machines Corporation | Collecting memory operand access characteristics during transactional execution |
US9348643B2 (en) | 2014-06-30 | 2016-05-24 | International Business Machines Corporation | Prefetching of discontiguous storage locations as part of transactional execution |
US9710271B2 (en) | 2014-06-30 | 2017-07-18 | International Business Machines Corporation | Collecting transactional execution characteristics during transactional execution |
US9600286B2 (en) | 2014-06-30 | 2017-03-21 | International Business Machines Corporation | Latent modification instruction for transactional execution |
US9754001B2 (en) | 2014-08-18 | 2017-09-05 | Richard Banister | Method of integrating remote databases by automated client scoping of update requests prior to download via a communications network |
US9665280B2 (en) * | 2014-09-30 | 2017-05-30 | International Business Machines Corporation | Cache coherency verification using ordered lists |
US10540524B2 (en) * | 2014-12-31 | 2020-01-21 | Mcafee, Llc | Memory access protection using processor transactional memory support |
US10838983B2 (en) | 2015-01-25 | 2020-11-17 | Richard Banister | Method of integrating remote databases by parallel update requests over a communications network |
CN105045563B (zh) * | 2015-06-19 | 2017-10-10 | 陕西科技大学 | 一种推测嵌套软件事务存储的冲突管理方法 |
US10838827B2 (en) | 2015-09-16 | 2020-11-17 | Richard Banister | System and method for time parameter based database restoration |
US10990586B2 (en) | 2015-09-16 | 2021-04-27 | Richard Banister | System and method for revising record keys to coordinate record key changes within at least two databases |
US10003634B2 (en) * | 2016-05-14 | 2018-06-19 | Richard Banister | Multi-threaded download with asynchronous writing |
US10860246B2 (en) | 2016-12-21 | 2020-12-08 | Hewlett-Packard Development Company, L.P. | Persistent memory updating |
CN110520845B (zh) * | 2017-04-19 | 2022-06-10 | 华为技术有限公司 | 更新硬件事务内存(htm)用户异常中止元数据的方法及系统 |
CN110546609B (zh) * | 2017-04-19 | 2022-06-14 | 华为技术有限公司 | 硬件事务内存(htm)辅助数据库事务的方法及系统 |
US10521116B2 (en) * | 2018-01-23 | 2019-12-31 | Nutanix, Inc. | System and method for managing object store |
US10445238B1 (en) * | 2018-04-24 | 2019-10-15 | Arm Limited | Robust transactional memory |
US11086733B2 (en) * | 2018-12-19 | 2021-08-10 | Micron Technology, Inc. | Reporting control information errors |
US11194769B2 (en) | 2020-04-27 | 2021-12-07 | Richard Banister | System and method for re-synchronizing a portion of or an entire source database and a target database |
US12118224B2 (en) | 2022-04-08 | 2024-10-15 | Micron Technology, Inc. | Fine grained resource management for rollback memory operations |
US20240231655A9 (en) * | 2022-10-20 | 2024-07-11 | Micron Technology, Inc. | Adaptive control for in-memory versioning |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5983225A (en) * | 1998-01-26 | 1999-11-09 | Telenor As | Parameterized lock management system and method for conditional conflict serializability of transactions |
US6856993B1 (en) * | 2000-03-30 | 2005-02-15 | Microsoft Corporation | Transactional file system |
US6586993B2 (en) * | 2000-11-08 | 2003-07-01 | Research In Motion Limited | Impedance matching low noise amplifier having a bypass switch |
-
2005
- 2005-07-29 US US11/192,784 patent/US7536517B2/en not_active Expired - Fee Related
-
2006
- 2006-07-28 KR KR1020087002433A patent/KR101203297B1/ko active IP Right Grant
- 2006-07-28 BR BRPI0613946-9A patent/BRPI0613946A2/pt not_active IP Right Cessation
- 2006-07-28 RU RU2008103273/09A patent/RU2008103273A/ru not_active Application Discontinuation
- 2006-07-28 MX MX2008001159A patent/MX2008001159A/es not_active Application Discontinuation
- 2006-07-28 JP JP2008524174A patent/JP5010601B2/ja not_active Expired - Fee Related
- 2006-07-28 CN CN200680026687XA patent/CN101495976B/zh not_active Expired - Fee Related
- 2006-07-28 EP EP06788738.0A patent/EP1910929B1/en not_active Not-in-force
- 2006-07-28 CA CA002616422A patent/CA2616422A1/en not_active Abandoned
- 2006-07-28 AU AU2006275736A patent/AU2006275736A1/en not_active Abandoned
- 2006-07-28 WO PCT/US2006/029327 patent/WO2007016302A2/en active Application Filing
-
2008
- 2008-01-08 IL IL188665A patent/IL188665A0/en unknown
- 2008-01-15 NO NO20080235A patent/NO20080235L/no not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
CA2616422A1 (en) | 2007-02-08 |
EP1910929A2 (en) | 2008-04-16 |
RU2008103273A (ru) | 2009-08-10 |
EP1910929B1 (en) | 2016-02-17 |
NO20080235L (no) | 2008-02-28 |
MX2008001159A (es) | 2008-03-13 |
EP1910929A4 (en) | 2010-12-08 |
CN101495976A (zh) | 2009-07-29 |
KR20080031039A (ko) | 2008-04-07 |
JP2009506403A (ja) | 2009-02-12 |
AU2006275736A1 (en) | 2007-02-08 |
WO2007016302A3 (en) | 2009-04-16 |
US7536517B2 (en) | 2009-05-19 |
IL188665A0 (en) | 2008-08-07 |
WO2007016302A2 (en) | 2007-02-08 |
JP5010601B2 (ja) | 2012-08-29 |
BRPI0613946A2 (pt) | 2011-02-22 |
US20070028056A1 (en) | 2007-02-01 |
CN101495976B (zh) | 2011-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101203297B1 (ko) | 직접 업데이트 소프트웨어 트랜잭션 메모리 | |
US8627048B2 (en) | Mechanism for irrevocable transactions | |
US7809903B2 (en) | Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions | |
US8700585B2 (en) | Optimistic locking method and system for committing transactions on a file system | |
US8473950B2 (en) | Parallel nested transactions | |
US8271739B2 (en) | Memory control apparatus, program, and method | |
US8065490B2 (en) | Hardware acceleration of strongly atomic software transactional memory | |
US9411635B2 (en) | Parallel nested transactions in transactional memory | |
US20090183159A1 (en) | Managing concurrent transactions using bloom filters | |
US8239635B2 (en) | System and method for performing visible and semi-visible read operations in a software transactional memory | |
US8271464B2 (en) | Parallel nested transactions in transactional memory | |
US9928265B2 (en) | Utilizing shared numeric locks | |
US8095731B2 (en) | Mutable object caching | |
US20100228927A1 (en) | Stm with multiple global version counters | |
US20080082533A1 (en) | Persistent locks/resources for concurrency control |
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: 20151016 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20161019 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20171018 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20181018 Year of fee payment: 7 |