KR100985318B1 - 운영 체계 서비스의 투명한 지원을 위한 방법 및 제품 - Google Patents

운영 체계 서비스의 투명한 지원을 위한 방법 및 제품 Download PDF

Info

Publication number
KR100985318B1
KR100985318B1 KR1020077026304A KR20077026304A KR100985318B1 KR 100985318 B1 KR100985318 B1 KR 100985318B1 KR 1020077026304 A KR1020077026304 A KR 1020077026304A KR 20077026304 A KR20077026304 A KR 20077026304A KR 100985318 B1 KR100985318 B1 KR 100985318B1
Authority
KR
South Korea
Prior art keywords
thread
operating system
sequencer
instructions
service
Prior art date
Application number
KR1020077026304A
Other languages
English (en)
Other versions
KR20070121836A (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 KR20070121836A publication Critical patent/KR20070121836A/ko
Application granted granted Critical
Publication of KR100985318B1 publication Critical patent/KR100985318B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • 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/524Deadlock detection or avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc

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)
  • Executing Machine-Instructions (AREA)
  • Exchange Systems With Centralized Control (AREA)

Abstract

운영 체계 서비스가 이 운영 체계에 대해서 비가시적인(invisible) 쓰레드 실행 자원(시퀀서)을 위해서 투명하게 트리거된다. 운영 체계에 대해서 가시적이면서 이 운영 체계에 의해서 관리되는 대리 쓰레드(surrogate thread)가 사용되어서 상기 운영 체계에 대해서 비가시적인 시퀀서 대신에 상기 운영 체계 서비스를 획득한다. 이로써, 쓰레드 특정 자원에 대한 다중 쉬레드 경합(multi shred contention)은 경감된다. 또한, 다른 실시예들이 기술 및 청구된다.

Description

운영 체계 서비스의 투명한 지원을 위한 방법 및 제품{TRANSPARENT SUPPORT FOR OPERATING SYSTEM SERVICES}
본 발명은 전반적으로 정보 처리 시스템에 관한 것이며, 특히 다중 시퀀서 다중 쓰레딩 시스템(multi-sequencer multithreading system) 내의 격리된 시퀀서(OS sequestered sequencer)에 대해 운영 체계 서비스를 지원하는 기술 분야에 관한 것이다.
마이크로프로세서를 포함하는 정보 처리 시스템의 성능을 개선하기 위해서, 하드웨어 및 소프트웨어 모두가 사용되어 왔다. 하드웨어 측에서, 마이크로프로세서 성능을 개선하기 위한 마이크로프로세서 설계 방식은 클록 속도 증가 방식, 파이프라이닝 방식, 분기 예측 방식, 슈퍼 스칼라 실행 방식, 비순차 실행 방식 및 캐시 방식을 포함하였다. 이러한 다수의 방식들은 트랜지스터 개수를 증가시켰고, 몇몇 실시예에서는 트랜지스터 개수는 성능 개선 레이트보다 큰 레이트로 증가하게 되었다.
이렇게 트랜지스터를 증가시키는 것으로 성능을 개선하는 방식이 아닌 소프 트웨어 기술도 정보 처리 시스템의 성능을 개선한다. 프로세서 성능을 개선하기 위해 사용되었던 일 소프트웨어 방식은 “다중 쓰레딩(multithreading)”으로 알려져 있다. 소프트웨어 다중 쓰레딩 방식에서, 인스트럭션 스트림은 병렬로 실행될 수 있는 다수의 인스트럭션 스트림으로 분할될 수 있다. 이와 달리, 다수의 독립 소프트웨어 스트림들이 병렬로 실행될 수 있다.
타임 슬라이스 다중 쓰레딩(time-slice multithreading) 또는 타임 멀티플렉스(TMUX) 다중 쓰레딩으로 알려진 일 방식에서, 단일 프로세서는 고정된 기간 후에 쓰레드(thread) 간을 스위칭한다. 또 다른 방식에서, 단일 프로세서는 긴 레이턴시 캐시 미스(a long latency cache miss)와 같은 트리거 이벤트가 발생하면 쓰레드 간을 스위칭한다. SoMET(switch-on-event multithreading)으로 알려진 이 후자의 방식에서, 많아야 하나의 쓰레드만이 소정의 시간에 활성화된다.
다중 쓰레딩 방식은 점점 하드웨어에서 지원되고 있다. 가령, 일 실례에서, 칩 마이크로프로세서(CMP) 시스템과 같은 다중 프로세서 시스템 내의 프로세서들은 각각 다수의 소프트웨어 쓰레드 중 하나의 쓰레드 상에서 동시에 동작할 수 있다. SMT(simultaneous multithreading)으로 알려진 다른 방식에서, 단일 물리적 프로세서는 운영 체계 및 사용자 프로그램에 대해서 다수의 논리적 프로세서로서 나타나게 된다. SMT에 있어서, 다수의 소프트웨어 쓰레드들은 활성화되어서 스위칭되지 않고 단일 프로세서 상에서 동시에 실행될 수 있다. 즉, 각 논리적 프로세서는 완전한 아키텍처 상태 세트를 유지하지만, 캐시, 실행 유닛, 분기 예측 유닛, 제어 로직 유닛 및 버스와 같은 이 물리적 프로세서 이외의 수 많은 다른 자원들은 공유 된다. 따라서, SMT에 있어서, 다수의 소프트웨어 쓰레드로부터의 인스트럭션들은 각 논리적 프로세서 상에서 동시에 실행된다.
이러한 SMT 시스템 및/또는 CMP 시스템과 같은 다수의 소프트웨어 쓰레드의 동시적 실행을 지원하는 시스템에 있어서, 운영 체계 애플리케이션은 쓰레드 실행 자원 상에서의 소프트웨어 쓰레드의 스케줄링 및 실행을 제어한다. 또한, 이러한 운영 체계 애플리케이션은 자신이 제어하는 쓰레드들에 대해서 동기화 오브젝트(synchronization object) 및 구조화된 예외 처리(structured exception handling)와 같은 소정의 서비스를 제공한다.
본 발명의 실시예들은 다음의 첨부 도면을 참조하면 잘 이해될 것이며, 이 도면들에서 유사한 구성 요소에는 유사한 참조 부호가 부여된다. 하지만, 이러한 도면들은 본 발명을 한정하기보다는 격리된 시퀀서에 대해 소정의 운영 체계 서비스를 투명하게 지원하는 시스템, 방법 및 메카니즘의 선택된 실시예들을 제공할 뿐이다.
도 1은 다중 시퀀서 시스템의 다양한 실시예들을 설명하는 블록도,
도 2는 다중 시퀀서 시스템을 위한 병렬 프로그래밍 방식을 그래픽적으로 표현한 블록도,
도 3은 쉬레드 프록시 실행 메카니즘(a shred proxy execution mechanism)의 적어도 일 실시예를 나타내는 흐름도,
도 4는 대리 쓰레드(surrogate thread)를 사용하는 다중 시퀀서 시스템을 위한 일반적 병렬 프로그래밍 방식을 그래픽적으로 표현한 블록도,
도 5는 대리 쓰레드를 사용하는 쉬레드 프록시 실행 메카니즘의 적어도 일 실시예를 나타내는 제어 흐름도,
도 6은 쓰레드 특정 자원(thread-specific resource)을 향한 다중 쉬레드 경합(multi-shred contention)에 의해서 발생할 수 있는 일 타입의 데드락(deadlock)의 실례를 제시하는 타이밍 도면,
도 7 및 도 8은 다중 쉬레드형 시스템(multi-shredded system)에서 데드락을 피하기 위해서 “대리 쓰레드”를 사용하는 실례를 설명하는 타이밍 도면,
삭제
삭제
삭제
도 9는 개시된 기술들을 수행할 수 있는 시스템의 적어도 일 실시예를 나타내는 블록도.
다음의 상세한 설명 부분은 운영 체계의 시야에서 볼 때 격리된 쓰레드 실행 자원(시퀀서)를 위한 운영 체계 서비스를 투명하게 트리거하는 방법, 시스템 및 메카니즘의 선택된 실시예들을 기술한다. 본 명세서에서 기술된 메카니즘 및 방법은 단일 코어 다중 쓰레딩 시스템 또는 다중 코어 다중 쓰레딩 시스템에서 사용될 수 있다. 다음의 설명 부분에서, 프로세서 타입, 다중 쓰레딩 환경, 시스템 구성, 데이터 구조 및 특정 운영 체계 서비스와 같은 수많은 특정 세부 사항들은 본 발명의 실시예들을 보다 철저하게 이해하는 것을 돕기 위해서 제공되었다. 그러나, 본 기술 분야의 당업자는 본 발명이 이러한 특정 세부 사항 없이도 실행될 수 있음을 이해할 것이다. 또한, 몇몇 잘 알려진 구조 및 회로 등은 본 발명을 불필요하게 모호하게 하기 때문에 세부적으로 도시되지는 않는다.
도 1은 쓰레드를 사용자 레벨에서 제어하는 것을 지원하는 다중 시퀀서 시스템의 실시예들(310,350)의 선택된 하드웨어 특징을 나타낸 블록도이다. 도 1은 SMT 다중 시퀀서 다중 쓰레딩 환경(310)의 선택된 하드웨어 특징을 도시한다. 도 1은 또한 각 시퀀서가 개별 물리적 프로세서 코어인 다중 코어 다중 쓰레딩 환경(350)의 선택된 하드웨어 특징을 도시한다.
SMT 환경(310)에서, 단일 물리적 프로세서(304)는 운영 체계 및 사용자 프로 그램에 대해서 본 명세서에서 LP1 내지 LPn으로 지칭되는 다수의 논리적 프로세서(미도시)로 보이게 된다. 각 논리적 프로세서(LP1 내지 LPn)는 각기 완전한 아키텍처 상태 세트(AS1 내지 ASn)를 유지한다. 아키텍처 상태(312a, 312b)는 적어도 일 실시예의 경우에 데이터 레지스터, 세그멘트 레지스터, 제어 레지스터, 디버그 레지스터 및 대부분의 모델 특정 레지스터를 포함한다.
각 논리적 프로세서(LP1 내지 LPn)는 캐시, 실행 유닛, 분기 예측 유닛, 제어 로직 유닛 및 버스와 같은 이 물리적 프로세서(304) 이외의 대부분의 다른 자원들을 공유한다. 이러한 자원들이 공유될지라도, SMT 환경(310)에서의 각 쓰레드 컨텍스트(thread context)는 독립적으로 다음의 인스트럭션 어드레스를 생성한다(또한, 인스트럭션 캐시, 실행 인스트럭션 캐시 또는 트레이스 캐시로부터의 페치를 수행한다).
따라서, 다수의 논리적 시퀀서가 단일 물리적 페치/디코드 유닛(322)으로 구현될지라도, 프로세서(304)는 각 쓰레드 컨텍스트에 대한 인스트럭션을 페치하기 위해서 논리적으로 독립적인 넥스트 인스트럭션 포인터 앤드 페치 로직(next-instruction-pointer and fetch logic)(320)을 포함한다. SMT 환경에서, 용어 “시퀀서”는 쓰레드 컨텍스트에 대한 적어도 몇 개의 관련 아키텍처 상태 AS와 함께 상기 쓰레드 컨텍스트를 위한 넥스트 인스트럭션 포인터 앤드 페치 로직(320)을 적어도 포함한다. SMT 시스템(310)의 시퀀서는 대칭적일 필요는 없다. 가령, 동일한 물리적 코어에 대한 2 개의 SMT 시퀀서들은 이들 각각이 유지하고 있는 아키텍처 상태 정보의 양에 있어서 상이할 수 있다.
따라서, 적어도 일 실시예에 있어서, 다중 시퀀서 시스템(310)은 동시 발생적 다중 쓰레딩을 지원하는 단일 프로세서 코어(304)이다. 이러한 실시예에 있어서, 동일한 물리적 프로세서 코어(304)가 모든 쓰레드 인스트럭션을 실행할지라도, 각 시퀀서는 자신의 고유의 넥스트 인스트럭션 포인터 앤드 페치 로직 및 아키텍처 상태 정보를 갖는 논리적 프로세서이다. 이러한 실시예에 있어서, 단일 프로세서 코어(304)의 실행 자원들이 동시 발생적으로 실행되는 쓰레드들에 의해서 공유될지라도, 이 논리적 프로세서는 자신의 고유의 버전의 아키텍처 상태를 유지한다.
도 1은 또한 다중 코어 다중 쓰레딩 환경(350)의 적어도 일 실시예를 도시한다. 이러한 환경(350)은 서로 상이한 쓰레드들의 적어도 일부분들의 실행이 동시에 진행될 수 있도록 각각 물리적 프로세서가 이러한 서로 상이한 쓰레드들을 실행할 수 있는 하나 이상의 개별 물리적 프로세서(304a 내지 304n)를 포함한다. 각 프로세서(304a 내지 304n)는 각 쓰레드에 대한 인스트럭션 정보를 페치하기 위해 물리적으로 독립된 페치/디코드 유닛(322)을 포함한다. 각 프로세서(304a 내지 304n)가 단일 쓰레드를 실행하는 실시예에서, 상기 페치/디코드 유닛(322)은 단일 넥스트 인스트럭션 포인터 앤드 페치 로직(320)을 구현한다. 그러나, 각 프로세서(304a 내지 304n)가 다수의 쓰레드 컨텍스트를 지원하는 실시예에서, 상기 페치/디코드 유닛(322)은 각 지원된 쓰레드 컨텍스트에 대해 개별적인 넥스트 인스트럭션 포인터 앤드 페치 로직(320)을 구현한다. 다중 프로세서 환경(350)에서 선택 사양적인 추가 넥스트 인스트럭션 포인터 앤드 페치 로직(320)이 도 1에서 점선으로 표시된다.
따라서, 도 1에 도시된 다중 코어 시스템(350)의 적어도 일 실시예에 있어서, 시퀀서 각각이 프로세서 코어(304)이며, 다수의 코어(304a 내지 304n)는 단일 칩 패키지(360) 내에 존재한다. 각 프로세서 코어(304a 내지 304n)는 단일 쓰레드형 프로세서 코어 또는 다중 쓰레드형 프로세서 코어 중 어느 하나이다. 다중 코어 시스템(350) 중 오직 단일 칩 실시예가 도시되었음을 표시하도록 칩 패키지(360)는 도 1에서 파선으로 도시된다. 다른 실시예의 경우에, 다중 코어 시스템의 프로세서 코어들은 개별 칩 상에 존재한다.
이해를 용이하게 하기 위해서, 다음의 설명 부분은 다중 코어 시스템(350)의 실시예를 중심으로 한다. 그러나, 이렇게 다중 코어 시스템을 들어서 설명하는 것이 본 발명을 그로만 한정하지는 못하는데, 그 이유는 이하에서 기술될 메카니즘들이 단일 코어 다중 시퀀서 환경 또는 다중 코어 다중 시퀀스 환경에서 수행될 수 있기 때문이다.
도 2는 다중 시퀀스 다중 스레딩 시스템을 위한 병렬 프로그래밍 방식을 그래픽적으로 표현하고 있는 블록도이다. 공유형 메모리 다중 처리 패러다임이 병렬 프로그래밍으로 지칭되는 방식에서 사용된다. 이러한 방식에 따라서, 애플리케이션 프로그래머는 때때로 “애플리케이션” 또는 “프로세스”로 지칭되는 소프트웨어 프로그램을 동시적으로 실행하게 되는 다수의 쓰레드로 분할하여 이 소프트웨어 프로그램의 병렬성(paralleism)을 표현한다. 동일한 소프트웨어 프로그램(프로세스)의 모든 쓰레드들은 동일한 메모리에 대해서 논리적으로 가시적이다.
도 2는 운영 체계(140)에 대해서 가시적인(visible) 프로세스(100,120)를 도 시한다. 이 프로세스(100,120)는 가령 워드 프로세싱 프로그램 및 전자 메일 관리 프로그램과 같은 서로 다른 소프트웨어 애플리케이션 프로그램이다. 통상적으로, 각 프로세스는 서로 다른 어드레스 공간에서 실행된다.
운영 체계(OS)(140)는 통상적으로 프로세스(120)와 같은 프로세스에 대해 사용자에 의해 생성된 태스크를 관리하는 기능을 감당한다. 따라서, 운영 체계(140)는 프로세스(120)와 관련된 각 사용자 규정형 태스크에 대해서 개별 쓰레드(125,126)를 생성하고, 이 생성된 쓰레드(125,126)를 쓰레드 실행 자원에 맵핑한다. OS(140)는 통상적으로 이 쓰레드 실행 자원 상에서 실행되도록 쓰레드(125,126)를 스케줄링하는 기능도 감당하다. 단일 프로세스와 관련된 이러한 쓰레드들은 통상적으로 동일한 메모리에 대해서 가시적이며 상대의 가상 어드레스 공간에 대해서도 가시적이다.
운영 체계(140)가 쓰레드를 생성, 맵핑 및 스케줄링하는 기능을 책임지기 때문에, 쓰레드(125,126)는 운영 체계(140)에 대해서 가시적이다. 또한, 본 발명의 실시예들은 운영 체계(140)에 대해서 가시적이지 않은 추가 쓰레드(130 내지 136)를 포함한다. 즉, 운영 체계(140)는 이들 추가 쓰레드(130 내지 136)를 생성 또는 관리하지 않는다. 이 운영 체계(140)에 의해서 생성되거나 관리되지 않는 이 추가 쓰레드들은 이들을 운영 체계에 대해서 가시적인 쓰레드들과 구별하기 위해서 본 명세서에서 쉬레드(shred)(130 내지 136)로 지칭된다. 이 쉬레드들은 사용자 레벨 프로그램에 의해서 생성, 관리 및 제어되고, 그리고 완전 OS 투명성(full OS transparency)을 갖도록 스케줄링되어 운영 체계에 대해서 격리된(sequestered) 시퀀서들 상에서 실행될 수 있다. (이 운영 체계에 대해서 격리된 시퀀서들은 본 명세서에서 OS에 대해서 비가시적인(invisible) 시퀀서로서 지칭된다.) 이 운영 체계에 대해서 비가시적인 시퀀서들은 운영 체계에 대해서 가시적인 시퀀서들과 동일한 링 0 상태를 공유한다. 따라서, 쉬레드들은 동일한 프로세스와 관련된 쓰레드들에 대해서 생성된 동일한 실행 환경(어드레스 맵)을 공유한다.
운영 체계에 대해서 비가시적인 쉬레드는 운영 체계에 대해서 가시적인 쓰레드에 의해서 실행되는 인스트럭션(가령, 애플리케이션 프로그래머에 의해서 코딩됨)에 의해서 생성될 수 있다. 따라서, 쉬레드는 운영 체계에 대해서 비가시적이지만 운영 체계에 대해서 가시적인 쓰레드와는 관련될 수 있다. 이 운영 체계에 대해서 가시적인 쓰레드는 운영 체계에 대해서 가시적인 시퀀서 상에서 실행될 수 있도록 OS 스케줄러에 의해서 스케줄링되는 반면에, 쉬레드는 OS에 대해서 독립적인 사용자 애플리케이션 또는 런타임 루틴(runtime routine)에 의해서 스케줄링된다.
도 2는 본 발명의 적어도 일 실시예의 시스템이 쓰레드(125)와 같은 운영 체계에 대해서 가시적인 쓰레드와 이 쓰레드와 연관된 (운영 체계에 대해서 비가시적인) 쉬레드(130-136) 간의 1 대 다 관계를 지원하는 것을 도시한다. 운영 체계가 아닌 프로그래머가 쉬레드를 생성, 동기화, 관리 및 제어하는 사용자 레벨 기술을 사용한다는 측면에서 이 쉬레드는 운영 체계(140)에 대해서 “비가시적”이다. 운영 체계(140)가 쓰레드(thread)를 인식하고 제어하는 반면에, 쉬레드(shred)를 인식하지도 제어하지도 못한다.
따라서, 쓰레드 유닛 하드웨어와 쉬레드 간의 맵핑을 관리하는데 있어서 운영 체계에 의존하는 대신에, 본 발명의 적어도 일 실시예에서, 사용자가 직접 이러한 맵핑을 제어하고 쉬레드 실행과 관련된 제어 및 상태 전달을 직접 관여할 수 있다. 쉬레드 제어 인스트럭션은 다수의 쓰레드 유닛에 대한 제어 및 상태 전달을 운영 체계에 대해서 투명하게 처리할 수 있도록 하게 한다.
본 발명의 적어도 일 실시예에서, 쉬레드는 운영 체계가 인식하지 못하는 쉬레드를 생성하는 소프트웨어 라이브러리 또는 OS 독립 메카니즘을 호출하는 사용자 인스트럭션 또는 “프리미티브(primitive)”를 통해서 생성된다. 가령, 쉬레드는 사용자 레벨 소프트웨어 라이브러리 호출에 응답하여 생성될 수 있다. 사용자 레벨 스레딩 인스트럭션(user-level shredding instruction)에 대한 상세한 설명은 동 계류 중인 미국 특허 출원(변리사 참조 번호:42390.P19770) “A Mechanism For Instructions Set-Based Thread Execution on a Plurality of Instruction Sequencers"에 개시되어 있다.
본 명세서에서 사용되는 바와 같이, 본 명세서에서 “시퀀서”로도 지칭되는 쓰레드 유닛은 쓰레드 또는 쉬레드를 실행할 수 있는 임의의 물리적 또는 논리적 유닛이다. 이 쓰레드 유닛은 소정의 쓰레드 또는 쉬레드에 대해서 실행될 다음의 인스트럭션을 결정하기 위해 넥스트 인스트럭션 포인터 앤드 페치 로직을 포함한다. 가령, 도 2에 도시된 운영 체계에 대해서 가시적인 쓰레드(125)는 하나의 시퀀서(미도시) 상에서 실행되고, 활성 쉬레드(130-136) 각각은 다른 시퀀서(미도시) 상에서 실행된다.
도 2는 이제 도 3을 참조하여 더 상세하게 설명될 것이다. 도 2 및 도 3은 사용자 레벨 다중 쓰레딩 환경의 적어도 일 실시예를 도시한다. 이러한 실시예에 있어서, 운영 체계에 대해서 격리된 시퀀서(360) 상에서 실행되는 코드는 운영 체계에 대해서 가시적인 관련 시퀀서(370) 상에서 쓰레드 T를 실행시키도록, 운영 체계에 의해서 생성된 실행 환경을 공유한다. 이러한 환경의 적어도 하나의 실시예에서, 운영 체계에 대해서 격리된 시퀀서(360) 상에서 실행되는 코드는 운영 체계 서비스에 직접 액세스할 수 없다. 시스템 호출 및 소정의 예외 이벤트와 같은 시스템 레벨 이벤트의 경우에, 운영 체계에 대해서 비가시적인 쉬레드는 프록시(proxy)를 통해 운영 체계(140)로부터 상기와 같은 이벤트를 위한 서비스를 수신할 수 있다.
본 발명의 적어도 일 실시예에서, 이러한 서비스들은 프록시 메카니즘에 의해서 제공된다. 즉, 다중 쉬레딩 시스템은 운영 체계에 대해서 격리된 시퀀서 상의 이벤트가 운영 체계에 의해서 처리될 수 있게 하는 OS-투명 프록시 메카니즘을 지원할 수 있다.
도 3은 메인 쓰레드(main thread) T와 연관된 쉬레드를 위한 OS에 의해서 제공되는 서비스를 달성하기 위해서 메인 쓰레드 T에 의한 프록시 실행을 설명하는 흐름도이다. 이 쉬레드는 하나 이상의 격리된 시퀀서(360) 중 임의의 시퀀서 상에서 실행된다. 본 명세서에서 사용될 바와 같이, 용어 “프록시 실행”은 시퀀서 간에서 쉬레드의 이동을 지칭하며, 즉 운영 체계에 대해서 가시적인 시퀀서가 운영 체계를 트리거하여 격리된 시퀀서를 대신하여 서비스를 제공할 수 있도록 격리된 시퀀서로부터 운영 체계에 대해서 가시적인 시퀀서로 제어 및 상태 정보를 전달하는 것을 말한다.
그러므로, 프록시 실행은, 운영 체계로부터 격리된 시퀀서 상의 쉬레드에 대해 운영 체계에 의해 지원되는 서비스를 제공하도록, 운영 체계에 대해서 가시적인 시퀀서가 운영 체계의 주목을 얻게 되는 수단이 된다. 이러한 프록시 실행은, 비대칭적 시퀀서들을 포함하는 시스템 상에서 애플리케이션 프로그래머에게 구조적 대칭성의 착시를 제공하는데 사용될 수 있다.
도 3은 OS에 대하여 격리된 시퀀서들(360) 중 하나가 동기화 오브젝트에 대한 로크(lock)를 획득하는 서비스 또는 구조화된 예외 처리를 위한 콜백(callback) 기능의 등록을 획득하는 서비스와 같은 운영 체계에 의해 지원되는 서비스를 소망하면 언제라도 프록시 요청(365)이 운영 체계에 대해서 가시적인 시퀀서(370) 상의 적합한 쓰레드에 전송된다.
이 운영 체계에 대해서 가시적인 시퀀서(370)는 요청 중인 쉬레드가 공유하는 메모리에 대해서 논리적으로 가시적인 쓰레드 T를 실행하는 시퀀서이다. 이 쓰레드 T는 이 운영 체계에 대해서 가시적인 시퀀서(370) 상에서 실행되고 프록시 요청(365)이 수신되면 중단된다. 이 시퀀서(370)는 이 요청을 즉각 처리하거나 이후 처리를 위해서 이를 기록해 둘 수 있다. 이 요청이 시퀀서(370)에 의해서 처리될 때에, 이 시퀀서(370)는 요청 중인 시퀀서(360) 상에서 실행되는 쉬레드를 대신하여 운영 체계 서비스를 요청한다(306).
이 시퀀서(370)는 쓰레드가 블록(308)에서 종료될 때까지(또는 이 쓰레드가 다른 프록시 요청으로 인해서 중단될 때까지) 블록(302)에서 쓰레드 인스트럭션을 실행한다.
따라서, 도 3에 도시된 프록시 방법(300)은 소정의 운영 체계 서비스가 소망될 때에, 상기 격리된 시퀀서(360)를 위해서 격리된 시퀀서(360)로부터 OS에 대해서 가시적인 시퀀서(370)로의 제어의 비동기적 전달을 실행하는 데 사용될 수 있다.
운영 체계 서비스는 운영 체계에 대해서 격리된 시퀀서(360) 대신에 운영 체계에 대해서 가시적인 시퀀서(370) 상에서 실행되는 쓰레드 T에 의해서 요청되며, 이로써 운영 체계에 대해서 격리된 시퀀서(360)에 의해서 요청된 서비스를 제공하도록 운영 체계에 대해서 가시적인 시퀀서(370)가 운영 체계의 주목을 얻게 된다. 이러한 프록시 메카니즘으로 인해서, 운영 체계에 대해서 가시적인 시퀀서(370)가 쉬레드에 의해 요청된 서비스를 위해서 운영 체계의 주목을 대신 얻도록 상기 쉬레드 역할을 대신 수행하게 된다.
이 프록시 방법(300)은 임의의 다수의 방식으로 구현될 수 있다. 가령, 이 방법(300)은 운영 체계에 대해서 격리된 시퀀서(360)가 그 시퀀서(360) 상에서 시스템 호출과 같은 특권 명령을 수행하고자 할 때에 암시적으로 호출될 수 있다. 이렇게 시도된 시스템 호출은 예외 이벤트를 생성시킬 수 있다. 이 예외 이벤트의 처리 장치는 쉬레드 상태를 저장하여 운영 체계에 대해서 가시적인 시퀀서(370)로의 요청 신호(365)를 생성한다. 상술한 바와 같이, 운영 체계에 대해서 가시적인 시퀀서(370)는 프록시 실행을 통해서 이 예외 이벤트에 대한 서비스를 즉시 제공하거나 예외 이벤트를 기록하고 서비스 제공을 지연할 수도 있다. 어느 경우에서든, 이 시퀀서(370)는 쉬레드의 상태를 획득하고 원하는 서비스를 획득하도록 운영 체계를 호출하기 이전에 자신의 고유 상태를 저장한다.
본 명세서에서 개시된 기술들의 실시예를 수행할 수 있는 시스템의 시퀀서들은 대칭적일 필요가 없다. 이 시퀀서들은 계산의 품질에 영향을 주는 측면들을 포함하여 다양한 방식으로 서로 다를 수 있다. 가령, 시퀀서들은 소비 전력, 계산 성능 속도, 기능적 특징 등의 차원에서 서로 다를 수 있다.
가령, 일 실시예에 있어서, 시퀀서들은 기능적인 차원에서 서로 상이할 수 있다. 도 2 및 도 3에 도시된 기능적 비대칭성의 실례는 적어도 하나의 시퀀서(370)는 OS(도 2의 참조 번호(140))에 대해서 가시적이며 따라서 시스템 호출의 수행, 페이지 폴트(page fault)를 위한 서비스, 콜백 기능의 등록 등과 같은 “링 0” 동작들을 수행할 수 있음을 나타낸다. 한편, 하나 이상의 다른 시퀀서(360)는 운영 체계로부터 격리되어 있으며 따라서 이러한 링 0 동작을 수행할 수 없다. 그러나, 이러한 경우는 기능적 대칭성의 오직 하나의 실례일 뿐이다. 또한, 다중 시퀀서 시스템의 시퀀서들은 치수, 워드 및/또는 데이터 경로 크기, 토폴러지, 메모리, 전력 소비량, 기능 유닛의 개수, 통신 아키텍처(멀티 드랍 버스 대 점대점 상호접속) 또는 기능, 성능, 푸트프린트 등과 관련된 임의의 다른 메트릭과 같은 임의의 다른 측면에서 서로 상이할 수 있다.
요약하자면, 도 3은 운영 체계에 대해서 가시적인 시퀀서(370)가 운영 체계에 대해서 격리된 시퀀서(360) 상에서의 쉬레드 실행을 위해 운영 체계를 호출하도록 하는 프록시 메카니즘(300)을 포함하는 사용자 레벨 다중 쓰레딩 환경을 도시하고 있다. 이러한 운영 체계 서비스 중 일 특정 타입은 운영 체계에 의해 제공된 동기화 오브젝트에 대한 로크를 획득하는 서비스를 포함한다. 또한, 다른 특정 타입의 서비스는 콜백 기능의 등록 서비스를 포함한다.
대리 쓰레드( surrogate threads )
운영 체계에 대해서 비가시적인 쉬레드를 위한 이러한 운영 체계 서비스 및 다른 운영 체계 서비스를 호출하기 위해서, 대리 쓰레드가 사용될 수 있다. 이 대리 쓰레드는 메인 쓰레드에 의해서 생성된 운영 체계에 대해서 가시적인 쓰레드로서, 쉬레드가 운영 체계 서비스를 소망할 때에 이 쉬레드를 대신하여 서비스 대리자 역할을 한다. 이 대리 쓰레드는 운영 체계 관련 서비스가 다중 쉬레드 경합을 잠재적으로 받는 쓰레드 특정 자원과 관련될 때에 이러한 운영 체계 관련 서비스를 처리하는데 특히 유용하다.
도 4는 대리 쓰레드(402,404,406,408)와 같은 대리 쓰레드를 지원하는 다중 시퀀서 시스템을 위한 일반적인 병렬 프로그래밍 방식을 설명하는 블록도이다. (도 2 및 도 4에서의 유사한 구성 요소에는 유사한 참조 부호가 부여된다.) 대리 쓰레드(402-408)는 쉬레드 대신에, 소정의 예외 처리 서비스, 시스템 호출 서비스, 콜백 등록 서비스 및 다른 프록시 서비스에 관여하는 애플리케이션 라이터(application-writer)에 의해서 생성된다. 적어도 일 실시예에 있어서, 애플리케이션 프로그래머는 쉬레드가 메인 쓰레드 프로그램의 실행 환경을 공유하기 시작할 때와 동시에 이 메인 쓰레드 프로그램 내의 인스트럭션들을 통해서 대리 쓰레드를 생성한다.
도 4는 대리 쓰레드(402-408)가 운영 체계(140)에 대해서 가시적임을(즉, 대 리 쓰레드(420-408)가 운영 체계에 대해서 가시적인 시퀀서 상에서 실행됨을) 도시하고 있다. 그러므로, 이 대리 쓰레드들은 운영 체계(140)에 의해서 실행되도록 스케줄링된다.
도 5는 대리 쓰레드가 사용되어서 쉬레드를 위한 프록시 실행을 제공하는 것을 도시하는 흐름도이다. 일반적으로, 도 5는 OS에 대해서 격리된 시퀀서(560) 상의 쉬레드가 운영 체계(도 2의 참조 부호(140))의 서비스를 소망할 때에 프록시 요청(565)이 운영 체계에 대해서 가시적인 시퀀서(570)에 전달되는 것을 도시한다. 이 쉬레드와 관련된 메인 쓰레드 T는 상기 요청(565)에 의해서 중단될 때까지 운영 체계에 대해서 가시적인 시퀀서(570) 상에서 실행된다(502). 이러한 요청이 수신되면, 쓰레드 T는 블록(506)을 실행한다.
도 5는 블록(506)에서 쓰레드 T가 이 이벤트를 기록하고 있음을 도시한다. 메인 쓰레드 T는 프록시 실행 자체를 수행하기보다는 요청 중인 쉬레드와 연관된 대리 쓰레드를 기동시킨다(507).
적어도 일 실시예에 있어서, 대리 쓰레드는 대부분의 시간 동안에 대기 상태로 존재한다. 해당 쉬레드에 의해서 소정의 운영 체계 서비스가 요청되면, 도 5에 도시된 대리 쓰레드 ST는 메인 쓰레드 T에 의해서 활성 상태로 기동되어(507) 프록시 실행을 수행한다(508). 이 대리 쓰레드 ST가 그의 프록시 실행을 완료하면(508), 이 대리 쓰레드는 대기 상태로 다시 유지된다.
따라서, 대리 쓰레드 ST가 사용되어서 운영 체계에 대해서 비가시적인 쉬레드를 대신하여 운영 체계 서비스를 호출하도록 프록시 실행을 수행한다. 이 대리 쓰레드 ST로 인해서, 운영 체계는 쉬레드를 인식하지 못하지만 운영 체계에 대해서 투명한 방식으로 상기 쉬레드는 운영 체계 서비스를 수신할 수 있다. 이러한 방식으로 대리 쓰레드를 사용하는 것은 운영 체계에 대해서 비가시적인 쉬레드가 소정의 타입의 운영 체계 서비스에 액세스하도록 하는데 있어서 특히 유용하다. 즉, 대리 쓰레드가 사용됨으로 인해서, 쉬레드는 다중 쉬레드 경합을 받는 단일의 매 쓰레드 자원(a single per-thread resource)과 관련된 임의의 운영 체계 서비스로의 액세스를 획득할 수 있게 된다. 이렇게 대리 쓰레드를 사용함으로써 다중 쉬레드 경합을 받는 운영 체계 서비스로의 액세스를 쉬레드가 획득할 수 있도록 하는 2 개의 특정 실례들은 동기화 서비스를 위해서 대리 쓰레드를 사용하는 것과 구조화된 예외 처리 서비스를 위해서 대리 쓰레드를 사용하는 것을 포함한다. 이러한 두 특정 실례들이 이하에서 더 상세하게 설명될 것이다. 그러나, 이 두 가지 실례들이 본 발명을 한정하는 것은 아니다. 본 명세서에서 개시된 대리 쓰레드 기술들은 매 쓰레드 자원과 관련된 임의의 운영 체계 서비스로의 쉬레드 액세스를 투명하게 가능하도록 하는데 사용될 수 있으며 이러한 기술들을 사용하지 않게 되면 결국 다중 쉬레드 경합이 행해질 것이다.
대리 쓰레드 : 동기화 로크(synchronization lock)를 위한 프록시 실행
도 6은 대리 쓰레드를 사용하여서 비대칭 다중 시퀀서 시스템에서 회피될 수 있는 일 타입의 데드락(deadlock)의 예시적인 실례를 제시한 타이밍 도면이다. 이 러한 타입의 데드락은 운영 체계에 의해 제공된 동기화 오브젝트를 쉬레드가 사용함으로써 발생한 것이다. 도 6에 도시된 데드락 시나리오는 쓰레드가 코드의 중요 부분 내부로부터 이미 유지된 로크를 획득할려고 시도하는 경우에 발생할 수 있는 데드락 시나리오와 유사하다.
도 6에 도시된 실례는 다중 시퀀서 시스템의 시퀀서들(760a,760b,770) 간의 비대칭성을 가정하고 있다. 도 6은 각각이 쉬레드 인스트럭션 스트림 S1 및 S2를 각기 실행하고 있는 2 개의 격리된 시퀀서(760a,760b)를 도시하고 있다. 쉬레드 인스트럭션 스트림 S1 및 S2는 각각 동일한 쓰레드 T와 연관된다. 도 6은 쓰레드 T가 운영 체계(780)에 대해서 가시적인 시퀀서(770) 상에서 실행되는 것으로 도시하고 있다.
도 6은 시간 t1에서 세마포어(semaphore)(740)(또는 임의의 다른 타입의 운영 체계에 의해서 제공되는 동기화 오브젝트)를 획득하기 위해서 제 1 격리된 시퀀서(760a)는 시스템 호출을 시도한다. 도 6에 도시된 실례에서는, 이 세마포어(740)는 시간 t1 내지 t3에서는 현재적으로 록킹되고(locked) 이로써 가용하게 된다고 가정된다.
시간 t1에서 시스템 호출을 실행함으로써, 이 격리된 시퀀서(760a)는 예외 이벤트를 경험하게 된다. 즉, 시퀀서(760a)가 운영 체계(780)로부터 격리되기 때문에, 이 시퀀서는 운영 체계 서비스를 필요로 하는 시스템 호출과 같은 인스트럭션을 실행할 수 없게 된다. 이러한 예외 이벤트를 처리하기 위해서, 시퀀서(760a)는 신호를 운영 체계에 대해서 가시적인 시퀀서(770)에게 전송하고 이로써 시간 t2에서 프록시 방법을 트리거한다. 도 6은 트리거 신호가 수신된 시간에 운영 체계에 대해서 가시적인 코어(770)가 쓰레드 T를 실행하고 있음을 도시한다.
시간 t2에서 생성된 트리거 신호는 운영 체계에 대해서 가시적인 시퀀서(770)에게 전송되고 이 운영 체계에 대해서 가시적인 시퀀서(770) 상에서의 프록시 방법의 실행을 트리거하며, 이로써 쓰레드 T의 실행을 중단시킨다. 도 5를 참조하여 상술한 바와 같이, 프록시 방법은 운영 체계에 대해서 가시적인 시퀀서(770)로 하여금 자신의 고유 상태를 저장하게 하고 쉬레드 상태를 복사하게 하고, 이 운영 체계에 대해서 가시적인 이 시퀀서(770)로 하여금 쉬레드 S1 대신에 시스템 호출의 프록시 실행을 수행하게 한다.
도 6은 시간 t3에서 운영 체계에 대해서 가시적인 시퀀서(770)가 세마포어(740)의 로크를 요청하게 시스템 호출을 수행하는 것을 도시한다. 상술한 바와 같이, 본 실례에 있어서, 세마포어(740)가 가용한 것으로 가정되었기 때문에, 도 6은 시간 t4에서 운영 체계에 대해서 가시적인 시퀀서(770)가 세마포어(740)에 대한 로크를 획득하는 것을 도시한다.
이러한 로크를 획득함으로써, 운영 체계에 대해서 가시적인 시퀀서(770)가 대신 수행하게 된 시스템 호출은 시간 t4 후에 완료된다. 이어서, 이 프록시 방법은 운영 체계에 대해서 가시적인 시퀀서(770)으로 하여금 상태를 복구하게 하고, 격리된 시퀀서(760a) 및 운영 체계에 대해서 가시적인 시퀀서(770)로 하여금 그들의 각각의 인스트럭션 스트림인 각기 쉬레드 S1 및 쓰레드 T1의 실행을 각기 재개하게 한다. 적어도 일 실시예에 있어서, 세마포어(740)에 대한 로크를 획득하였다 면, 쉬레드 S1은 이 시간에 코드의 중요 부분을 실행하기 시작하는 것으로 가정된다.
도 6은 시간 t5에서 제 1 격리된 시퀀서(760a)는 여전히 코드의 중요 부분을 실행하고 있는 중이며 아직 세마포어(740)에 대한 로크를 해제하지 않은 동안에, 다른 제 2 의 격리된 시퀀서(760b)는 본 실례에서는 동일한 세마포어(740)에 대한 로크를 획득하려고 시도하는 것을 도시한다.
시간 t2를 참조하여 상술한 바와 같이, 제 2 격리된 시퀀서(760b)가 세마포어(740)에 대한 로크를 획득하기 위해서 시스템 호출의 실행을 시도함으로써 예외 이벤트가 발생하고 시간 t6에서 프록시 실행 메카니즘이 트리거된다.
시간 t6에서 전송된 트리거 신호에 응답하여, 운영 체계에 대해서 가시적인 시퀀서(770)는 시간 t3을 참조하여 상술한 바와 같이 프록시 실행을 수행하고 이로써 이 시퀀서(770)는 제 2 격리된 시퀀서(760b)를 대신해서 시스템 호출을 수행하게 된다.
도 6은 운영 체계에 대해서 가시적인 시퀀서(770)가 세마포어(740)에 대한 제 2 로크를 획득하려고 시도할 때에, 시퀀서(770)가 동일한 세마포어(740)에 대한 로크를 이미 유지하고 있기 때문에 시간 t8에서 데드락이 발생하는 것을 도시하고 있다.
따라서, 도 6은 도 3을 참조하여 상술한 프록시 방법(300)의 실시예들이 사용되어서 모든 쉬레드를 대신해서 모든 시스템 호출을 대신에 수행하는 경우에 발생할 수 있는 예시적인 데드락 상황을 도시하고 있다. 그럼에도 불구하고, 애플리 케이션 프로그래머가 운영 체계에 의해서 제공되는 동기화 오브젝트를 사용하는 다중 쉬레드형 코드를 기록할 수 있게 하고/하거나 운영 체계에 의해서 제공되는 동기화 오브젝트를 사용하는 제 3 자 라이브러리를 사용할 수 있게 하는 것이 때때로 바람직하다.
도 7은 도 6에서 예시적으로 도시된 데드락 상황을 회피하기 위해서 하나 이상의 “대리 쓰레드”가 사용되는 방식의 실례를 설명하는 타이밍 도면이다. 여기에서도 다시, 도 7에 도시된 실례는 다중 시퀀서 시스템의 시퀀서들(860a,860b,870) 간의 비대칭성을 가정한다. 도 7은 각각이 쉬레드 인스트럭션 스트림 S1 및 S2를 각기 실행하고 있는 2 개의 격리된 시퀀서(860a,860b)를 도시하고 있다. 쉬레드 인스트럭션 스트림 S1 및 S2는 각각 동일한 쓰레드 T와 연관된다. 도 7은 쓰레드 T가 운영 체계(880)에 대해서 가시적인 시퀀서(870) 상에서 실행되는 것으로 도시하고 있다. 더 나아가, 도 7은 2 개의 대리 쓰레드 ST1 및 ST2를 더 도시하고 있다. 적어도 일 실시예에 있어서, 대리 쓰레드 ST1 및 ST2 각각은 개별 쉬레드(S1 및 S2)와 각기 연관된다.
쉬레드가 OS 서비스를 원할 때에 대리 쓰레드는 쉬레드를 대신하여 서비스 대리자 역할을 수행한다. 이 대리 쓰레드는 애플리케이션 프로그래머에 의해 기록된 코드에 응답하여 생성되고, 이 대리 쓰레드는 운영 체계에 대해서 가시적인 시퀀서 상에서 실행되고 이 운영 체계에 의해서 실행되도록 스케줄링된다. 이 대리 쓰레드는 애플리케이션 프로그래머에 의해서 사용되어서 쉬레드를 위한 소정의 예외 처리 및 시스템 호출을 수행한다.
따라서, 상술한 바와 같이, 대리 쓰레드는 대부분의 시간 동안 비활성 상태에 있으며 쉬레드를 위해서 소정의 시스템 레벨 이벤트(가령, 시스템 폴트, 시스템 호출 등)에 대한 프록시를 실행하도록 기동된다. 도 7에 도시된 실시예에 있어서, 애플리케이션 프로그래머는 특정 메인 쓰레드 T와 연관된 쉬레드 인스트럭션 스트림을 실행하도록 초기화되는 각 격리된 시퀀서(860a 및 860b)용의 하나의 대리 쓰레드를 실행시키는 것으로 가정된다.
도 7은 시간 t1에서 하나 이상의 대리 쓰레드(ST1,ST2)를 생성하기 위해서 운영 체계에 대해서 가시적인 시퀀서(870) 상에서 쓰레드 T 인스트럭션 스트림 내의 인스트럭션이 실행되는 것을 나타낸다. 각 대리 쓰레드(ST1,ST2)는 관련 쉬레드(S1,S2)의 인스트럭션의 역할을 대신하도록 프록시 실행을 수행하게 트리거될 때까지 대기 상태로 유지된다.
도 7에 도시된 시간 t2 및 t3에서 나타난 동작들은 도 6의 시간 t1 및 t2를 참조하여 상술되고 도시된 동작들에 기본적으로 대응하며, 운영 체계에 대해서 격리된 시퀀서(860a)에 의해 시도된 시스템 호출 동작 및 이에 의한 예외 이벤트 발생 및 운영 체계에 대해서 가시적인 시퀀서(870)로의 트리거 전송 동작이다.
운영 체계에 대해서 가시적인 시퀀서(870)가 프록시 실행에 대한 트리거를 수신하면, 이 시퀀서(870)는 프록시 실행으로 인한 대리 동작을 직접적으로 수행하지 않는다(도 6의 시간 t3을 참조하여 상술된 부분 참조). 대신에, 시간 t4에, 운영 체계에 대해서 가시적인 시퀀서(870)는 이 트리거를 생성한 쉬레드(S1)와 연관된 대리 쓰레드 ST1을 기동시키고 이로써 이 대리 쓰레드 ST1이 쉬레드 S1을 위한 프록시 실행을 수행하게 된다.
시간 t4에서 발행된 기동 신호(wake signal)에 응답하여, 대리 쓰레드 ST1은 활성 상태가 된다. 이 대리 쓰레드 ST1은 도 7에서 기간 “A"로 표시된 바와 같은 기간 동안에는 활성 상태로 유지된다.
시간 t5에서, 대리 쓰레드 ST1는 프록시 실행을 수행하여 쉬레드 S1을 대신하여 세마포어(840)에 대한 로크를 요청하기 위해서 시스템 호출을 수행한다. 다시 말하자면, 도 7에 도시된 실례에 있어서, 세마포어(840)는 현재적으로 록킹되지 않아서 가용하다고 가정된다. 따라서, 도 7은 대리 쓰레드 ST1가 시간 t6에서 세마포어(860)에 대한 로크를 획득하는 것을 도시한다.
이 로크를 획득함으로써, 운영 체계에 대해서 가시적인 시퀀서(870)가 대신 수행한 시스템 호출은 시간 t6에서 완료된다. 도 5의 블록(508)을 참조하여 상술된 바와 같이, 이 프록시 방법은 이 시퀀서(870)로 하여금 상태를 복구하게 하고 운영 체계에 대해서 격리된 시퀀서(860a)로 하여금 쉬레드 S1의 실행을 재개하게 한다(880).
적어도 일 실시예에서, 세마포어(840)에 대한 로크를 획득하였으면, 쉬레드 S1은 이 시간에 코드의 중요 부분을 실행하기 시작한다고 가정된다. 시간 t6에서 OS에 대해서 가시적인 시퀀서(870)에 의해 대신 수행된 시스템 호출이 완료된 후에, 대리 쓰레드 ST1은 시간 t7에서 다시 대기 상태로 되어서 쉬레드 S1을 위한 프록시 실행을 트리거할 다음 이벤트를 대기하게 된다.
도 7에 도시된 실시예에서, OS에 대해서 격리된 시퀀서(860a)가 세마포 어(840)에 대한 로크를 아직 해제하지 않고 코드의 중요 부분의 실행을 계속 수행하고 있는 동안에, OS에 대해서 격리된 다른 시퀀서(860b)가 시간 t8에서 동일한 세마포어(840)에 대한 로크를 획득하려고 시도한다.
여기서 다시, OS에 대해서 격리된 다른 시퀀서(860b)가 세마포어(840)에 대한 로크를 획득하려고 시스템 호출을 실행하려는 시도로 인해서 예외 이벤트가 발생하고 시간 t9에서 프록시 실행이 트리거된다. 도 7은 프록시 실행 자체를 수행하기보다는, OS에 대해서 가시적인 시퀀서(870) 상의 메인 쓰레드 T가 시간 t10에서 시간 t9에서 트리거를 생성한 쉬레드 S2와 연관된 대리 게이트 ST2를 기동시키는 것을 도시한다.
이어서, 대리 쓰레드 ST2는 시간 t11에서 쉬레드 S2 대신에 시스템 호출을 대신 수행한다. 그러나, 운영 체계(880)는 시간 t12에서 시스템 호출을 차단하는데, 그 이유는 다른 대리 쓰레드 ST1이 여전히 세마포어(840)에 대한 로크를 유지하고 있기 때문이다. 따라서, OS(880)는 제 1 대리 쓰레드 ST1이 세마포어(840)에 대한 로크를 해제할 때까지 제 2 대리 쓰레드 ST2가 실행되지 못하게 한다. 이러한 처리 과정은 도 8의 시간 t13으로 진행된다.
도 8은 도 7에서 시작된 대리 쓰레드 프록시 실행의 실례를 더 설명하는 타이밍 도면이다. 도 8은 도 7에 도시된 시간 t12 후에 발생하는 시간 t13을 설명한다. 이 시간 t13에서, 쉬레드 S1은 코드의 중요 부분의 실행을 완료하였고 세마포어(840)에 대한 로크를 해제하기 시작한다. 따라서, 도 7은 시간 t13에서 쉬레드 S1이 상기 로크를 해제하도록 시스템 호출을 시도함을 나타낸다. 도 8을 참조하여 설명한 바와 같이, 쉬레드 S1이 실행되고 있는 시퀀서(860a)는 시스템 호출을 실행하도록 허용되지 않는다. 따라서, 시간 t13에서의 이러한 시스템 호출 시도는 예외 이벤트를 발생시킨다. 이어서, 트리거 신호가 시간 t14에서 시퀀서(860a)로부터 OS에 대해서 가시적인 시퀀서(870)로 전송되며, 이로써 시스템 호출에 대한 프록시 실행이 요청된다.
도 8은 시간 t15에서 메인 쓰레드 T가 이 트리거 신호를 생성한 쉬레드 S1과 연관된 대리 쓰레드 ST1을 기동시키는 것을 도시하고 있다. 시간 t16에서, 이 대리 쓰레드 ST1은 쉬레드 S1 대신에 시스템 호출을 수행하여 세마포어(840)에 대한 로크를 해제하게 한다. 시간 t17에서, 운영 체계는 이 대리 쓰레드 ST1에 의해서 수행된 시스템 호출로 인해서 세마포어(840)에 대한 로크를 해제한다. 이러한 시스템 호출의 프록시 실행이 완료되면, 대리 쓰레드 ST1는 시간 t18에서 대기 상태로 다시 들어간다.
시간 t19에서, OS는 대리 쓰레드 ST2가 실행되게 한다. 이 대리 쓰레드 ST2가 실행되면, 이 대리 쓰레드 ST2는 시간 t20에서 시스템 호출을 수행하고 이로써 OS에 대해서 격리된 시퀀서(860b) 상의 쉬레드 S2를 대신하여 세마포어(840)에 대한 로크를 획득한다. 도 8은 이 로크가 시간 t21에서 획득되었음을 나타낸다.
대리 쓰레드 ST2가 쉬레드 S2 대신에 시간 t21에서 로크를 획득하였으면, 이 프록시 실행은 완료된다. 따라서, 이 대리 쓰레드 ST2는 시간 t22에서 다시 대기 상태로 들어가고 쉬레드 S2 인스트럭션 스트림의 실행이 시간 t23에서 재개된다. 이제, 이 OS에 대해서 격리된 제 2 시퀀서(860b)는 코드의 중요 부분을 실행할 수 있으며 도 6에 도시된 데드락 상황이 이러한 대리 쓰레드들 ST1 및 ST2를 사용하여서 회피되게 된다. 따라서, 도 7 및 도 8에서 제안된 예시적인 실례들은 단일 쓰레드가 다수의 쉬레드를 위해서 프록시 실행을 수행하게 되면 발생하게 되는 데드락 상황을 회피하면서 이 다수의 쉬레드가 OS에 의해 제공되는 동기화 오브젝트를 사용할 수 있도록 대리 쓰레드 ST1 및 ST2가 OS에 대해서 비가시적인 쉬레드 S1 및 S2의 역할을 대신하게 되는 것을 나타내고 있다.
도 7 및 도 8은 다수의 쉬레드 간의 프록시 실행을 관리하기 위해서 대리 쓰레드들을 사용하는 것을 설명하는 실례를 중심으로 상술되었지만, 본 발명은 이러한 실례로만 한정되는 것은 아니다.
다른 실시예에 있어서, 메인 쓰레드 및 그의 쉬레드들 간에서 OS에 의해 제공된 동기화 오브젝트(OS-provided synchronization object)를 사용하는 것을 지원하면서 데드락을 최소화하기 위해서 대리 쓰레드들이 사용될 수 있다. 이러한 실시예에 있어서, 대리 쓰레드는 오직 쉬레드만을 대신하여 시스템 호출을 수행하도록 호출되지는 않는다. 대신에, 대리 쓰레드는 OS에 대해서 격리된 시퀀서 상에서 실행되는 코드의 중요 부분으로 들어가거나 나올 때에 호출된다. 이러한 실시예에 있어서, 대리 쓰레드는 시스템 호출을 위해서 단지 쉬레드 역할만을 대신하기 보다는 자신과 연관된 격리된 시퀀서 대신에 중요 코드의 전체 부분을 실행한다.
대리 쓰레드 : 구조화된 예외 처리를 위한 프록시 실행
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
본 명세서에서 개시된 메카니즘, 방법 및 기술들은 단일 코어 SMT 시스템(가령, 도 1의 참조 부호(310) 참조) 및 다중 코어 시스템(가령, 도 1의 참조 부호(350) 참조)을 포함하여 임의의 다중 시퀀서 시스템 상에서 구현될 수 있다. 이러한 시스템들에 대한 자세한 설명이 이하에서 도 9를 참조하여 제공될 것이다.
도 9는 본 명세서에서 개시된 기술들을 수행할 수 있는 컴퓨팅 시스템(1300)의 적어도 하나의 예시적 실시예를 도시하고 있다. 이 컴퓨팅 시스템(1300)은 적어도 하나의 프로세서 코어(1304) 및 메모리 시스템(1340)을 포함한다. 메모리 시스템(1340)은 대형이면서 상대적으로 저속의 메모리 저장 장치(1302) 뿐만 아니라 인스트럭션 캐시(1344) 및/또는 데이터 캐시(1342)와 같은 하나 이상의 소형이면서 상대적으로 고속인 캐시를 포함한다. 이 메모리 저장 장치(1302)는 프로세서(1304)의 동작을 제어하는 인스트럭션(1310) 및 데이터(1312)를 저장한다.
인스트럭션(1310)은 매인 쓰레드 코드(1350)를 포함한다. 이 메인 쓰레드 코드(1350)는 운영 체계에 대해서 비가시적인 하나 이상의 쉬레드를 초기화시키기 위한 인스트럭션을 포함한다. 메인 쓰레드 코드(1350)의 이러한 초기화 인스트럭션은 시퀀서에 의해서 실행되어서 운영 체계에 대해서 가시적인 시퀀서로 하여금 이 메인 쓰레드의 논리적 실행 환경을 공유하면서 쉬레드 인스트럭션 스트림을 실행할 수 있게 한다.
적어도 일 실시예에 있어서, 메인 쓰레드 코드(1350)는 하나 이상의 대리 쓰레드를 생성하는 인스트럭션을 포함한다. 이 메인 쓰레드 코드(1350)는 도 3, 도 5, 도 7, 도 8 또는 도 9를 참조하여 상술된 하나 이상의 방법(300, 500) 또는 메카니즘의 실시예를 수행하는 인스트럭션을 포함한다.
적어도 일 실시예에 있어서, 인스트럭션(1310)은 초기화된 시퀀서 상에서 실행되도록 쉬레드를 스케줄링하는 스케줄러 루틴(1360)을 포함한다.
메모리 시스템(1340)은 범용 메모리이며 하드 드라이브, CD-ROM, RAM, DRAM, SRAM, 플래시 메모리 및 이와 관련된 회로와 같은 다양한 형태의 메모리를 포함한다. 메모리 시스템(1340)은 프로세서(1304)에 의해서 실행될 수 있는 데이터 신호에 의해 표현되는 인스트럭션(1310) 및/또는 데이터(1312)를 저장한다. 이 인스트 럭션(1310) 및/또는 데이터(1312)는 상술된 임의의 기술 또는 모든 기술을 수행하는 코드 및/또는 데이터를 포함한다.
프로세서(1304)는 실행 코어(1330)로 인스트럭션 정보를 공급하는 전방 단부(1320)를 포함한다. 페치된 인스트럭션 정보는 실행 코어(1330)에 의한 실행을 대기하도록 캐시(225)에서 버퍼링된다. 전방 단부(1320)는 인스트럭션 정보를 실행 코어(1330)로 프로그램 순서로 공급한다. 적어도 일 실시예에 있어서, 전방 단부(1320)는 실행될 다음 인스트럭션을 결정하는 페치/디코드 유닛(322)을 포함한다. 이 컴퓨팅 시스템(1300)의 적어도 일 실시예에 있어서, 페치/디코드 유닛(322)은 단일 넥스트 인스트럭션 포인터 앤드 페치 로직(320)을 포함한다. 그러나, 각 프로세서(1340)가 다수의 쓰레드 컨텍스트를 지원하는 실시예에 있어서, 페치/디코드(322)는 각각의 지원되는 쓰레드 컨텍스트에 대해서 개별 넥스트 인스트럭션 포인터 앤드 페치 로직(320)을 구현한다. 다중 프로세서 환경(350)에서 선택 사양적인 추가 넥스트 인스트럭션 포인터 앤드 페치 로직(320)이 도 1에서 점선으로 표시된다.
본 발명에서 기술된 방법들의 실시예들은 하드웨어, 하드웨어 에뮬레이션 소프트웨어, 다른 소프트웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 데이터 저장 시스템(휘발성 메모리 및 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능한 시스템에서 구현될 수 있다. 이러한 애플리케이션을 위해서, 프로세싱 시스템은 디지털 신호 프로세 서(DSP), 마이크로제어기, ASIC(application specific integrated circuit) 또는 마이크로프로세서와 같은 프로세스를 갖는 임의의 시스템을 포함한다.
프로그램은 범용 또는 특정 용도의 프로그램가능한 프로세싱 시스템에 의해서 판독가능한 저장 매체 또는 디바이스(가령, 하드 디스크 드라이브, 플로피 디스크 드라이브, ROM, CD-ROM 디바이스, 플래시 메모리 디바이스, DVD 또는 다른 저장 디바이스를 포함함) 상에 저장될 수 있다. 프로세싱 시스템 내의 프로세서에 액세스될 수 있는 인스트럭션은 저장 디바이스 또는 장치가 프로세싱 시스템에 의해서 판독될 때에 본 명세서에서 개시된 절차들이 수행될 수 있도록 이 프로세싱 시스템을 구성시켜 동작시키는 기능을 한다. 본 발명의 실시예들은 프로세싱 시스템과 함께 사용되어 이 프로세싱 시스템으로 하여금 본 명세서에서 개시된 기능들을 수행하도록 특정된 방식으로 작동될 수 있게 하는 머신 판독가능한 저장 매체로서 구현될 수 있다.
일 예의 컴퓨팅 시스템(1300)은 인텔사로부터 입수가능한 펜티엄 마이크로프로세서, 펜티엄 프로 마이크로프로세서, 펜티엄 2 마이크로프로세서, 펜티엄 3 마이크로프로세서, 펜티엄 4 마이크로프로세서, 이타늄 마이크로프로세서 및 이타늄 2 마이크로프로세서를 기반으로 하는 프로세싱 시스템으로 대표될 수 있지만, 다른 마이크로프로세서, 엔지니어링 워크스테이션, PDA, 다른 휴대용 디바이스, 셋탑 박스 등을 갖는 다른 시스템(개인용 컴퓨터 PC를 포함함)도 사용될 수 있다. 적어도 일 실시예에 있어서, 샘플 시스템은 마이크로소프트사로부터 입수가능한 윈도우 운영 체계의 여러 버전을 실행하지만, 다른 운영 체계 및 그래픽 유저 인터페이스가 사용될 수도 있다.
본 발명의 특정 실시예들이 지금까지 도시 및 기술되었지만, 본 기술 분야의 당업자에게는 첨부된 청구 범위 내에서 다양한 수정 및 변경이 가능하다는 사실을 인식할 것이다. 따라서, 본 기술 분야의 당업자에게는 지금까지 상술된 실시예들이 본 발명을 한정하기보다는 예시적으로 설명하고 있다는 사실이 자명하다. 첨부된 청구 범위는 본 발명의 진정한 기술적 사상 내에 포함되는 모든 수정 및 변경을 포함한다.

Claims (26)

  1. 운영 체계(OS)에 대해 비가시적인(invisible) 제 1 쓰레드 유닛 상에서 실행되는 쉬레드(shred)를 위해서, 상기 운영 체계에 대해서 가시적인 제 2 쓰레드 유닛 상에서 실행되는, 운영 체계에 대해 가시적인 대리 쓰레드(OS-visible surrogate thread)를 생성하는 단계와,
    상기 쉬레드가 상기 제 1 쓰레드 유닛 상에서 동시에 실행되고 있는 동안 상기 운영 체계에 대해서 가시적인 메인 쓰레드(OS-visible main thread)의 인스트럭션을 실행하는 단계와,
    상기 쉬레드를 대신하여 운영 체계 서비스를 트리거하기 위해, 예외 처리 동안 상기 대리 쓰레드로 하여금 상기 운영 체계에 대해 상기 쉬레드 역할을 수행(impersonate the shred to the OS)하게 하는 단계를 포함하되,
    상기 쉬레드 역할을 수행하게 하는 단계는 상기 제 1 쓰레드 유닛으로부터 상기 제 2 쓰레드 유닛으로 제어 및 상태 정보를 전송하는 단계를 더 포함하는,
    방법.
  2. 제 1 항에 있어서,
    상기 쉬레드가 상기 운영 체계에 의해서 관리되는 쓰레드 특정 자원에 대한 경합(contention)을 시도했음을 표시하는, 상기 제 1 쓰레드 유닛으로부터의 요청을 상기 제 2 쓰레드 유닛에서 수신하는 것에 응답하여, 상기 대리 쓰레드로 하여금 상기 쉬레드 역할을 수행하게 하는 단계를 더 포함하는
    방법.
  3. 제 1 항에 있어서,
    상기 쉬레드가 상기 운영 체계에 의해서 관리되는 동기화 오브젝트(a synchronization object)에 대한 로크(lock)를 획득하려고 시도했음을 표시하는, 상기 제 1 쓰레드 유닛으로부터의 요청을 상기 제 2 쓰레드 유닛에서 수신하는 것에 응답하여, 상기 대리 쓰레드로 하여금 상기 쉬레드 역할을 수행하게 하는 단계를 더 포함하는
    방법.
  4. 제 1 항에 있어서,
    상기 쉬레드가 상기 운영 체계에 의해서 관리되는 사용자 레벨 예외 처리 구조(a user-level exception-handling structure)에 기록하려고 시도했음을 표시하는, 상기 제 1 쓰레드 유닛으로부터의 요청을 상기 제 2 쓰레드 유닛에서 수신하는 것에 응답하여, 상기 대리 쓰레드로 하여금 상기 쉬레드 역할을 수행하게 하는 단계를 더 포함하는
    방법.
  5. 제 1 항에 있어서,
    상기 대리 쓰레드를 생성하는 단계는 다수의 대리 쓰레드를 생성하는 단계를 더 포함하며,
    상기 다수의 대리 쓰레드 각각은 상기 운영 체계에 대해서 비가시적인 하나 이상의 쓰레드 유닛 상에서 실행되는, 상기 운영 체계에 대해 비가시적인 다수의 쉬레드 각각에 대응하는
    방법.
  6. 제 5 항에 있어서,
    상기 인스트럭션을 실행하는 단계는 2 개 이상의 상기 쉬레드가 상기 운영 체계에 대해 비가시적인 하나 이상의 쓰레드 유닛 상에서 동시에 실행되고 있는 동안 상기 운영 체계에 대해서 가시적인 메인 쓰레드의 인스트럭션을 실행하는 단계를 더 포함하는
    방법.
  7. 프로세서에 의해서 실행되는 다수의 머신 액세스가능한 인스트럭션을 갖는 머신 액세스가능한 매체를 포함하는 제품으로서,
    상기 인스트럭션은
    운영 체계에 대해서 가시적인 제 1 쓰레드 유닛 상에서 실행되는 제 1 쓰레드를 생성하는 단계와,
    상기 운영 체계에 대해 비가시적인 쉬레드가 상기 운영 체계에 대해 비가시적인 제 2 쓰레드 유닛 상에서 동시에 실행되고 있는 동안 메인 쓰레드의 인스트럭션을 실행하는 단계와,
    상기 쉬레드에 의해 발생한 예외 처리 동안 상기 제 1 쓰레드로 하여금 상기 운영 체계에 대해 상기 쉬레드 역할을 수행하게 하는 단계를 수행하며,
    상기 쉬레드 역할을 수행하게 하는 단계는 상기 제 2 쓰레드 유닛으로부터 상기 제 1 쓰레드 유닛으로 제어 및 상태 정보를 전송하는 단계를 더 포함하는,
    제품.
  8. 제 7 항에 있어서,
    상기 프로세서에 의해서 실행될 때, 상기 쉬레드가 상기 운영 체계에 의해서 관리되는 쓰레드 특정 자원에 대한 경합을 시도했음을 나타내는 표시에 응답하여, 상기 제 1 쓰레드로 하여금 상기 쉬레드 역할을 수행하게 하는 단계를 수행하는 인스트럭션을 더 포함하는
    제품.
  9. 제 7 항에 있어서,
    상기 프로세서에 의해서 실행될 때, 상기 쉬레드가 상기 운영 체계에 의해서 관리되는 서비스에 대한 경합을 시도했음을 나타내는 표시에 응답하여, 상기 제 1 쓰레드로 하여금 상기 쉬레드 역할을 수행하게 하는 단계를 수행하는 인스트럭션을 더 포함하는
    제품.
  10. 제 7 항에 있어서,
    상기 프로세서에 의해서 실행될 때, 상기 쉬레드가 상기 운영 체계에 의해서 관리되는 동기화 오브젝트에 대한 로크를 획득하려고 시도했음을 나타내는 표시에 응답하여, 상기 제 1 쓰레드로 하여금 상기 쉬레드 역할을 수행하게 하는 단계를 수행하는 인스트럭션을 더 포함하는
    제품.
  11. 제 7 항에 있어서,
    상기 프로세서에 의해서 실행될 때, 상기 쉬레드가 상기 운영 체계에 의해서 관리되는 사용자 레벨 예외 처리 구조에 기록하려고 시도했음을 나타내는 표시에 응답하여, 상기 제 1 쓰레드로 하여금 상기 쉬레드 역할을 수행하게 하는 단계를 수행하는 인스트럭션을 더 포함하는
    제품.
  12. 제 7 항에 있어서,
    상기 운영 체계에 대해서 가시적인 제 1 쓰레드를 생성하는 단계를 수행하는 상기 인스트럭션은, 상기 프로세서에 의해서 실행될 때, 운영 체계에 대해 가시적인 다수의 대리 쓰레드를 생성하는 단계를 수행하는 인스트럭션을 더 포함하며,
    상기 다수의 대리 쓰레드 각각은 상기 운영 체계에 대해 비가시적인 하나 이상의 제 2 쓰레드 유닛 상에서 실행되는, 상기 운영 체계에 대해서 비가시적인 다수의 쉬레드 각각에 대응하는
    제품.
  13. 제 7 항에 있어서,
    상기 제 1 쓰레드로 하여금 상기 쉬레드 역할을 수행하게 하는 단계를 수행하는 인스트럭션은,
    상기 프로세서에 의해서 실행될 때,
    상기 제 1 쓰레드의 상태를 저장하는 단계와,
    상기 쉬레드의 상태를 상기 제 2 쓰레드 유닛으로부터 상기 제 1 쓰레드 유닛으로 복사하는 단계를 수행하는 인스트럭션을 포함하는
    제품.
  14. 1) 운영 체계에 의해서 제어되는 메인 쓰레드의 인스트럭션과 2) 상기 운영 체계에 대해 비가시적인 격리된 시퀀서(OS sequestered sequencer) 상의 인스트럭션을 동시에 실행하는 동안에,
    상기 격리된 시퀀서 상의 인스트럭션이 상기 운영 체계의 서비스를 호출(invoke)하려고 시도했는지를 판정하는 단계와,
    상기 격리된 시퀀서를 대신하여 상기 운영 체계에 대해 가시적인 쓰레드 유닛 상에서 실행되는 대리 쓰레드로 하여금 상기 운영 체계의 서비스를 호출하게 하는 단계를 포함하는
    방법.
  15. 제 14 항에 있어서,
    상기 판정 단계 및 상기 호출하게 하는 단계는,
    1) 운영 체계에 의해서 제어되는 상기 메인 쓰레드의 인스트럭션과 2) 상기 운영 체계에 대해 비가시적인 격리된 시퀀서 상의 상기 인스트럭션과 3) 상기 운영 체계에 대해 비가시적인 격리된 제 2 시퀀서 상의 인스트럭션을 동시에 실행하는 동안에 또한 수행되는
    방법.
  16. 제 14 항에 있어서,
    상기 운영 체계의 서비스는 동기화 오브젝트를 획득하는 서비스 또는 동기화 오브젝트를 해제하는 서비스를 더 포함하는
    방법.
  17. 제 14 항에 있어서,
    상기 운영 체계의 서비스는 사용자 레벨 예외 처리 루틴을 등록하는 서비스를 더 포함하는
    방법.
  18. 제 17 항에 있어서,
    상기 운영 체계의 서비스는 상기 사용자 레벨 예외 처리 루틴을 호출하는 서비스를 더 포함하는
    방법.
  19. 제 14 항에 있어서,
    상기 판정 단계는 상기 운영 체계에 대해서 격리된 시퀀서 상의 인스트럭션을 실행하는 동안에 생성된 시스템 이벤트를 수신하는 단계를 더 포함하는
    방법.
  20. 다수의 머신 액세스가능한 인스트럭션을 갖는 머신 액세스가능한 매체를 포함하는 제품으로서,
    상기 다수의 머신 액세스가능한 인스트럭션은 프로세서에 의해서 실행될 때,
    1) 운영 체계에 의해서 제어되는 메인 쓰레드의 인스트럭션과 2) 상기 운영 체계에 대해 비가시적인 격리된 시퀀서 상의 인스트럭션을 동시에 실행하는 동안에,
    상기 격리된 시퀀서 상의 인스트럭션이 상기 운영 체계의 서비스를 호출하려고 시도했는지를 판정하는 단계와,
    상기 격리된 시퀀서를 대신하여 상기 운영 체계에 대해 가시적인 쓰레드 유닛 상에서 실행되는 대리 쓰레드로 하여금 상기 운영 체계의 서비스를 호출하게 하는 단계를 수행하는
    제품.
  21. 제 20 항에 있어서,
    상기 판정 단계를 수행하는 머신 액세스가능한 인스트럭션 및 상기 호출하는 단계를 수행하는 머신 액세스가능한 인스트럭션은,
    1) 운영 체계에 의해서 제어되는 상기 메인 쓰레드의 인스트럭션과 2) 상기 운영 체계에 대해 비가시적인 격리된 시퀀서 상의 상기 인스트럭션과 3) 상기 운영 체계에 대해 비가시적인 격리된 제 2 시퀀서 상의 인스트럭션을 동시에 실행하는 동안에 또한 수행되는
    제품.
  22. 제 20 항에 있어서,
    상기 운영 체계의 서비스는 동기화 오브젝트를 획득하는 서비스 또는 동기화 오브젝트를 해제하는 서비스를 더 포함하는
    제품.
  23. 제 20 항에 있어서,
    상기 운영 체계의 서비스는 사용자 레벨 예외 처리 루틴을 등록하는 서비스를 더 포함하는
    제품.
  24. 제 23 항에 있어서,
    상기 운영 체계의 서비스는 상기 사용자 레벨 예외 처리 루틴을 호출하는 서비스를 더 포함하는
    제품.
  25. 제 20 항에 있어서,
    상기 판정 단계를 수행하는 인스트럭션은, 상기 격리된 시퀀서 상의 인스트럭션을 실행하는 동안에 생성된 시스템 이벤트를 수신하는 단계를 수행하는 인스트럭션을 더 포함하는
    제품.
  26. 제 1 항에 있어서,
    상기 제 1 및 제 2 쓰레드 유닛은 단일 칩 패키지 내에서 별도의 물리적 프로세서 코어를 더 포함하는
    방법.
KR1020077026304A 2005-05-13 2006-05-11 운영 체계 서비스의 투명한 지원을 위한 방법 및 제품 KR100985318B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/129,607 2005-05-13
US11/129,607 US8516483B2 (en) 2005-05-13 2005-05-13 Transparent support for operating system services for a sequestered sequencer

Publications (2)

Publication Number Publication Date
KR20070121836A KR20070121836A (ko) 2007-12-27
KR100985318B1 true KR100985318B1 (ko) 2010-10-04

Family

ID=36794951

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077026304A KR100985318B1 (ko) 2005-05-13 2006-05-11 운영 체계 서비스의 투명한 지원을 위한 방법 및 제품

Country Status (5)

Country Link
US (1) US8516483B2 (ko)
EP (1) EP1880289B1 (ko)
KR (1) KR100985318B1 (ko)
CN (1) CN101176066B (ko)
WO (1) WO2006124750A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8719819B2 (en) 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
US8516483B2 (en) 2005-05-13 2013-08-20 Intel Corporation Transparent support for operating system services for a sequestered sequencer
US8010969B2 (en) * 2005-06-13 2011-08-30 Intel Corporation Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
US8028295B2 (en) 2005-09-30 2011-09-27 Intel Corporation Apparatus, system, and method for persistent user-level thread
US8689215B2 (en) * 2006-12-19 2014-04-01 Intel Corporation Structured exception handling for application-managed thread units
US20080307419A1 (en) * 2007-06-06 2008-12-11 Microsoft Corporation Lazy kernel thread binding
US20080313656A1 (en) * 2007-06-18 2008-12-18 Microsoft Corporation User mode stack disassociation
US8464035B2 (en) * 2009-12-18 2013-06-11 Intel Corporation Instruction for enabling a processor wait state
DE112010005821T5 (de) 2010-08-23 2013-06-06 Empire Technology Development Llc Kontextwechsel
US9710275B2 (en) 2012-11-05 2017-07-18 Nvidia Corporation System and method for allocating memory of differing properties to shared data objects
CN102999317B (zh) * 2012-12-30 2015-12-23 北京讯鸟软件有限公司 面向多租户的弹性多进程服务处理方法
CN105074671B (zh) * 2013-03-27 2018-04-20 英特尔公司 用于在内核模块和设备驱动程序中检测并发编程错误的方法和***
CN110231981B (zh) * 2018-03-06 2022-12-13 华为技术有限公司 服务调用方法及装置
US11068319B2 (en) 2018-10-18 2021-07-20 Oracle International Corporation Critical section speedup using help-enabled locks

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6865738B2 (en) * 2002-10-08 2005-03-08 Sun Microsystems, Inc. Method and apparatus for managing independent asynchronous I/O operations within a virtual machine

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5630128A (en) * 1991-08-09 1997-05-13 International Business Machines Corporation Controlled scheduling of program threads in a multitasking operating system
US5526485A (en) * 1994-10-13 1996-06-11 Microsoft Corporation Just-in-time debugging system and methods under the windows 3.0 and windows 3.1 operating systems
US7065633B1 (en) * 1999-01-28 2006-06-20 Ati International Srl System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US6587860B1 (en) * 1999-03-31 2003-07-01 International Business Machines Corporation Apparatus and method for tracking access to data resources in a cluster environment
US6651163B1 (en) * 2000-03-08 2003-11-18 Advanced Micro Devices, Inc. Exception handling with reduced overhead in a multithreaded multiprocessing system
US20040002974A1 (en) * 2002-06-27 2004-01-01 Intel Corporation Thread based lock manager
WO2005022384A1 (en) 2003-08-28 2005-03-10 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US8516483B2 (en) 2005-05-13 2013-08-20 Intel Corporation Transparent support for operating system services for a sequestered sequencer

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6865738B2 (en) * 2002-10-08 2005-03-08 Sun Microsystems, Inc. Method and apparatus for managing independent asynchronous I/O operations within a virtual machine

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
LNCS, vol.1940, 2000.1.1.,Springer-Verlag Berlin, Vasileios K. Barekas외 3인저, "Nanothreads vs. Fibers for the Support of Fine Grain Parallelism on Windows NT/2000 Platforms".*

Also Published As

Publication number Publication date
US20060271932A1 (en) 2006-11-30
WO2006124750A1 (en) 2006-11-23
EP1880289B1 (en) 2016-09-28
CN101176066A (zh) 2008-05-07
EP1880289A1 (en) 2008-01-23
KR20070121836A (ko) 2007-12-27
US8516483B2 (en) 2013-08-20
CN101176066B (zh) 2012-01-04

Similar Documents

Publication Publication Date Title
KR100985318B1 (ko) 운영 체계 서비스의 투명한 지원을 위한 방법 및 제품
US9069605B2 (en) Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
US8079035B2 (en) Data structure and management techniques for local user-level thread data
US8689215B2 (en) Structured exception handling for application-managed thread units
JP3595504B2 (ja) マルチスレッド式プロセッサにおけるコンピュータ処理方法
US9785462B2 (en) Registering a user-handler in hardware for transactional memory event handling
US20020083373A1 (en) Journaling for parallel hardware threads in multithreaded processor
US10346195B2 (en) Apparatus and method for invocation of a multi threaded accelerator
JP2005284749A (ja) 並列処理コンピュータ
WO2007002550A2 (en) Primitives to enhance thread-level speculation
Keckler et al. Concurrent event handling through multithreading
Zhou et al. LPVM: a step towards multithread PVM
Akgul et al. A system-on-a-chip lock cache with task preemption support
Akgul et al. The system-on-a-chip lock cache
US9946665B2 (en) Fetch less instruction processing (FLIP) computer architecture for central processing units (CPU)
Strøm Real-Time Synchronization on Multi-Core Processors
Bahmann et al. Extending futex for kernel to user notification
Neshev et al. Multitasking Framework for Embedded Multicore Systems
Erkkilä Real-time audio servers on BSD Unix derivatives
Craig Nanothreads: flexible thread scheduling
Tuma et al. Operating Systems
Fernandes et al. Subutai: Speeding up Legacy Parallel Applications through Data Synchronization
Oboguev VAX MP A multiprocessor VAX simulator
Babka et al. Operating Systems

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130902

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140829

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150827

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160831

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee