KR20090115118A - 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호 - Google Patents

멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호 Download PDF

Info

Publication number
KR20090115118A
KR20090115118A KR1020097012940A KR20097012940A KR20090115118A KR 20090115118 A KR20090115118 A KR 20090115118A KR 1020097012940 A KR1020097012940 A KR 1020097012940A KR 20097012940 A KR20097012940 A KR 20097012940A KR 20090115118 A KR20090115118 A KR 20090115118A
Authority
KR
South Korea
Prior art keywords
memory
address space
target code
virtual address
computing system
Prior art date
Application number
KR1020097012940A
Other languages
English (en)
Other versions
KR101244014B1 (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 KR20090115118A publication Critical patent/KR20090115118A/ko
Application granted granted Critical
Publication of KR101244014B1 publication Critical patent/KR101244014B1/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
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Multi Processors (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

멀티 프로세서 컴퓨팅 시스템(10)에서 메모리 일관성을 보호하기 위한 방법 및 장치에 관한 것으로서, 특히 동적 2진수 번역과 같은 프로그램 코드 변환에 관한 것이다. 모범적 멀티 프로세서 컴퓨팅 시스템(10)은 메모리(18), 복수의 프로세서들(13a, 13b), 그리고 서브젝트 코드(17)를 복수의 프로세서들(13a, 13b) 상에서 실행 가능한 적어도 제1 및 제2의 타겟 코드 부분들(21a, 21b)로 변환하기 위해 준비된 제어기/번역기 유니트(19)를 제공한다. 상기 제어기/번역기 유니트(19)는 주소 공간 할당 유니트(196), 공유 메모리 검출 유니트(197) 및 메모리 보호 유니트(198)을 포함한다. 주소 공간 할당 유니트는 복수의 가상 주소 공간 영역들을 제공하고 이를 통해서 상기 메모리(18)에 접근하도록 타겟 코드 부분들(21a, 21b)를 보낸다. 공유 메모리 검출 유니트는 모든 타겟 코드 부분들(21a, 21b)에 의해서 접근 가능한 공유 메모리 영역(182)을 접근하려는 요청을 검출하고 상기 공유 메모리 영역(182)을 접근하는 상기 제1의 타겟 코드 부분(21a)의 적어도 한 그룹의 명령들을 확인한다. 메모리 보호 유니트는 상기 확인된 명령들의 그룹(211)에 의한 상기 공유 메모리 영역(182)에의 접근들과 관련하여 선택적으로 메모리 일관성 보호를 적용한다. 한 모범적 실시 예에서, 적어도 제1 코드 부분(21a)은 제1의 메모리 일관성 모델 하에서 실행한다. 명시적 혹은 암시적 공유 메모리(182)는 검출되며 상기 공유 메모리 영역(182)에 접근하는 명령들을 포함하는 상기 제1 코드 부분의 블록(211)은 상기 검출된 공유 메모리 영역(182)를 접근할 때 제2의 일관성 모델하에 서 실행하기 위해 상기 메모리 일관성 보호에 종속된다.

Description

멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호{MEMORY CONSISTENCY PROTECTION IN A MULTIPROCESSOR COMPUTING SYSTEM}
본 발명은 일반적으로 컴퓨터와 컴퓨터 시스템에 관한 것이며, 더 구체적으로는, 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호(memory consistency protection)에 관한 것이다.
고출력(high-powered) 컴퓨팅 시스템에 대한 현대의 필요는 두 개, 네 개, 여덟 개 혹은 그 이상의 분리된 프로세서들(separate processors)을 갖는 멀티프로세서 컴퓨터 아키텍쳐(architectures)의 개발을 가져왔다. 그러한 멀티프로세서 시스템들은 프로그램 코드의 복수 부분들(multiple portions)을 동시에(simultaneously) 실행할 수 있다(즉, 복수의 프로세스들 및/또는 복수 프로세스 스레드들(multiple process threads)을 동시에 실행할 수 있다). 예를 들어, 프로세스간 통신(inter-process communications : IPC)을 위한 메시지 전달(message passing)을 포함하는 프로그램 코드의 부분들의 실행들 사이에 데이터를 공유하기 위한 여러 다른 메커니즘들이 존재한다. 그러나, 대부분의 현대 멀티프로세서 컴퓨팅 시스템들은 또한 분리된 프로세서들 상에서 실행되고 있는 두 개 혹은 그 이상의 프로그램 코드 부분들에 의해서 접근될 수 있는 공유 메모리(shared memory)의 사용을 지원한다.
공유 메모리에 저장된 데이터에 대한 변경은 그 어떠한 것이라도 질서 있게 그리고 동기화된 방법으로(in an orderly and synchronized manner) 복수 코드 부분들의 각각에 보여질 수 있도록(visible) 만들어지는 것은 중요하다. 따라서, 각각 다른 형태의 멀티프로세서 시스템은 자신만의 메모리 일관성 모델(its own corresponding memory consistency model)을 가지고 있다. 이 모델은 메모리 동작들(특히, 로드, 저장 및 원자적 동작들과 관련한)의 시맨틱스(the semantics of memory operations)을 규정하는데(specify), 이에 의하여 공유 메모리에 대한 변경들이 복수의 프로세서를 각각에 보여지도록 하는 방법이 정의된다. 멀티프로세서 시스템에 있는 프로그램 코드와 하드웨어 모두는 정확한 동작을 달성하기 위해서 이 메모리 일관성 모델에 충실해야 한다. 만일 그렇지 못하여 메모리 일관성 실패가 발생하면 시스템의 치명적인 사고(fatal crash)로 이어질 수 있다.
멀티프로세서 컴퓨팅 시스템들의 메모리 일관성 모델들에 대한 더 상세한 소개는 Sarita V. Advey 및 Kourosh Gharachorlooz에 의해서 1995년 9월 라이스 대학 ECE 기술보고서 9512 및 웨스턴 연구소 연구 보고서 95/7로서 출판된 “공유 메모리 일관성 모델 : 취급설명서“에 제공되어 있으며, 이 자료는 본 명세서에서 참고자료로 참조 된다.
가장 간단한 예로서, 메모리 일관성 모델은 시계열 일관성(sequential consistency)을 규정한다. 이에 의해서 메모리 동작들은 프로그램 코드에 규정된 프로그램 순서로 엄격히 일어나게 된다. 그러나 멀티프로세서 아키텍쳐에서 프로세 서들과 메모리 서브 시스템들은 개선된 하드웨어 성능을 달성하기 위하여 메모리 동작들을 재정렬 하도록(reorder) 종종 설계된다. 다시 말하면, 많은 현대의 공유 메모리 멀티프로세서 시스템들, 예를 들면 디지털 ALPHA, SPARC v8 & v9 및 IBM POWER와 같은 시스템들 및 기타 시스템들이 다양한 형태의 느슨한 정렬(relaxed ordering)를 제공하고 미묘하게 다른 형태의 비 시계열적 메모리 일관성(non-sequential memory consistency)을 제공한다. 여기서, 메모리 일관성 분야의 추가적인 일반 배경정보는 2002년 4월 22일 발표된 B. Hay와 G. Hook이라는 사람이 쓴 ”POWER 4 및 메모리 일관성 동기화”라는 제목의 기사(참조 : http://www-128.ibm.com/developerworks/eserver/articles/power4_mem.html)에 제공되어 있으며, 이 자료도 본 명세서에서 참고자료로 참조 된다.
본 발명은 첨부된 청구 항들에 기재되어 있는 바와 같이 멀티프로세서 컴퓨터 시스템에서 메모리 일관성을 보호하기 위한 멀티프로세서 컴퓨터 시스템 및 방법을 제공하는 것이다. 본 발명의 기타, 선택적 특징들은 아래의 상세한 설명과 종속 청구항들로부터 잘 알 수 있을 것이다.
여기서 논의되는 본 발명의 모범 실시 예들은 멀티프로세서 컴퓨팅 시스템에서의 메모리 일관성 보호에 관한 것이다. 특히, 본 발명의 모범 실시 예들은 멀티프로세서 컴퓨터 시스템에서 공유 메모리와 관련하여 일관되고 동기화된 동작들(consistent and synchronized operations)을 제공하는 메커니즘에 관한 것이다.
아래는 본 발명의 실시 예들에 따라 실현 가능한 다양한 특징들 및 장점들(various aspects and advantages)의 요약이다. 이것은 당업자가 본 발명의 상세한 설계에 관한 계속되는 토론에 보다 빠르게 동화하는 것을 돕기 위한 입문으로 제공되는 것이며, 어떠한 경우에도 첨부된 청구항들의 범위를 제한하려는 것은 아니다.
본 발명의 하나의 모범 실시 예는 하나의 메모리, 복수의 프로세서를, 및 하나의 컨트롤러 유니트를 포함하는 멀티프로세서 컴퓨팅 시스템을 제공한다. 상기 메모리는, 적어도 제 1의 타겟 코드 부분 및 제2의 타겟 코드 부분을 포함하는, 메모리 내에 저장된 복수의 타켓 코드 부분들(a plurality of target code portions)을 갖는다.
상기 복수의 프로세서들은, 병렬 프로세싱을 사용하여, 메모리에 저장된 복수의 타겟 코드 부분들을 실행하기 위해서 준비된다(arranged). 상기 컨트롤러 유니트는 복수의 프로세서들에 의한 복수의 타겟 코드 부분들의 실행을 제어하기 위해서 준비된다. 상기 컨트롤러 유니트는 하나의 주소 공간 할당 유니트(an address space allocation unt)를 포함한다. 이 주소 공간 할당 유니트는 메모리에 주소지정을 위해 사용되는 하나의 가상 주소 공간 영역(a virtual address space area)을 복수의 가상의 주소 공간 영역들(a plurality of virtual address space reagions)로 나누고 초기에는 제1의 일관성 모델을 따라 상기 복수의 가상 주소 공간 영역들을 통해 상기 메모리를 접근하기 위한 상기 복수의 타겟 코드 부분들의 실행을 제어하기 위해서(control) 준비된다.
또한, 상기 컨트롤러 유니트는 하나의 공유 메모리 검출 유니트를 포함한다. 이 공유 메모리 검출 유니트는 적어도 상기 제2의 타켓 코드 부분에 의해서도 접근 가능한 상기 메모리의 공유 메모리 영역에 관하여(with respect to) 제1의 타겟 코드 부분의 실행으로 만들어진 메모리 접근 요청(a memory access request)을 검출하고 상기 공유 메모리 영역을 접근하는 상기 제1의 타겟 코드 부분의 적어도 한 그룹의 명령들을 확인하기 위해서 준비된다.
또한, 하나의 메모리 보호 유니트가 준비된다. 이 메모리 보호 유니트는, 상기 공유 메모리 검출 유니트가 상기 확인된 명령들의 그룹을 확인하는 것에 응답하여, 상기 제1의 타겟 코드 부분의 상기 확인된 명령들 그룹의 실행으로 상기 공유 메모리 영역에 대한 접근들이 있을 때 이 접근들과 관련하여 제2의 메모리 일관성 모델을 실시하도록 메모리 일관성 보호를 선택적으로 적용하기 위해 준비된다.
본 발명의 다른 실시 예에서, 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하는 방법이 제공되며, 상기 방법은 컴퓨터로 실시되는 다음의 단계를 포함한다 : 제1의 메모리 일관성 모델 하에서 적어도 제1의 코드 부분을 실행하는 단계 ; 상기 제1의 코드 부분 및 적어도 제 2의 코드 부분 모두가 접근 가능한 공유 메모리 영역을 검출하는 단계 ; 상기 공유 메모리 영역을 접근하는 상기 제 1의 코드 부분의 하나의 그룹의 명령들을 확인하는 단계 ; 및 상기 검출된 공유 메모리 영역을 접근할 때 상기 제1의 코드 부분의 상기 그룹 명령들이 제2의 메모리 일관성 모델 하에서 실행되도록 메모리 일관성 보호를 선택적으로 적용하는 단계를 포함한다.
본 발명의 또 다른 모범 실시 예에서도, 멀티프로세서 컴퓨팅 시스템의 메모리 일관성을 보호하는 방법이 제공되며, 상기 방법은 컴퓨터로 실시되는 다음의 단계를 포함한다 : 멀티프로세서 컴퓨팅 시스템의 디폴트 메모리 일관성 모델 하에서 적어도 제1의 코드 부분 및 제2의 프로그램 코드 부분을 실행하는 단계 ; 상기 제1의 프로그램 코드 부분 및 상기 제2의 프로그램 코드 부분 모두에 대하여 명시적(explicitly) 공유 메모리 영역을 접근 가능하도록하는(initiate) 요청(a request)을 검출하는 단계 ; 및 상기 공유 메모리 영역을 접근할 때 상기 제1 및 제2의 프로그램 코드 부분들이 다른 제2의 메모리 일관성 모델 하에서 실행되도록 메모리 일관성 보호를 선택적으로 적용하는 단계를 포함한다.
본 발명의 또 다른 모범 실시 예에서는 적어도 제1 및 제2의 프로세서들을 갖는 멀티프로세서 컴퓨팅 시스템의 메모리 일관성을 보호하는 방법이 제공되며, 상기 방법은 컴퓨터로 실시되는 다음의 단계를 포함한다 : 제1의 가상 주소 공간 영역에 관하여(with respect to a first virtual address space region) 상기 제1의 프로세서상에서 제1의 코드 부분을 실행하는 단계 및 제2의 가상 주소 공간 영역에 관하여(with respect to a second virtual address space region) 상기 제2의 프로세서상에서 제2의 코드 부분을 실행하는 단계 - 상기 제1 및 제2의 가상 주소 공간 영역들은 분리되어 있고 겹치지(overlap) 않는다 ; 상기 제1의 가상 주소 공간 영역 내에 적어도 하나의 사상된 영역(one mapped area)을 사상하는(mapping) 단계; 상기 제2의 가상 주소 공간 영역에는 사상되지 않지만(unmapped) 상기 제1의 가상 주소 공간 영역에는 사상된 하나의 메모리 영역(a memory area)에 대한 상기 제2의 코드 부분에 의한 접근 요청(an access request)을 검출하고 이에 의하여 상기 제2의 코드 부분이 공유된 메모리 영역을 접근하려고 시도하고 있음을 결정하는 단계 ;
상기 사상된 영역을 상기 제1의 가상 주소 공간 영역 대신에 이로부터 제3의 가상 주소 공간 영역으로 재사상하는(remapping) 단계 - 상기 제3의 가상 주소 공간 영역은 분리되어 있고 상기 제1 및 제2의 주소 공간 영역들에 대하여 겹치지 않는다 ; 미리 정해진 메모리 정렬 제한들 하에서 상기 블록이 실행되게 하는 메모리 일관성 보호를 적용하기 위해 상기 접근 요청을 포함하는 상기 제2의 코드 부분의 명령들의 적어도 하나의 선택된 블록을 수정하는(modifying) 단계 및 상기 제3의 주소 공간 영역에 사상된 상기 공유 메모리 영역을 접근하는 코드의 적어도 선택된 블록을 지시하는(directing) 단계를 포함한다.
상기 모범적 실시 예들은 멀티프로세서 컴퓨팅 시스템의 메모리 일관성을 보호하기 위한 저비용 및 효과적인 메커니즘을 제공하는데, 특히 그러한 보호를 요구하는 프로그램의 부분들에 대해서만 선택적으로 메모리 일관성 보호를 확인하고 적용함으로써 그렇게 한다. 또한 상기 모범적인 실시 예들은 공유 메모리에 대한 접근을 검출하고 이에 의해서 상기 메모리 일관성을 보호를 요구하는 상기 프로그램의 부분들을 결정하기 위한 저비용 및 효과적인 메커니즘을 제공한다.
여기서 논의된 일부 모범적 실시 예들은 프로그램 코드 변환을 시작할 때 개선된 메모리 일관성을 제공한다. 여기서, 상기 컨트롤러 유니트(the controller unit)는 번역기 유니트(the translator unit)이다. 특히, 본 발명의 발명자들은 프로그램 변환에 초점을 맞춘 메커니즘을 개발하였으며, 이는 동적인 2진수 번역(dynamic binary translation)을 수행하는 런-타임 번역기(a run-time translator) 와 관련하여 유용하다. 다시 말하면, 상기 컨트롤러 유니트는 동적 이진수 번역기로서 구성된다.
예를 들어, 제1의 메모리 일관성 모델을 가지고 있는 서브젝트 아키텍쳐(a subject architecture)로부터 다른 메모리 일관성을 가지고 있는 타겟 아키텍쳐(a target architecture)로 번역을 시작할 때, 상기 서브젝트 아키텍쳐와 상기 목표 아키텍쳐의 메모리 일관성 모델들 사이의 차이들은 상기 타겟 아키텍쳐 상에서 실행되는 프로그램 코드의 예상치 못한 혹은 에러를 발생시키는 행위로 이어질 수 있다. 특히, 메모리 일관성 에러들은 (SPARC 및 x86 아키텍쳐들 같은) 메모리 일관성을 강하게 요구하는 모델을 갖는 서브젝트 아키텍쳐로부터(PowerPC 및 Itanium 아키텍쳐들과 같은) 상대적으로 메모리 일관성 요구가 약한 모델을 갖는 타겟 아키텍쳐로 프로그램 코드를 변환 시킬 때 발생할 가능성이 높다. 따라서, 본 발명의 모범적 실시 예들은 이러한 형태의 프로그램 코드 변환을 수행하는 멀티프로세서 컴퓨터 시스템에서 메모리 일관성을 보호하는 저비용 및 효과적인 메커니즘을 제공하고자 한다.
여기서 논의하는 본 발명의 모범적인 실시 예들에서 채용될 수 있는 프로그램 코드 변환에 관한 추가의 정보는 PCT 출원들로서 다음과 같다.
“프로그램 코드 변환” 이라는 제목의 WO2000/2252, “프로그램 변환 동안 해석기 최적화 수행을 위한 방법 및 장치”라는 제목의 WO2004/0952464, “프로그램 코드 변환을 위해 중간 표시들을 발생시키기 위한 개선된 아키텍쳐”라는 제목의 WO2004/097631, “조정가능 정밀 예외 처리를 수행하기 위한 방법 및 장치”라는 제목의 WO2005/006106, 및 프로그램 변환 동안 예외들의 정밀 처리를 위한 방법 및 장치”라는 제목의 WO2006/103395인 이 자료도 본 명세서에서 참고자료로 참조 된다.
본 발명은 또한, 여기서 논의된 실시 예들 중 어느 것을 수행하기 위해서 준비된 컨트롤러 장치 혹은 번역기 장치가, 멀티프로세서 컴퓨팅 시스템과 협력하여 사용되었을 때는, 이들 장치까지 확대된다. 또한, 본 발명은, 여기서 설명한 방법들 중 어느 것이라도 수행하는 명령들이, 멀티프로세서 컴퓨팅 시스템에 의해서 실시될 때, 이들을 저장하고 있는 컴퓨터 판독가능 저장매체들에까지 확대된다.
적어도 본 발명의 일부 실시 예들은 전용 특별 목적의 하드웨어(dedicated special-purpose hardware)를 부분적으로 혹은 전적으로 사용하는 것으로 해석될 수 있다. 여기서 사용된 ‘콤포넨트(component)’, ‘모듈(module)’, 혹은 ‘유니트(unit)’와 같은 용어들은, 특정 태스크들(tasks)(certain tasks)을 수행하는, 피일드 프로그래머블 게이트 어레이(FPGA) 혹은 응용 특별 집적회로(ASIC)와 같은 하드웨어 장치를 포함할 수 있지만, 여기에 한정되는 것은 아니다. 또 다른 실시 예들에서, 본 발명의 엘리멘트들(elements)이 주소지정 가능한(addressable) 저장 매체 상에 존재하도록 구성될 수 있고, 하나 혹은 그 이상의 프로세서들 상에서 실행되도록 구성될 수 있다.
따라서, 본 발명의 기능적(functional) 엘리멘트들은, 일부 실시 예들에서, 다음과 같은 콤포넨트들이 예로서 포함할 수 있다 : 소프트웨어 콤포넨트들, 오브젝트 오리엔티드 소프트웨어 콤포넨트들, 클래스 콤포넨트들, 타스크 콤포넨트들, 프로세스들, 기능들, 속성들(attributes), 절차들(procedures), 서브루틴들, 프로그램 코드의 세그멘트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스들, 데이터 구조들, 테이블들, 어레이들, 및 변수들.
또한, 본 발명의 바람직한 실시 예들이 아래에서 논의되는 콤포넨트들, 모듈들 및 유니트들을 참조하여 기술되었다 할지라도, 그러한 기능적 엘리멘트들은 몇 개의 엘리멘트들에 조합되거나 혹은 추가의 엘리멘트들로 분리될 수 있다.
첨부된 도면들은 명세서에 포함되었고 이는 명세서의 일부를 구성하며 본 발명의 바람직한 실시 예를 설명하기 위한 것으로 아래와 같다.
도 1은 본 발명의 실시 예들이 적용되는 멀티프로세서 컴퓨팅 시스템을 보여주는 블록다이어그램이다.
도 2는 본 발명의 실시 예들에서 채용되는 프로그램 코드 변환 프로세스의 개략도이다.
도 3은 본 발명의 실시 예들에서 채용되는 멀티프로세서 컴퓨팅 시스템을 위한 프로그램 코드 변환 시스템의 개략도이다.
도 4는 본 발명의 모범적 실시 예들에 적용되는 메모리 일관성 보호 방법에 관한 개략적 흐름도이다.
도 5는 프로그램 코드 변환 시스템의 선택된 부분들을 더 상세하게 보여주는 개략적 블록다이어그램이다.
도 6은 가상 메모리 배치의 일부를 보여주는 개략도들이다.
도 7A-7D는 가상 메모리 배치의 일부를 보여주는 개략도이다.
도 8은 프로그램 코드 변환 시스템의 선택된 부분들을 더 상세하게 보여주는 개략적 블록다이어그램이다.
도 9는 본 발명의 모범적 실시 예에서 메모리 일관성 보호를 제공하는 방법의 개략적 흐름도이다.
도 10은 본 발명의 다른 모범적 실시 예에서 메모리 일관성 보호를 제공하는 방법의 개략적 흐름도이다.
도 11A 및 12B는 프로그램 코드 변환 시스템의 선택된 부분들을 더 상세하게 보여주는 개략도들이다.
아래의 설명은 당업자에게 본 발명을 실시하고 이용할 수 있도록 하고 발명자들이 생각해낸 본 발명의 베스트 모드를 실시할 수 있도록 제공되는 것이다. 그러나, 여기서 설명한 본 발명의 일반적인 원리들을 고려할 때, 다양한 변경들(various modifications)은 당 분야의 통상의 지식을 가진 자들에게 쉽게 이해될 수 있을 것이다.
도 1은 본 발명의 모범적 실시 예들이 적용될 수 있는 시스템과 환경의 개요를 보여준다. 콤포넨트들, 모듈들 및 유니트들은 이 후에 자세히 설명될 것이다. 도1을 참조하며, 서브젝트 프로그램(a subject program)(17)은 적어도 하나의 서브젝트 프로세서(3)를 갖는 서브젝트 컴퓨팅 시스템 상에서 실행되기 위한 것이다. 그러나, 타겟 컴퓨팅 시스템(10)은 반면에 프로그램 코드 변환을 수행하는 번역기 유니트(a translator unit)(19)를 통해서 서브젝트 프로그램(17)을 실행시키기 위해서 사용된다. 번역기 유니트(19)는 서브젝트 코드(17)로부터 타겟 코드(target code)(21)로 코드 변환을 수행한다. 그렇게 하여 타겟 코드(21)는 타겟 컴퓨팅 시스템 상에서 실행 가능하게 된다.
당업자들에게는 익숙한 것이지만, 서브젝트 프로세서(3)는 한 세트의 서브젝트 레지스터들(a set ofsubject registers)을 갖는다. 서브젝트 메모리(8)는 서브젝트 코드(17) 및 서브젝트 운영시스템(2)을 저장하고 있다. 비슷하게, 도 1의 타겟 컴퓨팅 시스템(10)은 적어도 하나의 타겟 프로세서(13)를 포함한다. 이 프로세서는 복수의 타겟 레지스터들(15), 및 메모리(18)를 갖는다. 이 메모리는 타겟 운영 시스템(20), 서브젝트 코드(17), 번역기 코드(19), 및 번역된 타겟 코드(21)를 포함하는 복수의 운영 콤포넨트들을 저장한다. 타겟 컴퓨팅 시스템(10)은 통상적으로 마이크로프로세서에 기초한 컴퓨터 혹은 기타 적합한 컴퓨터이다.
한 실시 예에서, 번역기 코드(19)는 출발 명령 세트 아키텍쳐(ISA)의 출발 코드를 다른 ISA의 번역된 타겟 코드로, 최적화를 적용하여 혹은 적용 없이, 번역하는 에뮬레이터(an emulator)이다. 다른 실시 예에서, 번역기 코드(19)는 프로그램 코드 최적화를 수행하여 출발 코드를 목적코드, 각각의 동일 ISA로 번역하기 위한 가속기(an accelerator)로서 기능을 한다.
번역기 코드(the translator code)(19)는 통상 번역기(the translator)를 실시하는 소스코드의 컴파일된 버전이며, 타겟 프로세서(13)상에서 운영 시스템(20) 과 결합하여 실행된다. 도 1에 예시된 구조는 단지 예시적이며, 예를 들어, 본 발명의 실시 예들에 따른 소프트웨어, 방법들 및 프로세스들은 운영 시스템(20) 내에 혹은 아래에 상주하는 코드에서 실행될 수 있음이 이해될 것이다. 서브젝트 코드(17), 번역기 코드(19), 운영 시스템(20), 및 메모리(18)의 저장 메커니즘들은 당업자들에게 알려진 바와 같이 다양한 형태의 것이 될 수 있다.
도 1의 장치에서, 프로그램 코드 변환은, 타겟 코드(21)가 실행 동안 타겟 아키텍쳐(10) 상에서 실행하기 위해서, 런 타임에서, 동적으로 수행된다. 다시 말하면, 번역기 코드(19)는 번역된 타겟 코드(21)와 함께 인라인(inline)으로 실행된다. 서브젝트 프로그램(17)을 번역기 코드(19)를 통해서 실행하는 것은 두 개의 다른 형태의 코드, 즉 번역기 코드(19)와 타겟 코드(21)를 번갈아(in interleaved manner) 실행한다는 것을 의미한다. 따라서, 타겟 코드(21)는 번역될 프로그램인 저장된 서브젝트 코드(17)에 기초하여, 런 타임 내내, 번역기 코드(19)에 의해서 생성된다.
한 실시 예에서, 번역기 유니트(19)는, 타겟 프로세서(13) 상에서 타겟 코드(21)로서 서브젝트 프로그램(17)을 실제로 실행하면서, 서브젝트 프로세서(3) 및 특히 서브젝트 레지스터들과 같은 서브젝트 아키텍쳐(1)의 관련 부분을 에뮬레이트 한다. 바람직한 실시 예에서, 적어도 하나의 글로벌 레지스터 스토어(global register store)(27)가 제공된다(이것은 또한 서브젝트 레지스터 뱅크(27) 혹은 앱스트랙트(abstract) 레지스터 뱅크(27)이라 일컬어지기도 한다).
멀티프로세서 환경에서 서브젝트 프로세서상의 아키텍쳐에 따라 하나 이상의 앱스트랙트 레지스터 뱅크(27)가 선택적으로 제공된다. 서브젝트 상태의 표시는 번역기(19) 및 타겟 코드(21)의 콤포넨트들에 의해서 제공된다. 다시 말하면, 번역기(19)는 서브젝트 상태를 변수들 및/혹은 오브젝트들과 같은 여러 명확한 프로그래밍 랭귀지 디바이스들에 저장한다.
번역된 타겟 코드(21)는, 비교에 의하여, 서브젝트 프로세서 상태를 타겟 레지스터들(15) 및 메모리 로케이션(memory locations)들(18)에 암시적으로(implicitly) 제공하며, 이 메모리 로케이션들은 타겟 코드(21)의 타겟 명령들에 의해서 제어된다. 예를 들어, 글로벌 레지스터 스토어(27)의 하위 레벨 표시(a low-level representation)는 단순히 할당된 메모리 영역(a region of allocated memory)이다. 그러나, 번역기(19)의 소스 코드에서, 글로벌 레지스터 스토어(27)는 더 상위의 레벨에서 접근될 수 있고 제어될 수 있는 데이터 어레이 혹은 오브젝트(a data array or an object)이다.
“기초 블록(basic block)”이라는 용어는 당업자들에게 익숙한 용어일 것이다. 기초 블록은 완전한 하나의 엔트리 포인트(one entry point)와 완전한 하나의 엑시트 포인트(one exit point)를 갖는 한 섹션의 코드(a section of code)를 말하며, 완전한 하나의 엔트리 포인트와 완전한 하나의 엑시트 포인트는 상기 블록 코드를 단일의 제어 패스(a single control path)로 제한한다. 이러한 이유 때문에, 기초 블록들은 컨트롤 플로(control flow)의 유용한 기초적인 유니트가 된다. 번역기(19)가 서브젝트 코드(17)을 복수의 기초 블록으로 나누는 것은 적절하다. 이렇게 함으로서, 각 기초 블록은 단일 엔트리 포인트에서 제1의 명령과 단일 엑시트 포인트에서 최종 명령 사이의(예를 들어, 점프, 콜 혹은 브랜치 명령과 같은) 순차적 세트의 명령들(a sequential set of instructions)이 된다. 번역기(19)는 이들 기초 블록들 중 단지 하나(블록 모드)를 선택하거나 혹은 그 블록들 중 한 그룹(그룹 블록 모드)을 선택할 수 있다. 한 그룹 블록은 하나의 단일 유니트(a single unit)로 취급될 수 있는 두 개 혹은 그 이상의 기초 블록들을 포함하는 것이 적당하다. 더 나아가서, 번역기는 서브젝트 코드와 동일 기초 블럭을 표시하지만 다른 엔트리 조건들 하에(under different entry conditions) 있는 아이소 블록들(iso-blocks)을 형성할 수도 있다.
바람직한 본 발명의 실시 예들에서, 중간 표시(Intermadiate Representation : IR)의 트리들(trees)은 오리지널 서브젝트 프로그램(17)로부터 타겟코드(21)을 생성시키는 프로세스의 일부로서 서브젝트 명령 시퀀스 상에서 생성된다. IR 트리들은 서브젝트 프로그램에 의해서 계산된 표현들(expressions) 및 수행된 동작들의 앱스트랙트 표시(abstract representations)이다. 나중에 타겟 코드(21)가 IR트리들에 기초하여 생성된다(심어진다). IR 노드들의 컬렉션들은 실제로 어사이클릭 그래프들(acyclic graphs : DAGs)이 되지만(directed) , 구어체로 “트리들”로 불리운다.
당업자들이 이해할 수 있는 것처럼, 한 실시 예에서 번역기(19)는 C++과 같은 오브젝트 오리엔티드(object-oriented) 프로그래밍언어를 사용하여 실시될 수 있다. 예를 들어, IR노드는 C++오브젝트로서 실시되고, 다른 노드들에 대한 레프런스들(references)은 다른 노드들에 대응하는 C++오브젝트에 대한 C++레프런스들로 서 실시된다. 그러므로 IR트리는 IR노드 오브젝트들의 컬렉션으로 실시된다.
논의 중인 실시 예에서, 또한, IR 생성(IR generation)은 서브젝트 프로그램(17)이 실행되는 서브젝트 아키텍쳐의 구체적인 특징들에 대응하는 한 세트의 레지스터 정의들(a set of register definitions)을 사용한다. 예를 들어, 서브젝트 아키텍쳐 상의 각 물리적 레지스터(즉, 도 1의 서브젝트 레지스터(5))에 대하여 하나의 특별한 레지스터 정의가 있다. 따라서, 번역기의 레지스터 정의들은 IR 노드 오브젝트(즉 IR트리)에 대한 레프런스를 포함하는 하나의 C++오브젝트로 실시될 수 있다. 레지스터 정의들의 세트에 의해서 참조되는 모든 IR 트리들의 집합(the aggregate)은 워킹 IR 포리스트(the working IR forest)(각각이 하나의 IR트리로 일컬어지는 복수의 앱스트랙트 레지스터 루트들(roots)을 포함하기 때문에 “포리스트”라 함)로서 참조된다. 이들 IR트리들과 다른 프로세스들은 적당히 번역기(19)의 일부분을 형성한다.
도 1은 또한 타겟 아키텍쳐(10)의 메모리(18)에 있는 네이티브(native) 코드(28)를 보여준다. 서브젝트 코드(17)의 런-타임 번역의 결과인 타겟 코드(21)와 타겟 아키텍쳐를 위해 직접적으로 쓰여졌거나 혹은 컴파일된 네이티브 코드(28) 사이에는 차이가 있다. 일부 실시 예들에서, 서브젝트 프로그램의 제어 플로우가, 서브젝트 코드의 네이티브 버전이 존재하는, 서브젝트 라이브러리와 같은 한 섹션의 서브젝트 코드(17)에 들어가는 것을 번역기(19)가 검출할 때, 네이티브 바인딩(binding)이 번역기(19)에 의해서 실시된다. 서브젝트 코드를 번역하기보다는 대신에 번역기(19)는 균등 네이티브 코드(the equivalent native code)(28)를 타겟 프로세서(13) 상에서 실행되도록 한다. 모범적 실시 예들에서, 번역기(19)는 네이티브 코드 혹은 타겟 코드 콜 스트브들(call stubs)과 같은 정의 된 인터페이스를 사용하여 생성된 타겟 코드(21)를 네이티브 코드(28)에 묶는다. 네이티브 코드 혹은 타겟 코드 콜 스트브들(call stubs)에 관한 상세한 논의는 PCT출원 WO2005/008478에 공개되어 있고, 이것은 참고 자료로 본 발명에 참조 된다.
도 2는 번역기 유니트(19)가 타겟 컴퓨팅 시스템 상에서 실행될 때를 더 상세하게 설명한다. 위에서 논의한 바와 같이, 번역기(19)의 프론트 엔드(the front end)는 디코더 유니트(191)를 포함하며, 이 유니트는 서브젝트 프로그램(17)의 현재 필요한 섹션을 디코드하여 복수의 서브젝트 코드 블록들(171a, 171b, 171c)(보통 각각 하나의 서브젝트 코드 기초블록을 포함한다)을 제공하며 , 또한 각각의 서브젝트 블록과 관련하여 디코더 정보(172)와 그 속에 포함된 서브젝트 명령들을 제공한다. 이들은 나중에 번역기(19)의 동작을 지원할 것이다.
다른 실시 예들에서, 번역기(19)의 코아(192)의 IR 유니트는 디코드된 서브젝트 명령들로부터 중간 표시(IR)를 생성하고, 상기 중간 표시와 관련하여 최적화가 시의 적절하게 수행된다. 번역기(19)의 백엔드의 일부로서(as part of the back end) 엔코더(193)는 타겟 프로세서(13)에 의해서 실행 가능한 타겟코드(21)를 생성한다(심는다).
이 단순화한 예에서, 3개의 타겟 코드 블록들(211a-211c)이 발생되어 서브젝트 코드 블록(171a-171c)을 서브젝트 시스템(1) 상에서 실행하는 것과 동등하게 타겟 시스템(10) 상에서 일을 수행한다. 또한 엔코더(193)는 타겟코드 블록들(211a- 211c)의 일부 혹은 전부를 위하여 컨트롤 코드(212)를 발생시킬 수 있다. 이 컨트롤 코드는 타겟 블록이 동작할 환경을 세팅하는 것과 같은 기능을 그리고 적당한 경우(where appropriate) 번역기(19)에 컨트롤을 되돌려 주는 것과 같은 기능들을 수행한다.
몇몇 모범적 실시 예들에서, 번역기(19)는 또한 서브젝트 코드(17)의 시스템 콜들을 확인하기 위해 준비된다(arranged). 앞에서 논의한 바와 같이, 타겟 시스템(10)은 다른 타겟 운영 시스템(20)과 다른 타겟 ISA를 사용할 수 있으며, 따라서 서브젝트 ISA와 비교하여 다른 세트의 시스템 콜들을 가질 수 있다. 여기서, 번역 단계에서는, 디코더(191)이 서브젝트 ISA의 시스템 콜들을 검출하기 위해 준비되며, 한편 서브젝트 코드(17)는 서브젝트 운영시스템(2)을 콜한다. 대부분의 현대 운영시스템들은 보통의 사용자 레벨 프로그램들과 운영시스템의 나머지부분 사이에 위치하는 라이브러리, 보통 glibc 혹은 MS Libc와 같은 C 라이브러리(libc) 를 제공한다.
이러한 C 라이브러리는 운영시스템(2)의 커널(the kernel)에 정보를 전달하는 것과 더 특권적 감독 모드(a more privileged supervisor mode)로 스위칭 하는 것의 하위 세부사항들(the low-level details)을 처리한다. 또한 상기 특권적 모드에서 행해질 필요가 없는 모든 테이타 처리 및 준비의 하위 레벨 세부사항들도 처리한다. POSIX 및 이와 유사한 시스템들 상에서, 널리 알려진 대표적 시스템 콜들에는 open, read, write, close, wait, execve, fork 및 kill 이 있다. 많은 현대 운영 시스템들은 수 백개의 시스템 콜들을 가지고 있다.
예를 들어, Linux는 거의 300개나 되는 다른 시스템 콜들을 가지고 있고 FreeBSD는 약 330개를 가지고 있다. 또한, 어떤 경우에는, 타겟 코드의 컨트롤은 유지하되, 타겟 코드(21)로부터 직접 타겟 OS(20)에 직접적으로 실행 컨트롤을 전송하지 않는 것이 바람직하다. 모범적인 실시 예들에서, 서브젝트 코드(17)에서 확인된 시스템 콜들 중 적어도 일부는 번역기(19)로 콜 백하는 펑크션 콜들(이하 X_call로 불리울 것이다)을 포함하는 타겟 코드(21)가 생성되도록 한다. 이들 X_call 들은 마치 시스템 콜이 타겟 OS(20)에 대하여 만들어졌던 것처럼 타겟 코드(21)에 나타나지만, 실제로는 실행 컨트롤을 타켓 코드(21)로부터 번역기(19)에게로 되돌려 준다.
모범적인 실시 예에서, 번역기(19)는 타겟 OS 인터페이스 유니트(또한 FUSE라 불리운다)(194)를 포함하며, 이는 그러한 X_call 들에 의해서 타겟 코드(21)로부터 호출된다. FUSE(194)는 적절한 경우 타겟 OS(20)에 대하여 실제 시스템 콜들을 수행하는 것을 포함하여 X_call에 대하여 응답하고, 그 다음 타겟 코드(21)로 복귀한다. 따라서, 번역기(19)는 효과적으로 타겟 코드(21)에 의해서 만들어진 시스템 콜들을 가로챌 수 있고, 타겟 코드(21)에 의해서 요구된 시스템 콜들을 감시하고 제어할 기회를 가질 수 있으며, 한편 타겟 코드(21)는 여전히 시스템 콜이 타겟 OS(20)에 대해서 만들어졌던 것처럼 행동한다.
또한 도 2에서 보여주듯이, 몇몇 모범적 실시 예들에서, 번역기(19)는 타겟 코드(21)의 실행 동안 발생된 예외 신호들(exception signals)을 선택적으로 가로채기 위해서 준비된다. 번역기(19)는 타겟 코드(21)의 실행에 의해서 발생된 적어 도 어떤 종류의 예외 신호들을 수신하기 위하여 타겟 OS에 등록되어 있는 하나 혹은 그 이상의 예외 처리기들(195)을 포함한다. 예외 처리기(195)는 따라서 적절한 경우 예외의 처리에 선택적으로 개입하여 번역기(19)에 특정 예외가 발생하였음을 알려줄 수 있다.
여기서, 예외 처리기(195)는 예외를 처리하고 실행을 적절하게 재개하거나(즉, 타겟 코드(21)로 복귀하거나), 혹은 예외 신호를 타겟 OS(20)에서의 적절한 네이티브 예외 처리기로 보내기로 결정한다. 한 실시 예에서, 번역기(19)는 대리 신호 처리기(a proxy signal handler)(도시 하지 않음)를 제공한다. 이 대리신호 처리기는 선택된 예외 신호들을 수신하고 수신된 예외 신호들 중 특정 부분을 적절한 예외 처리기(195)에 의해서 처리되도록 전송한다.
도 3은 본 발명의 모범적인 실시 예에 따라서 프로그램 코드 변환을 보여주는 개략도이다. 첫째, 설명을 도식적으로 쉽게 하기 위해서, 도 3은 멀티프로세서 서브젝트 컴퓨팅 시스템(1)을 보여준다. 이 시스템은 복수의 프로세서들(3a, 3b)을 가지고 있고, 이 프로세서들은 서브젝트 코드(170a, 170b,(SC1 & SC2)의 분리된 부분들을 실행하고 메모리 서브시스템(MS)(8)에 저장된 데이터를 접근한다.
가장 보편적으로 프로세서들(3a, 3b) 상에서 실행되는 서브젝트 코드 부분들(170a, 170b)은 주소공간(VAS)(81)을 참조함에 의하여 물리적 메모리(8)에 접근한다. 이 주소공간(81)은 서브젝트 코드(170a, 170b)에서 참조된 메모리 접근 주소를 메모리 서브시스템(8)의 물리적 메모리 주소들에 사상한다. 따라서, 이 분야에서 가상 주소 공간(virtual address space)이라는 용어는 코드 주소공간을 물리적 주소지정과 구별하기 위해서 사용된다.
어떤 상황에서는, 제1 및 제2의 서브젝트 코드 부분들(170a, 170b)은 모두 물리적 메모리(8)의 동일 영역에 접근하게 된다. 도 3에서 도시된 사례의 상황에서는 메모리(8)의 페이지 같은 영역은 서브젝트 코드 부분들(170a, 170b) 양쪽 모두에 의해서 가상주소공간(81)에 사상 된다. 다른 경우들에서는 명백한 공유 메모리 영역이 두 개의 다른 가상 주소 공간들로 사상 되는 경우도 있다.
위에서 논의한 바와 같이, 서브젝트 컴퓨팅 아키텍쳐(1)의 메모리 일관성 모델은 메모리 접근에 관한 시멘틱스를 정의하고, 이 시멘틱스에 따라 프로세서들(3a, 3b) 및 메모리 서브시스템(8)은 서브젝트 코드(17)의 원래 프로그램 순서에 관련하여 메모리 접근 순서를 재조정할 수 있다. 이 예에서, 서브젝트 아키텍쳐(1)은 상대적으로 강한 순서 배열 제한들을 가지고 있다. 다시 말하면, 서브젝트 메모리 일관성 모델은 연속적 저장과 연속적 로드들이 정렬되게 정의할 수 있지만, 로드 다음에 오는 저장 혹은 저장 다음에 오는 로드는 프로그램 순서와 비교하여 재 정렬 되도록 정의할 수 있다. 이 예의 서브젝트 아키텍쳐에서 메모리 일관성 모델은 다음 표(1)에서 간략하게 요약될 수 있다.
표(1)
제1의 명령 제2의 명령 제한
저장 저장 정렬됨
저장 로드 정렬되지 않음
로드 저장 정렬되지 않음
로드 로드 정렬됨
서브젝트 코드(17)은 정확한 기능 수행을 위해서 메모리 일관성 모델에 의존한다. 실제 사례에서, 서브젝트 코드는 종종 서브젝트 하드웨어의 현재 이용 가능 한 버전들 상에서 실행된다는 점을 고려하여 작성되고 디버깅된다. 그러나, 서브젝트 컴퓨팅 시스템의 다른 버전으로서 타겟 컴퓨팅 시스템(10) 상에서 서브젝트 코드(17)을 실시하거나, 혹은 서브젝트 코드(17)을 완전히 다른 타겟 컴퓨팅 시스템(10) 상에서 실행시키려고 변환 시키는 것은 서브젝트 코드의 약점을 노출 시킬 수 있다. 여기서, 느슨한 메모리 일관성을 갖는 다양한 다른 형식의 멀티 프로세서 시스템들의 많은 실제적인 예들이 있다. 이들에는 Alpha, AMD64, IA64, PA-RISC, POWER, SPARC, x86 및 zSeries를 포함한다.
도 3에서 보듯이, 타겟 컴퓨팅 시스템(10) 상의 번역기 유니트(“TU”)(19)는 타겟 시스템의 물리적 메모리(18)을 참조하여 복수의 타겟 프로세서들(13a, 13b) 상에서의 실행을 위하여 서브젝트 코드(17)를 타겟 코드(21)로 변환한다. 이 예에서, 타겟 컴퓨팅 시스템(10)은 서브젝트 시스템(1)의 제한들 보다 더 약하고 더 느슨한 제한들을 갖는 메모리 일관성 모델을 가지고 있다. 예를 들어, 타겟 메모리 일관성 모델은 어떤 경우에도 순서를 정하는 것은 없다고 규정할 수 있으며, 그래서 아래 테이블(2)에서 요약되어 있듯이 프로그램 시맨틱스는 유지하면서 타겟 메모리 일관성 모델은 로드들과 저장들을 자유롭게 순서가 재정렬되는 것을 허용한다.
테이블(2)
제1의 명령 제2의 명령 제한
저장 저장 정렬되지 않음
저장 로드 정렬되지 않음
로드 저장 정렬되지 않음
로드 로드 정렬되지 않음
당업자들에게 익숙할 것이지만, 메모리 서브시스템(18)은 다양한 캐시 구조들(도시하지 않음)을 포함할 수 있는데, 이들은 메모리 속도를 증가시키기 위해서 고안된 것이다. 메모리 서브시스템(18)은 두 개 혹은 그 이상의 물리적 메모리 층들을 포함할 수 있다. 이들에는 온칩 혹은 오프칩 정적 RAM에 의해 제공되는 캐시 라인들, 동적 RAM의 주 메모리, 그리고 무엇보다도 대용량 디스크 저장장치가 포함되고, 이들은 서브젝트 컴퓨팅 시스템의 아키텍쳐에 따라 메모리 서브시스템에 의해서 관리된다.
캐시 구조들이 일관성을 확실하게 유지하도록 캐시 일관성(또한 “캐시 코히런시”라고도 한다)을 보호하기 위한 많은 메커니즘이 있지만, 이들은 여기서 검토하고 있는 예들과 특별히 관련이 있는 것이 아니므로 더 이상 논의하지는 않는다.
타겟 컴퓨팅 시스템(10)에서 메모리 일관성 에러들이 발생할 수 있는 몇 가지 경우들을 보여주기 위해 단순화된 예가 지금부터 제공될 것이다. 이 예에서, 두 개의 메모리 위치들(영역 1, 영역2)에 대한 접근이 있을 것이다. 이들이 타겟 메모리 서브시스템(18)의 캐시 구조 내의 동일 캐시 라인 상에 있지 않음을 확실히 하고, 메모리(18)에 대한 접근들이 고장이 일어날 가능성을 증가시키기 위해서, 이들 위치들은 다른 메모리 페이지들 상에 있는 것으로 가정된다. 초기에는, 이들 위치들에 저장된 값들을 영역 1= 0 및 영역 2=0 이라고 한다.
제 1의 프로세서(13a)는 타겟 코드(21a)의 제1 부분을 실행을 시작한다. 이 부분은 영역 2에 저장된 값을 감시하며, 그 다음 아래의 슈도코드(pseudocode)에서 보여주는 바와 같이 영역 1의 값에 따라 변수 “a”를 세트한다.
while(*area2==0) {}
int a = *area1
제2의 프로세서(13b)는 타겟 코드(21b)의 제2 부분을 실행한다. 이 부분에는 두 개의 메모리 위치들에 저장된 값들을 수정하는 명령들이 포함된다.
*area1=1
*area2=1
직관적으로, 변수”a”가 지금 값”1”로 세트될 것으로 기대할 것이다. 실제로, 강하게 정렬된 순차적 일관성을 갖는 시스템에서, 이것은 사실일 수 있다. 그러나, 메모리 일관성 에러가 일어나서 변수 “a”는 대신에 “0”으로 세트될 수 있다. 이러한 에러는 통상 두 가지 이유 때문에 일어난다. 첫째는 느슨한 저장 정렬이 제2의 저장(*area2=1)을 제1의 저장(*area1=1) 전에 메모리에 도달하는 것을 허용하기 때문이다. 그러면, 제1의 프로세서(13a)는 *area 1의 과거 값을 읽을 수 있다. 두 번째는, 느슨한 로드 정렬이 로드들로 하여금 제1 프로세서(13a) 내의 명령 파이프 라인에서 질서없이 발행되는 것을 허용하기 때문이다. 여기서 로드들에는 투기적으로(speculatively) 실행되는 것들을 포함한다. 이 경우에, 제1의 프로세서(13a)가 *area2가 바뀌기를 기다리는 동안, *area1에서의 값은 이미 투기적으로 로드 되어서 일단 테스트가 성공하고 나면 다시 로드되지 않을 것이다. 이것은 제2의 프로세서(13b)로부터의 저장들이 정확하게 정렬되었다 하더라도, 제1의 프로세서(13a)는 여전히 업데이트 된 값을 다른 순서에서 읽을 수 있다는 것을 의미한다.
대부분의 멀티프로세서 시스템들은 안전 네트(safety net)를 제공한다. 이 네트는 프로그램 코드가 하드웨어의 느슨한 메모리 일관성 모델을 무시하고 더 강한 정렬 제한들을 부과할 수 있게 하며, 이 때문에 메모리 일관성 에러들에 대하여 어느 정도 보호를 제공할 수 있다. 하나의 그러한 안전 네트 메카니즘은 적절한 동기 점들을 형성하기 위하여 타겟 코드(21a, 21b)에서 연속 명령들(serialization instructions)을 사용한다. 한편 다른 그러한 안전 네트는 페이지 테이블에서 속성들(attributes)을 세트 함으로서 메모리의 특정 영역을 보호한다. 이들 그리고 다른 메모리 일관성 보호 메커니즘들은 사설으로 채용될 수도 있고 혹은 조합으로 채용될 수도 있다. 이제 이에 대하여 더 상세하게 설명하면 다음과 같다.
먼저, 직렬화된 명령들의 사용을 살펴보면, 하나의 공통적으로 이용 가능한 형식이 펜스 명령(a fence instruction)임을 알 수 있다. 이 펜스 명령은 메모리 장벽을 형성한다. 이 장벽은 프로그램 명령들을 펜스를 앞서가는 그룹과 뒤따라 가는 그룹으로 나눈다. 펜스를 앞서가는 명령들에 의한 메모리의 접근은 펜스를 뒤따라가는 명령들에 의한 메모리 접근에 앞서서 수행된다. 따라서 펜스는 메모리 일관성을 획득하는데 유용하다. 그러나 심각한 성능 손실을 초래한다. IBM POWER 명령 세트 아키텍쳐에서 SYNC 명령은 펜스 명령의 좋은 예이다. 펜스 명령의 다른 구체적인 변종들은 또한 라이트급 동기(LWSYNC) 명령 혹은 I/O의 인포스 인 오더 실행(EIEIO)명령과 같은 POWER ISA에서 이용가능하다. 다른 예들은 Alpha ISA로부터의 MB 및 MBW, x86 ISA로부터 MFENCE, 그리고 SPARC ISA로부터 MEMBAR를 포함한다.
어떤 ISA들은 또한 특정 프로세서 내의 명령들의 실행과 동기화된 하나 혹은 그 이상의 연속 명령들을 제공한다. 다시 말하면, 명령의 동기화는 프로세스로 하여금 모든 명령들의 실행을 동기화 전에 완료하도록 하고, 이미 실행을 시작했을 수 있는 동기화 다음에 명령들이 수행한 결과들은 모두 버리도록 한다. 명령의 동기화가 실행되고 난 후, 그 다음에 오는 프로그램의 명령들은 실행을 시작할 수 있다. 여기서, IBM POWER 명령 세트 아키텍쳐에서 명령 ISYNC는 그러한 명령의 동기화를 수행하는 명령의 좋은 예이다.
이들 연속 명령들은 타겟 머신의 디폴트 메모리 일관성 모델과 다른 메모리 일관성 모델을 주장하기 위해 타겟 코드 내에 삽입된다. 이들 연속 명령들을 위에서 예로서 논의한 슈도 코드 내에 삽입하면 수정된 타겟코드(21a 및 21b)가 아래와 같이 만들어진다.
제1의 프로세서(13a)에 대하여, 연속 명령 ISYNC은 타겟 코드(21a)가 아래와 같이 되도록 삽입된다(테이블 1에 규정된 로드-로드 정렬이므로).
while(*area2==0) {}
isync
int a = *area 1
제2의 프로세서(13b)에 대하여, 직렬화 명령 SYNC는 타겟코드(21b)가 아래와 같이 되도록 삽입된다.
*area1 = 1
sync
*area2 = 1
이제 메모리 일관성 에러들에 대하여 보호를 제공하는 다른 메커니즘을 살펴보면, 어떤 타겟 컴퓨팅 시스템들은 페이지 테이블 속성들의 조작을 허용한다. 하나의 구체적인 예로서 IBM POWER 아키텍쳐는 메모리(18)의 특정 영역이 캐시 금지 및 보호(caching-inhibited and guarded)(이후에는 저장-정렬(store-ordered)로 부른다)가 모두 지정되도록 허용한다. 만일 분리된 저장 명령들이 메모리의 그러한 보호된 영역으로 지나갈 경우에는 그 저장들은 프로그램에 의해서 규정된 순서로 수행된다. 메모리의 어떤 페이지들은 저장 정렬(store-ordered)로 표시하고, 메모리의 다른 페이지들은 저장 정렬 아님으로 표시하면 편리하다. 저장 정렬 페이지들은 타켓 머신의 메모리 일관성 모델과 다른 메모리 일관성 모델을 주장하기 위해서 사용될 수 있다. 그러나, 그러한 저장 정렬 페이지들에 대한 접근은 보통 저장 정렬 아닌 페이지들에 대한 접근과 비교하여 성능 손실이 발생한다. 연속 명령들 및 저장 정렬 페이지들 같은 메모리 일관성 보호와 연관된 큰 성능 손실을 최소화하거나 혹은 완전히 피하면서, 위에서 약술한 메모리 일관성 문제들을 해결하기 위해서 본 발명의 예시적 실시 예들이 지금부터 더 상세하게 설명될 것이다.
도 4는 도 3을 참조하여 위에서 설명한 타겟 컴퓨팅 시스템(10)과 같은, 멀티프로세서 컴퓨팅 아키텍쳐에서 메모리 일관성을 보호하기 위한 본 발명의 모범적 실시 예들에 적용된 방법의 일반적 개요를 제공하는 개략적 흐름도이다.
단계(401)은 제1의 메모리 일관성 모델 하에서 적어도 제1의 타켓 코드 부분(21a)을 실행하는 것을 포함한다. 다시 말하면, 단계(401)에서, 타겟 코드의 제1 부분(21a)은 타겟 컴퓨팅 시스템(10)에서 타겟 컴퓨팅 시스템의 아키텍쳐에 적용될 수 있는 제1의 디폴트 메모리 일관성 모델 하에 실행된다는 것이다.
단계(402)는 제1의 타겟 코드 부분(21a) 및 적어도 하나의 다른 제2의 프로그램 코드 부분(21b) 양자 모두에 의해서 접근이 가능한 공유 메모리 영역에 대한 접근 요청을 검출하는 것을 포함한다. 다시 말하면, 단계(402)에서, 번역기 유니트(19)는 적어도 제1 및 제2의 타겟 코드 부분들(21a, 21b) 모두에 의해서 접근 가능한(접근 가능하게 될) 메모리(18)의 공유 메모리 영역에 대한 메모리 접근 요청을 검출하기 위해서 준비된다. 그러한 공유 메모리 영역에 접근하기 위해서 다양한 메커니즘들이 이용 가능하고 다양한 검출 메커니즘들이 여기서 고려되며 이에 관하여는 아래에서 자세히 설명될 것이다.
단계(403)는 검출된 공유 메모리 영역을 접근할 때 제1의 타겟 코드(21a)의 적어도 특정 명령들 혹은 특정 명령 그룹들이 보호된 제2의 메모리 일관성 모델 하에서 실행하도록 메모리 일관성 보호 메커니즘을 적용하는 것을 포함한다. 여기서, 번역기 유니트(19)는 선택적으로 메모리 일관성 보호 메커니즘을 적용한다. 이 메커니즘은 제1의 모델과 다른 제2의 메모리 일관성 모델을 강행하는 방식으로 제1의 타겟 코드 부분(21a) 내의 선택된 명령들이 확인된 공유 메모리 영역을 접근하도록 한다. 특히, 보호된 제2의 메모리 일관성 모델은 제1의 모델보다 더 강한 정렬 제한들을 제공하며, 이 제한들의 목표는 여기서 언급한 형태의 메모리 일관성 에러들을 방지하는 것이다. 나중에, 제2의 코드 부분(21b)이 또한 공유 메모리 영역에 대하여 접근을 시도할 때, 메모리 일관성 보호 메커니즘은, 제2의 프로그램 코드 부분(21b)의 적어도 선택된 명령들이 검출된 공유 메모리 영역과 관련하여 보호된 제 2의 메모리 일관성 모델 하에서 또한 지금 실행되도록, 또한 선택적으로 적용된다.
이 모범적인 실시 예에서, 제1 및 제2의 타겟 코드 부분들(21a, 21b)은 초기에는 제2의 메모리 일관성 모델에 따라 제한되지 않고 대신에 초기에는 디폴트 제1의 모델 하에서 실행된다. 다시 말하면, 타겟 코드는 초기에는 타겟 시스템의 더 높은 속도의 디폴트 메모리 일관성 모델에 따라 만들어지고 실행된다.
메모리 일관성 보호 메커니즘을 공유 메모리 영역들로 검출된 메모리(18)의 영역들에 접근하는 확인된 타겟 코드 명령들에 대해서만 적용함으로써, 타겟 코드(21)에 의한 향상된 제2의 메모리 일관성 모델을 모든 메모리 접근들에 걸쳐 적용하는 것과 비교할 때 제2의 메모리 일관성 모델의 제약과 제한들 때문에 발생한 성능 손실은 실질적으로 감소된다.
도 5는 본 발명의 모범적 실시 예들을 더 설명하기 위해서 타겟 컴퓨팅 시스템(10)의 선택된 부분들을 보여주는 개략도이다. 도 5에서, 서브젝트 코드(17)는 멀티 스레드 응용프로그램(multithread application program)으로, 이는 타겟 코드(21)로 번역되었을 때 복수의 타겟 코드 부분들(즉, 복수의 스레드들)로서 실행된다. 세 개의 그러한 타겟 코드 부분들(21a-21c)(T1, T2, T3)이 설명을 위해서 보여지고 있다.
서브젝트 코드(17)는 타겟 시스템(10) 상에서 실행되기 위해 번역기(19)의 지원을 받아 타겟 코드(21)로 변환되는 응용프로그램이면 적당하다. 일반적인 예들로서, 서브젝트 코드(17)는 웹 서버, 디지털 컨텐츠 서버(예를 들어, 스트리밍 오디오 혹은 스트리밍 비디오 서버), 워드 프로세서, 스프레드 시트 에디터, 그래픽 이미지 에디팅 툴, 혹은 데이터베이스 애플리케이션과 같은 복잡한 프로그램이다. 타겟 컴퓨팅 시스템(10)은, 운영시스템(20) 및 번역기(19)와 연관된 것들과 같은 다른 태스크들(tasks)에 더하여, 종종 많은 그러한 응용 프로그램들을 동시에 실행하도록 요구된다.
동적인 2진수 번역의 맥락에서 볼 때, 서브젝트 코드(17)는 특정 서브젝트 아키텍쳐(1)에 적합하게(specific) 만들어진(즉, 컴파일된) 2진수 실행가능의 형식을 취할 수 있다. 따라서, 서브젝트 코드(17)에 관하여 인간의 개입 혹은 검토의 기회가 없다. 대신에 타겟 컴퓨팅 시스템(10) 상에서 실행을 위해 서브젝트 코드(17)를 타겟 코드(21)(즉, 타겟 2진수)로 자동적으로 변환하는 것이 바람직하다. 여기서 논의된 메커니즘들은, 적어도 일부의 실시 예들에서, 그러한 변환 프로세스는, 또한 메모리 일관성을 보호하면서, 자동적으로 실시되도록 허용될 것이다.
많은 상업적으로 이용 가능한 응용 프로그램들은 복수의 프로세스들 및/또는 복수의 프로세스 스레드들로 실행된다. 따라서, 구체적인 컴퓨팅 아키텍쳐에 따라서 정확한 실시내용은 다를 수 있더라도, 각 프로세스는 일반적으로 상대적으로 많은 양의 상태정보(a relatively large amount of state information)(이를 또한 맥락 정보라 부른다)를 가지며 그리고 자신의 가상 주소 공간을 갖는다. 이와 대조적으로, 페어런트 프로세스(parent process)는 하나 혹은 그 이상의 스레드들을 만들 수 있다.
이 스레드들은 보통 그들의 페어런트 프로세스의 상태정보를 공유하며, 동일 프로세스로부터 나온 두 개의 스레드들은 보통 페어런트 프로세스의 가상 주소 공 간을 공유하게 된다. 동일한 페어런트 프로세스로부터 나온 스레드들 사이의 스위칭은 통상적으로 프로세스들 사이의 콘텍스트 스위칭보다 더 빠르며, 그리고 멀티 스레딩은 널리 알려진 프로그래밍이며 현대의 멀티프로세서 시스템들 상의 실행 모델이다. “프로세스”와 “스레드”라는 용어는 널리 사용되고, 당업자들에게 잘 이해되는 용어일지라도, 명확성을 위해서 본원의 상세한 설명에서는 프로그램 코드의 “부분”을 일반적으로 일컫는다.
도 5에서 보는 바와 같이, 이미 설명한 유니트들에 추가하여, 모범적 실시예의 번역기(19)는 또한 주소 공간 할당 유니트(ASAU)(196), 공유 메모리 검출 유니트(SMDU)(197), 및 메모리 보호 유니트(MPU)(198)를 더 포함한다.
ASAU(196)은 복수의 가상 주소 공간 영역들(VASR)(181)을 복수의 타겟 코드 부분들(21a, 21b, 21c)에 할당하기 위해 준비된다. 두 번째로, ASAU(196)은 생성된 타겟 코드 부분들(21a-21c)을 실행하여(direct) 복수의 할당된 VASR들(181)의 다른 부분들에 접근하도록 하기 위해 준비된다.
SMDU(197)은 공유 메모리 영역을 접근하는 타겟 코드 부분들(21a, 21b, 21c)중 하나에 의한 요청을 검출하기 위해 준비되며, 메모리 일관성 보호가 요구되는 이 타겟 코드 부분 내에 하나 혹은 그 이상의 타겟 코드 명령들을 확인한다. 이에 관한 구체적인 실시 예들은 아래에 논의될 것이다.
MPU(198)은 메모리 일관성 보호를 SMDU(197)에 의해서 확인된 선택된 타겟 코드 명령들에 적용하기 위해 준비된다. 메모리 일관성을 유지하고 그에 의하여 서브젝트 코드(17)를 요구하는 메모리 일관성 모델을 유지하기 위하여, 이 메모리 일 관성 보호는 타겟 코드가, 이 경우에는 더 강한 정렬 제한들을 갖고서, 다른 메모리 일관성 모델을 실행하도록 한다. MPU(198)이 선택적으로 연속 명령들을 타겟 코드에 적용하고 그리고/또는 선택적으로 저장 정렬 페이지들(store-ordered pages) 주장하는 것은 타당하다. 이에 관하여 아래에 자세히 논의될 것이다.
도 5의 예에서, 세 개의 타겟 코드 부분들 T1, T2, T3(21a-21c) 각각은 각 가상 주소 공간 영역(181a-181c)에 연관되어 있음을 볼 수 있다. 또한, 이 제1 의 실시 예에서 ASAU(196)는 공유 메모리 영역들과 관련하여 사용되는 추가의 VASR(181d)을 할당하고 있다.
ASAU(196)에 관한 하나의 모범적 실시 예에서, 타겟 컴퓨팅 시스템(10)은 많은 다른 주소지정 모드들(a number of different addressing modes)을 제공한다. 가장 일반적으로 이용 가능한 컴퓨팅 시스템들은 32 비트 가상 주소지정 모드를 제공하여 프로그램 코드의 특정 부분의 가상 주소 공간이 2의 32승에 해당하는 물리적 메모리(18)의 개별 엘리멘트들(즉, 바이트들 혹은 워드들)에 대하여 주소지정을 할 수 있게 한다. 따라서, 많은 상용으로 이용 가능한 응용 프로그램들은 32 비트의 가상 주소 공간들에서 실행되기를 기대한다. 그러나, 일부 컴퓨팅 시스템들은 또한, 64 비트 모드와 같은, 더 큰 주소지정 모드들을 허용한다. 이러한 더 큰 주소지정 모드들은 더 적은 32 비트 주소지정 모드 대신에 혹은 함께 사용될 수 있다. 번역기 유니트(19)가 64비트 주소지정 모드에서 실행되도록 세트되고 이에 의하여 64비트 가상 주소 공간(이하 번역기 가상 주소 공간 혹은 번역기 VAS(180)라 부른다)이 제공되면 편리할 것이다. 그렇게 되면, 주소 공간 할당 유니트(196)는, 더 큰 64비트 번역기 VAS(180)내에 복수의 분리된 32비트 가상 주소 공간 영역들(VASR)(181)을 할당한다. 32비트 번역기 VAS와 같은 동일한 효과를 성취하기 위해서 다른 주소지정 선택들도 또한 이용 가능하고 적절한 조합으로 적용될 수 있다. 여기서 32비트 번역기 VAS는 복수의 24비트 가상 주소 공간 영역들을 제공하도록 나누어진다.
ASAU(196)는 또한 타겟 코드(21)의 각 부분을 선택된 하나 혹은 그 이상 VASR(161)에 대하여 실행하기(direct) 위해 준비된다. 도 2를 참조하여 위에서 설명하였듯이, 타겟 코드(21)의 각 부분은 번역기(19)에 의하여 처리되는 최소 유니트로서 개별 명령들의 짧은 시퀀스를 포함하는 복수의 블록들(211)로 다시 나뉘어 진다. 이들 명령들 중 일부는 로드들 혹은 저장들과 같은 메모리 접근 동작을 수행하고, 특정 타겟 코드 부분(21a) 내의 대부분의 명령들은 그 부분에 할당된 VASR(181a)에 관한 사설(private) 메모리에 접근한다. 그러나, 특정 명령들 혹은 특정 그룹의 명령들은 공유 메모리에 관하여 메모리 접근 동작을 수행하고 공유 메모리 영역들을 위하여 VASR(181d)을 접근하도록 실행된다.
하나의 실시 예에서, 타겟 코드(21)는 메모리 동작들을 수행할 때 기초 레지스터 BR(15a)을 참조하기 위해 생성된다. 이 기초 레지스터(15a)는 대부분의 아키텍쳐들을 위해서 빠르고 쉽게 이용 가능한 저장장치 위치(a fast and readily available storage location)이며, 베이스 플러스 오프셋 형태(“base plus offset” type)의 메모리 접근들에서 효율적으로 사용될 수 있지만, 다른 적당한 저장장치도 적절하다면 사용될 수 있다. 기초 레지스터 BR은 타겟 코드의 이 부분(즉, 이 스레드 혹은 프로세스)을 위한 맥락 정보의 일부로서 편리하게 제공된다.
기초 레지스터 BR(15a)은 타겟 코드(21)의 생성된 부분에 의해서 사용되는 32비트 VASR들(181) 중 하나의 시작 주소로서 64비트 번역기 VAS(180)의 시작 주소를 제공하는 기초 주소를 저장하기 위해서 사용된다. 그 다음에는 기초 레지스터 BR(15a)의 시작 주소를 참조하여 메모리 접근 동작들을 하기 위해 타겟 코드(21a, 21b, 21c)의 각 부분은 번역기(19)에 의해서 생성된다.
도 5에서 보여진 예에서, 타겟 코드 부분(21a)를 위하여, 기초 레지스터 BR은 62 비트 값 “1<<32, 2의 32승”을 포함하고 그리하여 스레드 T1은 이 64비트 기초 값으로부터 오프셋로서 할당된 제1의(32비트) VASR(181a)을 참조하여 메모리 접근 동작들을 시작한다. 비슷하게, 제2의 타겟 코드 부분(21b)을 위하여, 기초 레지스터 BR은 제2의 32비트 VASR(181b)의 64비트 시작 주소로 값 “2<< 32, 2의 32승”을 포함한다.
여기서, 예를 들었던 서브젝트 코드(17)는 32비트 VAS로 실행되도록 작성된 것이며 따라서 오직 32비트 주소들만 관계가 있다. 번역기(19)는 따라서 32비트 VASR들(181)을 참조하여 타겟 코드(21a-21b)의 관련 부분들을 생성한다. 그러나, 이들 32비트 VASR들(181)은 더 큰 64비트 번역기 VAS(180)로부터 할당되었기 때문에, 타겟 코드는 메모리 접근 동작들을 시작할 때 완전한 64비트 주소를 사용한다. 이것은 32비트 VASR(181)을 참조하는 하위의 32비트 주소를 기초 레지스터 BR(15a)에 규정된 완전한 64비트 기초 주소와 연결함으로써 편리하게 달성된다.
예를 들어, 타겟 레지스터(r31)는 64비트 기초 주소를 유지하기 위하여 기초 레지스터로 행동하며 타겟 레지스터(r6)는 바람직한 32비트 주소를 유지하기 위하여 타겟 코드에 사용된다. 주소들은 아래의 슈도 코드에 의해서 보여지는 것처럼 조합된다.
r 6 = 0x00003210 ; 타겟 코드 VASR의 32비트 주소
r 31= 0x00000001 00000000 ; 이 VASR을 위한 64비트 기초 주소
add r3, r31, r6 ; 주소들을 r3에 조합한다.
wz r5, 0(r3) ; r3의 조합된 주소를 사용하여 메모리를 접근한다.
더 나아가서, ASAU(196)는 타겟 코드 부분(21a) 내의 특정 명령들을 할당된 VASR들(181) 중 다른 하나를 참조하도록 실행하기 위해 준비된다. 특히, 공유 메모리 접근들과 관련한 특정 명령들은 공유 메모리 영역들을 위하여 유보된 VASR(181)로 보내진다.
하나의 모범적 실시 예에서, 기초 레지스터(15a)에 주어진 시작 주소는 수정되어, 타겟 코드(21)의 그 다음 명령들은 할당된 VASR들(181) 중 다른 하나를 참조하도록 한다. 다시 말하면, 기초 레지스터(15a)에 저장된 기초주소는 수정되고, 그 다음 수정된 기초 주소는 타겟 코드의 특정 블록의 하나 혹은 그 이상의 다음 명령들에 의해서 채용되며, 그 후 기초 레지스터는 이전의 값으로 리세트 된다. 여기서, 위의 예에서 설명하였듯이, BR(15a)에 원래 주어진 값은 제1의 타겟 코드 부분(21a)에 할당된 VASR(181a)의 64비트 시작 주소로서 “1<< 32, 2의 32승” 이다.
기초 주소를 일시적으로 “0”으로 변경하면, 위의 도시된 예에서 보듯이, 타겟 코드 명령들은 대신에 공유 메모리 영역들을 위해 유보되어 있는 제4의 VASR(181d)를 참조하게 될 것이다. BR(15a)를 값 “1<<32, 2의 32승”로 복귀시키면 타겟 코드(21a)는 할당된 제1의 VASR(181a)를 다시 참조하게 될 것이다.
기초 레지스터(15a)의 디폴트 기초 주소가 타겟 코드(21a)의 이 부분을 위한 맥락/상태의 일부로서 세트 되면 편리할 것이다. 따라서, 디폴트 값은 항상 상기 맥락으로부터 이용 가능하고 각 타겟 코드 블록(211)의 시작에서와 같이 필요할 때의 디폴트 값으로 빠르게 세트 될 수 있다.
다른 모범 실시 예에서, ASAU(196)는 도 5에서 또한 보듯이, 적어도 두 개의 기초 레지스터들을 참조하는 타겟 코드 명령들을 선택적으로 생성하도록 준비된다. 한편, 제2의 기초 레지스터 BR2는 공유 메모리 영역들을 위하여 할당된 VASR(181d)의 기초 주소를 보유한다. 여기서, 타겟 코드 명령들은 제1의 기초 레지스터 BR1 혹은 제2의 기초 레지스터 BR2, 혹은 이 둘의 조합과 관련되는 메모리 접근 동작들을 수행하기 위하여 생성된다.
따라서, 처음부터 끝까지 제1의 기초 레지스터 BR1만을 참조하도록 타겟 코드(21a)의 제1의 부분을 생성하면 타겟 코드의 이 부분은 각 할당된 VASR(181a)에 대하여 만 동작하게 된다. 그러나, 타겟 코드 명령들이 반대로 레지스터 BR2의 기초 주소를 참조하는 경우에는, 타겟 코드는 공유 메모리 영역들을 위한 VASR(181d)를 접근하도록 실행되어진다. 제1 및 제2의 기초 레지스터들 BR1, BR2에 대한 참조들을 선택적으로 심어 놓음으로써, ASAU(196)는 타겟 코드에 의해서 VASR이 접근되는 것을 제어하도록 준비된다.
SMDU(197)는 공유 메모리 영역을 접근하는 타겟 코드(21a, 21b, 21c)의 부분들 중 하나에 의한 요청을 검출하도록 준비된다. 첫 번째로, 이러한 요청은 다른 스레드들 혹은 프로세스들과 공유하기로 되어 있는 명백한 공유 메모리 영역을 초기화하기 위한 요청의 형식을 취할 수 있다. 두 번째는, 이러한 요청은 다른 스레드의 가상 주소 공간에 이미 사상된 메모리 영역에 접근하기 위한 요청과 같은 공유 메모리와 관련되는 암시적인 요청의 형식을 취할 수 있다. 명백한 공유 메모리의 검출이 도 6을 참조하여 먼저 논의될 것이다. 그 다음에, 암시적 공유 메모리의 검출은 도 7을 참조하여 또한 상세하게 논의될 것이다.
위에서 논의된 바와 같이, 번역기(19)는 타겟 코드(21)의 실행으로 만들어 지는 시스템 콜들을 감시하고 가로채기 위해 준비된다. 특히, x_call들은 실행 컨트롤을 번역기(19)의 FUSE(194)에 전달하고 이에 의하여 mmap()와 같은 메모리 사상 시스템 콜들(memory mappin system calls)의 행위(behavior)를 에뮬레이트 하기 위해 제공된다.
만일 x_call이 공유 메모리와 관련이 없다면, 타겟 코드의 실행 부분에 할당된 VASR(181)에 사설 비 공유 페이지를 로딩하는 것과 같은 필요한 행동을 취하기 위해서 시스템 콜이 타겟 OS에 대하여 만들어지는 것이 적절하다. 그러면, 실행 컨트롤은 FUSE(194)를 통해서 타겟 코드에 복귀하고, 타겟 코드는 마치 타겟 시스템 콜로부터 복귀하는 것처럼 맥락을 수신한다.
그러나, x_call이 공유 메모리와 관련된다면, 공유 메모리 검출 유니트(197)에 의해서 행동이 취해진다. 여기서, x_call 혹은 적어도 x_call로부터 나온 정보 는 SMDU(197)에 보내진다. 하나의 구체적인 예로서, 타겟 운영 시스템(20)은 shmget 혹은 mmap()와 같은 메모리 사상 시스템 콜들을 지원한다.
UNIX 및 LINUX 형태의 운영 시스템에서의 특별한 예로서, mmap() 시스템 콜은 파일 혹은 파일 디스크립터 fd 에 의하여 명시된 기타 오브젝트로부터의 offset오프셋에서 시작하는 length 바이트들을 가상 메모리의 주소 start에 사상하는 것을 요청하기 위해서 통상적으로 mmap(start, length, prot, flags, fd, offset) 형식을 취한다. 익명의 파일을 위한 독립변수(argument) fd는 영(null)이다. 독립변수 prot는 판독과 쓰기 보호가 세트 되어 있는 바람직한 메모리 보호를 기술한다. 파라미터 flags는 무엇보다도 이 사상(mapping)을 이 오브젝트를 사상하는 모든 다른 프로세스들과 공유하는 MAP_SHARED 플래그를 포함한다. 다른 실시 예에서, 파라메터 flags는 사설 복사-온-쓰기 사상(a private copy-on-write mapping) 을 만드는 MAP_PRIVATE 플래그를 포함한다.
따라서, mmap() 시스템 콜은 동등 x_call(예를 들어 x_mmap())로서 타겟 코드에 심어지며, 명시적으로 사설 메모리 영역을 요청할 수 있다. 이 경우에 대응 mmap() 시스템 콜은 위에서 언급한 바와 같이 타겟 OS(20)에 전해지거나, 혹은 명시적으로 공유 메모리 영역을 요청하며, 이 때문에 SMDU(197)에 의해서 조치(action)가 취해진다.
도 6은 도 5에서 보여준 타겟 컴퓨팅 시스템의 더 상세한 개략도이다. 이 도면은 명시적 공유 메모리를 사상하기 위한 요청과 관련하여 SMDU(197)이 취한 조치들을 보여준다. 특히, 번역기 VAS(180)의 일부를 개략적으로 표시한다.
도 6에서 보여주는 이 예에서, 타겟 코드(21)의 현재 실행 부분은 스레드 T1이다. 이 스레드는 명시적 공유 메모리 영역(182a)를 요청하기 위해 x_mmap() 시스템라이크 펑크션 콜(system-like function call)을 포함한다. 그러나 요청된 공유 메모리 영역(182a)는 이 특정 스레드 T1과 연관된 가상 주소 공간 영역(181a)에 사상되지 않는다. 오히려, 요청된 공유 메모리 영역(182a)와 동일 크기 및 오프셋의 메모리 영역(182d)가 공유 메모리를 위해 유보된 가상 주소 공간영역(181d)에 사상된다.
요청된 공유 메모리 영역에 대한 포인터 PTR은 mmap() 시스템 콜 다음에 예상되는 행위로서 T1 타겟 코드(21)로 FUSE(194)에 의하여 복귀한다. 이 모범적 실시 예에서, 32비트 포인터는 32비트 VASR(181a)의 시작 주소로서 복귀한다. 그 다음 타겟 스레드 T1(21a)의 실행은 계속된다. 마치 포인터가 새로이 사상된 공유 메모리 영역에 대하여 주어진 것 같이.
선택적으로, SMDU(197)는 x_mmap() 콜의 독립변수로부터 파생된 요청된 공유 메모리 영역(182a)의 상세한 내용들을 기록한다. 다시 말하면, SMDU는 요청된 각 공유 메모리 영역(182)의 사상을 형성한다는 것이다. 이것은 편리하게도 각 공유 메모리 영역의 크기와 위치를 포함하며, 또한 이 영역의 주인 혹은 시작자로서 타겟 코드의 특정 부분을 확인할 수도 있다. 또한, FUSE(194) 및/또는 SMDU(197)는 이 새롭게 할당된 공유 메모리 영역이 서브젝트 코드(17)에 나타난 방식을 반영하기 위해 번역기(19)의 서브젝트 상태를 업데이트 한다.
스레드 T1이 사상되지 않은 공유 메모리 영역(182a) 내의 페이지를 접근하려 고 시도할 때, 요청된 공유 메모리 영역(182a)는 제 1의 타겟 코드 스레드 T1(21a)의 VASR(181a) 내로 실제로 사상되지 않았기 때문에, 예외(즉 페이지 결함)가 발생된다. 이 예외는 도 2에서 보여진 바와 같이 예외 처리기(195)에 의해서 가로채어져서, SMDU(197)로 보내어 진다. 그 결과, SMDU는 명시적 공유 메모리 영역(182a)를 접근하려고 시도하는 타겟 코드의 블록을 확인할 수 있다.
이 예외 신호에 응답하여, 확인된 타겟 코드 명령은 먼저 공유 메모리를 위해 유보된 VASR(181d)에 대하여 실행되고, 그 다음으로 메모리 일관성 보호 메커니즘이 적용된다.
위에서 논의한 바와 같이, ASAU(196)는 , 기초 레지스터 BR(15a)의 값을 수정하는 코드를 변경함으로써 혹은 제2의 기초 레지스터 BR2(15b)를 참조하는 코드를 수정함으로써, 타겟 코드의 블록에 있는 적어도 특정 명령들(certain instructions)을 공유VASR(181d)의 공유 메모리 영역(182d)에 대하여 재실행한다(redirect). VASR(181d)의 공유 메모리 영역(182d)는 물리적 메모리로 사상되고, 따라서 타겟 코드의 관련 명령들은 공유 메모리 영역(182)에 대한 접근을 획득한다.
이 모범적 실시 예는 공유 메모리 영역(182)에 대한 접근 시도의 검출을 언제나 할 수 있다. 왜냐하면 명시적 공유 메모리 영역은 스레드 T1의 실행과 연관된 가상 주소 공간 영역(181) 내에 사상되지 않기 때문이다. 그러나, 추가의 가상 주소 공간 영역(181d)을 제공하고 선택된 타겟 코드 명령들을 거기에 대하여 재실행 함으로써, 바람직한 공유 메모리 영역(182)이 타겟 코드 부분(21)에 의해서 여전히 접근 가능하게 된다.
또한, 아래에서 상세히 논의될 것이지만, MPU(198)는 메모리 일관성 보호 메커니즘을 확인된 타겟 코드 명령들에 대하여 적용한다. 다시 말하면, 메모리 일관성을 보존하기 위해서, 메모리 일관성 보호 메커니즘은 공유 메모리 영역을 접근하려고 시도하는 타겟 코드(21)의 그 블록들에 대해서만 선택적으로 적용된다. 따라서, 상대적으로 매우 적은 명령들이 영향을 받는다. 이 메커니즘은 비싼 메모리 보호 메커니즘을 전체 프로그램 혹은 전체 스레드에 조차 적용할 필요가 없음은 주목할 만하다.
도 5를 다시 참조하면, 공유 메모리 영역을 위한 VASR(181d)은 타겟 코드 T1, T2 혹은 T3의 실행 부분들 중 어느 것의 가상 주소 공간 영역과 겹치지(overlap) 않는다. 따라서, 제 2의 혹은 제3의 타겟 코드 T2, T3에 의한 명시적 공유 메모리 영역(182)에 접근하려는 어떠한 시도도 초기에는 실패할 것이다. 왜냐하면 그 명시적 공유 메모리 영역은 그 스레드와 연관된 각 VASR(181b) 혹은(181c) 내에 사상되지 않기 때문이다.
다시 말하면, 결과적인 예외 신호는 예외 처리기(195)에 의해서 처리되어 SMDU(197)로 보내진다. 이 SMDU는 관련 명령들로 하여금 공유 메모리를 위해 유보된 VASR(181d)에 접근하도록 하고 메모리 일관성 보호 메커니즘을 거기에 적용되게 한다. 따라서, 명시적 공유 메모리 영역을 접근하려고 시도하는 모든 타겟 명령들은 예외 처리기(195)및 SMDU(197)를 통해서 검출되고 적절한 조치가 취해진다.
도 7은, 암시적 공유 메모리와 관련하여 SMDU(197)에 의해서 취해진 조치들 을 보여주기 위한, 도 5에서 도시한 타겟 컴퓨팅 시스템의 더 상세한 개념도 이다. 특히, 도 7은, 새로운 스레드와 같은, 타겟 코드의 새로운 부분의 실행(initiation) 동안 번역기 VAS(180) 부분을 표시하는 것을 개념적으로 보여주기 위한 도면이며, 이는 타겟 코드의 새로운 부분의 시작에서 암시적 공유 메모리 영역이 실행 될(initiated) 때 메모리 일관성을 보호하는 메커니즘을 보여주기 위한 것이다. 특히, 도7은 Linux 형태 운영 시스템의 clone()와 같은 시스템 콜과 관련이 있다.
여기서, 보통의 시스템 응답은 동일 공유 가상 주소 공간에 있는 페어런트 스레드(parent thread)와 동시에 실행되는 차일드 스레드(child thread)를 만드는 것이다, 여기서 차일드 스레드는 페어런트 프로세스로부터의 맥락 정보의 서브세트를 포함한다. 따라서, clone() 시스템 콜에 의해서 만들어진 새로운 스레드는 동일 가상 주소 공간을 디폴트로 차지하고, 그 결과 페어런트 프로세스와 메모리를 공유하게 될 것이다. 그러나, 모범적 실시 예들의 응답은 이 보통의 응답과는 다르다. 이에 관하여 지금부터 설명할 것이다.
도 7A에서 보여주는 것처럼, 이 예에서 제1의 스레드 T1은 제1의 VASR(181a)에서 실행되어 이 프로세스에 대하여 사설으로(as private) 적어도 하나의 메모리 영역(182a)에 사상된다. 여기서, 사상된 영역(182a)은 통상적으로 글로벌 데이터, 초기 힙 메모리(initial heap memory)를 포함하고 추가의 힙 메모리를 선택적으로 포함한다. 제1의 스레드 T1이 clone() 시스템 콜을 수행할(편리하게는 x_call로 심어진) 때, 새로운 스레드 T2는 도 5의 ASAU(196)을 사용하여 분리된 VASR)(181b)에 할당된다.
이 예에서, 새로운 스레드 T2(21b)에 의해서 참조된 기초 레지스터(15a)는 스레드 T2가 제2의 VASR(181b)에 대하여 실행되어지도록 값 “2<<32”를 포함한다. 도 7B에서 보듯이, 두 개의 스레드 T1 및 T2가 지금 분리된 VASR들에 할당되었기 때문에, 스레드 T1에 의해서 이전에 사상되었던 메모리(182a)의 영역들은 스레드 T2와 연관된 가상 주소 공간 영역(181b)에 사상되지 않을 것이다. 따라서, VASR(181a)에 있는 사설 사상된 영역(182a)에 대응하는 크기와 오프셋를 갖는 균등 영역(182b)은 스레드 T2와 연관된 제2의 VASR(181b)에 사상되지 않은 채로 남아있게 된다.
도 7B에서 보여 주듯이, 스레드 T1은, 이 점에서, 스레드 T1의 타겟 코드(21a)의 부분에 대한 어떠한 변경도 없이, 사설 메모리 영역(182a)을 계속 접근한다. 이것은 도 5 및 도 6을 참조하여 위에서 설명한 명시적 공유 메모리를 처리하는 메커니즘과는 다르다. 스레드 T1(21a)가 잠재적 공유 메모리 영역(182a)를 여전히 접근할 수 있더라도, 스레드 T2(21b)가 자신의 VASR(181b) 내의 대응 영역(182b)를 접근하려 시도한다면, 관련 페이지들은 사상되지 않고 예외가 발생할 것이다.
예외 신호는, 예외를 처리하는 예외 처리기(195)와 협력하는, SMDU(197)에 보내진다. 첫째, 스레드 T1은 인터럽트 된다. 왜냐하면 T1이 제2의 스레드 T2(21b)가 접근하려고 시도하는 사상된 메모리 영역(182a)를 소유하고 있기 때문이다. 여기서, 스레드 T1으로부터 관련 메모리 영역(182a)에 대하여 모든 계류중인 접근들 은 완료된다. 둘째, 도 7C에서 보여주듯이, 동일 크기와 오프셋의 대응 메모리 영역(182d)는 이제 공유 VASR(181d)에 사상되어, 영역(182a)에서 제1의 스레드 T1에 의해 참조되는 물리적 메모리의 데이터는 이제 그 공유 영역(182d)에서 이용 가능하게 된다.
실패한 단일의 페이지가 공유 메모리 영역(182d)에 복사될 수 있거나, 혹은 전체 관련 메모리 영역(182a)은 이제 복사될 수 있다. 복사된 공유 메모리 영역(182a)은 스레드 T1이, 예를 들어 munmap()을 사용함에 의하여 혹은 그 영역을 보호된 것으로 표시함에 의하여, 더 이상 영역(182a)을 접근할 수 없도록, 제1의 스레드 T1(21a)의 가상공간 영역(181)에 이제 사상되지 않는다.
그 다음, T1은 공유 영역(181d)의 새롭게 만들어진 메모리 영역(182d)에 접근을 재 시도하는 것은 안전하다고 T2에 통지하고, T1은 정상 실행을 재개한다. T2는 이제 실패한 메모리 접근을 재시도하는데, 이번에는 공유 메모리 영역(181d)를 접근함에 의해서 그리고 적절한 메모리 일관성 보호를 적용한 상태에서 하며, 그 다음 실행을 재개한다.
도 7C에서 보듯이, 만일 타겟 코드 부분들 T1 혹은 T2가 그 다음에 공유 영역(182)(이 영역은 지금 접근할 수 없는 상태/그들의 사설 VASR들(181a, 182b)에 사상되지 않은 상태임)를 다시 접근하면, 예외가 발생할 것이고 그 메모리 접근은 MPU(198)에 의해 적용된 적절한 메모리 일관성 보호 하에서 공유 메모리 영역(182d)를 접근하기 위해서 예외 처리기(195)를 통해서 완료될 것이다.
이 메커니즘의 결과로서, 타겟 코드 부분들 T1 및 T2의 적절한 명령들은 공 유 데이터 영역(182d)에 대한 접근을 획득하기 위하여 공유 가상 주소 공간 영역(181d)에 대하여 실행되며 제2의 메모리 일관성 모델의 더 강한 제한들이 공유 데이터 영역(182d)를 접근하려고 시도하는 타겟 코드의 이들 부분을 위해서만 적용된다.
이제 이 프로세스는 스레드 T1 및 T2가 병렬로 실행됨으로써 계속된다. 스레드들 중 하나, 예를 들어, 제2의 스레드 T2 가 다른 스레드, 예를 들어, 제1의 스레드 T1에 의해서 이미 사상된 메모리의 영역에 접근하려고 시도할 때마다, 예외가 발생하고 이 예외는 소유자 스레드 T1으로부터 관련 영역 혹은 페이지를 공유 VASR(181d)에 보내어 메모리 일관성 보호 메커니즘을 타겟 코드의 그 영역에 선택적으로 적용할 수 있도록 처리된다.
마찬가지로 지금 공유 메모리 영역을 접근하려고 시도하는 다른 모든 스레드는 예외를 발생시키고 그 스레드의 관련 코드는 마찬가지로 메모리 일관성 보호에 대하여 실행되고 종속된다. 따라서, 그 메커니즘은 프로그램 코드의 모든 부분들(스레드 T1, T2, T3 등)에 대하여 적용된다.
대체할 수 있는 다른 메커니즘은 많은 Linux 및 UNIX 형태의 운영 시스템들에서 이용 가능한 재 사상 시스템 콜을 사용하는 것이다. 여기서, MREMAP 시스템 콜은 메모리(18)에 대한 접근을 제어하기 위해 타겟 시스템(10)에 의해서 사용된 페이지 테이블에 대한 변경들을 허용한다. 그 페이지 테이블을 변경함으로써, 메모리 페이지는 가상 주소 공간(180)의 새로운 위치로 사상되고, 따라서 제1의 VASR(181a)로부터 제2의 VASR(181b)로 직접적으로 이동한다. 재 사상(remapping)은 사용자-공간 스레드들을 실행하는 관점에서 원자적으로(atomically)일어난다. 따라서 제1의 스레드 T1은 인터럽트 되거나 혹은 통지될 필요가 없다.
도 7D는 복수의 주소 공간 영역들(181)을 보여주는 번역기 VAS(180)의 다른 도면이다. 그러나 여기서 VASR(181)은 간단하게 보여주기 위해 그들의 각 기초 주소들에서 정렬되어 있는 것으로 보여진다. 또한, 도 7D는 각각의 VASR들(181) 내에 사상된 영역을 기록하는 SMDU(197)에 의해서 유지된 VASR 맵(map)(199)을 보여준다. 이 모범적 실시 예에서, VASR들은 모두 동등한 31비트 크기이며 단일의 32비트 맵은 사상된 메모리 영역들을 각각의 VASR에 기록하기에 편리하다.
따라서, 비록 사설으로 사상된 영역들이 타겟 코드 부분들 중 하나를 위하여 VASR에 초기에 상주한다 하더라도, 암시적 공유 메모리는 특정 VASR의 요청된 32비트 주소가 다른 VASR의 대응 위치에 이미 사상되었는지를 결정하기 위해서 맵(199)를 조회(consulting)함으로써 즉시 검출된다. 응답으로, 도 7B 및 도 7C에서 보여진 조치들은 검출된 공유 메모리 영역들에 접근하는 타겟 코드 명령들을 위해서만 수행된다.
여기서 논의된 모범 실시 예들은 정확히 타겟 코드 부분들(21a-21c)의 각각을 위한 하나의 VASR(181)에 관해서이다. 그러나, 다른 실시 예들도 또한 가능하며 상술한 모범 실시 예들에 관한 변종으로 고려될 수 있다. 예를 들어, 하나 이상의 공유 메모리가 제공될 수 있다. 또 다른 실시 예에서, 각 타겟 코드 부분(21a-21c)은 공유 메모리 영역들과 또한 하나 혹은 그 이상의 사설 메모리 영역들을 보유하기 위하여 오직 사설 메모리 영역들만을 보유하는 대응 사설 VASR 및 각 공유 메모 리 영역과 연관되어 있다. 여기서, 복수의 타켓 코드 부분들을 위한 복수의 VASR들의 사용은 공유 메모리, 특히 암시적 공유 메모리, 가 SMDU(197)에 의해서 즉시 검출 되도록 허용한다.
도 8은 메모리 일관성 보호 메커니즘의 모범적 실시 예를 더 자세하게 보여준다.
도 8의 예는 서브젝트 코드 블록(171)과 대응 타겟 코드 블록(211)을 보여준다. 타겟 코드 블록(211)의 실행 동안 어떤 점에서, 공유 메모리 영역과 관련하여 예외가 발생하면, 메모리 일관성을 보호하기 위하여, 위에서 논의한 바와 같이, ASAU(196), SMDU(197) 및 MPU(198)와 협력하여 예외 처리기(195)에 의해서 조치가 취해진다. 도 8의 예에서, 그 예외는 이 블록의 실행 동안 일어나는 명령들의 파트웨이(instructions part way)과 관련하여 일어나고 따라서 블록(211)은 설명을 위하여 두 개의 반쪽 부분으로 나뉘어졌다. 여기서 상부 반쪽은 이미 실행된 명령들을 표시하고, 한편 하부 반쪽에 있는 나머지는 아직 실행을 시작하지 않은 것을 표시한다. 여기서, 메모리 보호 메커니즘은 첫 번째로 현재 블록(211)의 실행을 완료하려고 시도하며 메모리일관성을 보호하기 위한 조치들은 fly상에서 취해진다. 그 후, 적절히 해결된 상태(an appropriate settled state)가 성취되었을 때, 타겟 코드의 이 블록의 미래 실행에서 예외들을 피하는 목표를 가지고 전체 블록(211)을 재생성시키는 것(regenerating)과 같은 더 장기적인 변경들이 타겟 코드에 대하여 만들어진다.
메모리 일관성 보호 메커니즘에 의해 취해진 즉각적인 조치들에 관하여 먼저 살펴 보고, 다양한 모범 실시 예들이 설명될 것이다.
하나의 모범 실시 예에서(도 8에서(1)로 표시됨), 타겟 코드(21)은 적절한 동기 점들, 예를 들어 저장들의 각 쌍(each pair of stores) 사이에서 영(null) 동작들을 포함시키기 위해 생성된다. IBM POWER ISA의 NOP 명령과 같은, 이들 영 동작들은 특정 수의 클럭 사이클 동안 프로세서가 아무것도 하지 않도록 하는 것 외에 아무런 효과들을 갖고 있지 않아서 플레이스 홀더(placeholders)로 사용하기에 편리하다. 영 동작들은 메모리 일관성 안전 네트를 타겟 코드에 대하여 적용하기 위해서 이제 활성 연속 명령들(active serialization instructions)(예를 들어, SYNC 및 ISYNC)로 대체된다. 또한 그 코드는 위에서 논의한 바와 같이 공유 VASR(181d)를 참조하기 위해 수정된다. 따라서 이 실시 예는 적어도 부분적으로 미래의 실행을 위하여 준비된 블록(211)의 실행되지 않은 부분을 수정한다.
다른 실시 예(도 8에서(2)로 표시됨)에서, 타겟 코드 블록의 실행은 MPU(198)내에 상주하거나 혹은 MPU(198)와 연관되어 있는 서브젝트-투-타겟 해석기(a subhect-to-target interpreter) STInt(200)를 통해서 완료된다. 다시 말하면, 실행은 STInt(200)를 통해서 대응 서브젝트 코드 블록(171b)의 남아있는 명령들을 하나 하나 균등의 타겟 코드 명령들로 해석함으로써 완료된다. 여기서, MPU(198)는 적절한 동기 점들 형성하기 위하여(예를 들어, 로드들 혹은 저장들 다음에SYNC 및 ISYNC를 삽입함으로써) 해석기로 하여금 연속 명령들을 적용하도록 한다. 그러나, 이 실시 예는, STInt(200)를 통한 실행을 시작하기 위해서, 적절한 서브젝트 상태가 이용 가능하다고 가정한다.
또 다른 실시 예에서, 타겟 블록의 적어도 실행되지 않은 부분은 연속 명령들을 삽입하기 위해서 즉시 재생성된다. 다시 말하면, 타겟 코드 블록(211)의 남아있는 부분은 수정된 버전에 의해서 대체된다. 여기서 연속 명령들은 결정된 동기 점들에서 삽입된다. 다시, 이 실시 예에서도 적절한 서브젝트 상태가 이용 가능하여 재생성된 타겟 코드가 알려진 상태로부터 다시 앞으로 나아갈 수 있다고 가정된다.
적절한 서브젝트 상태가 예외 발생 점(point)에서 이용 가능하지않는 경우, MPU(198)은 요구된 서브젝트 상태가 달성 가능하게 되는 체크포인트 혹은 회복 포인트에 도달하기 위해서 타겟 코드로 되돌아 가는(roll back) 것이 적절하다. 예외와 관련하여 서브젝트 상태를 달성하는 모범 메커니즘은 위에서 인용한 WO2005/006106에 상세하게 논의되어 있다.
여기서, 체크 포인트들은 블록의 시작 혹은 끝 혹은 블록 내의 선택된 점들에서 제공된다. MPU는 최종 도달된 체크 포인트를 추구하고 따라서 그 체크 포인트에서 서브젝트 상태를 회복할 수 있다. 블록의 예외는 회복된 서브젝트 상태를 참조하여 그 체크 포인트로부터 앞으로 나아감으로써 이제 완료된다.
더 상세하게 설명하면, MPU(198)는 예외가 발생한 포인트 이후 다음 체크 포인트까지 앞으로 나아간다. 여기서, MPU는 타겟-투-타겟 해석기 TTInt(201)에 의해서 조력을 받는다. 이 해석기는 메모리 일관성을 보호하기 위해 적절한 연속 명령들을 삽입하는 동안 블록(211)의 이미 발생된 타겟 코드를 해석하며, 그 다음에 타겟 코드는 다음 체크 포인트로 전진한다(roll forward). 서브젝트 상태를 회복하기 위한 이러한 전진 메커니즘은 WO2005/103395에서 상세히 논의되어 있다. 더 상세하게 설명하면, 타겟 코드의 그 블록에 관한 후 재생성(later regeneration)을 개선하기 위하여, 타겟-투-타겟 해석기 TTInt(201)는, 실패한 그리고 실패하지 않은 메모리 접근들을 기록하는 것과 같은, 전진 동작(roll-forward operation)동안, 번역 힌트들(hints)을 모은다. 이들 번역 힌트들은 NOP 영 동작들을 갖는 타겟 코드를 초기에 생성하고 그 다음 NOP들을 번역 힌트 플래그들로 선택적으로 대체함으로써 타겟 코드에 심어져 편리하다.
이 타겟 코드 블록(211)의 즉각적인 필요사항을 처리하고 나면, 번역기(19)는 이제 블록(211)에 대하여 더 많은 관심을 가질 수 있게 될 것이다. 예를 들어, 전체 타겟 블록(211)의 전부 혹은 일부가, 블록 전체에 걸쳐 연속 명령들(예를 들어, SYNC들 및 ISYNC들)을 포함하거나 혹은 블록 내에 명령들의 선택된 그룹들을 보호하도록, 재생성된다.
따라서, 재생성된 타겟 코드 블록(211b)은 그 블록이 미래에 실행될 때 공유 메모리 접근들과 관련하여 이제 메모리 일관성 보호에 종속된다. 타겟 코드의 재생성은 타겟 코드 블록의 이전 인카네이션(previous incarnation)의 실행으로부터 모아진 번역 힌트들을 채용할 수 있다.
도 8에서 개략적으로 보여주는 것처럼 재생성 플래그(211f)를 사용하여 재생성을 필요로 하는 블록을 표시함으로써, 재생성은 즉시 수행될 수 있거나 혹은, 다음 포인트, 즉 블록(211b)이 실행을 위해 다음에 필요한 때까지 지연될 수 있다. 재생성 프로세스는 반복적(iterative)일 수 있으며 여러 패스들(passes)을 취한다. 다시 말하면, 메모리 일관성 보호는 제1의 재생성 후 명령들의 제1의 그룹에 대하여 선택적으로 적용되며, 그 다음에 제2의 재생성에서 명령들의 제2의 그룹에 대하여 또한 적용된다. 여기서, 이전의 하나 혹은 그 이상 인카네이션들(incarnations)로부터 수집된 번역의 힌트들이 재생성의 최신 반복을 지원하기 위해 사용될 수 있다. 또한, 재생성 프로세스는 하나 이상의 특별 엔트리 포인트(more than one unique entry point) 및/또는 하나 이상의 특별 엑시트(unque exit) 포인트를 갖는 그리고/또는 인터널 점프들(internal jump)을 갖는 그룹 블록을 형성하기 위하여 타겟 코드의 두 개 혹은 그 이상의 기초 블록들의 조합을 포함할 수 있다. 여기서, 타겟 코드에 포함된(embedded) 번역 힌트들은 번역기에게 효율적인 그룹 블록을 형성하도록 하는데 도움이 된다. 이 그룹 블록은 이미 관련 기초 블록들의 이전 재생성들을 고려하므로 그 그룹 블록의 재생성들을 감소시킨다.
실제적인 실시 예들에서, 코드의 특정 섹션은 공유 및 사설 메모리 모두 접근하기 위해 사용될 수 있다. 위에서 논의한 바와 같이, 타겟 코드는 원래 관련 사설 VASR(181a-c)의 사설 메모리에 적합하도록 생성된다. 만일 그 코드가 공유 메모리에 적합하도록 번역된다면, 사설 메모리를 접근하는 것을 시도할 때 예외를 발생시킬 것이다. 왜냐하면 그 사설 메모리는 공유 VASR(181d) 내에는 사상되어있지 않기 때문이다. 그러므로 한가지 선택은 그 코드를 다시 번역하여 사설 메모리에 적합한 원래의 포맷으로 돌려놓는 것이다. 공유 VASR(181d) 혹은 사설 VASR(181a-c) 어디에든지 사상되는 메모리 페이지들의 상호 배타적인 성격(the mutually exclusive nature)은 이러한 경우의 변화가 항상 검출되는 것을 확실히 한다.
예외를 처리하고 코드의 관련 블록 혹은 블록들을 재번역하는 데는 오버헤드(overhead)가 있다.
어떤 프로그램들에서는, 재번역 오버헤드를 상대적으로 덜 자주 만나게 되는데, 이때는 재번역이 가장 적합하고 완전한 해결책이 된다. 그러나, 어떤 프로그램들에서는 실행 동안(instances), 예를 들어 한 섹션의 코드가 프로그램 내에서 여러 다른 사이트들로부터 호출될 때, 자주 재번역을 해야 하는 경우가 또한 발견된다. 하나의 특별한 예는 메모리 복사 함수 memcpy()이다. 여기서, 이 문제를 해결하기 위하여 메커니즘을 추가로 개발하였고 더 발전시켰다.
도 8에서 보듯이, 번역기(19)는 타겟 블록(211)의 적어도 두 개의 다른 버전들을 보유할 수 있다. 첫 번째 버전(211A)는 메모리 일관성 보호가 없는 최초의 번역이다. 이것은 타겟 시스템에 의해서 수행된 재정렬(reordering) 및 다른 최적화 조치들(optimizations)에 따라 빠르게 실행된다. 제2의 버전(211B)는 메모리 일관성 보호에 종속되고, 이 예에서는 연속 명령들을 갖는 공유 VASR(181d)를 참조하며, 따라서 좀 느리게 실행된다. 프로그램 실행 동안 이 블록을 다음으로 만났을 때, 번역기는 제1의 버전(211A)이던지 혹은 제2의 버전(211B)이던지 이제 선택적으로 실행할 수 있다. 함수의 시작(on entry to a function)에서, 동적 테스트가 접근할 메모리 형태, 즉 사설인지 공유인지를 결정하기 위해서 실시되고, 그 다음 적절한 버전이 선택된다. 이 해결 방안은 번역 오버헤드는 감소시키지만, 동적 테스트 실시로 실행 손실이 있다.
다른 실시 예에서, 번역기는 루프 최적화(loop optimization)를 수행한다. 여기서, 루프는 처음으로 실행되며 메모리 예외를 발생시킨다. 왜냐하면 루프 내의 메모리 접근은 공유 메모리를 참조하기 때문이다. 따라서, 번역기는 공유 메모리를 참조하기 위해서 루프에 있는 코드를 재번역할 수도 있는데, 그렇게 함으로서 공유 메모리를 참조하는 미래의 실행들이 실패할 가능성을 더 적게 할 수 있다. 동적 첵크를 제공함으로써 루프에 있는 코드는 전문화되어 사설 혹은 공유 메모리 어느 쪽 이던지 접근할 수 있다. 또한, 번역기는 루프로부터 동적 체크를 끌어내어, 그것을 루프 앞에 두려고 시도할 수 있는데, 이렇게 함으로서, 실행 워크로드를 더 줄일 수 있다.
호출된 코드를 동적으로 체크하는 것에 대한 다른 대안으로서, 다른 선택은 호출자 사이트에서 전문화된(specialized) 코드를 인라인(inline)하는 것이다. 또 다른 선택은 특정 함수(a particular function)에 대하여 호출자들(callers)을 전문화하는 것이다. 다시 말하면, 호출자는 사설 혹은 공유 메모리를 각각 접근하기 위해 사설 형태 혹은 공유 형태 어느 쪽이던지 접근자 함수(accessor function)를 호출하도록 전문화된다는 것이다. 예를 들면 다음과 같다.
Caller > memcopy > memory
Becomes:
Caller1(private) > memcopy_private > private memory
Caller2(shared) > memcopy_shared > shared memory
이들 전문화된 호출자들은 또한 인디렉션(indirection) 층(즉, 콜 스택(call stack)상의 여분의 항목들로서 래퍼 함수들(wrapper functions))에 더 개입할 수 있다. 여기서, 접근될 메모리 주소는 호출자에 의해서 결정되고, 그 메모리 주소는 오직 접근자 함수(예를 들어, memcopy)에 의해서만 사용된다. 이 래퍼 함수들은 초기에는 그들의 계승자(successor)의 사설 버전을 호출하기 위해 세트된다.
따라서, 콜 스택의 세심한 검사(inspecting)는 이 호출자 사이트로부터의 미래의 콜들이 성공하도록 하기 위해서 전문화되는 데 필요한 래퍼 함수들을 결정한다. 혁신적인 전문화 작업(progressive specialization)은, 접근자 함수에 가장 근접한 곳에서 시작하여 각 층이 사설 및 공유 버젼들로 전문화될 때까지, 하나의 래퍼 층을 한번에 적응시키는 것이 적당하다.
도 9는 여기서 논의된 다양한 상세 실시 예들의 요약으로서 메모리 일관성 보호 방법의 일반 개념을 제공하기 위한 개념적인 흐름도이다.
단계(901)에서, 제1 및 제2 코드 부분들이 분리된 가상 주소 공간 영역들에서 실행된다. 예를 들어, 제1 및 제2 타겟 코드 부분들(21a, 21b)은 분명하며(distinct) 겹치지 않는 제1 및 제2의 가상 주소 공간 영역들(181a, 181b)에 관하여 각각 실행된다.
단계(902)는 사상된 영역들(182a, 182b)를 각 가상 주소 공간 영역들(181a, 181b) 내에 기록하는 것을 선택적으로 포함한다. 여기서, 각 사상된 메모리 영역의 주소 오프셋 및 크기(주소 범위)는 무엇보다도 mmap() 시스템콜 같은 메모리 사상 동작에 응답하여 메모리 맵(199)에 기록된다.
단계(903)에서, 방법은 현재 실행중인 코드 부분에 연관된 주소 공간에 사상되지 않지만, 다른 복수의 주소공간들에 사상되는 메모리 영역에 대한 접근 요청을 검출하는 것을 포함한다.
여기서, 대응 메모리 영역은 다른 실행 중인 코드 부분과 연관된 주소 공간에 혹은 공유 메모리를 위해 유보된 분리된 주소 공간에 어느 쪽이던지 사상된다. 어느 경우이던지, 현재 실행 중인 코드 부분에 의한 접근 요청은 메모리 예외를 야기하므로, 그 메모리 예외에 응답하여, 현재 실행중인 코드 부분이 공유 메모리 영역을 접근하려고 시도하고 있음이 결정된다.
단계(904)에서, 방법은 메모리 일관성 보호 메커니즘을 적용하기 위해서 현재 실행 중인 코드를 수정하는 것을 포함한다. 이 메커니즘은 코드가 미리 정해진 제한들을 갖는 메모리 일관성 모델 하에서 실행되게 한다. 또한, 현재 실행된 코드도 공유 메모리를 위해 유보된 주소공간의 미리 정해진 공유 메모리 영역에 대하여 실행되기 위해 수정된다.
끝으로, 단계(905)에서, 공유 메모리 영역이 공유메모리를 위해 유보된 주소 공간 내에 아직 존재하고 있지 않는 경우, 그 공유메모리 영역은 그러한 주소 공간으로 이동되고 사상되지 않는다. 혹은 아니면 현재 코드 부분과 연관된 주소 공간에서 적어도 보호된다.
위에서 논의한 clone() 시스템 콜과 같은 새로운 코드 부분 실행을 시작하는 메커니즘을 고려해 볼 때, 단계(901)은 새롭게 코드 부분을 실행하는 것을 시작하려는 그러한 시도를 검출하여, 분리된 주소 공간을 새롭게 실행하는 코드 부분을 위해 할당하고, 그 다음 그 새로운 코드 부분을 그 새롭게 할당된 분리된 주소공간에서 실행하는 단계들을 더 포함할 수 있다.
또한, 도 9에서 보여준 단계들은 보여진 순차적 순서로 수행될 필요가 없음도 이해될 것이다. 특별한 예로서, 사상된 영역을 각 주소 공간에 기록하는 단계(902)는 메모리의 각 새로운 영역이 특정 주소 공간에 사상됨에 따라 동적으로 수행될 수 있음과, 그리고 이 단계는 복수의 코드 부분들 각각을 분리된 주소 공간들에서 실행시키는 단계(901) 전에, 병렬로, 혹은 후에 일어날 수 있음이 이해될 것이다.
또한, 단계(904) 및(905)는 타겟 코드가 일차적으로 거기에 적용된 메모리 일관성 보호 메커니즘을 가지면서 생성되도록 선택적으로 예측 가능하게 수행될 수 있다. 이들 대체 실시 예들은 번역기(19) 내의 세팅들에 의존한다. 서브젝트 코드(17)을 변환시키는 것의 결과로서, 그러한 선택적 실시 예들이 프로그램의 특정 섹션을 위해 이익이 될 것으로 번역기가 예측하는 경우, 메모리 일관성 보호 메커니즘은 그 생성된 타겟 코드(21)에도 적용된다.
위에서 논의한 메커니즘은 단일 응용 프로그램 내에서 운영되는 프로세스들 및 스레드들에 한정되는 것이 아니고, 또한 타겟 컴퓨팅 시스템상에서 동시에 운영되는 한 세트 혹은 한벌의 프로그램에도 적용될 수 있다. 다시 말하면, 두 개 혹은 그 이상의 분리된 프로그램들(태스크들(tasks))이 위에서 논의한 메커니즘 아래에서 메모리를 공유하는 방식으로 함께 운영될 수 있다.
도 10은 본 발명의 다른 실시 예에 따라 MPU(198)에서 메모리 일관성 보호 메커니즘을 실시하는 방법에 관한 개략적인 흐름도이다. 위에서 상세하게 논의한 메모리 일관성 보호 메카니즘은 연속 명령들을 생성된 타겟코드에 적용하였다. 다 른 실시 예에서, 페이지 플래그 수정이 메모리(18)에서 저장 정렬 페이지들(store-ordered pages)을 작성하기 위해 타겟 컴퓨팅 시스템의 특정 아키텍쳐들에서 채용되기도 한다.
단계(1001)에서, 복수의 타겟 코드 부분들 각각은, 위에서 논의한 실시 예들과 비슷하게, 분리된 가상 주소 공간 영역들에서 실행된다. 단계(1002)에서, 방법은 복수의 주소 공간 각각에 사상된 메모리 영역들을, 예를 들어 도 7D의 VASR 맵(199)를 사용하여서, 기록하는 것을 포함한다. 이들 단계들은 도 5의 ASAU(196)에 의해서 위에서 논의한 방식으로 수행하는 것이 적당하다.
단계(1003)에서, 방법은 공유 메모리 영역을 초기화하는 요청을 검출하는 것을 포함한다. 하나의 특정 실시 예에서 이러한 요청은 mmap()와 같은 메모리 사상 시스템 콜이며, 이는 명시적으로 공유 메모리를 요청한다. 다른 실시 예에서, 차일드 스레드가 자신의 주소 공간에 사상되지 않고 페어런트 스레드의 주소 공간에 사상된 영역을 접근하려고 시도할 때 예외가 발생된다. 여기서, 차일드 스레드는 clone() 시스템 콜 같은 것에 의해서 생성된다. SMDU(197)의 검출 메커니즘이 위에서 논의한 것처럼 채용되는 것이 적당하다.
단계(1004)에서, 검출된 공유 메모리 영역의 페이지 혹은 페이지들은 MPU(198)에 의해서 표시되는데, 이들 페이지들에 대한 접근들이 제2의, 디폴트가 아닌 메모리 일관성 모델에 강제로 집착하도록 페이지 테이블 속성들을 조작함으로서 그렇게 한다. 구체적인 하나의 실시 예로서, PowerPC 아키텍쳐에 기초한 시스템 하드웨어는 관련 페이지들이 순차적 일관성을 요구하는 것이 표시되게 허용한다.
이 실시 예는 공유 메모리 영역(182)가 분리된 주소 공간 영역(181)로 이동되는 것을 요구하지 않는 장점이 있다. 대신에, 공유 메모리 영역(182)에 대한 접근을 요구하는 각 타겟 코드 부분(21a, 21b, 21c)의 VASR(181a, 181b, 181c) 내로 공유 메모리 영역(182)는 사상된다. 공유 영역을 접근하는 어떠한 코드도 저장 정렬 방식으로(in a store-ordered manner) 그렇게 할 것이며 따라서 바람직한 메모리 공유 모델이 적용된다. 또한 타겟 코드는 페이지 결함이 없는 공유 메모리 영역(182)를 접근할 것이며, 그 결과 타겟 코드의 수정은 피할 수 있게 될 것이다.
도 11은 번역기 VAS(180)을 포함하는 타겟 컴퓨팅 시스템의 부분들을 보여주는 개략도이다. 이 도면은 저장 정렬 페이지들과 관련한 모범 실시 예를 가상 주소 공간(180)을 물리적 메모리 서브시스템(18)에 사상시키는 페이지 테이블 PT(183)와 함께 추가로 보여주기 위한 것이다.
도 11A에서, 제1의 코드 부분 T1(21a)는 명시적으로 공유메모리, 예를 들어 파일 지원된(file-backed) mmap 공유 메모리를 요청하는 mmap() 형태의 시스템 콜을 유도한다. 번역기 유니트(19)의 FUSE(194)는 시스템 콜을 가로채기 하여, 만일 그 페이지가 저장-정렬로 아직 표시되지 않았다면, 그 영역을 위한 캐시 라인들은 무효로 하고 그 페이지를 페이지 테이블 PT(183)에 저장-정렬로 표시한다. 그러면, 그 파일은 공유 메모리 영역(182a)로서 제1의 코드 부분 T1(21a)의 VASR(181a)에 사상된다.
도 11B에서 보듯이, 제2의 타겟 코드 부분(21b)는 지금 공유 메모리 영역(182a)에 대하여 접근을 시도하는데, 그 공유 메모리가 현재 관련 VASR(181b)에 사상되어 있지 않기 때문에 예외가 발생할 것이다. 응답으로, SMDU(197)는 이제 공유 메모리 영역(182b)을 또한 제 2의 VASR(181b)에 사상할 것이며, 아직 그렇게 표시되어 있지 않을 경우, 그 페이지 속성들을 조작하여 관련 메모리 페이지들을 저장-정렬로 표시한다.
도 11B는 또한 clone() 시스템 콜이 발생했을 경우의 시스템의 응답을 보여준다. 코드 부분(21b)의 새로운 스레드는 분리되어 있고 구별되어 있는 VASR(181b)에 할당된다. 이것은 페어런트 프로세스(21a)의 VASR(181a)와 겹치지 않는다. 이 경우에, 제1의 코드 부분(21a)의 제1의 VASR(181a)에 있는 이전의 사설 메모리 영역(182a)는 이제 공유로 될 수 있다.
메모리(182a)의 특정 영역들이 이미 VAS((181a) 페어런트 프로세스 내에 사상될 것이라 하더라도, 이들은 새롭게 클론된 스레드(the newly cloned thread)에 대해서는 사상되지 않은 채로 남아있게 된다. 만일 제2의 코드 부분(21b)가 자신의 VAS((181b)에는 사상되지 않았지만 페어런트 프로세스(21a)의 VAS((181a)에 있는 대응 영역(182a)에 사상된 메모리 영역(182b)에 접근하려고 지금 시도한다면, 차일드 스레드 T((21b)는 예외를 발생시킬 것이다.
SMD((197)은 타겟 코드(21a, 21b)의 두 부분 모두에 물리적 메모리의 동일 페이지에 대한 접근을 제공하기 위해 이들 VASR들(181a, 181b) 둘 모두의 동일 상대적 위치(the same relative position)에 대하여 공유 메모리 영역(182b)에 사상하는 차일드 스레드의 VASR에 원하는 파일을 사상한다. 이 경우에, 이전에는 사설이었지만 지금은 암시적 공유인 메모리 영역(182)은 페이지 테이블 P((183)에 저장 정렬로 표시된다.
모범적 실시 예들은 위에서 주로 속도를 높이고, 에물레이션을 하고 혹은 프로그램 코드를 번역하기 위한 프로그램 코드 변환 시스템과 관련하여 논의되었다.
또한, 여기서 논의된 메커니즘은 메모리 일관성 에러에 취약한 프로그램코드를 검출하고, 선택적으로 교정하는 디버깅 툴(debugging tool)에 적용할 수 있다. 디자인 문제들 혹은 버그들은 공유 메모리 멀티프로세서 아키텍쳐들에서 발견하기가 어렵고 분리하기도 어렵고, 그리고 교정하기도 어렵다. 검출되지 않은 버그들은 종종 시스템 실패로 이끄는 부적절한 운영을 초래하며, 그리고 새로운 소프트웨어 발표를 지연시키거나, 발표 후 소프트웨어 업데이트를 요구하기도 한다.
이 결과로, 여기 설명한 제어기/번역기 유니트는, 생성된 타겟 코드가 디버그 되도록, 공유 메모리 영역들을 검출하여 직렬화 명령들을 삽입하거나 혹은 페이지 테이블 속성들을 수정하는 것과 같은 서브젝트 코드에 적절한 코드 수정들을 적용하는 디버깅 툴로서 동작하도록 구성된다.
몇몇 모범 실시 예들을 여기서 보여주었고 성명을 하였지만, 첨부된 청구항들에 정의된 바와 같이, 본 발명의 범위를 벗어남이 없이 다양한 변경과 수정들이 만들어 질 수 있음은 당 업자들에게 이해될 수 있을 것이다.
이 출원과 관련하여 이 출원의 명세서와 함께 혹은 이전에 제출되는 모든 서류 및 문서들은 이 명세서와 함께 공중 심사에 개방되어 있으며, 이들은 이 출원의 참고자료에 포함된다.
이 명세서에서 공개된 모든 특징들(첨부된 청구항, 요약 및 도면들을 포함하 여) 및/또는 공개된 모든 방법 혹은 프로세스들의 모든 단계들은 적어도 그러한 특징들 및/또는 단계들이 상호 배타적인 조합들을 제외하고는 어떠한 조합에서도 조합될 수 있다.
이 명세서에 공개된 각 특징(첨부된 청구항들, 요약 및 도면들을 포함하여)은, 명시적으로 달리 설명한 경우를 제외하고, 동일, 균등 혹은 유사한 목적을 달성하는 다른 특징들로 대체될 수 있다. 따라서, 달리 명시적으로 설명한 경우를 제외하고, 공개된 각 특징은 균등 혹은 유사 특징들의 일반적 사례들 중 하나의 모범 사례 일뿐이다.
본 발명은 여기서 소개한 실시 예들의 상세한 내용에 한정되지 않으며, 이 명세서에 공개된 특징들(첨부된 청구항들, 요약 및 도면들을 포함하여)의 모든 새로운 것, 혹은 새로운 조합, 혹은 여기에 공개된 모든 방법 혹은 프로세스의 단계들의 새로운 것 혹은 새로운 조합에까지 확대된다.

Claims (54)

  1. 멀티프로세서 컴퓨팅 시스템에서,
    적어도 제1 타겟 코드 부분과 제2 타겟 부분을 포함하는 복수의 타켓 코드 부분들을 저장하여 갖고 있는 메모리 ;
    상기 메모리에 저장된 복수의 타겟 코드 부분들을 실행하도록 준비된 복수의 프로세서들 ; 및
    상기 복수의 프로세서들에 의해 상기 복수의 타겟 코드 부분들의 실행을 제어하도록 준비된 제어기 유니트를 포함하되, 상기 제어기 유니트는 ;
    상기 메모리에 주소 지정하기 위해 사용된 가상 주소 공간을 복수의 가상 주소 공간 영역들로 나누고 그리고 초기에는 제1의 메모리 일관성 모델에 따라 상기 복수의 가상 주소 공간 영역들을 통해서 상기 메모리에 접근하기 위한 상기 복수의 타겟 코드 부분들의 실행을 제어하도록 준비된 주소 공간 할당 유니트 ;
    적어도 상기 제2의 타겟 코드 부분에 의해서도 접근 가능한 상기 메모리의 공유 메모리 영역에 대하여 상기 제1 타겟 코드 부분의 실행으로 만들어진 메모리 접근 요청을 검출하고 그리고 상기 공유 메모리 영역을 접근하는 상기 제1의 타겟 코드 부분의 명령들 중 적어도 하나의 그룹을 확인하기 위해 준비된 공유 메모리 검출 유니트 ; 및
    상기 공유 메모리 검출 유니트가 상기 확인된 명령들의 그룹을 확인하는것 응답하여, 상기 제1의 타겟 코드 부분의 명령들 중 상기 확인된 그룹의 실행으로 상기 공유 메모리 영역에 대하여 접근하는 것들과 관련하여 제2의 메모리 일관성 모델을 집행하기(enforce) 위해 메모리 일관성 보호를 선택적으로 적용하도록 준비된 메모리 보호 유니트를
    포함하는 멀티프로세서 컴퓨팅 시스템.
  2. 제 1항에서,
    상기 제어기 유니트는 상기 메모리에 대한 접근들을 정렬하기 위해 상기 제1 메모리 일관성 모델 하에서 실행되는 상기 제1 및 제2의 타겟 코드 부분들을 생성하도록 준비되고 ;
    상기 메모리 보호 유니트는 상기 공유 메모리 영역을 접근할 때 상기 메모리 일관성 보호를 선택적으로 적용하고 이에 의하여 상기 제1의 타겟 코드 부분에 있는 상기 확인된 명령들을 상기 제2의 메모리 일관성 모델 하에 실행하기 위해 준비된
    멀티프로세서 컴퓨팅 시스템.
  3. 제2항에서,
    상기 제2의 메모리 일관성 모델은 상기 제1의 메모리 일관성 모델과 비교하여 더 강한 메모리 접근 정렬 제한들(stronger memory access ordering constraints)을 갖는
    멀티프로세서 컴퓨팅 시스템.
  4. 제2항에서,
    상기 제1 메모리 일관성 모델은 상기 멀티프로세서 컴퓨팅 시스템의 디폴트 메모리 일관성 모델인
    멀티프로세서 컴퓨팅 시스템.
  5. 제2항에서,
    제어기 유니트는 복수의 서브젝트 코드 부분들을 복수의 타겟 코드 부분들로 번역하도록 준비되고 상기 제2의 메모리 일관성 모델은 각 서브젝트 컴퓨팅 아키텍쳐 상에서 상기 서브젝트 코드 부분들의 실행에 적합하게 결정된 메모리 일관성 모델인
    멀티프로세서 컴퓨팅 시스템.
  6. 제1항에서,
    상기 주소 공간 할당 유니트는 상기 복수의 가상 주소 공간 영역들 중 제1의 가상 주소 공간 영역은 상기 제1의 타겟 코드 부분의 실행에 할당하고 그리고 상기 복수의 가상 주소 공간 영역들 중 다른 제2의 가상 주소 공간 영역은 상기 제2의 타겟 코드 부분의 실행에 할당하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  7. 제1항에서,
    상기 가상 주소 공간은 상기 제어기 유니트 및 상기 복수의 타겟 코드 부분들의 실행을 위해 상기 멀티프로세서 컴퓨팅 시스템에 제공되고 상기 주소 공간 할당 유니트는 상기 제어기 유니트 및 상기 복수의 타겟 코드 부분들의 실행을 위해 제공된 상기 가상 주소 공간을 상기 복수의 가상 주소 공간 영역들로 나누는
    멀티프로세서 컴퓨팅 시스템.
  8. 제1항에서,
    상기 주소 공간 할당 유니트는 2의 n승 비트 크기의 상기 가상 주소 공간을 각각의 크기가 2의 n승 비트 크기보다 작은 복수의 가상 주소 공간 영역들로 나누는 - 여기서 n은 정수임 -
    멀티프로세서 컴퓨팅 시스템.
  9. 제1항에서,
    상기 주소 공간 할당 유니트는 2의 64승 비트 크기의 상기 가상 주소 공간을 각각의 크기가 2의 32승 비트 크기의 복수의 가상 주소 공간 영역들로 나누는
    멀티프로세서 컴퓨팅 시스템.
  10. 제1항에서,
    상기 주소 공간 할당 유니트는 상기 제1 및 제2의 타겟 코드 부분들을 제어 하여 상기 복수의 가상 주소 공간 영역들 각각에서 실행하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  11. 제1항에서,
    상기 주소 공간 할당 유니트는 상기 제1 및 제2의 타겟 코드 부분들을 생성하여 상기 가상 주소 공간 영역들 각각의 미리 정해진 기초 주소(base address)를 상기 타겟 코드의 실행으로 결정된 상기 가상 주소 공간 영역 내의 오프셋와 조합하는 것에 의하여 메모리 접근들을 각각 수행하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  12. 제11항에서,
    상기 주소 공간 할당 유니트는 적어도 제1의 타겟 코드 부분을 생성하여 상기 제1의 타겟 코드 부분에 할당된 가상 주소 공간 영역의 기초 주소를 보유하는 상기 복수의 프로세서들 중 하나의 프로세서의 기초 레지스터(base register)를 참조하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  13. 제11항에서,
    상기 주소 공간 할당 유니트는 상기 가상 주소 공간으로부터 분할된 공유 가상 주소 공간 영역을 더 제공하여 상기 제1 및 제2 타겟 코드 부분들을 생성하도록 준비되며, 그리하여(whereby) 상기 기초 주소는 상기 타겟 코드의 실행 동안 일시적으로 수정되고 상기 타겟 코드의 특정명령들을 실행하여 상기 공유 가상 주소 공간을 접근하게 하는
    멀티프로세서 컴퓨팅 시스템.
  14. 제1항에서,
    상기 주소 공간 할당 유니트는 적어도 하나의 공유 가상 주소 공간 영역 및 적어도 하나의 사설 가상 주소 공간 영역을 포함하는 상기 복수의 가상 주소 공간 영역들 제공하도록 준비되고, 그리고
    상기 주소 공간 할당 유니트는 상기 복수의 프로세서들의 적어도 제1 및 제2의 레지스터들을 참조하는 타겟 코드 명령들을 갖는 적어도 제 1의 타겟 코드 부분을 생성하도록 준비되며, 상기 제1의 레지스터는 상기 사설 가상 주소 공간 영역의 제1의 기초 주소를 저장하고 상기 제2의 레지스터는 상기 공유 가상 주소 공간 영역의 제2의 기초 주소를 저장하며,
    상기 제1의 타겟 코드 부분의 타겟 코드 명령들 중 적어도 하나의 그룹은 상기 제1의 기초 레지스터에 저장된 제1의 기초 주소를 참조하여 상기 사설 가상 주소 공간 영역에 관하여 상기 메모리를 접근하고
    상기 제1의 타겟 코드 부분의 타겟 코드 명령들 중 적어도 하나의 그룹은 상기 제2의 기초 레지스터에 저장된 제2의 기초 주소를 참조하여 상기 공유 가상 주소 공간 영역에 관하여 상기 메모리를 접근하는
    멀티프로세서 컴퓨팅 시스템.
  15. 제 1항에서,
    상기 공유 메모리 검출 유니트는 상기 복수의 프로세서들 중 각 프로세서 상에서 실행되는 동안상기 제1의 타겟 코드 부분에 의해서 만들어진 메모리 사상(mapping) 시스템 콜- 상기 메모리 사상 시스템 콜은 공유 메모리 영역의 사상을 명시적으로 요청함 - 을 가로채기 함에 의하여 명백한 공유 메모리 영역에 대한 요청을 검출하도록 준비되며 ;
    상기 공유 메모리 검출 유니트는 상기 요청된 명시적 공유 메모리 영역을 상기 복수의 가상 주소공간 영역들 중 공유 가상 주소 공간 영역에 사상하고, 상기 명시적 공유 메모리 영역을 표시하기 위하여 상기 제1의 타겟 코드 부분에 할당된 상기 가상 주소 공간 영역들 중 사설 가상 주소 공간 영역 내의 포인터(a pointer)로 복귀하도록 더 준비된
    멀티프로세서 컴퓨팅 시스템.
  16. 제 15항에서,
    상기 각 가상 주소 공간 영역 내에 사상되지 않은 영역을 접근하려 시도하는 상기 제1의 타겟 코드 부분의 명령 내로 메모리 접근 실패(a faulting memory access within an instruction)에 대한 응답으로 생성된 예외 신호를 수신하도록 준비된 예외 처리기를 더 포함하는
    멀티프로세서 컴퓨팅 시스템.
  17. 제16항에서,
    상기 공유 메모리 검출 유니트는 상기 메모리 접근의 실패가 상기 공유 가상 주소 공간 영역에 사상된 상기 명시적 공유 메모리 영역을 접근하기 위한 시도임을 결정하기 위하여 준비되고 ;
    상기 주소 공간 할당 유니트는 상기 명령들의 확인된 그룹을 실행하여 상기 공유 가상 주소 공간 영역에 관하여 상기 명시적 공유 메모리 영역을 접근하도록 준비되고; 그리고
    상기 메모리 보호 유니트는 상기 명령들의 확인된 그룹의 실행에 의한 상기 검출된 명시적 공유 메모리에 대한 접근과 관련하여 상기 메모리 일관성 보호를 선택적으로 적용하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  18. 제1항에서,
    상기 메모리 검출 유니트는 각 프로세서 상의 실행 동안 상기 제1의 타겟 코드 부분에 의해 만들어진 clone 형태의 시스템 콜 - 이 clone 형태의 시스템 콜은 상기 제1의 타겟 코드 부분의 실행으로부터 클론된 상기 제2의 타겟 코드 부분의 실행의 시작을 요청함 - 을 가로채기 함으로서 사설 메모리 영역의 암시적 공유(implicit sharing of a private memory area)를 검출하도록 준비되고 ; 그리고
    상기 주소 공간 할당 유니트는 상기 제1의 타겟 코드 부분에 할당된 제1의 가상 주소 공간 영역과 구별되는 상기 제2의 타겟 코드 부분에 제2의 가상 주소 공간 영역을 할당하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  19. 제18항에서,
    상기 각 제2의 가상 주소 공간 영역 내에 사상되지 않은 영역에 접근하기 위해 시도하는 상기 제2의 타겟 코드 부분의 명령 내로 메모리 접근 실패에 응답하여 생성된 예외 신호를 수신하도록 준비된 예외 처리기를 더 포함하되 ;
    상기 공유 메모리 검출 유니트는, 상기 사설 메모리 영역을 상기 제1의 가상 주소 공간 영역으로부터 사상해제하고(unmap) 상기 사설 메모리 영역을 암시적 공유 메모리 영역(an implicitly shared memory area)으로서 공유 가상 주소 공간에 사상하기 위해(map) 상기 예외 신호에 응답하여 상기 메모리 접근 실패가 상기 제1의 타겟 코드 부분의 상기 제1의 가상 주소 공간 영역 내로 사상된 상기 사설 메모리 영역을 접근하기 위한 시도임을 결정하도록 준비되며 ;
    상기 주소 공간 할당 유니트는 상기 공유 가상 주소 공간 영역에 관하여 상기 암시적 공유 메모리 영역을 접근하기 위해 상기 제2의 타겟 코드 부분에 있는 상기 확인된 그룹의 명령들을 실행도록 준비되며 ; 그리고
    상기 메모리 보호 유니트는 상기 확인된 그룹의 명령들에 의한 상기 암시적 공유 메모리에 대한 접근과 관련하여 메모리 일관성 보호를 선택적으로 적용하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  20. 제 19항에서,
    상기 예외 처리기는 상기 각 제1의 가상 주소 공간 영역 내에 사상되지 않은 영역에 접근하기 위해 시도하는 상기 제1의 타겟 코드 부분의 명령 내로 메모리 접근 실패에 응답하여 생성된 예외 신호를 수신하도록 준비되며 ;
    상기 공유 메모리 검출 유니트는 상기 예외 신호에 응답하여 상기 메모리 접근 실패가 상기 공유 가상 주소 공간 영역 내로 사상된 상기 암시적 공유 메모리 영역을 접근하기 위한 시도임을 결정하도록 준비되며
    상기 주소 공간 할당 유니트는 상기 공유 가상 주소 공간 영역에 관하여 상기 암시적 공유 메모리 영역을 접근하기 위해 상기 제1의 타겟 코드 부분의 상기 확인된 그룹의 명령들을 실행하도록 준비되며
    상기 메모리 보호 유니트는 상기 확인된 그룹의 명령들에 의한 상기 암시적 공유 메모리 영역에 대한 접근과 관련하여 상기 메모리 일관성 보호를 선택적으로 적용하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  21. 제1항에서,
    예외 처리기를 더 포함하되, 상기 예외처리기는 상기 가상 주소 공간 영역들 중 제1의 영역 내에 사상되지 않은 영역에 접근하기 위해 시도하는 상기 제1의 타겟 코드 부분의 명령 내로 메모리 접근 실패에 응답하여(in response to a faulting memory access) 생성된 예외 신호를 수신하도록 준비되며 ; 그리고
    상기 공유 메모리 검출 유니트는 상기 예외 신호에 응답하여 상기 메모리 접근 실패가 상기 제2의 타겟 코드 부분과 관련하여 상기 가상 주소 공간 영역 중 제2의 영역 내로 사상된 메모리 영역을 접근하기 위한 시도임을 결정하고, 상기 메모리 영역을 공유 메모리 영역으로서 공유 가상 주소 공간 영역 내로 사상되도록 준비되며 ;
    상기 주소 공간 할당 유니트는 상기 공유 가상 주소 공간 영역에 관하여 상기 공유 메모리 영역을 접근하기 위해 상기 제1의 타겟 코드 부분의 상기 확인된 그룹의 명령들을 실행하도록 준비되며
    상기 메모리 보호 유니트는 상기 확인된 그룹의 명령들에 의한 상기 공유 메모리 영역에 대한 접근과 관련하여 상기 메모리 일관성 보호를 선택적으로 적용하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  22. 제21항에서,
    상기 예외 처리기는 상기 공유 가상 주소 공간 영역 내로 사상되지 않은 영역에 접근하기 위해 시도하는 상기 제1의 타겟 코드 부분의 명령 내로 메모리 접근 실패에 응답하여 생성된 예외 신호를 수신하도록 준비되며
    상기 공유 메모리 검출 유니트는 상기 예외 신호에 응답하여 상기 메모리 접근 실패가 상기 제1의 가상 주소 공간 영역과 관련된 사설 메모리 영역을 접근하기 위한 시도임을 결정하도록 준비되며
    상기 주소 공간 할당 유니트는 상기 제1의 가상 주소 공간 영역에 관하여 상기 사설 메모리 영역을 접근하기 위하여 상기 제1의 타겟 코드 부분에 있는 상기 확인된 그룹의 명령들을 다시 실행하도록 준비되며
    상기 메모리 보호 유니트는 상기 확인된 그룹의 명령들에 의한 상기 사설 메모리 영역에 대한 접근과 관련하여 상기 메모리 일관성 보호를 선택적으로 제거하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  23. 제1항에서,
    상기 공유 메모리 검출 유니트는 상기 복수의 가상 주소 공간 영역들의 각각에 사상된 메모리 영역의 사상(a map)을 기록하고, 상기 사상을 참조하여 메모리 접근 실패가 하나 혹은 그 이상의 상기 복수의 가상 주소 공간 영역들 내에 이미 사상된 메모리 영역을 접근하기 위한 시도임을 결정하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  24. 제1항에서,
    상기 제1 및 제2의 타겟 코드 부분들의 각 각은 명령들의 블록들? 여기서 블 록은 상기 제어기 유니트에 의해 처리되는 최소의 코드 단위임-- 로 분할되며 ;
    상기 메모리 보호 유니트는 상기 현재 블록의 실행을 통하여 예외 신호가 부분적으로(part way) 생성될 때 메모리 일관성 보호를 상기 나머지 명령들에 대하여 적용하면서 현재 블록의 하나 혹은 그 이상의 나머지 명령들의 실행을 완료하도록 준비되며 ; 그리고
    상기 제어기 유니트는 상기 현재 블록을 재생성성하여(regenerate) 상기 블록을 걸쳐 메모리 일관성 보호를 적용하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  25. 제24항에서,
    상기 메모리 보호 유니트는 메모리 일관성 보호를 적용하면서 현재 블록의 실행을 완료하도록 하고, 이어서 재생성이 필요한 것으로 상기 블록에 표시하며(mark) ; 그리고
    상기 제어기 유니트는 상기 표시에 응답하여 상기 블록을 재생성하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  26. 제 24항에서,
    상기 제어기 유니트는 선택된 동기 포인트들(selected synchronization points)에서 영 동작들(null operations)을 포함하는 상기 제1 및 제2의 타겟 코드 부분들을 생성하도록 준비되고 그리고 상기 메모리 보호 유니트는 상기 영 동작들을 위한 대체 명령으로 연속 명령들을 삽입하기 위해 상기 블록의 적어도 나머지 명령들을 수정하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  27. 제 24항에서,
    상기 메모리 보호 유니트는 상기 블록에 있는 체크포인트와 연관된 서브젝트 상태 - 서브젝트 상태는 서브젝트 코드의 실행 상태를 표시하며 상기 타겟 코드 부분들은 이로부터 파생됨 - 를 획득하도록 준비되고, 그리고 상기 제어기 유니트는 상기 첵크포인트로부터 상기 블록을 완료하기 위해 상기 서브젝트 코드의 명령들을 타겟 코드의 명령들로 해석하도록 준비된 서브젝트-투-타겟 해석기(subject-to-target interpreter)를 더 포함하되, 상기 서브젝트-투-타겟 해석기는 연속 명령들을 상기 서브젝트-투-타겟 해석기에 의해 생성된 상기 타겟 코드 명령들에 삽입하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  28. 제24항에서,
    상기 제어기 유니트는 연속 명령들 삽입하는 것을 포함하여 수정된 타겟 코드 명령들 내로 상기 블록의 나머지 명령들을 해석하기 하기 위해 준비된 타겟-투-타겟 해석기(a target-to-target interpreter)를 더 포함하는
    멀티프로세서 컴퓨팅 시스템.
  29. 제24항에서,
    상기 메모리 보호 유니트는 연속 명령들을 삽입하기 위하여 상기 나머지 명령들을 재생성하고 그리고 그 다음 상기 블록의 실행을 완료하기 위하여 상기 재생성된 나머지 명령들의 실행을 하도록 하는
    멀티프로세서 컴퓨팅 시스템.
  30. 제24항에서,
    상기 제어기 유니트는 상기 제1의 가상 주소 공간 영역을 참조하며 메모리 일관성 보호가 없는 상기 블록의 최초 발생 버전(an original generated version)과, 메모리 일관성 보호를 갖는 상기 공유 가상 주소 공간 영역을 참조하는 적어도 하나의 그룹의 명령들을 포함하는 상기 블록의 수정된 버전(a modified version)을 포함하는 적어도 하나의 이중 블록(at least one dual block)을 유지(retain)하기 위해 준비되며 ; 그리고
    상기 공유 메모리 검출 유니트는 적어도 상기 이중 블록에 대한 엔트리 상에서 동적 테스트(a dynamic test)를 수행하고 그리고 응답으로 상기 이중 블록의 상기 최초의 버전 혹은 상기 수정된 버전 중 어느 것이던지 선택적으로 실행하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  31. 제30항에서,
    상기 공유 메모리 검출 유니트는 상기 동적 테스트가 상기 타겟 코드의 루프(a loop)를 벗어나도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  32. 제30항에서,
    상기 공유 메모리 검출 유니트는 상기 이중 블록의 상기 최초 버전 혹은 수정된 버전 중 어느 것이던지 호출자 사이트(a caller site)에서 인라인(inline) 시키기 위해 상기 타겟 코드를 생성 시키도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  33. 제30항에서,
    상기 공유 메모리 검출기 유니트는 상기 이중 블록의 상기 최초 버전 혹은 수정된 버전 중 어느 것이던지 호출하기 위해 상기 타겟 코드에서 호출자 사이트를 수정하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  34. 제33항에서,
    상기 공유 메모리 검출 유니트는 상기 이중 블록의 상기 최초 버전 혹은 수 정된 버전 중 어느 것이 던지에 대하여 선택적으로 호출할 때까지 최초 버전 혹은 수정된 계승자(an original or modified successor) 중 어느 것이던지 선택적으로 호출하기 위해 상기 호출자 사이트 및 상기 이중 블록 사이에 중재하는 하나 혹은 그 이상의 래퍼 함수들(one or more wrapper functions)를 혁신적으로(progressively) 전문화(specialize) 하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  35. 제1항에서,
    상기 메모리 보호 유니트는 상기 메모리와 연관된 페이지 테이블에 있는 속성들을 조작함에 의하여 상기 메모리에 하나 혹은 그 이상의 메모리 페이지들을 저장 정렬로(as store-orded) 표시하되 상기 하나 혹은 그 이상의 메모리 페이지는 모두 캐시 금지 및 보호(both cache-inhibited and guarded)되게 표시하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  36. 제35항에서,
    상기 주소 공간 할당 유니트는 상기 제1 및 제2의 타겟 코드 부분들의 각각을 상기 가상 주소 공간 영역들의 선택된 영역에 대하여 실행하도록 더 준비된
    멀티프로세서 컴퓨팅 시스템
  37. 제36항에서,
    상기 주소 공간 할당 유니트는 상기 제1 및 제2의 타겟 코드 부분들의 각각을 생성하여 상기 타겟 코드의 실행 상에서 결정된 상기 가상 주소 공간 영역 내의 오프셋과 상기 가상 주소 공간 영역들 중 각 영역의 미리 정해진 기초 주소를 조합함에 의하여 메모리 접근들을 수행하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  38. 제36항에서,
    상기 제1 및 제2의 타겟 코드 부분들의 각 각을 위하여, 상기 주소 공간 할당 유니트는 상기 각각 가상 주소 공간 영역의 기초 주소를 저장하는 상기 각 프로세서의 기초 레지스터를 참조하기 위해 상기 타겟 코드 명령들을 생성하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  39. 제36에서,
    상기 공유 메모리 검출 유니트는 각 프로세서상에서 실행 동안 상기 제1의 타겟 코드 부분들에 의해 만들어진 메모리 사상 시스템 콜- 상기 메모리 사상 시스템 콜은 명백하게 공유 메모리 영역의 사상을 요청함 - 을 가로채기 함으로서 명백한 공유 메모리를 위한 요청을 검출하도록 준비되며 ; 그리고
    상기 메모리 보호 유니트는 상기 공유 메모리 영역을 상기 제1의 타겟 코드 부분과 연관된 상기 가상 주소 공간 영역들 중 제1의 영역에 사상하고 그리고
    페이지 테이블 속성들을 조작함에 의하여 상기 공유 메모리 영역을 위한 상기 메모리에 하나 혹은 그 이상의 메모리 페이지들을 저장 정렬로(as store-orded) 표시하되 상기 하나 혹은 그 이상의 메모리 페이지는 모두 캐시 금지 및 보호(both cache-inhibited and guarded)되게 표시하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  40. 제36항에서,
    예외 처리기를 더 포함하되 ;
    상기 예외 처리기는 상기 제2의 타겟 코드 부분과 연관된 제2의 각 가상 주소 공간 영역 내로 사상되지 않은 영역에 접근하기 위해 시도하는 상기 제2의 타겟 코드 부분의 명령 내로 메모리 접근 실패에 응답하여 생성된 예외 신호를 수신하도록 준비되며 ; 그리고
    상기 공유 메모리 검출 유니트는 상기 예외 신호에 응답하여 상기 메모리 접근 실패가 명백한 공유 메모리 영역으로서 상기 제1의 타겟 코드 부분의 상기 제1의 가상 주소 공간 영역 내에 이미 사상된 메모리 영역을 접근하기 위한 시도임을 결정하도록 준비되며 ; 그리고
    상기 공유 메모리 검출 유니트는 상기 명백한 공유 메모리 영역을 또한 상기 제2의 가상 주소 공간 영역 내에 사상하고 그리고, 아직 그렇게 표지 되지 않은 경우, 페이지 테이블 속성들을 조작함에 의하여 상기 공유 메모리 영역을 위한 상기 메모리에 하나 혹은 그 이상의 메모리 페이지들을 저장 정렬로(as store-orded) 표시하되 상기 하나 혹은 그 이상의 메모리 페이지는 모두 캐시 금지 및 보호(both cache-inhibited and guarded)되게 표시하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  41. 제36항에서,
    예외 처리기를 더 포함하되, 상기 예외처리기는 상기 제2의 타겟 코드 부분과 연관된 제2의 각 가상 주소 공간 영역 내로 사상되지 않은 영역에 접근하기 위해 시도하는 상기 제2의 타겟 코드 부분의 명령 내로 메모리 접근 실패에 응답하여 생성된 예외 신호를 수신하도록 준비되며 ; 그리고
    상기 공유 메모리 검출 유니트는 상기 예외 신호에 응답하여 상기 메모리 접근 실패가 상기 제1의 타겟 코드 부분의 상기 제1의 가상 주소 공간 영역 내로 이미 사상된 메모리 영역을 접근하기 위한 시도임을 결정하고 그리고 상기 메모리 영역이 암시적 공유 메모리 영역임을 결정하도록 준비되며 ; 그리고
    상기 공유 메모리 검출 유니트는 페이지 테이블 속성들을 조작함에 의하여 상기 암시적 공유 메모리 영역을 위한 상기 메모리에 하나 혹은 그 이상의 메모리 페이지들을 저장 정렬로(as store-orded) 표시하되 상기 하나 혹은 그 이상의 메모리 페이지는 모두 캐시 금지 및 보호(both cache-inhibited and guarded)되게 표시하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  42. 제1항에서,
    상기 제어기 유니트는 2진수 실행가능 형식의 서브젝트 코드를 2진수 실행가능형식의 타겟 코드로 번역하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  43. 제1항에서,
    상기 제어기 유니트는 2진수 실행가능 형식의 서브젝트 코드를 상기 타겟 코드의 실행으로 동적으로 인터리브된 2진수 실행가능 형식의 타겟 코드로 번역하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  44. 제1항에서,
    상기 제어기 유니트는 서브젝트 코드를 상기 복수의 타겟 코드 부분들로 변환함에 의하여 상기 서브젝트 코드를 디버그하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  45. 제1항에서
    상기 제어기 유니트는 2진수 실행 가능 형식의 서브젝트 코드를 상기 타겟 코드 부분들의 실행 동안 동적으로 2진수 실행 가능 형식의 타겟 코드 부분들로 변 환함에 의하여 상기 서브젝트 코드를 디버그하도록 준비된
    멀티프로세서 컴퓨팅 시스템.
  46. 제1의 메모리 일관성 모델 하에서 제1의 프로그램 부분을 실행하는 단계 ;
    상기 제1의 프로그램 코드 부분과 적어도 제2의 프로그램 코드 부분 모두에 의해서 접근 가능한 공유 메모리 영역을 검출 하는 단계 ;
    상기 공유 메모리 영역을 접근하는 상기 제1의 프로그램 코드 부분의 한 그룹의 명령들을 확인하는 단계 ; 그리고
    상기 검출된 공유 메모리 영역을 접근할 때 상기 제1의 프로그램 코드 부분의 상기 그룹의 명령들이 제2의 메모리 일관성 모델 하에 실행하도록 메모리 일관성 보호를 선택적으로 적용하는 단계를 포함하는 컴퓨터로 실시되는 방법을 포함하는 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하기 위한 방법.
  47. 제46항에서,
    상기 제2의 메모리 일관성 모델은 더 강한 메모리 접근 정렬 제한들을 갖는
    멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하기 위한 방법.
  48. 제46항에서,
    상기 제1의 프로그램 코드 부분을 복수의 블록들로 분할하는 단계를 더 포함하되, 상기 선택적으로 적용하는 단계는 상기 메모리 일관성 보호를 오직 상기 검 출된 공유 메모리 영역을 접근하는 명령들을 포함하는 상기 제1의 프로그램 코드 부분의 상기 블록들에 대해서만 적용하는
    멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하기 위한 방법.
  49. 제46항에서,
    상기 실행 단계는 상기 제2의 프로그램 부분을 실행하는 단계를 더 포함하며 ;
    상기 확인 단계는 상기 검출된 공유 메모리 영역을 접근하는 상기 제2의 프로그램 코드 부분의 한 그룹의 명령들을 확인하는 단계를 포함하며 ; 그리고
    상기 적용 단계는 상기 제2의 프로그램 코드 부분의 상기 그룹의 명령들이 상기 제2의 메모리 일관성 모델을 집행하는(enforce) 방식으로 상기 검출된 공유 메모리 영역을 접근하도록 상기 메모리 일관성 보호를 선택적으로 적용하는 단계를 포함하는
    멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하기 위한 방법.
  50. 제49항에서,
    상기 제2의 프로그램 코드 부분을 복수의 블록들로 분할하는 단계와
    상기 메모리 일관성 보호를 상기 검출된 공유 메모리 영역을 접근하는 명령들을 포함하는 상기 제2의 프로그램 코드 부분의 상기 블록들에 대해서만 선택적으로 적용하는 단계를 더 포함하는
    멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하기 위한 방법.
  51. 제46항에서,
    상기 실행단계는 멀티프로세서 컴퓨팅 시스템의 디폴트 메모리 일관성 모델로서 상기 제1의 메모리 일관성 모델 아래서 상기 제1의 프로그램 코드 부분 및 상기 제2의 프로그램 코드 부분을 실행하는 단계를 포함하고 ;
    상기 검출 단계는 명시적 공유 메모리 영역을 상기 제1의 프로그램 코드 부분 및 상기 제2의 프로그램 코드 부분 모두에 대하여 접근 가능하도록 시작하는(initiate) 요청을 검출하는 단계를 포함하며 ; 그리고
    상기 적용 단계는 상기 명백한 공유 메모리 영역을 접근할 때 상기 다른 제2의 메모리 일관성 모델 아래에서 상기 제1의 프로그램 코드 부분 및 상기 제2의 프로그램 코드 부분의 선택된 부분들만 실행하도록 상기 메모리 일관성 보호를 적용하는 단계를 포함하는
    멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하기 위한 방법.
  52. 제51항에서,
    상기 실행 단계는 비 공유 메모리 영역을 접근할 때 상기 제1 및 제2의 프로그램 코드 부분들을 상기 디폴트 제1 메모리 일관성 모델 하에서 실시하는 단계를 포함하고 ; 그리고
    상기 적용 단계는 상기 명시적 공유 메모리 영역을 접근할 때 상기 제1 및 제2의 프로그램 코드 부분들이 상기 다른 제2의 메모리 일관성 모델 아래에서 실행하도록 상기 메모리 일관성 보호를 적용하는 단계를 포함하는
    멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하기 위한 방법.
  53. 제46항에서,
    상기 실행 단계는 제1의 가상의 주소 공간 영역에 관하여 멀티프로세서 컴퓨팅 시스템의 제1 프로세서상에서 상기 제1의 프로그램 코드 부분을 실행하는 단계와 제2의 가상의 주소 공간 영역에 관하여 멀티프로세서 컴퓨팅 시스템의 제2 프로세서상에서 상기 제2의 프로그램 코드 부분을 실행하는 단계를 포함하되, 상기 제1 및 제2의 가상 주소 공간 영역들은 분리되고(separate) 겹치지 않으며(non-overlapping) ;
    상기 검출 단계는 상기 제2의 가상 주소 공간 영역에는 사상되지 않았지만 상기 제1의 가상 주소공간 영역에는 사상된 메모리 영역에 대하여 상기 제2의 프로그램 코드 부분에 의한 접근 요청을 검출하고 이에 의해서 상기 제2의 프로그램 코드 부분이 공유 메모리 영역을 접근하려고 시도하는 것을 검출하는 단계를 포함 하되 ; 그리고
    상기 방법은 ;
    상기 제1의 가상 주소 공간 영역으로부터 상기 사상된 영역을, 상기 제1 및 제2의 가상 주소 공간 영역들 에 관하여 분리되고 중첩되지 않은, 제3의 가상 주소 공간 영역으로 재사상하는 단계 ; 그리고
    미리 정해진 메모리 정렬 제한들 아래에서 상기 블록을 실행하도록 하는 상기 메모리 일관성 보호를 적용하기 위해 상기 접근 요청을 포함하는 상기 제2의 프로그램 코드 부분에 있는 명령들의 적어도 선택된 블록을 수정하는 단계와 상기 제3의 가상 주소 공간 영역에 사상된 상기 공유 메모리 영역에 접근하기 위해 상기 선택된 블록의 코드를 보내는 단계를 포함하는
    멀티프로세서 컴퓨팅 시스템에서 메모리 일관성을 보호하기 위한 방법.
  54. 컴퓨터 시스템에 의해서 실행되었을 때 컴퓨터 시스템이 제 46항 내지 53항 중 어느 한 항의 방법을 수행하도록 하는 명령들을 기록하고 있는
    컴퓨터 판독 가능 저장 매체.
KR1020097012940A 2006-11-22 2007-11-20 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호 KR101244014B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GBGB0623276.3A GB0623276D0 (en) 2006-11-22 2006-11-22 Memory consistency protection in a multiprocessor computing system
GB0623276.3 2006-11-22
US87983407P 2007-01-11 2007-01-11
US60/879,834 2007-01-11
PCT/GB2007/050700 WO2008062225A1 (en) 2006-11-22 2007-11-20 Memory consistency protection in a multiprocessor computing system

Publications (2)

Publication Number Publication Date
KR20090115118A true KR20090115118A (ko) 2009-11-04
KR101244014B1 KR101244014B1 (ko) 2013-03-25

Family

ID=37636310

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097012940A KR101244014B1 (ko) 2006-11-22 2007-11-20 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호

Country Status (8)

Country Link
US (1) US7895407B2 (ko)
EP (1) EP2097817A1 (ko)
JP (1) JP5583409B2 (ko)
KR (1) KR101244014B1 (ko)
CN (1) CN101542441B (ko)
GB (2) GB0623276D0 (ko)
TW (1) TWI403898B (ko)
WO (1) WO2008062225A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130099837A (ko) * 2012-02-29 2013-09-06 삼성전자주식회사 대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조
KR20160055723A (ko) * 2013-07-31 2016-05-18 휴렛 팩커드 엔터프라이즈 디벨롭먼트 엘피 버저닝된 메모리 구현

Families Citing this family (85)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8695000B1 (en) * 2007-03-16 2014-04-08 The Mathworks, Inc. Data transfer protection in a multi-tasking modeling environment having a protection mechanism selected by user via user interface
US7657695B1 (en) * 2007-05-30 2010-02-02 Paravirtual Corporation Efficient processing of memory accesses to virtual hardware using runtime code patching
US8893126B2 (en) * 2008-02-01 2014-11-18 International Business Machines Corporation Binding a process to a special purpose processing element having characteristics of a processor
GB2457341B (en) * 2008-02-14 2010-07-21 Transitive Ltd Multiprocessor computing system with multi-mode memory consistency protection
US8006055B2 (en) * 2008-03-04 2011-08-23 Microsoft Corporation Fine granularity hierarchiacal memory protection
JP5115332B2 (ja) * 2008-05-22 2013-01-09 富士通株式会社 エミュレーションプログラム、エミュレーション装置およびエミュレーション方法
US8607344B1 (en) * 2008-07-24 2013-12-10 Mcafee, Inc. System, method, and computer program product for initiating a security action at an intermediate layer coupled between a library and an application
GB0813833D0 (en) * 2008-07-29 2008-09-03 Transitive Ltd Apparatus and method for handling page protection faults in a computing system
US9026424B1 (en) * 2008-10-27 2015-05-05 Juniper Networks, Inc. Emulation of multiple instruction sets
US7613850B1 (en) 2008-12-23 2009-11-03 International Business Machines Corporation System and method utilizing programmable ordering relation for direct memory access
WO2010099529A1 (en) * 2009-02-27 2010-09-02 Keicy Chung Central processing unit capable of multi-boot using disjoint memory spaces
US20110066897A1 (en) * 2009-09-11 2011-03-17 William Bumgarner Methods and apparatuses for determining permanent memory growth
US20110119469A1 (en) 2009-11-13 2011-05-19 International Business Machines Corporation Balancing workload in a multiprocessor system responsive to programmable adjustments in a syncronization instruction
US8418156B2 (en) * 2009-12-16 2013-04-09 Intel Corporation Two-stage commit (TSC) region for dynamic binary optimization in X86
KR101490468B1 (ko) * 2010-02-04 2015-02-06 삼성전자 주식회사 데이터 처리 장치 및 방법
EP2581832A4 (en) * 2010-06-08 2013-08-07 Fujitsu Ltd DEVICE, METHOD, AND PROGRAM FOR CONTROLLING ACCESS TO MEMORY, MULTI-HEART PROCESSOR SYSTEM
US8954697B2 (en) * 2010-08-05 2015-02-10 Red Hat, Inc. Access to shared memory segments by multiple application processes
CN102135894B (zh) 2010-10-13 2015-11-25 华为技术有限公司 一种多核在线补丁方法和装置
US10366100B2 (en) 2012-07-26 2019-07-30 Mongodb, Inc. Aggregation framework system architecture and method
US10740353B2 (en) 2010-12-23 2020-08-11 Mongodb, Inc. Systems and methods for managing distributed database deployments
US10346430B2 (en) 2010-12-23 2019-07-09 Mongodb, Inc. System and method for determining consensus within a distributed database
US9881034B2 (en) 2015-12-15 2018-01-30 Mongodb, Inc. Systems and methods for automating management of distributed databases
US10713280B2 (en) 2010-12-23 2020-07-14 Mongodb, Inc. Systems and methods for managing distributed database deployments
US11544288B2 (en) 2010-12-23 2023-01-03 Mongodb, Inc. Systems and methods for managing distributed database deployments
US8996463B2 (en) 2012-07-26 2015-03-31 Mongodb, Inc. Aggregation framework system architecture and method
US10262050B2 (en) 2015-09-25 2019-04-16 Mongodb, Inc. Distributed database systems and methods with pluggable storage engines
US10997211B2 (en) 2010-12-23 2021-05-04 Mongodb, Inc. Systems and methods for database zone sharding and API integration
US9805108B2 (en) 2010-12-23 2017-10-31 Mongodb, Inc. Large distributed database clustering systems and methods
US9740762B2 (en) 2011-04-01 2017-08-22 Mongodb, Inc. System and method for optimizing data migration in a partitioned database
US11615115B2 (en) 2010-12-23 2023-03-28 Mongodb, Inc. Systems and methods for managing distributed database deployments
US10614098B2 (en) 2010-12-23 2020-04-07 Mongodb, Inc. System and method for determining consensus within a distributed database
US10977277B2 (en) 2010-12-23 2021-04-13 Mongodb, Inc. Systems and methods for database zone sharding and API integration
US8572031B2 (en) 2010-12-23 2013-10-29 Mongodb, Inc. Method and apparatus for maintaining replica sets
CN102073533B (zh) * 2011-01-14 2013-06-19 中国人民解放军国防科学技术大学 支持动态二进制翻译的多核体系结构
WO2012101538A1 (en) * 2011-01-26 2012-08-02 International Business Machines Corporation Emulation of strongly ordered memory models
JP5967073B2 (ja) * 2011-02-21 2016-08-10 富士通株式会社 プロセッサ管理方法
US8850417B2 (en) 2011-04-15 2014-09-30 International Business Machines Corporation Method and framework for invisible code rewriting
US9015027B2 (en) 2011-04-21 2015-04-21 International Business Machines Corporation Fast emulation of virtually addressed control flow
WO2012167533A1 (zh) * 2011-10-31 2012-12-13 华为技术有限公司 一种构建内存访问模型的方法及装置
US20140068247A1 (en) * 2011-12-12 2014-03-06 Moose Loop Holdings, LLC Security device access
US8935513B2 (en) * 2012-02-08 2015-01-13 International Business Machines Corporation Processor performance improvement for instruction sequences that include barrier instructions
GB2500707B (en) 2012-03-30 2014-09-17 Cognovo Ltd Multiprocessor system, apparatus and methods
WO2014002162A1 (ja) * 2012-06-25 2014-01-03 富士通株式会社 ストレージ制御装置、情報処理装置、ストレージ制御プログラム、及びストレージ制御方法
US10872095B2 (en) 2012-07-26 2020-12-22 Mongodb, Inc. Aggregation framework system architecture and method
US11403317B2 (en) 2012-07-26 2022-08-02 Mongodb, Inc. Aggregation framework system architecture and method
US11544284B2 (en) 2012-07-26 2023-01-03 Mongodb, Inc. Aggregation framework system architecture and method
US9304924B2 (en) * 2012-08-17 2016-04-05 Futurewei Technologies, Inc. Cache coherent handshake protocol for in-order and out-of-order networks
EP2951705A4 (en) * 2013-01-29 2016-11-02 Hewlett Packard Development Co ASSIGNING PROCESSORS TO MEMORY TOPOGRAPHY CONFIGURATION
US9336413B2 (en) * 2013-11-22 2016-05-10 Oracle International Corporation Method and system for fast permission changes for virtual addresses
US9413765B2 (en) * 2014-03-25 2016-08-09 Intel Corporation Multinode hubs for trusted computing
US20150370707A1 (en) * 2014-06-24 2015-12-24 Qualcomm Incorporated Disunited shared-information and private-information caches
GB2532777B (en) 2014-11-28 2021-07-07 Advanced Risc Mach Ltd System error handling in a data processing apparatus
US10055209B2 (en) * 2015-01-12 2018-08-21 Red Hat, Inc. Resource closing
US9886210B2 (en) * 2015-06-09 2018-02-06 Ultrata, Llc Infinite memory fabric hardware implementation with router
US10713275B2 (en) 2015-07-02 2020-07-14 Mongodb, Inc. System and method for augmenting consensus election in a distributed database
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10846411B2 (en) 2015-09-25 2020-11-24 Mongodb, Inc. Distributed database systems and methods with encrypted storage engines
US10673623B2 (en) 2015-09-25 2020-06-02 Mongodb, Inc. Systems and methods for hierarchical key management in encrypted distributed databases
US10423626B2 (en) 2015-09-25 2019-09-24 Mongodb, Inc. Systems and methods for data conversion and comparison
US10394822B2 (en) 2015-09-25 2019-08-27 Mongodb, Inc. Systems and methods for data conversion and comparison
US9514083B1 (en) * 2015-12-07 2016-12-06 International Business Machines Corporation Topology specific replicated bus unit addressing in a data processing system
WO2017155523A1 (en) * 2016-03-09 2017-09-14 Hewlett Packard Enterprise Development Lp Server virtual address space
US10671496B2 (en) 2016-05-31 2020-06-02 Mongodb, Inc. Method and apparatus for reading and writing committed data
US10776220B2 (en) 2016-06-27 2020-09-15 Mongodb, Inc. Systems and methods for monitoring distributed database deployments
US11442760B2 (en) * 2016-07-01 2022-09-13 Intel Corporation Aperture access processors, methods, systems, and instructions
US10380342B2 (en) * 2016-07-29 2019-08-13 Qualcomm Incorporated Kernel-based detection of target application functionality using virtual address mapping
US9852202B1 (en) * 2016-09-23 2017-12-26 International Business Machines Corporation Bandwidth-reduced coherency communication
US10235202B2 (en) 2016-11-08 2019-03-19 International Business Machines Corporation Thread interrupt offload re-prioritization
US10423446B2 (en) 2016-11-28 2019-09-24 Arm Limited Data processing
US10552212B2 (en) * 2016-11-28 2020-02-04 Arm Limited Data processing
US10671426B2 (en) 2016-11-28 2020-06-02 Arm Limited Data processing
US10262144B2 (en) 2016-12-15 2019-04-16 International Business Machines Corporation Verifying proper operation of the instruction execution protection architecture
US10474469B2 (en) * 2017-04-12 2019-11-12 Arm Limited Apparatus and method for determining a recovery point from which to resume instruction execution following handling of an unexpected change in instruction flow
US10866868B2 (en) 2017-06-20 2020-12-15 Mongodb, Inc. Systems and methods for optimization of database operations
US11436143B2 (en) * 2017-12-22 2022-09-06 Alibaba Group Holding Limited Unified memory organization for neural network processors
US10592431B2 (en) * 2018-08-13 2020-03-17 Hewlett Packard Enterprise Development Lp Independent shared and process virtual address translations
WO2020114937A1 (en) * 2018-12-07 2020-06-11 Koninklijke Philips N.V. A computing device with increased resistance against address probing
US11734192B2 (en) 2018-12-10 2023-08-22 International Business Machines Corporation Identifying location of data granules in global virtual address space
US11016908B2 (en) * 2018-12-11 2021-05-25 International Business Machines Corporation Distributed directory of named data elements in coordination namespace
US10877788B2 (en) * 2019-03-12 2020-12-29 Intel Corporation Processing vectorized guest physical address translation instructions
US11307981B1 (en) * 2020-05-10 2022-04-19 Juniper Networks, Inc Systems and methods for sharing memory pointers across multiple processes
CN114402304A (zh) * 2020-08-19 2022-04-26 谷歌有限责任公司 存储器共享
TWI755112B (zh) * 2020-10-23 2022-02-11 財團法人工業技術研究院 電腦程式碼之優化方法、優化系統及應用其之電子裝置
CN113111391B (zh) * 2021-04-09 2022-07-08 支付宝(杭州)信息技术有限公司 用于内存完整性保护的方法和内存控制器

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5692153A (en) * 1995-03-16 1997-11-25 International Business Machines Corporation Method and system for verifying execution order within a multiprocessor data processing system
US6263414B1 (en) * 1998-07-17 2001-07-17 Technion Research And Development Foundation, Ltd. Memory for accomplishing lowered granularity of a distributed shared memory
US6591355B2 (en) * 1998-09-28 2003-07-08 Technion Research And Development Foundation Ltd. Distributed shared memory system with variable granularity
EP1380946B1 (en) 1998-10-10 2010-02-10 International Business Machines Corporation Program code conversion with reduced translation
US6748493B1 (en) * 1998-11-30 2004-06-08 International Business Machines Corporation Method and apparatus for managing memory operations in a data processing system using a store buffer
TW548547B (en) * 1999-06-18 2003-08-21 Ibm Method and system for maintaining cache coherency for write-through store operations in a multiprocessor system
US6496917B1 (en) * 2000-02-07 2002-12-17 Sun Microsystems, Inc. Method to reduce memory latencies by performing two levels of speculation
US6725341B1 (en) * 2000-06-28 2004-04-20 Intel Corporation Cache line pre-load and pre-own based on cache coherence speculation
US7398376B2 (en) * 2001-03-23 2008-07-08 International Business Machines Corporation Instructions for ordering execution in pipelined processes
AU2003249977A1 (en) 2002-07-05 2004-01-23 Axxima Pharmaceuticals Ag Imidazole compounds for the treatment of hepatitis c virus infections
US9043194B2 (en) * 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
US6892286B2 (en) * 2002-09-30 2005-05-10 Sun Microsystems, Inc. Shared memory multiprocessor memory model verification system and method
US6892283B2 (en) * 2002-12-05 2005-05-10 International Business Machines Corporation High speed memory cloner with extended cache coherency protocols and responses
US7536682B2 (en) * 2003-04-22 2009-05-19 International Business Machines Corporation Method and apparatus for performing interpreter optimizations during program code conversion
GB2401217B (en) 2003-05-02 2005-11-09 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
GB0315844D0 (en) 2003-07-04 2003-08-13 Transitive Ltd Method and apparatus for performing adjustable precision exception handling
GB0316531D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US7434209B2 (en) 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
US7818724B2 (en) * 2005-02-08 2010-10-19 Sony Computer Entertainment Inc. Methods and apparatus for instruction set emulation
WO2006103395A1 (en) 2005-03-30 2006-10-05 Transitive Limited Preparing instruction groups in a processor having multiple issue ports

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130099837A (ko) * 2012-02-29 2013-09-06 삼성전자주식회사 대칭 멀티스레딩 환경의 공유 데이터 동기화를 위한 결합 락 할당 및 참조
KR20160055723A (ko) * 2013-07-31 2016-05-18 휴렛 팩커드 엔터프라이즈 디벨롭먼트 엘피 버저닝된 메모리 구현

Also Published As

Publication number Publication date
WO2008062225A1 (en) 2008-05-29
TWI403898B (zh) 2013-08-01
TW200839513A (en) 2008-10-01
JP5583409B2 (ja) 2014-09-03
GB2444148B (en) 2009-03-04
CN101542441A (zh) 2009-09-23
GB0722686D0 (en) 2007-12-27
JP2010510599A (ja) 2010-04-02
GB2444148A (en) 2008-05-28
KR101244014B1 (ko) 2013-03-25
US7895407B2 (en) 2011-02-22
EP2097817A1 (en) 2009-09-09
US20080140971A1 (en) 2008-06-12
GB0623276D0 (en) 2007-01-03
CN101542441B (zh) 2012-03-07

Similar Documents

Publication Publication Date Title
KR101244014B1 (ko) 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호
US8230181B2 (en) Multiprocessor computing system with multi-mode memory consistency protection
US11163702B2 (en) Apparatus and method for handling page protection faults in a computing system
Marathe et al. Persistent Memcached: Bringing Legacy Code to {Byte-Addressable} Persistent Memory
US7222221B1 (en) Maintaining coherency of derived data in a computer system
US8296551B2 (en) Binary translator with precise exception synchronization mechanism
US9189620B2 (en) Protecting a software component using a transition point wrapper
JP5137966B2 (ja) マルチプロセッサ・コンピュータ上で実行するプロセスにより生成されるスレッドによってメモリへのアクセスを制御する方法、コンピュータ・プログラムおよびシステム
US20060294432A1 (en) Debugging using virtual watchpoints
US20070294675A1 (en) Method and apparatus for handling exceptions during binding to native code
US20060277371A1 (en) System and method to instrument references to shared memory
US20060294433A1 (en) Debugging using watchpoints
Jung et al. Overlapping host-to-device copy and computation using hidden unified memory
CN109857522B (zh) 一种面向kvm的虚拟化层故障注入方法
US10795813B2 (en) Implementing per-processor memory areas with non-preemptible operations using virtual aliases
Aksenov et al. Execution of nvram programs with persistent stack
CN118069403A (zh) 一种异常指令的处理方法
Swiech et al. VMM emulation of Intel hardware transactional memory
Olszewski Aikido
Nishiyama Improved sandboxing for java virtual machine using hybrid execution model

Legal Events

Date Code Title Description
N231 Notification of change of applicant
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee