KR101143214B1 - 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 - Google Patents

멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 Download PDF

Info

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
Application number
KR1020050024208A
Other languages
English (en)
Other versions
KR20060044639A (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 KR20060044639A publication Critical patent/KR20060044639A/ko
Application granted granted Critical
Publication of KR101143214B1 publication Critical patent/KR101143214B1/ko

Links

Images

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41KSTAMPS; STAMPING OR NUMBERING APPARATUS OR DEVICES
    • B41K1/00Portable 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/02Portable 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
    • 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
    • G06F9/526Mutual exclusion algorithms
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41KSTAMPS; STAMPING OR NUMBERING APPARATUS OR DEVICES
    • B41K1/00Portable 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/36Details

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

멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기 위한 방법 및 시스템{METHOD AND SYSTEM FOR DETECTING POTENTIAL RACES IN MULTITHREADED PROGRAM}
도 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)

  1. 적어도 하나의 스레드(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) 액세스하는 병행 스레드 세그먼트들의 집합을 갱신함으로써, 잠재적 레이스 상황이 존재하는지 여부를 판정하도록 되어 있는, 시스템.
  2. 제1항에 있어서, 상기 프로세서는 또한,
    상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수(cardinality)가 1 이하인 경우, 로크 집합(St)의 현재 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 현재 값으로 설정하고,
    상기 병행 스레드 세그먼트들의 집합의 원소갯수가 2 이상인 경우, 메모리 위치(Sx)에 대한 후보 로크들의 집합의 새로운 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 이전 값과 상기 로크 집합(St)의 교집합으로 설정하고,
    상기 후보 로크들의 집합(Sx)이 공집합이고(empty), 상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수의 새로운 값이 2 이상인 경우, 잠재 레이스 상황을 보고하도록 되어 있는, 시스템.
  3. 적어도 하나의 스레드 및 하나 이상의 공유 메모리 위치를 갖는 프로그램 내의 잠재적 레이스 상황을 동적으로 검출하기 위한 방법으로서,
    상기 적어도 하나의 스레드 중 각 스레드에 대하여 가상 클럭(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)에 병행하여 액세스하는 병행 스레드 세그먼트들의 집합을 갱신함으로써, 잠재적 레이스 상황이 존재하는지 여부를 판정하는 단계, 및
    사용자에게 레이스 상황 결정의 결과를 출력하는 단계
    를 포함하는 방법.
  4. 제3항에 있어서,
    상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수가 1 이하인 경우, 로크 집합(St)의 현재 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 현재 값으로 설정하는 단계,
    상기 병행 스레드 세그먼트들의 집합의 원소갯수가 2 이상인 경우, 메모리 위치(Sx)에 대한 후보 로크들의 집합의 새로운 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 이전 값과 상기 로크 집합(St)의 교집합으로 설정하는 단계, 및
    상기 후보 로크들의 집합(Sx)이 공집합이고(empty), 상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수의 새로운 값이 2 이상인 경우, 잠재 레이스 상황을 보고하는 단계
    를 더 포함하는 방법.
  5. 적어도 하나의 스레드 및 하나 이상의 공유 메모리 위치를 갖는 프로그램 내의 잠재적 레이스 상황을 동적으로 검출하기 위한 컴퓨터 실행가능 명령어가 저장된 컴퓨터 판독가능 기록 매체로서, 상기 명령어는,
    상기 적어도 하나의 스레드 중 각 스레드에 대하여 가상 클럭(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)에 병행하여 액세스하는 병행 스레드 세그먼트들의 집합을 갱신함으로써, 잠재적 레이스 상황이 존재하는지 여부를 판정하는 것, 및
    사용자에게 레이스 상황 결정의 결과를 출력하는 것
    를 포함하는 컴퓨터 판독가능 기록 매체.
  6. 제5항에 있어서, 상기 명령어는,
    상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수가 1 이하인 경우, 로크 집합(St)의 현재 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 현재 값으로 설정하는 것,
    상기 병행 스레드 세그먼트들의 집합의 원소갯수가 2 이상인 경우, 메모리 위치(Sx)에 대한 후보 로크들의 집합의 새로운 값을 상기 메모리 위치(Sx)에 대한 후보 로크들의 집합의 이전 값과 상기 로크 집합(St)의 교집합으로 설정하는 것, 및
    상기 후보 로크들의 집합(Sx)이 공집합이고(empty), 상기 병행 스레드 세그먼트들의 집합(Tx)의 원소갯수의 새로운 값이 2 이상인 경우, 잠재 레이스 상황을 보고하는 것
    를 더 포함하는 컴퓨터 판독가능 기록 매체.
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
KR1020050024208A 2004-03-24 2005-03-23 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 KR101143214B1 (ko)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10254716A (ja) 1997-03-10 1998-09-25 Digital Equip Corp <Dec> マルチスレッデッドプログラムにおけるコンカレントエラーの検出

Family Cites Families (7)

* Cited by examiner, † Cited by third party
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10254716A (ja) 1997-03-10 1998-09-25 Digital Equip Corp <Dec> マルチスレッデッドプログラムにおけるコンカレントエラーの検出

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
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