KR101143214B1 - 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 - Google Patents
멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 Download PDFInfo
- Publication number
- KR101143214B1 KR101143214B1 KR1020050024208A KR20050024208A KR101143214B1 KR 101143214 B1 KR101143214 B1 KR 101143214B1 KR 1020050024208 A KR1020050024208 A KR 1020050024208A KR 20050024208 A KR20050024208 A KR 20050024208A KR 101143214 B1 KR101143214 B1 KR 101143214B1
- Authority
- KR
- South Korea
- Prior art keywords
- thread
- segments
- memory location
- ordered
- parallel
- Prior art date
Links
Images
Classifications
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41K—STAMPS; STAMPING OR NUMBERING APPARATUS OR DEVICES
- B41K1/00—Portable hand-operated devices without means for supporting or locating the articles to be stamped, i.e. hand stamps; Inking devices or other accessories therefor
- B41K1/02—Portable hand-operated devices without means for supporting or locating the articles to be stamped, i.e. hand stamps; Inking devices or other accessories therefor with one or more flat stamping surfaces having fixed images
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41K—STAMPS; STAMPING OR NUMBERING APPARATUS OR DEVICES
- B41K1/00—Portable hand-operated devices without means for supporting or locating the articles to be stamped, i.e. hand stamps; Inking devices or other accessories therefor
- B41K1/36—Details
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Multi Processors (AREA)
Abstract
동적 레이스 검출 시스템 및 방법은 특히, 스레드 포크/조인 및 비동기 호출의 문맥에서, 많은 실패를 발생시킬 수 있는 종래 로크집합 접근법의 결점을 극복한다. 각각의 공유 메모리 위치에 대해서, 위치를 보호하는 로크들의 집합 및 위치를 엑세스하는 병행 스레드 세그먼트들의 집합이 유지된다. 이러한 집합을 유지하기 위해, 각각의 스레드는 현재 홀딩하고 있는 로크들의 집합 및 그것의 현재 스레드 세그먼트 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합을 유지한다. 각각의 스레드는 또한 제2 스레드를 포크할 때 증가되는 가상 클럭을 유지한다. 스레드 세그먼트는 스레드 식별자와 가상 클럭값을 포함하는 쌍이다. 특정한 공유 메모리 위치를 위한 로크집합이 비어있고, 그 메모리 위치에 대한 병행 스레드 집합의 원소 개수가 1보다 클 때, 데이터 레이스가 보고된다.
레이스, 스레드, 로크집합, 가상 클럭, 세그먼트
Description
도 1은 종래 기술에 따른 2개의 병행 스레드에 관련된 이벤트의 이전-발생 순서를 나타내는 다이어그램.
도 2a는 종래 기술에 따른 로크집합의 유지를 나타내는 순서도.
도 2b는 종래 기술에 따라 공유 메모리 위치에 관련된 로크집합을 유지하는 것을 나타내는 순서도.
도 3은 종래 기술에 따른 레이스 상황이 없는 예에 대한 로크집합 접근법의 동작을 나타내는 다이어그램.
도 4는 종래 기술에 따른 올바르게 보고된 레이스 상황의 예에 대한 로크집합 접근법의 동작을 나타내는 다이어그램.
도 5는 종래 기술에 따라 로크집합 접근법 하에서 긍정오류를 발생시키면서, 포크 및 조인을 수행하는 스레드의 동작을 나타내는 다이어그램.
도 6은 본 발명의 실시예에 따라 스레드의 가상 클럭을 유지하는 것을 나타내는, 포크 및 조인을 수행하는 스레드의 동작을 나타내는 다이어그램.
도 7a는 본 발명의 실시예를 따르는 포크 호출과 관련된 단계를 나타내는 순서도.
도 7b는 본 발명의 실시예를 따르는 조인 호출과 관련된 단계를 나타내는 순서도.
도 8은 본 발명의 실시예를 따르는 메모리 위치의 판독 또는 기록과 관련된 단계를 나타내는 순서도.
도 9는 본 발명의 실시예를 따른, 올바르게 메모리 위치의 단일-스레드된 엑세스에 대하여 레이스 상황이 보고되지 않은, 포크 및 조인을 수행하는 스레드의 동작을 나타내는 다이어그램.
<도면의 주요 부분에 대한 부호의 설명>
101: 스레드 t1
103: 스레드 t2
본 발명은 일반적으로 컴퓨터 시스템에 관한 것이며, 특히, 멀티스레드된 컴퓨터 프로그램에서 레이스 상황(race condition)을 검출하는 것에 관한 것이다.
복수의 실행 스레드를 사용하는 프로그램을 작성하는 것은 컴퓨터 소프트웨어 개발자에게 통상적인 것이 됐다. 현대 오퍼레이팅 시스템 및 프로그래밍 언어는 스레드를 지원하며, 많은 대용량의 사용 어플리케이션은 멀티스레드된다. 스레드는 특히 오퍼레이팅 시스템 프로세스 내의 다중 비동기 계산을 구현하는데 유용 하다. 예를 들어, 이벤트-유도 어플리케이션은 종종 멀티스레드을 사용한다.
그러나 멀티스레드을 유용한 프로그래밍 기술로 만드는 이 특징은 또한 디버깅 멀티스레드된 프로그램을 매우 어려운 태스크로 만든다. 다중 스레드는 비결정론적이고 시간 종속적인 방식으로 상호작용할 수 있다. 전형적으로 이러한 스레드들은 데이터를 공유하며, 스레드들이 어떻게 스케줄되는지 또는 그들의 명령어 스트림이 어떻게 상호배치되는지에 상관없이, 프로그램의 정확성을 확실하게 하기 위해 스레드들의 상호작용 동기화를 필요로한다.
프로그래머가 레이스 상황과 관련된 스레드 동기화의 에러를 검출하는 것은 특히 어렵다. 멀티스레드된 프로그램에서, 엑세스의 순서화를 강요하는 적절한 동기화가 없이, 2개 이상의 병행 스레드가 공유 메모리 위치를 엑세스할 때 데이터 레이스 상황이 발생하며, 여기서 적어도 하나의 엑세스는 기록이다. 이러한 경우의 실행 효과는 엑세스가 발행하는 특정 순서에 따라 달라진다. 레이스 상황은 종종 프로그램 충돌 또는 잘못된 결과 등의 예상하지 않고 및 원하지 않은 프로그램 행동을 발생시킨다. 이러한 비결정성은, 종래 디버깅 기술을 사용하여 레이스 상황을 검출하는 것이 매우 어렵기 때문이기도 한다.
레이스 상황의 잠재적으로 해로운 효과 및 그것을 포함하는 프로그램을 디버깅하는 것의 어려움이 주어진 상황에서, 레이스 상황의 존재를 검출하기 위한 자동화된 툴은 멀티스레드된 프로그램의 개발자에게 매우 가치있다. 그러나, 효과적이고 효율적인 툴이 부족하다. 프로그램의 특정한 실행에서의 잠재적 레이스를 검출하는 것이 시도되는 동적 레이스 검출과 관련하여, 다음과 같은 2개의 접근법, 즉 램폴트(Lamport)의 "이전-발생(happens-before)" 순서 및 로크집합(lockset) 기술이 광범위하게 사용되며, 이들은 이하의 상세한 설명에 더 기술된다. 전자는 특히 C# 및 자바 등의 객체 지향 언어로 작성된 프로그램에 대해서 통상적으로 매우 불만족스러운 런타임 오버헤드를 가지며, 후자의 접근법은 특히 비동기 델리게이트(delegate)를 사용하는 프로그램에서 허용 불가능한 수의 긍정오류(false positive)를 발생시킨다.
다음은 본 발명의 기본적 이해를 제공하기 위한 본 발명의 몇몇 실시예의 단순화된 요약이다. 이 요약은 본 발명의 확장적 개요는 아니다. 이는 본 발명의 핵심 또는 중요 구성요소를 식별하거나, 본 발명의 영역을 제한하고자하는 것은 아니다. 후술된 보다 상세한 설명에 대한 서문으로서, 단순화된 형태로 본 발명의 일부 실시예를 제공하기 위한 것이다.
본 발명의 일 실시예에 따른, 동적 레이스 검출을 위한 시스템이 제공된다. 이 시스템은 공유 메모리 위치를 엑세스하는 병행 스레드 세그먼트들의 집합을 유지하기 위한 메커니즘; 동작 중인 스레드에 관련하여 자신의 현재 스레드 세그먼트 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합을 유지하기 위한 메커니즘; 공유 메모리 위치에 관련된 로크들의 제1 집합을 유지하기 위한 메커니즘; 로크들의 제2 집합 내의 로크를 획득 및 해제하는 스레드에 관련된 로크들의 제2 집합을 유지하기 위한 메커니즘을 포함한다.
또다른 실시예를 따르는, 동적 레이스 검출을 위한 방법이 제공된다. 이 방 법은 (a)공유 메모리 위치에 관련된 로크들의 제1 집합을 유지하는 단계; (b)로크들의 제2 집합 내의 로크를 획득 및 해제하는 스레드에 관련된 로크들의 제2 집합을 유지하는 단계; (c)공유 메모리 위치를 엑세스하는 병행 스레드 세그먼트들의 집합을 유지하는 단계; (d)스레드와에 관련하여, 스레드의 현재 세그먼트 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합을 유지하는 단계를 포함한다.
공유 메모리 위치를 엑세스하는 병행 스레드 세그먼트들의 집합 및 스레드 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합 모두를 순서화된 쌍의 집합으로 나타낼 수 있으며, 여기서 순서화된 쌍들의 집합 내의 쌍의 하나의 멤버는 스레드 식별자이고, 쌍의 다른 멤버는 제1 멤버의 스레드 세그먼트를 식별하는 가상 클럭값이다.
각각의 스레드는 스레드 생성시에 0으로 초기화되었다가, 스레드가 또다른 스레드를 포크할 때마다 1만큼씩 증가되는 가상 클럭을 유지한다. 스레드가 제2 스레드를 포크할 때, 제2 스레드 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합은 (ⅰ)제1 스레드 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합과 (ⅱ)제2 스레드가 포크될 때에 제1 스레드의 스레드 세그먼트를 포함하는 단원 집합의 집합 합집합으로서 계산된다. 일 실시예에서, 제1 스레드에 관련된 가상 클럭은 1만큼 증가되고, 포크된 스레드에 관련된 가상 클럭은 0으로 초기화된다. 스레드가 제2 스레드 상의 조인 동작을 수행할 때, 제1 스레드 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합은 (ⅰ)제1 스레드 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합, (ⅱ)제2 스레드 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합의 부분집합, 여기서 부분집합 내의 각각의 스레드 세그먼트에 대해서, 스레드 세그먼트의 스레드 식별자는 제1 스레드의 스레드 식별자와 동일하지 않음, (ⅲ)제2 스레드의 현재 스레드 세그먼트를 포함하는 단원 집합의 합집합으로서 계산된다.
스레드가 공유 메모리 위치를 엑세스하면, 그 위치를 엑세스하는 병행 스레드 세그먼트들의 집합은 그 위치를 더이상 동시에 엑세스하지 않는 스레드 세그먼트를 제거하고, 스레드의 현재 스레드 세그먼트를 추가함으로써 갱신된다. 병행 스레드 세그먼트들의 새로운 집합이 1개 이하의 원소를 포함하면, 공유 메모리 위치에 관련된 로크들의 집합은 스레드에 관련된 로크들의 집합으로 갱신되거나, 공유 메모리 위치에 관련된 로크들의 집합과, 스레드에 관련된 로크들의 집합의 교집합으로 갱신된다. 병행 스레드 세그먼트들의 집합이 하나 이상의 원소를 가지며, 공유 메모리 위치에 관련된 로크들의 집합이 비어 있으면, 잠재적 레이스 상황의 경고가 보고된다.
또다른 실시예를 따르는, 동적 레이스 검출 시스템 및 방법이 제공된다. 런타임 시스템에서, 일반 중간매체 언어 형태의 코드가 실행엔진에 로드되고 그곳에서 컴파일될 때, 레이스 검출기로의 호출이 생략된다. 메모리 객체를 위해 필요한 계측 정보를 저장하기 위한 데이터 구조는 런타임 시스템의 메모리 할당 메커니즘에 의해 객체와 함께 할당된다.
본 발명의 다른 특징은 도면과 관련하여 다음의 상세한 설명에 의해 명확해질 것이다.
다음의 설명에서, 본 발명의 다양한 실시예가 설명될 것이다. 실시예의 완벽한 이해를 제공하기 위해 특정한 구성 및 세부사항이 설명된다. 그러나, 당업자들에게는 본 발명이 특정한 세부사항 없이 구현될 수 있음이 명백할 것이다. 공지된 특징은 설명된 실시예를 애매하지 않게 하기 위해 생략 또는 단순화될 수 있다.
본 발명의 설명을 진행하기 전에, 배경기술 부분에서 상술된 종래 기술의 이전-발생 및 로크집합 접근법은 본 발명의 신규성 및 유용성을 설명하기 위해 다소 상세하게 설명될 것이다. 이전-발생 접근법은, 병행 실행 내의 모든 스레드에 관련된 모든 이벤트의 부분적인 순서를 생성한다. 순서는 램폴트의 하기 참조된 문헌 1에 설명된 관계에 기초한다.
[문헌 1]램폴트의 "Time, Clocks, and the Ordering of Events in a Distributed System," 21 Commun. ACM 558-565(1978)
단일 스레드에서, 이벤트들은 그들이 발생한 순서로 순서화된다. 스레드들 사이에서는, 스레드가 획득하고 해제하는 로크 또는 다른 동기화 객체의 속성에 따라 이벤트들을 순서화한다. 로크의 의미론이 2개의 이벤트가 동시에 교환되는 스케줄을 금지하는 것인 경우, 하나의 스레드가 로크를 엑세스하고, 그 로크에 대한 다음 엑세스가 다른 스레드에 의한 것이면, 제1 엑세스는 제2 엑세스 "이전에 발생"하도록 정의된다. 2개의 스레드가 공유 메모리 위치를 엑세스하고 엑세스가 인과적으로 순서화되지 않으면, 레이스가 발생했다고 생각된다.
이전-발생 접근법에 대한 간단한 설명으로서, 다음의 코드 명령문을 실행하 는 2개의 병행 스레드 t1 및 t2를 고려해보자:
acquire(l); //로크 l을 획득
write x; //공유 위치 x를 기록
release(l); //로크 l을 해제
도 1은 2개의 스레드 t1(101) 및 t2(103)에 관련된 이벤트의 가능한 순서화를 나타낸다. t1(101)에 의해 실행되는 3개의 프로그램 명령문(105, 107, 109)은 같은 스레드 내에서 순차적으로 실행되기 때문에, 이전-발생에 의해 순서화된다. 특정 로크가 이전의 홀더에 의해 해제되기 전에는, 그 잠금을 획득할 수 없으므로, t2(103)에 의한 로크 l의 획득은 t1(101)에 의한 로크 l의 해제와 함께 이전-발생에 의해 순서화된다. 마지막으로, t2(103)가 실행하는 3개의 명령문(111, 113, 115)은 이 스레드 내에서 순차적으로 실행되므로, 이전-발생에 의해 순서화된다.
로크집합 기반 검출은 다음 문헌 2와 같은 수많은 참조 문헌에 설명된다.
[문헌 2] Savage 등의 "Eraser: A Dynamic Data Race Detector for Multithreaded Programs." 15 ACM Trans. Comp. Sys. 391-411(1997)
단순한 로크집합 접근법에서, 각각의 공유 위치 x에 대해서, 프로그램 실행시에, x를 보호하는 로크들의 집합 Sx는 x에 대한 모든 판독 및 기록을 모니터링함으로써 계산을 위해 유지된다. 각각의 스레드 t에 대해, t에 의해 홀드된 로크들의 집합 St는 스레드 t의 로크 획득을 모니터링함으로써 유지된다.
도 2a 및 2b의 순서도는 집합 St 및 Sx가 로크집합 접근법 하에서 각각 어떻게 유지되는지를 나타낸다. 도 2a의 단계(201)에서, 스레드 t을 생성할 때, 초기에 St는 비어있다. 단계(203)에서, 스레드 t가 로크 l을 획득하는지가 판정된다. 획득했으면, 단계(205)에서 l을 포함하는 단원 집합(singleton set)과 St의 합집합에 의해 St가 갱신된다. 마찬가지로, 단계(207)에서, 스레드가 로크 l을 해제하는지가 판정된다. 해제하면, 단계(209)에서, l을 포함하는 단원 집합과 St의 차집합을 구함으로써 St가 갱신되고, 따라서 스레드 t에 의해 홀드된 로크들의 집합으로부터 l이 제거된다. 도 2b의 단계(211)에서, 초기에 Sx는 모든 가능한 로크들의 집합인 L이다. 단계(213)에서, 스레드 t가 위치 x 상의 판독 동작 또는 기록 동작을 수행하는지가 판정된다. 그 동작을 수행하면, 단계(215)에서 Sx는 Sx와 St의 교집합을 포함하는 집합으로 갱신된다. 단계(217)에서, Sx가 비어있는지가 판정된다. 비어있으면, 단계(219)에서 잠재적 레이스 상황에 관한 경고가 보고된다.
도 3은 도 1에서와 동일한 같은 예시적 병행 스레드 t1 및 t2를 사용하는 로크집합 접근법의 단순한 예시적 동작을 나타낸다. 스레드 t1 및 t2가 다음의 순서로 각각의 명령문을 실행한다고 가정하자:
t1 t2
1 acquire(l); 4 acquire(l);
2 write x; 5 write x;
3 release(l); 6 release(l);
즉, 스레드 t2가 자신의 3개의 명령문을 실행하기 이전에, 스레드 t1는 자신의 3개의 명령문을 실행한다. 실행의 개시시에 St1 및 St2는 비어있고, Sx는 L임을 가정하자.
도 3에서, 순서도는 스레드 t1(301) 및 t2(303)에 의해 실행되는 명령문의 시퀀스를 나타낸다. 블럭(305)은 초기에 St1이 비어있고, 그 후 t1(301)이 로크 l을 획득하여, St1이 l을 포함하는 집합이 됨을 나타낸다. 블럭(307)에서, t1(301)은 x의 기록을 실행하고, 그러면 Sx도 l을 포함하는 집합이 된다. 블럭(309)에서, t1(301)은 로크 l을 해제하고, St1은 또다시 공집합이 된다. 이제 스레드 t1(301)은 자신의 실행을 종료하며, 스레드 t2(303)는 실행을 개시한다. 블럭(311)은 초기에 St2가 비어있고, 그 후 t2(303)가 로크 l을 획득하여, St2가 l을 포함하는 집합이 됨을 나타낸다. 블럭(313)에서, t2(303)는 위치 x를 기록하고, 그러면 Sx는 Sx와 St2의 교집합으로 형성된 집합이 된다. 이제 모든 집합이 l을 포함하는 단원 집합이므로, Sx는 l을 포함하는 집합으로 남아있다. 블럭(315)에서, t2(303)는 로크 l을 해제시키고, St2는 또다시 비어있게 된다. 스레드 t1(301) 및 t2(302)의 실행동안, Sx은 절대 비어있지 않으므로, 로크집합 방법은 어떤 레이스 상황도 보고하지 않는다. 실제로, 레이스 상황이 없는 것은, 단일 로크 l이 스레드들 둘다의 x를 보호하기 위해 사용된다는 사실로부터 직관적으로 알 수 있다.
도 4는 로크집합 접근법의 동작에 대한 제2 예를 제공한다. x가 스레드들 둘다에서 동일한 로크에 의해 보호되는 이전 예와는 다르게, 여기서 스레드 t1(401) 및 스레드 t2(403)는 상이한 로크 l1 및 l2를 사용한다. 블럭(405)는 초기에 St1이 비어있고, 그 후 t1(401)이 로크 l1을 획득하고, St1이 l1을 포함하는 집합이 됨을 나타낸다. 블럭(407)에서, t1(401)은 x의 기록을 실행하고, 그러면 Sx도 l1을 포함하는 집합이 된다. 블럭(409)에서, t1(301)은 로크 l1을 해제하고, St1은 또다시 공집합이 된다. 이제 스레드 t1(401)은 자신의 실행을 종료시키고, 스레드 t2(403)는 실행을 개시한다. 블럭(411)은 초기에 St2가 비어있고, 그 후 t2(403)가 로크 l2를 획득하고, St2가 l2를 포함하는 집합이 됨을 나타낸다. 블럭(413)에서, t2(403)는 위치 x를 기록하고, 그러면 Sx는 Sx와 St2의 교집합으로 형성된 집합이 된다. Sx는 l1을 포함하는 집합이고, St2는 l2를 포함하는 집합이므로, 그들의 교집합은 공집합이다. Sx이 비어있으므로, 실행 중 이 시점에서, 레이스 상황이 보고된다. 블럭 (415)에서, t2(403)는 로크 l2을 해제하고, St2는 또다시 비어있게 된다.
로크집합 접근법을 구현하는 툴이 일반적으로 이전-발생 관계를 사용하는 접근법과 관련하여 좋지 않은 성능을 갖는 한편, 이러한 툴은 레이스가 없는 프로그램에 대해서 레이스 상황을 보고하는 많은 긍정오류를 발생시키는 것으로 알려져 있다. 가장 흔한 종류의 긍정오류는, 스레드가 시스템 호출을 포크 및 조인(대기)할 때 발생하는 것들을 포함한다. 예를 도 5에 나타낸다. 실행 개시때에는 오직 하나의 스레드 t만이 있음을 가정하자. 수직선(501)은 스레드 t의 실행을 나타낸다. 선(501)으로부터 연장된 사선(503)은 t가 새로운 스레드 t1을 포크하는 것을 나타낸다. 수직선(505)은 스레드 t1의 실행을 나타낸다. 포크한 후에, 동시에 실행하는 2개의 스레드 t 및 t1이 있게 된다. 선(501)을 향해 연장된 사선(507)은 스레드 t가 스레드 t1을 조인하는 것을 나타낸다: 즉, 스레드 t는 t1이 실행을 완료하기를 기다린다.
포크(503) 및 조인(507)은 스레드 t(501) 및 t1(505)의 이벤트들의 순서화를 암시적으로 강요한다. 블럭(509)에서, 스레드 t는 로크 l의 획득 및 해제와 함께 x의 기록을 실행한다. 블럭(511)에서, 스레드 t1은 동일한 명령문을 실행한다. x로의 2개의 엑세스를 동일한 로크 l이 보호하므로, 레이스 상황이 일어나지 않는다. 블럭(513)에서, 스레드 t는 x의 기록을 실행한다. 이 시점에서, 스레드 t는 로크를 반드시 사용할 필요없이, 즉, 스레드 t1에 의한 실행에서 x를 보호하기 위해 사용되었던 것과 동일한 로크를 반드시 사용할 필요없이, x를 기록할 수 있다. 그러나, 블럭(513)에 나타난 바와 같이 x를 기록하기 전에, Sx는 l을 포함하는 집합이다. x를 기록한 후에, Sx는 비어있게 된다. 단일 스레드만이 실행되고 있고, 엑세스로부터 x를 보호할 필요가 없으므로, 명백히 레이스가 없지만, Sx가 비어있으므로, 로크집합 절차는 레이스를 보고한다.
본 발명은 포크 및 조인 문맥에서 긍정오류를 보고하는 경향을 제한하도록 로크집합 접근법을 확장한다. 로크집합 접근법에서 스레드 마다의 로크집합 및 위치 마다의 로크집합을 기록하는 것 외에, 본 발명은 2개의 다른 집합을 더 유지하고 있다. 하나의 집합은 공유 메모리 위치 x를 엑세스하는 병행 스레드 세그먼트들의 집합을 포함하는 집합 Tx이다. 관련 로크집합이 비어있고, Tx의 원소 개수가 1보다 클 때, 레이스가 보고된다. 새로운 제2 집합은 t의 현재 스레드 세그먼트 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합을 포함하는 집합 Bt이다. 일 실시예에서, Tx와 Bt를 튜플{<t1, c1>,...,<tn, cn>}의 집합으로 나타낸다. 순서화는 각각의 스레드 t를 위한 가상 클럭 Ct의 사용에 의존한다. 튜플 <t, c>는 가상 클럭 시간 c에서의 스레드 t의 스레드 세그먼트를 나타낸다.
도 6은 본 발명의 실시예에서 각각의 스레드를 위한 가상 클럭이 유지되는 방식을 나타내는, 포크 및 조인을 나타내는 다이어그램이다. 수직선(607)은 스레드 t의 실행을 나타낸다. (609으로 지정된 시점에서) t를 위한 가상 클럭이 초기 에 0이라고 가정하자. 사선(611)은 t가 스레드 t1을 포크하는 것을 나타낸다. 스레드 t에 대한 실행선(607) 상의 이 시점에서(613으로 지정됨), t를 위한 가상 클럭은 1만큼 증가한다. 수직선(617)은 포크된 스레드 t1의 실행을 나타낸다. 스레드 t1을 위한 가상 클럭은 0으로 초기화된다(615로 지정된 시점에서). 사선(619)은 t가 t1을 조인하는 것을 나타낸다.
도 7a의 순서도는 스레드 t에 의한 새로운 병행 스레드 t1의 포크에 관련된 단계를 나타낸다. 단계(703)에서, 스레드 t가 스레드 t1을 포크하는지가 판정된다. 포크하면, 다음의 동작이 수행된다. 단계(703)에서, 스레드 t1 보다 빠른 순서를 갖는 스레드 세그먼트들의 집합인 집합 Bt1은 스레드 t에 대응하는 집합과 스레드 세그먼트 <t, Ct>를 포함하는 단원 집합의 합집합으로서 계산된다. 단계(705)에서, 스레드 t를 위한 가상 클럭은 1만큼 증가한다. 단계(707)에서, 새롭게 포크된 스레드 t1을 위한 가상 클럭은 0으로 초기화된다. 도 7b의 순서도는 스레드 t에 의한 조인과 관련된 단계를 나타낸다. 단계(711)에서, 스레드 t가, 스레드 t1이 실행을 완료하기를 기다리는 조인 호출을 만드는 지를 판정한다. 조인 호출을 만들면, 단계(713)에서 Bt의 새로운 값은 3개의 집합, 즉 (ⅰ)Bt, (ⅱ)현재 스레드 t에 속하지 않은, 집합 Bt1 내의 스레드 세그먼트들의 집합, 및 (ⅲ)t1의 현재 스레드 세그먼트 를 포함하는 단원 집합의 합집합으로서 계산된다.
로크를 획득 및 해제할 때의 집합 St의 유지에 관하여, 도 2a에 나타나고 상술된 단계들이 본 발명에서도 사용되므로, 여기서 이를 더 설명할 필요가 없다.
도 8의 순서도는 스레드 t가 위치 x의 판독 또는 기록을 실행할 때 취해진 단계들을 나타낸다. 단계(801)에서, 판독 또는 기록 후에 위치 x를 동시에 엑세스하는 스레드 세그먼트를 나타내는 집합 Tx의 새로운 값이 계산된다. 새로운 Tx를 형성하는 합집합의 제2 부분은 t의 현재 스레드 세그먼트 <t, Ct>를 포함하는 집합이다. 스레드 t가 x를 판독 또는 기록하므로, 명백히 t는 집합 Tx 내에 있어야하는 스레드 중 하나이다. 합집합의 제1 부분은 더이상 위치를 동시에 엑세스하지 않는 임의의 스레드가 제거된, 집합 Tx의 이전 값의 부분집합을 나타낸다. 단계(803)에서, 새로운 Tx의 원소 개수가 1 이하 인지가 판정된다. 1 이하이면, 현재 x를 엑세스하는 최대 하나의 스레드가 있다. Sx의 새로운 값은 그후 로크집합 St의 현재 값이 된다(단계(805)). 한편, 단계(807)에서, x를 엑세스하는 다수의 병행 스레드가 존재하고, Sx의 새로운 값은 St 및 Sx의 이전 값의 교집합을 포함하는 집합이 된다. 단계(809)에서, (a)Sx의 새로운 값이 비어있는지, 및 (b)Tx의 새로운 값의 원소 개수가 1보다 큰지가 판정된다. 2가지가 만족되면, 단계(811)에서, 잠재적 레이스 상황이 보고된다.
도 9에 도 5와 유사한 포크 및 조인의 다이어그램을 나타냈지만, 레이스 검출은 본 발명의 접근법을 따른다. 실행의 개시(블럭(901))에서, 집합 Tx와 Bt는 비어있고, Sx는 로크 l을 포함하는 단원 집합임을 가정하자. 블럭(905)은 블럭(907) 이전에 실행된다고 가정하자.
블럭(905)의 실행 이후, Sx는 l을 포함하는 집합이고, Tx는 스레드 세그먼트 <t, 1>을 포함하는 집합이다. 블럭(907)의 실행 이후, Sx는 똑같이 남아있지만, Tx는 이제 2개의 스레드 세그먼트 <t, 1> 및 <t1, 0>을 포함한다. 조인한 이후, 블럭(909)에서, Bt는 스레드 세그먼트 <t1, 0>를 포함하는 집합이 된다. 블럭(911)에서, t가 x를 기록하기 전에, Sx는 l를 포함하는 집합이고, Tx는 여전히 2개의 스레드 세그먼트 <t, 1> 및 <t1, 0>를 포함하는 집합이다. 기록한 후, Sx는 비어있게 되고, Tx는 스레드 세그먼트 <t, 1>를 포함하는 집합이 된다(오직 t만이 동시에 x를 엑세스하는 스레드임). Tx의 원소 개수가 1이므로, 본 발명을 따라 레이스 상황은 보고되지 않는 것이 올바르다.
종래 기술에서, 이 명세서에 설명된 바와 같은 본 발명의 실시예에 포함된 유형의 레이스 검출기를 구현하기 위하여 광범위하게 사용되는 2가지 접근법이 있다. 제1 접근법은 소스 코드 또는 바이트 코드 레벨에 메모리 엑세스를 위한 호출을 삽입한다. 제2 접근법은 원시 코드에 로드 및 저장 명령어를 위한 호출을 삽입 한다. 이러한 종래의 접근법들은 동적으로 링크될 공유 라이브러리의 수가 매우 많은 경우에 레이스 검출툴의 실행을 더디게 한다. 보다 상세하게는, 높은 런타임 비용을 소요한다. 본 발명의 특정 실시예에서, 동적 레이스 검출기가 런타임 시스템 내에 대신 구현된다.
일 실시예에서, 레이스 검출기가 마이크로소프트사의 .NET 프레임워크의 공통 언어 런타임(CLR)에 구현된다. 바이트 코드를 원시 코드로 컴파일하는 JIT(Just-In-Time) 컴파일러가 수정되어, 코드가 동적으로 로드 및 컴파일될 때, 레이스 검출기로의 호출이 삽입되게 한다. 공유 메모리 객체를 할당하기 위한 메커니즘이 수정되어, 할당은 레이스 검출기를 위해 필요한 계측 정보를 객체 상에 추가하게 된다. 이 정보는 그후 런타임의 가비지 콜렉터(garbage collector)에 의해 자동적으로 관리된다.
이 구현 접근법은 이전 기술에 비해 수많은 이점을 갖고 있다. 첫째, 실행되는 모든 코드가 동적으로 계측된다. 둘째, 바이트 코드를 수정하는 것보다 JIT를 수정하는 것이 바이트 코드 검증 구에 관련된 특정한 문제점을 방지한다. 셋째, JIT가 호출을 레이스 검출기에 삽입하게 함으로써, 컴파일러에 의해 수집된 정보를 사용하여 계측을 최적화할 수 있게 된다. 예를 들어, 컴파일러가 필드가 판독 전용으로 선언되거나, 특정 스레드에 대해 국부적이고 다른 스레드들에는 보이지 않는다고 판정하면, 컴파일러는 계측이 필요하지 않다고 판정할 수 있다. 따라서, 레이스 검출기는 가비지 콜렉터와 잘 상호작용하여, 관리된 힙(heap) 상의 공유 객체만을 계측하고, 레이스 검출 계측에 의해 발생되는 잠재적 메모리 누설 문 제점을 방지한다. 마지막으로, 이 구현은 레이스 검출기 구현을 위한 표준 접근법에 존재하는 어느 정도의 간접성(indirection)을 제거한다는 점에서, 성능상의 이점을 제공한다.
본 발명의 취지에 속하는 다른 변형들이 있다. 따라서, 본 발명이 다양한 수정 및 대안적 구조에 영향을 받기 쉽지만, 특정한 실시예가 도면에 도시되고 상세히 설명됐다. 그러나, 본 발명을 상술한 특정 형태로 한정시키려고 한 것은 아니며, 오히려 본 발명은 첨부된 청구항에 정의된 바와 같은 본 발명의 영역 및 취지에 속하는 모든 수정, 대안적 구조, 및 등가물을 포함한다.
다르게 설명되거나 문맥에 의해 명백히 모순되지 않는 한, 여기에 설명된 모든 방법들은 임의의 적절한 순서로 수행될 수 있다. 여기에 제공된 임의의 예 및 모든 예, 또는 예시적인 단어(예를 들어, "바와 같은")의 사용은 단지 본 발명의 실시예를 보다 잘 설명하기 위한 것일 뿐, 다르게 주장되지 않는한 본 발명의 영역을 한정하기 위한 것은 아니다. 명세서의 어느 언어도 본 발명의 구현을 위해 필수적인, 임의의 주장되지 않은 구성요소를 나타내는 것으로 해석되지 않아야 한다.
설명된 본 발명의 바람직한 실시예는 발명자에게 알려진 본 발명을 행하기 최고의 모드를 포함한다. 바람직한 실시예의 변형은 당업자가 상술된 것을 읽음으로써 그들에게 명백해진다. 발명자는 당업자가 이러한 변형을 적절히 사용할 것을 예상하며, 발명자는 본 발명이 여기에 구체적으로 설명된 것과는 다르게 구현될 것을 의도한다. 따라서, 본 발명은 적용가능 법에 의해 허용된 바와 같이 첨부된 청구항에 언급된 주제의 모든 수정 및 등가물을 포함한다. 게다가, 모든 가능한 변 형의 상술된 구성요소의 임의의 조합은 다르게 설명되거나 문맥에 의해 모순되지 않는한 본 발명에 포함된다.
본 발명은 스레드 포크/조인 및 비동기 호출의 문맥에서, 많은 실패를 발생시킬 수 있는 종래 로크집합 접근법의 결점을 극복하는 동적 레이스 검출 시스템을 제공한다.
Claims (21)
- 적어도 하나의 스레드(thread) 및 하나 이상의 공유 메모리 위치를 갖는 프로그램 내의 잠재적 레이스 상황(potential race condition)을 동적으로 검출하기 위한 시스템으로서,프로세서를 포함하고, 상기 프로세서는,상기 적어도 하나의 스레드 중 각 스레드에 대하여 가상 클럭(Ct)을 각각 초기화하고;적어도 하나의 공유 메모리 위치(Sx) 중 각 메모리 위치에 대하여 후보 로크들의(lock)들의 집합을 초기화하고;적어도 하나의 스레드 중 각 스레드에 대해 홀드된 로크들의 집합(St)을 초기화하고;적어도 하나의 공유 메모리 위치 중 각 메모리 위치에 액세스하는 병행 스레드 세그먼트들의 집합(Tx)을 초기화하고;현재 스레드 다음에 순서화된 스레드 세그먼트들의 집합(Bt)을 초기화하고 - 상기 순서는 각 스레드와 관련된 상기 가상 클럭을 사용하여 매겨짐 - ;이전 스레드(t)에 의해 포크된 새로운 병행 스레드(t1)가 감지되면,상기 이전 스레드(t)와 연관된 상기 가상 클럭을 증가시키고;상기 새로운 병행 스레드(t1)와 연관된 상기 가상 클럭을 초기화하고,상기 이전 스레드(t)에 대하여 순서화된 스레드 세그먼트들의 집합(Bt)과 스레드 식별자와 가상 클럭 시간의 튜플을 포함하는 스레드 세그먼트 <t, Ct>를 갖는 단원소 집합의 합집합을 형성함으로써, 상기 새로운 병행 스레드(t1) 앞의 순서화된 스레드 세그먼트들의 집합(Bt1)을 계산하고,상기 이전 스레드(t)에 의해 조인 호출(join call)이 감지되면, 상기 순서화된 스레드 세그먼트들의 집합(Bt), 상기 이전 스레드(t)에 속하지 않는 상기 새로운 병행 스레드(t1) 앞의 제2 순서화된 스레드 세그먼트들의 집합(Bt1), 및 상기 새로운 병행 스레드(t1)와 연관된 현재 스레드 세그먼트를 포함하는 단원소 집합의 합집합을 형성함으로써, 상기 순서화된 스레드 세그먼트들의 집합(Bt)을 갱신하고,메모리 위치(x)에 대한 판독 또는 기록이 감지되면, 상기 포크 또는 조인 호출의 감지로부터 갱신된 상기 순서화된 스레드 세그먼트들의 집합(Bt)을 사용하여 상기 판독 또는 기록 후에 상기 메모리 위치(Tx)에 병행하여(concurrently) 액세스하는 병행 스레드 세그먼트들의 집합을 갱신함으로써, 잠재적 레이스 상황이 존재하는지 여부를 판정하도록 되어 있는, 시스템.
- 제1항에 있어서, 상기 프로세서는 또한,상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수(cardinality)가 1 이하인 경우, 로크 집합(St)의 현재 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 현재 값으로 설정하고,상기 병행 스레드 세그먼트들의 집합의 원소갯수가 2 이상인 경우, 메모리 위치(Sx)에 대한 후보 로크들의 집합의 새로운 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 이전 값과 상기 로크 집합(St)의 교집합으로 설정하고,상기 후보 로크들의 집합(Sx)이 공집합이고(empty), 상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수의 새로운 값이 2 이상인 경우, 잠재 레이스 상황을 보고하도록 되어 있는, 시스템.
- 적어도 하나의 스레드 및 하나 이상의 공유 메모리 위치를 갖는 프로그램 내의 잠재적 레이스 상황을 동적으로 검출하기 위한 방법으로서,상기 적어도 하나의 스레드 중 각 스레드에 대하여 가상 클럭(Ct)을 각각 초기화하는 단계;적어도 하나의 공유 메모리 위치(Sx) 중 각 메모리 위치에 대하여 후보 로크들의(lock)들의 집합을 초기화하는 단계;적어도 하나의 스레드 중 각 스레드에 대해 홀드된 로크들의 집합(St)을 초기화하는 단계;적어도 하나의 공유 메모리 위치 중 각 메모리 위치에 액세스하는 병행 스레드 세그먼트들의 집합(Tx)을 초기화하는 단계;현재 스레드 다음에 순서화된 스레드 세그먼트들의 집합(Bt)을 초기화하는 단계 - 상기 순서는 각 스레드와 관련된 상기 가상 클럭을 사용하여 매겨짐 - ;이전 스레드(t)에 의해 포크된 새로운 병행 스레드(t1)가 감지되면,상기 이전 스레드(t)와 연관된 상기 가상 클럭을 증가시키는 단계;상기 새로운 병행 스레드(t1)와 연관된 상기 가상 클럭을 초기화하는 단계,상기 이전 스레드(t)에 대하여 순서화된 스레드 세그먼트들의 집합(Bt)과 스레드 식별자와 가상 클럭 시간의 튜플을 포함하는 스레드 세그먼트 <t, Ct>를 갖는 단원소 집합의 합집합을 형성함으로써, 상기 새로운 병행 스레드(t1) 앞의 순서화된 스레드 세그먼트들의 집합(Bt1)을 계산하는 단계,상기 이전 스레드(t)에 의해 조인 호출이 감지되면, 상기 순서화된 스레드 세그먼트들의 집합(Bt), 상기 이전 스레드(t)에 속하지 않는 상기 새로운 병행 스레드(t1) 앞의 제2 순서화된 스레드 세그먼트들의 집합(Bt1), 및 상기 새로운 병행 스레드(t1)와 연관된 현재 스레드 세그먼트를 포함하는 단원소 집합의 합집합을 형성함으로써, 상기 순서화된 스레드 세그먼트들의 집합(Bt)을 갱신하는 단계,메모리 위치(x)에 대한 판독 또는 기록이 감지되면, 상기 포크 또는 조인 호출의 감지로부터 갱신된 상기 순서화된 스레드 세그먼트들의 집합(Bt)을 사용하여 상기 판독 또는 기록 후에 상기 메모리 위치(Tx)에 병행하여 액세스하는 병행 스레드 세그먼트들의 집합을 갱신함으로써, 잠재적 레이스 상황이 존재하는지 여부를 판정하는 단계, 및사용자에게 레이스 상황 결정의 결과를 출력하는 단계를 포함하는 방법.
- 제3항에 있어서,상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수가 1 이하인 경우, 로크 집합(St)의 현재 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 현재 값으로 설정하는 단계,상기 병행 스레드 세그먼트들의 집합의 원소갯수가 2 이상인 경우, 메모리 위치(Sx)에 대한 후보 로크들의 집합의 새로운 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 이전 값과 상기 로크 집합(St)의 교집합으로 설정하는 단계, 및상기 후보 로크들의 집합(Sx)이 공집합이고(empty), 상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수의 새로운 값이 2 이상인 경우, 잠재 레이스 상황을 보고하는 단계를 더 포함하는 방법.
- 적어도 하나의 스레드 및 하나 이상의 공유 메모리 위치를 갖는 프로그램 내의 잠재적 레이스 상황을 동적으로 검출하기 위한 컴퓨터 실행가능 명령어가 저장된 컴퓨터 판독가능 기록 매체로서, 상기 명령어는,상기 적어도 하나의 스레드 중 각 스레드에 대하여 가상 클럭(Ct)을 각각 초기화하는 것;적어도 하나의 공유 메모리 위치(Sx) 중 각 메모리 위치에 대하여 후보 로크들의(lock)들의 집합을 초기화하는 것;적어도 하나의 스레드 중 각 스레드에 대해 홀드된 로크들의 집합(St)을 초기화하는 것;적어도 하나의 공유 메모리 위치 중 각 메모리 위치에 액세스하는 병행 스레드 세그먼트들의 집합(Tx)을 초기화하는 것;현재 스레드 다음에 순서화된 스레드 세그먼트들의 집합(Bt)을 초기화하는 것 - 상기 순서는 각 스레드와 관련된 상기 가상 클럭을 사용하여 매겨짐 - ;이전 스레드(t)에 의해 포크된 새로운 병행 스레드(t1)가 감지되면,상기 이전 스레드(t)와 연관된 상기 가상 클럭을 증가시키는 것;상기 새로운 병행 스레드(t1)와 연관된 상기 가상 클럭을 초기화하는 것,상기 이전 스레드(t)에 대하여 순서화된 스레드 세그먼트들의 집합(Bt)과 스레드 식별자와 가상 클럭 시간의 튜플을 포함하는 스레드 세그먼트 <t, Ct>를 갖는 단원소 집합의 합집합을 형성함으로써, 상기 새로운 병행 스레드(t1) 앞의 순서화된 스레드 세그먼트들의 집합(Bt1)을 계산하는 것,상기 이전 스레드(t)에 의해 조인 호출이 감지되면, 상기 순서화된 스레드 세그먼트들의 집합(Bt), 상기 이전 스레드(t)에 속하지 않는 상기 새로운 병행 스레드(t1) 앞의 제2 순서화된 스레드 세그먼트들의 집합(Bt1), 및 상기 새로운 병행 스레드(t1)와 연관된 현재 스레드 세그먼트를 포함하는 단원소 집합의 합집합을 형성함으로써, 상기 순서화된 스레드 세그먼트들의 집합(Bt)을 갱신하는 것,메모리 위치(x)에 대한 판독 또는 기록이 감지되면, 상기 포크 또는 조인 호출의 감지로부터 갱신된 상기 순서화된 스레드 세그먼트들의 집합(Bt)을 사용하여 상기 판독 또는 기록 후에 상기 메모리 위치(Tx)에 병행하여 액세스하는 병행 스레드 세그먼트들의 집합을 갱신함으로써, 잠재적 레이스 상황이 존재하는지 여부를 판정하는 것, 및사용자에게 레이스 상황 결정의 결과를 출력하는 것를 포함하는 컴퓨터 판독가능 기록 매체.
- 제5항에 있어서, 상기 명령어는,상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수가 1 이하인 경우, 로크 집합(St)의 현재 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 현재 값으로 설정하는 것,상기 병행 스레드 세그먼트들의 집합의 원소갯수가 2 이상인 경우, 메모리 위치(Sx)에 대한 후보 로크들의 집합의 새로운 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 이전 값과 상기 로크 집합(St)의 교집합으로 설정하는 것, 및상기 후보 로크들의 집합(Sx)이 공집합이고(empty), 상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수의 새로운 값이 2 이상인 경우, 잠재 레이스 상황을 보고하는 것를 더 포함하는 컴퓨터 판독가능 기록 매체.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/808,110 US7549150B2 (en) | 2004-03-24 | 2004-03-24 | Method and system for detecting potential races in multithreaded programs |
US10/808,110 | 2004-03-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20060044639A KR20060044639A (ko) | 2006-05-16 |
KR101143214B1 true KR101143214B1 (ko) | 2012-05-18 |
Family
ID=34939023
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020050024208A KR101143214B1 (ko) | 2004-03-24 | 2005-03-23 | 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7549150B2 (ko) |
EP (1) | EP1591895B1 (ko) |
JP (1) | JP4965081B2 (ko) |
KR (1) | KR101143214B1 (ko) |
CN (1) | CN100517235C (ko) |
Families Citing this family (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8266600B2 (en) * | 2005-03-28 | 2012-09-11 | Nec Laboratories America, Inc. | Model checking of multi threaded software |
US7716645B2 (en) * | 2005-06-10 | 2010-05-11 | International Business Machines Corporation | Using atomic sets of memory locations |
US7784035B2 (en) * | 2005-07-05 | 2010-08-24 | Nec Laboratories America, Inc. | Method for the static analysis of concurrent multi-threaded software |
US7849369B2 (en) | 2005-10-25 | 2010-12-07 | Waratek Pty Ltd. | Failure resistant multiple computer system and method |
US7793263B2 (en) * | 2006-02-02 | 2010-09-07 | International Business Machines Corporation | Decision support tool for interleaving review software testing |
JP2007257397A (ja) * | 2006-03-24 | 2007-10-04 | Fujitsu Ltd | 競合状態検出処理追加プログラム、競合状態検出処理追加装置、競合状態検出処理追加方法 |
US7673181B1 (en) * | 2006-06-07 | 2010-03-02 | Replay Solutions, Inc. | Detecting race conditions in computer programs |
US20080126503A1 (en) * | 2006-10-05 | 2008-05-29 | Holt John M | Contention resolution with echo cancellation |
US7949837B2 (en) * | 2006-10-05 | 2011-05-24 | Waratek Pty Ltd. | Contention detection and resolution |
US20080127213A1 (en) * | 2006-10-05 | 2008-05-29 | Holt John M | Contention resolution with counter rollover |
US7971005B2 (en) * | 2006-10-05 | 2011-06-28 | Waratek Pty Ltd. | Advanced contention detection |
US8095616B2 (en) * | 2006-10-05 | 2012-01-10 | Waratek Pty Ltd. | Contention detection |
WO2008040075A1 (en) * | 2006-10-05 | 2008-04-10 | Waratek Pty Limited | Contention detection with modified message format |
US20080250221A1 (en) * | 2006-10-09 | 2008-10-09 | Holt John M | Contention detection with data consolidation |
US8185874B2 (en) | 2006-11-07 | 2012-05-22 | Microsoft Corporation | Automatic and systematic detection of race conditions and atomicity violations |
CN101206692B (zh) * | 2006-12-20 | 2011-04-27 | 联想(北京)有限公司 | 检测进程的方法及设备 |
US8185875B2 (en) * | 2007-01-24 | 2012-05-22 | Nec Laboratories America, Inc. | Fast and accurate static data-race detection for concurrent programs |
US7861118B2 (en) * | 2007-03-30 | 2010-12-28 | Microsoft Corporation | Machine instruction level race condition detection |
US8621468B2 (en) * | 2007-04-26 | 2013-12-31 | Microsoft Corporation | Multi core optimizations on a binary using static and run time analysis |
JP4888272B2 (ja) * | 2007-07-30 | 2012-02-29 | 富士通セミコンダクター株式会社 | ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 |
US7971248B2 (en) * | 2007-08-15 | 2011-06-28 | Microsoft Corporation | Tolerating and detecting asymmetric races |
US8117601B2 (en) * | 2007-11-14 | 2012-02-14 | Microsoft Corporation | Internal test and manipulation of an application |
US8527976B2 (en) * | 2007-11-14 | 2013-09-03 | Nec Laboratories America, Inc. | System and method for generating error traces for concurrency bugs |
US8141082B2 (en) * | 2008-02-28 | 2012-03-20 | Intel Corporation | Node-based representation of multi-threaded computing environment tasks, and node-based data race evaluation |
US8200947B1 (en) * | 2008-03-24 | 2012-06-12 | Nvidia Corporation | Systems and methods for voting among parallel threads |
US8769514B2 (en) * | 2008-06-27 | 2014-07-01 | Microsoft Corporation | Detecting race conditions with a software transactional memory system |
US8032706B2 (en) * | 2008-08-05 | 2011-10-04 | Intel Corporation | Method and apparatus for detecting a data access violation |
US7941616B2 (en) * | 2008-10-21 | 2011-05-10 | Microsoft Corporation | System to reduce interference in concurrent programs |
US8418146B2 (en) * | 2008-11-26 | 2013-04-09 | Microsoft Corporation | Sampling techniques for dynamic data-race detection |
US8135690B2 (en) * | 2009-01-05 | 2012-03-13 | Microsoft Corporation | Concurrency object classification |
US8542247B1 (en) | 2009-07-17 | 2013-09-24 | Nvidia Corporation | Cull before vertex attribute fetch and vertex lighting |
US8564616B1 (en) | 2009-07-17 | 2013-10-22 | Nvidia Corporation | Cull before vertex attribute fetch and vertex lighting |
US8976195B1 (en) | 2009-10-14 | 2015-03-10 | Nvidia Corporation | Generating clip state for a batch of vertices |
US8384736B1 (en) | 2009-10-14 | 2013-02-26 | Nvidia Corporation | Generating clip state for a batch of vertices |
US8595692B2 (en) * | 2010-03-22 | 2013-11-26 | International Business Machines Corporation | Identifying lock granularization opportunities |
US8433954B2 (en) | 2010-04-20 | 2013-04-30 | Microsoft Corporation | Testing components for thread safety |
US9069894B2 (en) * | 2010-06-18 | 2015-06-30 | Microsoft Technology Licensing, Llc | Data collisions in concurrent programs |
US10241894B2 (en) | 2010-06-25 | 2019-03-26 | Microsoft Technology Licensing, Llc | Data-scoped dynamic data race detection |
WO2012038780A1 (en) * | 2010-09-23 | 2012-03-29 | Freescale Semiconductor, Inc. | Method and device for detecting a race condition |
CN102063328B (zh) * | 2010-12-17 | 2012-12-26 | 北京控制工程研究所 | 一种用于检测中断驱动型程序数据竞争的系统 |
US8813038B2 (en) | 2011-02-09 | 2014-08-19 | Microsoft Corporation | Data race detection |
US9081628B2 (en) | 2011-05-27 | 2015-07-14 | Intel Corporation | Detecting potential access errors in a multi-threaded application |
CN103092682B (zh) * | 2011-10-28 | 2016-09-28 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
US8813042B2 (en) * | 2012-04-06 | 2014-08-19 | Hwlett-Packard Development Company, L. P. | Identifying globally consistent states in a multithreaded program |
US9038080B2 (en) * | 2012-05-09 | 2015-05-19 | Nvidia Corporation | Method and system for heterogeneous filtering framework for shared memory data access hazard reports |
TWI464580B (zh) * | 2012-12-24 | 2014-12-11 | Ind Tech Res Inst | 資料儲存方法、採用此方法的資料儲存系統及需求節點 |
US9619364B2 (en) | 2013-03-14 | 2017-04-11 | Nvidia Corporation | Grouping and analysis of data access hazard reports |
US9842009B2 (en) | 2013-05-13 | 2017-12-12 | Nxp Usa, Inc. | Method and device for detecting a race condition and a computer program product |
CN103488563B (zh) * | 2013-09-05 | 2017-04-12 | 龙芯中科技术有限公司 | 并行程序的数据竞争检测方法、装置及多核处理系统 |
US9886736B2 (en) | 2014-01-20 | 2018-02-06 | Nvidia Corporation | Selectively killing trapped multi-process service clients sharing the same hardware context |
CN104978272B (zh) * | 2015-07-08 | 2018-05-18 | 中国科学院软件研究所 | 一种用于数据竞争检测的程序调度方法 |
CN105260312B (zh) * | 2015-10-26 | 2018-04-06 | 北京航空航天大学 | 一种多核实时系统应用数据竞争错误的调试方法 |
CN106201732B (zh) * | 2016-07-18 | 2019-05-14 | 电子科技大学 | 在粒子模拟算法并行中去除数据竞争的线分配并行方法 |
CN109324916B (zh) * | 2018-08-09 | 2022-02-08 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN110059014B (zh) * | 2019-04-28 | 2022-09-27 | 西安邮电大学 | 一种并发程序数据竞争指令级定位方法 |
US11138093B2 (en) * | 2019-04-30 | 2021-10-05 | Microsoft Technology Licensing, Llc | Identifying data inconsistencies and data contention based on historic debugging traces |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10254716A (ja) | 1997-03-10 | 1998-09-25 | Digital Equip Corp <Dec> | マルチスレッデッドプログラムにおけるコンカレントエラーの検出 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5161227A (en) | 1989-11-13 | 1992-11-03 | International Business Machines Corporation | Multilevel locking system and method |
JPH05134886A (ja) | 1990-11-30 | 1993-06-01 | Fujitsu Ltd | デツドロツク検出方式 |
US5193180A (en) * | 1991-06-21 | 1993-03-09 | Pure Software Inc. | System for modifying relocatable object code files to monitor accesses to dynamically allocated memory |
US6920634B1 (en) * | 1998-08-03 | 2005-07-19 | International Business Machines Corporation | Detecting and causing unsafe latent accesses to a resource in multi-threaded programs |
US6405326B1 (en) | 1999-06-08 | 2002-06-11 | International Business Machines Corporation Limited | Timing related bug detector method for detecting data races |
US6546443B1 (en) | 1999-12-15 | 2003-04-08 | Microsoft Corporation | Concurrency-safe reader-writer lock with time out support |
US7516446B2 (en) | 2002-06-25 | 2009-04-07 | International Business Machines Corporation | Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs |
-
2004
- 2004-03-24 US US10/808,110 patent/US7549150B2/en not_active Expired - Fee Related
-
2005
- 2005-03-21 EP EP05102224.2A patent/EP1591895B1/en not_active Not-in-force
- 2005-03-23 KR KR1020050024208A patent/KR101143214B1/ko not_active IP Right Cessation
- 2005-03-24 JP JP2005086776A patent/JP4965081B2/ja not_active Expired - Fee Related
- 2005-03-24 CN CNB2005100637330A patent/CN100517235C/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10254716A (ja) | 1997-03-10 | 1998-09-25 | Digital Equip Corp <Dec> | マルチスレッデッドプログラムにおけるコンカレントエラーの検出 |
Non-Patent Citations (1)
Title |
---|
논문:ACM TRANSACTION ON COMPUTER SYSTEMS * |
Also Published As
Publication number | Publication date |
---|---|
US7549150B2 (en) | 2009-06-16 |
CN1677353A (zh) | 2005-10-05 |
CN100517235C (zh) | 2009-07-22 |
EP1591895B1 (en) | 2016-11-16 |
KR20060044639A (ko) | 2006-05-16 |
JP2005285122A (ja) | 2005-10-13 |
JP4965081B2 (ja) | 2012-07-04 |
EP1591895A3 (en) | 2007-07-18 |
EP1591895A2 (en) | 2005-11-02 |
US20050216798A1 (en) | 2005-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101143214B1 (ko) | 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 | |
US6009269A (en) | Detecting concurrency errors in multi-threaded programs | |
US6343371B1 (en) | System and method for statically detecting potential race conditions in multi-threaded computer programs | |
US6854108B1 (en) | Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors | |
US8095921B2 (en) | Identifying code that wastes time switching tasks | |
Harrow Jr | Runtime checking of multithreaded applications with visual threads | |
Perkovic et al. | Online data-race detection via coherency guarantees | |
US6817009B2 (en) | Method and apparatus for verifying data local to a single thread | |
US7992146B2 (en) | Method for detecting race conditions involving heap memory access | |
US8661450B2 (en) | Deadlock detection for parallel programs | |
US10241894B2 (en) | Data-scoped dynamic data race detection | |
Flanagan et al. | FastTrack: efficient and precise dynamic race detection | |
US7844971B2 (en) | Method and apparatus for detecting cross-thread stack access in multithreaded programs | |
Jannesari et al. | Helgrind+: An efficient dynamic race detector | |
US20110258608A1 (en) | Method and apparatus to locate bottleneck of java program | |
US20020120428A1 (en) | Topological, on-the-fly classification of objects into a global set and local sets | |
KR20110114432A (ko) | 멀티스레드 프로그램에서 교착을 감지하기 위한 방법 및 시스템 | |
US8356284B2 (en) | Threading model analysis system and method | |
US7844977B2 (en) | Identifying unnecessary synchronization objects in software applications | |
US8135690B2 (en) | Concurrency object classification | |
WO2015027403A1 (en) | Testing multi-threaded applications | |
CN114428733A (zh) | 基于静态程序分析与模糊测试的内核数据竞争检测方法 | |
US8332858B2 (en) | Lock suitability analysis during execution of computer program under test | |
Qadeer et al. | Runtime verification of concurrency-specific correctness criteria | |
Yang et al. | HistLock: Efficient and sound hybrid detection of hidden predictive data races with functional contexts |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
LAPS | Lapse due to unpaid annual fee |