KR20130018108A - 메모리 페이지-폴트 핸들링 메카니즘을 통한, 라이브러리 코드에서의 레이스 콘디션의 방지 방법 및 시스템 - Google Patents

메모리 페이지-폴트 핸들링 메카니즘을 통한, 라이브러리 코드에서의 레이스 콘디션의 방지 방법 및 시스템 Download PDF

Info

Publication number
KR20130018108A
KR20130018108A KR1020120057671A KR20120057671A KR20130018108A KR 20130018108 A KR20130018108 A KR 20130018108A KR 1020120057671 A KR1020120057671 A KR 1020120057671A KR 20120057671 A KR20120057671 A KR 20120057671A KR 20130018108 A KR20130018108 A KR 20130018108A
Authority
KR
South Korea
Prior art keywords
page
data
shared
complex
access
Prior art date
Application number
KR1020120057671A
Other languages
English (en)
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 KR20130018108A publication Critical patent/KR20130018108A/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/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/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

멀티-코어 프로세싱 환경에서 공유 데이터의 보호가 개시된다. 공유 메모리에 대한 액세스를 동기화하기 위하여, 페이지-폴트 핸들링 메카니즘이 채택된다. 일실시예로, 잠재적으로 공유된 데이터에 대한 액세스를 동기화하는 예와, 공유 데이터가 불투명하고 그래서 잘 정의되지 않은 구조를 갖는 예를 개시한다.

Description

메모리 페이지-폴트 핸들링 메카니즘을 통한, 라이브러리 코드에서의 레이스 콘디션의 방지 방법 및 시스템 {Prevention of race conditions in library code through memory page-fault handling mechanisms}
멀티코어 프로세서 환경에서 공유 데이터(shared data)에 대한 동기화 액세스(synchronizing access)에 관한 것으로, 보다 상세하게는 멀티코어 프로세서 환경에서 단일-쓰레디드(즉, 유니프로세서) 레가시(lagacy) 코드의 사용에 관한 것이다.
본 발명은 2011년 8월 12일 미국특허로 출원된 미국 가출원 번호 61/523,231호의 우선권 주장 출원이다.
멀티코어(multicore) 및 매니코어(manycore) 프로세서(Chip Multiprocessors - CMP 로도 알려져 있음)에서 실행되도록 디자인된 소프트웨어는 동시실행(concurrent execution)의 존재(presence)하에서의 정확성(correctness)을 위해 명백히 구조화되어야 한다. 오늘날 대부분의 멀티코어 프로세서는 코히어런트 공유 메모리(coherent shared memory)(Symmetric Multi-Processing, SMP라고도 알려져 있음)를 지원하여, 다중 쓰레드 실행(multiple thread of execution), (잠재적으로 독립된 프로세서 패키지상에서) 독립된 코어에서의 동작(running on separate cores)을 허용하며, 동일한 물리적 메모리 공간을 액세스할 수 있도록 한다. 코히어런시(coherency)는 메모리의 일관된 뷰(consistent view)를 의미하는데, 모든 코어에서 관찰될 수 있고, 전형적으로 캐쉬 레벨에서 하드웨어 코히어런시 프로토콜을 통해 달성될 수 있다(예를 들어, Modified Exclusive Shared Invalid, MESI).
SMP 환경 내에서 정확성(correctness)의 중요한 요소는, 데이터 기록(write)시에 atomicity를 보장하기 위해 데이터에 대한 액세스가 직렬화되도록 보장하는 것이다. 예를 들어, 쓰레드 A(코어 0에서 동작하는)가 64비트 정수(예를 들어, 변수 v)를 메모리(32비트 머신)에 기록한다면, 목적을 이루기 위해서는 2개의 메모리 오퍼레이션/트랙잭션(operation/transaction)이 필요하다. 정확한 동기(synchronization)가 되지 않으면, 쓰레드 B는 쓰레드 A가 두번째 절반을 기록하는 것을 완료하기 이전에 첫번째 절반을 메모리 위치로부터 읽어올 수도 있어, 이로 인해 일치되지 않은(inconsistent) 그리고 부정확한 결과를 가져올 수 있다. 이러한 문제를 피하기 위해, 변수 'v'에 대한 읽고 쓰기 액세스는, 특정 프로세서에서 구현될 수 있는 lock의 형태 또는 mutual exclusion 메카니즘(예를 들면, spinlock, mutex, semaphore)을 통해 동기화되어야 한다.
그러나, 멀티코어 프로세서의 비교적 이른 도래로 인해, 레가시 라이브러리 코드(legacy library code)는 대개 "thread safe"하지 않다. 이는 레가시 라이브러리 코드가 종종 원래는 유니프로세서(uniprocessor) 환경에서만 실행되도록 디자인되었기 때문이다. 멀티코어 프로세서 환경에서 유니프로세서 코어를 재사용하는 몇몇 가능한 해결책이 있다. 이는 1) 소스 코드가 가용될 수 없는 time consuming 프로세스를 필요로 한다는 단점이 있는, 재기록 레가시 코드(rewriting lagacy code)와, 2) 모든 콜(call)의 실행을 직렬화하기 위해 모든 레가시/라이브러리 콜 근처에 lock을 두는 것을 포함할 수 있는데, 이러한 것들은 레이스 콘디션(race condition)을 일으킬 수 없다.
멀티코어 프로세싱 환경에서 일반적인 lock의 사용이나 명백한 배치없이, 멀티플 콘커런트 쓰레드에서 컴플렉스 데이터를 안전하게 공유하기 위한 장치, 시스템, 방법 및 컴퓨터 프로그램 매체가 제공된다. 또한 일실시예에서 레가시 라이브러리에서 공유된 데이터에 대한 동기화된 액세스를 개시한다.
일양상에 따라, SMP 환경의 멀티플 콘커런트 쓰레드(multiple concurrent thread)에서의 공유 데이터에 대한 액세스를 안전하게 매니지하기 위한 페이지-폴트(page-fault) 메카니즘의 사용이 제공된다. 일양상에 따라, 레가시 라이브러리에서 공유 데이터에 대한 동기화된 액세스가 제공되는데, 메모리의 영역에서 저장되고 다루어지는 데이터는 비록 그 영역의 크기가 알려져 있다고 하더라도, 알려지지 않은(불투명한(opaque)) 구조를 갖는다.
시스템 메모리 페이지-폴트 핸들링 메카니즘은, 페이지 레벨에서 공유(힙, heap) 데이터에 대한 액세스를 투명하게 동기화하기 위해 사용된다. 일실시예에서, 시스템 페이지-폴트 핸들러는 레가시 라이브러리에서 모든 힙(heap) 그리고 글로벌 데이터에 대한 직렬화된 액세스만을 허용한다. 잠재적인 공유 데이터(potentially-shared data)를 액세스하려고 시도하는 독립된 코어에서 동작하는 쓰레드는, 비록 그 소유권이 다른 쓰레드에 의해 뺏긴 동안은, 소유권을 가진 쓰레드가 콘트롤을 포기할 때까지 페이지-폴트 핸들러내에서 lock을 기다릴 것이다. 그리고 일단 lock이 포기되면, 공유 메모리에 대한 액세스를 기다리던 쓰레드들 중 하나가 릴리즈된다.
공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 투명하게 동기화할 수 있다.
도 1A는 일실시예에 따른 레가시 라이브러리 코드를 위한 레이스 콘디션을 방지하는 양상을 설명하는 도면이다.
도 1B는 일실시예에 따른 페이지-폴트 핸들링 메카니즘을 사용한 멀티코어 프로세싱 환경에서 공유 메모리 프로세스의 동기를 설명하기 위한 상위 레벨의 기능 블록도이다.
도 2는 일실시예에 따른 페이지-기반 레벨에서 locking을 사용한 공유 메모리 프로세스의 동기화 양상을 설명하는 도면이다.
도 3은 동일한 프로세스의 쓰레드가 페이지 디렉토리와 페이지 테이블을 공유하는, 일반적인 페이지 디렉토리와 페이지 테이블 구조를 나타낸 도면이다.
도 4는 일실시예에 따라 페이지-폴트 핸들링을 통한 동기화를 구현하기 위해 페이지 디렉토리와 페이지 테이블을 복제(replication)하는 것을 설명하는 도면이다.
도 5는 도 4에서 구현된 공유 컴플렉스 데이터(shared complex data)를 위한 가상 메모리 양상을 설명하는 도면이다.
도 6은 일실시예에 따라 TLB 캐쉬 특징에 기초한 페이지-폴트 핸들링을 통한 동기화 구현을 설명하는 도면이다.
이하, 첨부된 도면을 참조하여 본 발명의 실시를 위한 구체적인 예를 상세히 설명한다.
도 1A를 참조하면, 일양상에서 힙 데이터(heap data)에 대한 직렬화된 액세스에 의해, 레가시 라이브러리 프로그램 코드(유니프로세서에서 실행될 예정)는 멀티코어 프로세서로 안전하게 만들어질 수 있음을 알 수 있다. 레가시 코드 라이브러리에서 레이스 콘디션은 발생되더라도 전형적으로 힙 데이터와 글로벌 데이터(data & bss section)에서만 발생될 수 있다. 힙 액세스는 malloc 콜 또는 이와 유사한 타입의 콜에 의존적이다. 글로벌 데이터의 주소는 링커(linker) 또는 로더(loader)를 통해 얻어질 수 있다. 힙 데이터에 대한 직렬화된 액세스에 의해, 레가시 프로그램은, 멀티코어 프로세서에서 실행될 수 있도록 안전하게 만들어질 수 있다.
일실시예에서 OS는 잠재적인 공유 데이터(Potentially Shared Data, PSD) 영역을 정의하여야 한다. 글로벌 데이터를 위해, 로더(loader)는 라이브러리를 로딩할때 'data and bss section' 영역을 찾는다. 힙 데이터를 위해, 라이브러리에 있는 원래으 'malloc' 콜은 특별화된 형태의 'malloc'으로 리다이렉트되는데, 본 발명에서는 이를 'shmalloc'이라는 용어를 사용한다. 'shmalloc'은 OS에 의해 정의된 특별한 공유 메모리 영역으로부터 메모리를 할당할 수 있다. 공유 메모리와 연관된 페이지-폴트는, 폴팅 주소(faulting address)를 검사함으로써, OS 페이지-폴트 핸들러와 구별된다.
도 1B를 참조하면, 공유 메모리 프로세스(110)에서 공유 데이터(PSD)를 위한 동기화 메카니즘(105)이, 페이지-폴트 핸들링 메카니즘에 의해 수행된다. 멀티코어 프로세서 환경에서 다수의 프로세서 코어들(120)이 존재하고, 각각의 코어는 공유 메모리 프로세스에서 공유 데이터(130)에 대한 액세스를 필요로 하는 프로세스의 쓰레드를 실행할 수 있다. 페이지-폴트 핸들링 메카니즘은 오퍼레이팅 시스템(OS)과, 메인 메모리에 저장된 데이터 구조를 통해 동작할 수 있다.
도 2는 일실시예에 따른 페이지-기반 레벨에서 locking을 사용한 공유 메모리 프로세스의 동기화 양상을 설명하는 도면이다.
도 2를 참조하면, 공유 데이터(130)의 locking은, 페이지 레벨에서 페이지-폴트 핸들러(210)에 의해 수행된다. 공유 데이터 영역은 하나 또는 그 이상의 페이지에 걸쳐 데이터 디펜던시(dependency)를 갖는 메모리 영역으로 정의될 수 있다. 만일 데이터 디펜던시가 존재하지 않으면, 공유 영역은 독립된/개별적인(separate/indivisual) 영역으로 할당될 수 있다.
일실시예에서, PSD를 다루는데 있어 문제가 되는, 일반적인 data-specific lock에서의 요구사항을 없앨 수 있다. 페이지-기반의 접근방법이 사용되는데, 여기에서는 메모리 페이지-폴트 핸들링 메카니즘(이는 종래의 프로세서와 오퍼레이티이 시스템의 부분일 수 있음)이 적용되어, 페이지 레벨에서 공유 데이터에 대한 액세스가 투명하게 동기화되도록 한다. 잠재적인 공유 데이터(Potentially Shared Data, PSD)에 대한 액세스는, 액세스를 직렬화하기 위해 페이지-폴트 메카니즘을 사용함으로써 동기화된다. 결과적으로, 페이지-기반의 접근방법의 응용으로, 멀티플 프로세서에 걸쳐 공유 메모리를 안전하게 공유하는데 사용될 수 있는데, 이 경우는, 1) 공유 데이터의 구조가 알려지지 않은 경우, 또는 2) 데이터를 액세스하는 코드가 직접적으로 수정될 수 없는 경우(예를 들어 reusable 라이브러리)가 있다.
일실시예에서 시스템 페이지-폴트 핸들러는, PSD를 위한 메모리 저장을 구성하는 메모리 페이지에 대한 직렬화된 액세스만을 허용한다. PSD를 액세스하려고 시도하는 독립된 코어에서 실행되는 쓰레드는, 그 소유권이 타 쓰레드에 의해 이미 뺏긴 동안에는, 소유권을 가진 쓰레드가 콘트롤을 포기할 때까지 페이지-폴트 핸들러내에서 lock을 기다릴 것이다. 그리고 일단 콘트롤이 포기되면, 공유 메모리에 대한 액세스를 기다리던 쓰레드가 릴리즈된다.
일예로, 프로세서 H/W 페이지-폴트(PF) 메카니즘은, Intel x86, ARM 에서 발견되는 것들과 같인 general purpose processor와 컴플렉스 공유 데이터에 대한 직렬화된 액세스를 스케쥴하기 위해 채택된 다른 종류의 general purpose processor에 기초할 수 있다. 공유 데이터를 홀딩하고 있는 메모리내에서의 메모리 페이지에 대해 쓰레드가 이미 기록을 하고 있는 동안에는, 모든 다른 쓰레드는 lock을 유지하는데, 이에 대해 "PSD lock"이라는 용어를 사용한다. 이는, 동일한 공유 메모리 영역에 속한 모든 페이지에 대한 논리적인(logical) 록(lock) 이다.
일양상에서, 쓰레드가 PSD lock의 소유권을 갖고 있으면 모든 다른 쓰레드는, 시도한 액세스와 PSD를 구성하는 페이지에 대해 페이지-폴트가 강제될 수 있다. 후술하는 바와 같이, 스케쥴링은 서로 다른 방법으로 구현될 수 있다. 일예로, 페이지 디렉토리와 페이지 테이블을 복제할 수 있다. 다른 어떤 프리젠트 비트(present bit)는 개별적인 쓰레드가 페이지-폴트가 강제되도록 하는 것을 나타낼 수 있다. 여기서 이 존재 비트는 인텔 프로세서들의 특징이다. 다른 대안의 예로, 소프트웨어-매지니드 트랜스레이션 룩어사이드 버퍼(software-managed Translation Lookaside Buffer, TLB)를 지원하고, 개별 TLB 엔트리를 명백하게 로드하는 능력을 위해 프로세서 하드웨어가 사용될 수 있다. 이 실시예에서, 일관되지 않는 TLB 엔트리를 owning 코어로 로드하기 위해 codified 하드웨어가 사용된다.(이렇게 하여 소유하고 있는 페이지에 대한 액세스의 owning thread faulting을 피할 수 있다)
쓰레드가 PSD 영역에 대한 액세스를 명백하게 포기할 필요가 있다. 일실시예에서, 명백한 포기(yield) 오퍼레이션에서 "hook"을 위한 라이브러리 function 콜 리턴 포인트를 사용할 수 있다.
일실시예
일실시예는 페이지 테이블 엔트리의 복제(duplication)에 기초한다. 도 3을 참조하면, 일반적으로, 멀티코어 프로세싱 환경에서 시스템 프로세스는 페이지 디렉토리(PD)(305)와 페이지 테이블(PT)(310)을 공유한다. 각각의 코어(120)는 디렉토리/테이블 룩업을 캐쉬하는 TLB-cache을 유지한다. 예를 들어, 인텔 ia32x86 프로세서 구조는 페이지 디렉토리와 페이지 테이블으 2레벨 스킴을 사용한다. PD 베이스는 CR3 레지스터를 통해 위치한다. 다른 프로세스가 콘텐스트 스위치할 때, CR3 레지스터의 리-로딩(re-loading)은 서로 다른 페이지 테이블 셋이 사용되도록 보장한다. 페이지 테이블의 목적은 가상 어드레스를 물리적 어드레스로 결정하기 위한 것이다. 이러한 변환(translation)은 전형적으로 하드웨어(인텔 ia32 구조와 같이)에서 이루어지며, 그러나 페이지 디렉토리와 페이지 테이블 그 자체는, 오퍼레이팅 시스템(OS)에 의해 관리되는 메인 메모리에 위치한다. 이러한 변환은 하드웨어 트랜스레이션 룩-어사이드 버퍼(TLBs)에 의해 캐쉬된다. 많은 프로세서에서, TLB의 사용은 명백하다; 예를 들어, OS는 오직 캐쉬로부터 엔트리를 플러싱(flushing)할 책임만 있는데, 이는 매핑이 취소되어나 무효화될 때 필요하다.
도 4를 참조하면 일실시예는, 페이지 디렉토리(405-S)를 복제하는 프로세싱의 사용과, 공유 데이터(S)를 위한 페이지 테이블(415-S)의 복제의 사용을 수정하는 것에 기초한다. 추가적으로, 공유되지 않은(NS) 데이터를 위해, 비-복제(non-replicated) 페이지 디렉토리(405-NS)와 페이지 테이블(410-NS)이 있다. 페이지 디렉토리는, per-thread 베이시스와, 항상 복제되는 공유 데이터를 포함하는 페이지를 가리키는 엔트리를 갖는 페이지 테이블에 기초하여 복제될 수 있다. 이와 같이 공유 데이터(예, PSD)를 포함하는 페이지를 가리키는 모든 페이지 테이블 엔트리는 복제되고, 각각의 쓰레드를 위해 분리될 수 있다. 이러한 복제는 페이지 디렉토리와 그 연관된 페이지 테이블의 카피에 의해 가능하게 된다. PSD를 포함하는 페이지를 가리키는 어떤 엔트리도 갖고 있지 않은 페이지 테이블은, 멀티플 디렉토리에 걸쳐 재사용될 수 있다(즉, 독립된 페이지 디렉토리가 동일한 페이지 테이블을 가리킴).
복제(replication) 및 분리(separation) 접근방법은 쓰레드로 하여금 동일한 메모리 프로세스내에서 동일한 물리적 메모리 영역에 대한 서로 다른 테이블 엔트리를 갖고, 이에 따라 서로 다른 페이지 테이블 엔트리(PTE) 상태 비트(status bit)(예를 들어, reserved, present)를 갖도록 허용한다. PTE 상태 비트는 쓰레드로 하여금 메모리를 액세스하여 페이지-폴트 PSD를 트리거하여 페이지-폴트 핸들러로 잡혀 들어갈 수 있도록 강제하는데 사용될 수 있다. 다음의 하드웨어 구조에 따라서, P(present) 비트를 클리어하거나 R(reserved) 비트를 셋팅하는 것은 각각의 메모리에 대한 액세스에서 페이지-폴트가 생성되는 것을 보장할 것이다. 여기서 페이지-폴트 트리거링 PFT 상태 비트의 셋 또는 클리어를 위해 사용되는 PTE 비트를 서술한다.
전술한 바와 같이, 페이지 디렉토리와 페이지 테이블 둘다 공유 데이터를 위해 복제될 수 있다. 페이지 디렉토리는 쓰레드가 생성되는 동안 오퍼레이팅 시스템 커널내에서 복제될 수 있다. 복제 프로세스는, 그 프로세스에 속하는 어떤 다른 쓰레드에서부터, 현존하는 페이지 디렉토리를 카피한다. 모든 페이지 디렉토리 엔트리는 PTE(페이지 테이블 엔트리)를 포함하는 페이지 테이블을 가리키는 것으로 마크된 것들을 제외하고 카피된다.(즉, 엔트리는 동일한 페이지 테이블 타겟을 사용하여 복제된다).
인텔 ia32로 구현되는 예에서, 한가지 옵션은 "ignored bits" 중 하나를 사용하는 것인데, 예를 들어 PDE(페이지 디렉토리 엔트리)에서 비트 9는 타겟 페이지 테이블( - 이하에서 이를 "PSD page, PSDP-비트"라고 한다.)에서 컴플렉스 공유 비트의 presence를 나타낸다. PSDP-비트는 PTE가 공유 데이터를 위해 생성될 때 셋 된다. 복제 프로세스동안 공유라고 마크된(대응 PDE에서의 PSDP-비트를 통해) 어떤 페이지 테이블도, 페이지 테이블의 분명한(전체) 카피가 메모리에서 이루어지도록 요구할 수 있다.
일실시예에서, 비-공유(non-shared) 데이터로부터 컴플렉스 공유 데이터를 분리하기 위해 가상 메모리를 구성한다. 다시 말하면, 페이지 테이블은 공유된 또는 공유되지 않은, 그러나 둘다는 아닌 페이지들을 포함할 것이다.
도 5를 참조하면, 효율을 위해 메모리 할당기는, 동일한 페이지 테이블로의 like-page의 패킹을 보장하기 위해, 가상 메모리(505)의 특정 영역으로부터 할당할 수 있다. 비록 동일한 페이지에서 PSD와 non-PSD 페이지의 혼합이 실행가능하다고 하더라도, 이는 이 혼합을 관리하기 위해 필요한 추가적인 오버헤드를 야기할 수 있다.
도 6을 참조하면, 또 다른 대안은 TLB 캐쉬 엔트리(610)에 기초한 페이지-폴팅을 강요하기 위해 모순된(inconsistent) TLB 특성(feature)을 수정하는 것에 기초하고, 이와 같이 하여 공유 데이터의 동기화를 달성한다. 많은 프로세서들은 하드웨어가 아닌 소프트웨어에서 시스템의 TLB 캐슁을 구현한다. soft-TLB 프로세서의 예로, MIPS, Sun Microsystems UltraSPARC, Intel Itanium, IBM PowerPC 600 시리즈, Freescale Semiconductor MPC745 등의 다양한 형태(incarnation)를 포함한다. 이러한 프로세서는 엔트리를 TLB 캐쉬(예를 들어, tlbli)로 분명하게 로드하기 위해 callable instruction을 제공한다.
일실시예에서, 소유권을 가진 쓰레드(owning thread)는 모순된(insconsistent) 로컬 TLB 캐쉬 엔트리(610)를 사용하여 페이지를 읽고/쓰기를 한다. 엔트리는 메인 메모리(605)에서 페이지 테이블 엔트리의 스테이트와 매치되지 않는다는 점에서 모순된다(inconsistent). 이와 같이, 다른(또는 non-owning) 쓰레드는, 동일한 페이지를 액세스하려고 시도할 때 페이지-폴트를 할 것이고, 이와 같이, 전술한 실시예에서 기술된 바와 같이 페이지 테이블 디렉토리(615), PTE(620), PFT-비트(622)를 사용하여, 페이지-폴트 핸들러에서 동기화될 수 있다. 페이지를 소유하고 있는 동안, 소유하고 있는 쓰레드는 TLB 엔트리를 사용하여 페이지를 액세스할 수 있는 반면, 메인 메모리 페이지 테이블 엔트리(620)는 not-present 로 세팅될 수 있다. 모순된(inconsistent) TLB 엔트리의 부작용은, 소유하고 있는 쓰레드가 배치(batch)에서 각각 읽고/쓰기를 위해 페이지-폴트를 하지 않을 수 있다는 것이다. 소프트웨어로 관리되는 TLB 역량(capability)은 엔트리를 TLB 캐쉬로 직접 업로드하는 솔루션을 허용한다는 것이고, 이렇게 하여 이러한 모순(inconsistency)을 구현하는 것을 달성할 수 있다. 소유권이 포기되었을 때, 시스템은 각각의 PSD에 대한 로컬 TLB 엔트리가 또한 클리어될 수 있도록 보장하여야 한다.
한편, 본 발명의 실시 예들은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다.
컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현하는 것을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 그리고 본 발명을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 발명이 속하는 기술 분야의 프로그래머들에 의하여 용이하게 추론될 수 있다.
나아가 전술한 실시 예들은 본 발명을 예시적으로 설명하기 위한 것으로 본 발명의 권리범위가 특정 실시 예에 한정되지 아니할 것이다.

Claims (20)

  1. 멀티코어 프로세서의 페이지-폴트 핸들링 메카니즘을 통한 페이지-기반의 록킹(locking)을 사용하여 공유 데이터에 대한 액세스를 직렬화하는 단계를 포함하며,
    쓰레드가 공유 데이터의 영역에 대한 소유권을 넘겨 받으면, 모든 다른 쓰레드는, 페이지-폴트 핸들러를 통해, 공유 영역을 구성하는 페이지에 대한 액세스의 동기화가 강제되는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  2. 제1항에 있어서,
    상기 록킹(locking)은 spin locking이고, 상기 방법은,
    제1쓰레드가 상기 공유 데이터 영역에 속한 메모리 페이지에 기록중이면, 상기 영역에 특정된(dedicated) 록(lock)에서 모든 다른 쓰레드를 홀딩하는 단계를 더 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  3. 제1항에 있어서,
    각 프로세서 코어에 대한 페이지 테이블 엔트리(PTEs)를 복제하고, 각각의 쓰레드에 대한 서로 다른 상태 비트(status bit)를 제시하는(presenting) 단계를 더 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  4. 제1항에 있어서,
    페이지-폴트를 강제하는 것은 모순된(inconsistent) TLB 엔트리를, 소유하고 있는 코어(owning core)로 로딩하는 것을 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  5. 제1항에 있어서,
    기록시에, 각각의 라이브러리 내에서 존재하는 function이 있고, 기록에 대한 배치작업(batch)이 완료되었을 때, 소유하고 있는 쓰레드(owning thread)는 페이지에 대한 소유권을 포기하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  6. 제5항에 있어서,
    프로그램 컴파일러는 배치 사이즈를 결정하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  7. 제1항에 있어서,
    읽기 소유권(read ownership)은, 모든 읽기 쓰레드가 종료되었을 때 페이지가 포기되는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  8. 제1항에 있어서,
    데드락(deadlock)을 방지하기 위해, 쓰레드는 한번에 한 페이지만을 홀드할 수 있고, 쓰레드가 페이지 경계(boundary)를 가로질러 이동하였을 때, 상기 록(lock)이 해제되는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  9. 제1항에 있어서,
    멀티플 페이지가 컴플렉스 데이터를 위해 공유 메모리로 지정되는 단계를 더 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  10. 제1항에 있어서,
    상기 컴플렉스 데이터는 확인될 수 없는 데이터 구조를 갖는 덕분에 불투명한(opaque) 데이터를 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터에 대한 액세스를 동기화하는 방법.
  11. 다수의 프로세서 코어를 갖는 멀티코어 프로세서; 및
    페이지-폴트 핸들러를 통해, 페이지 레벨에서 공유 데이터에 대한 액세스를 투명하게 동기화하도록 구성된 페이지-폴트 핸들러를 포함하며,
    상기 페이지-폴트 핸들러는 페이지-폴트를 강제하여, 공유 데이터의 주어진 페이지에 대해 어떤 특정 시간에 오직 하나의 쓰레드가 기록 액세스를 할 수 있도록 강제하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  12. 제11항에 있어서,
    상기 페이지-폴트 핸들러는, 각각의 프로세서 코어를 위해 복제된 페이지 테이블 디렉토리 테이블을 포함하고, 공유 데이터를 위해 복제된 페이지 테이블을 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  13. 제12항에 있어서,
    present bit는 쓰레드에 의한 액세스를 콘트롤하기 위해 기록되는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  14. 제11항에 있어서,
    페이지-폴트를 강제하는 것은 모순된(inconsistent) TLB 엔트리를, 소유하고 있는 코어(owning core)로 로딩하는 것을 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  15. 제11항에 있어서,
    기록시에, 기록에 대한 배치작업(batch)이 완료되었을 때, 소유하고 있는 쓰레드(owning thread)는 페이지에 대한 소유권을 포기하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  16. 제15항에 있어서,
    프로그램 컴파일러는 배치 사이즈를 결정하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  17. 제11항에 있어서,
    읽기 소유권(read ownership)은, 모든 읽기 쓰레드가 종료되었을 때 페이지가 포기되는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  18. 제11항에 있어서,
    데드락(deadlock)을 방지하기 위해, 쓰레드는 한번에 한 페이지만을 홀드할 수 있고, 쓰레드가 페이지 경계(boundary)를 가로질러 이동하였을 때, 상기 록(lock)이 해제되는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  19. 제11항에 있어서,
    멀티플 페이지가 컴플렉스 데이터를 위해 공유 메모리로 지정되는 단계를 더 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.
  20. 제11항에 있어서,
    상기 컴플렉스 데이터는 불투명한(opaque) 데이터를 포함하는, 공유 메모리 프로세스에서 컴플렉스 공유 데이터의 보호를 동기화하는 시스템.

KR1020120057671A 2011-08-12 2012-05-30 메모리 페이지-폴트 핸들링 메카니즘을 통한, 라이브러리 코드에서의 레이스 콘디션의 방지 방법 및 시스템 KR20130018108A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201161523231P 2011-08-12 2011-08-12
US61/523,231 2011-08-12
US13/425,312 2012-03-20
US13/425,312 US20130042080A1 (en) 2011-08-12 2012-03-20 Prevention of race conditions in library code through memory page-fault handling mechanisms

Publications (1)

Publication Number Publication Date
KR20130018108A true KR20130018108A (ko) 2013-02-20

Family

ID=47678273

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120057671A KR20130018108A (ko) 2011-08-12 2012-05-30 메모리 페이지-폴트 핸들링 메카니즘을 통한, 라이브러리 코드에서의 레이스 콘디션의 방지 방법 및 시스템

Country Status (2)

Country Link
US (1) US20130042080A1 (ko)
KR (1) KR20130018108A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150103216A (ko) * 2013-03-14 2015-09-09 인텔 코포레이션 소프트웨어 모듈의 병렬 동작
EP3819774A1 (en) * 2019-11-06 2021-05-12 Microsoft Technology Licensing, LLC Confidential computing mechanism

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9430401B2 (en) * 2015-01-16 2016-08-30 International Business Machines Corporation Implementing paging optimization to avoid populate on page fault during an IO read
US9785467B1 (en) * 2016-03-22 2017-10-10 Sas Institute Inc. Threadsafe use of non-threadsafe libraries with multi-threaded processes
US11556395B2 (en) * 2020-01-24 2023-01-17 Microsoft Technology Licensing, Llc Data race detection with per-thread memory protection

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6006247A (en) * 1995-03-21 1999-12-21 International Business Machines Corporation Method and system for scheduling threads and handling exceptions within a multiprocessor data processing system
US6804766B1 (en) * 1997-11-12 2004-10-12 Hewlett-Packard Development Company, L.P. Method for managing pages of a designated memory object according to selected memory management policies
US7516453B1 (en) * 1998-10-26 2009-04-07 Vmware, Inc. Binary translator with precise exception synchronization mechanism
CA2619773C (en) * 2005-08-19 2016-01-26 Biap Systems, Inc. System and method for recommending items of interest to a user
US8055855B2 (en) * 2007-10-05 2011-11-08 International Business Machines Corporation Varying access parameters for processes to access memory addresses in response to detecting a condition related to a pattern of processes access to memory addresses
US8174534B2 (en) * 2007-12-06 2012-05-08 Via Technologies, Inc. Shader processing systems and methods
US9164812B2 (en) * 2009-06-16 2015-10-20 International Business Machines Corporation Method and system to manage memory accesses from multithread programs on multiprocessor systems

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150103216A (ko) * 2013-03-14 2015-09-09 인텔 코포레이션 소프트웨어 모듈의 병렬 동작
US9582339B2 (en) 2013-03-14 2017-02-28 Intel Corporation Operation of software modules in parallel
EP3819774A1 (en) * 2019-11-06 2021-05-12 Microsoft Technology Licensing, LLC Confidential computing mechanism
WO2021091744A1 (en) * 2019-11-06 2021-05-14 Microsoft Technology Licensing, Llc Confidential computing mechanism
US12013794B2 (en) 2019-11-06 2024-06-18 Microsoft Technology Licensing, Llc Confidential computing mechanism

Also Published As

Publication number Publication date
US20130042080A1 (en) 2013-02-14

Similar Documents

Publication Publication Date Title
Marathe et al. Persistent Memcached: Bringing Legacy Code to {Byte-Addressable} Persistent Memory
US7188229B2 (en) Method and apparatus for memory management in a multi-processor computer system
US7783838B1 (en) Maintaining coherency of derived data in a computer system
Clements et al. Scalable address spaces using RCU balanced trees
Abadi et al. Transactional memory with strong atomicity using off-the-shelf memory protection hardware
US8140773B2 (en) Using ephemeral stores for fine-grained conflict detection in a hardware accelerated STM
KR100954623B1 (ko) 무한 트랜잭션 메모리 시스템
US8612950B2 (en) Dynamic optimization for removal of strong atomicity barriers
AU2010337318B2 (en) Mechanisms to accelerate transactions using buffered stores
US8719543B2 (en) Systems and methods implementing non-shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US8914586B2 (en) TLB-walk controlled abort policy for hardware transactional memory
US20110161620A1 (en) Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices
Litz et al. SI-TM: Reducing transactional memory abort rates through snapshot isolation
EP1966703B1 (en) Method and apparatus for hardware-based dynamic escape detection in managed run-time environments
Amit et al. Don't shoot down TLB shootdowns!
US20060031844A1 (en) Techniques for accessing a shared resource using an improved synchronization mechanism
US10929295B2 (en) Accelerating replication of page tables for multi-socket machines
US8943278B2 (en) Protecting large regions without operating-system support
EP2569718B1 (en) Recording dirty information in software distributed shared memory systems
KR20130018108A (ko) 메모리 페이지-폴트 핸들링 메카니즘을 통한, 라이브러리 코드에서의 레이스 콘디션의 방지 방법 및 시스템
US11550728B2 (en) System and method for page table caching memory
Do et al. The technique of locking memory on Linux operating system-Application in checkpointing
Chase et al. Some issues for single address space systems
Ichii et al. A Lazy-Updating Snoop Cache Protocol for Transactional Memory
Wrenger Lo (ck| g)-free Page Allocator for Non-Volatile Memory in the Linux Kernel

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid