KR101063604B1 - 멀티프로세서 시스템 상에서 멀티스레드 프로그램으로부터의 메모리 액세스를 관리하기 위한 방법 및 시스템 - Google Patents

멀티프로세서 시스템 상에서 멀티스레드 프로그램으로부터의 메모리 액세스를 관리하기 위한 방법 및 시스템 Download PDF

Info

Publication number
KR101063604B1
KR101063604B1 KR1020097010498A KR20097010498A KR101063604B1 KR 101063604 B1 KR101063604 B1 KR 101063604B1 KR 1020097010498 A KR1020097010498 A KR 1020097010498A KR 20097010498 A KR20097010498 A KR 20097010498A KR 101063604 B1 KR101063604 B1 KR 101063604B1
Authority
KR
South Korea
Prior art keywords
page
thread
memory
access
writable
Prior art date
Application number
KR1020097010498A
Other languages
English (en)
Other versions
KR20090084881A (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 KR20090084881A publication Critical patent/KR20090084881A/ko
Application granted granted Critical
Publication of KR101063604B1 publication Critical patent/KR101063604B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • 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
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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

Landscapes

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

Abstract

멀티프로세서 컴퓨터 상에서 실행되는 프로세스에 의해서 생성되는 스레드에 의한 메모리로의 액세스를 제어하기 위한 방법, 컴퓨터 프로그램 및 시스템이 개시된다. 페이지 테이블 구조는 각각의 새로운 스레드에 할당되고 기존의 스레드로부터 복사된다. 페이지 액세스는 존재 비트 및 기록가능 비트에 의해서 제어된다. 페이지 오류 액세스가 하나의 스레드에 제공되면, 커널은 새로운 페이지 항목 생성 프로세스를 처리하고 페이지 오류를 생성한 페이지 존재 비트를 0으로 설정한다. 제2 실시예에서 2개의 페이지 테이블 구조가 생성된다. 하나는 주소 공간으로의 액세스 권한을 가지는 스레드를 위한 페이지 테이블 구조이고, 다른 페이지 테이블 구조는 주소 공간으로의 액세스 권한을 가지지 않는 다른 스레드에 의해서 공유된다.
메모리 액세스, 페이지 테이블 구조, 존재 비트, 기록가능 비트, 스레드

Description

멀티프로세서 시스템 상에서 멀티스레드 프로그램으로부터의 메모리 액세스를 관리하기 위한 방법 및 시스템{A METHOD AND SYSTEM TO MANAGE MEMORY ACCESSES FROM MULTITHREAD PROGRAMS ON MULTIPROCESSOR SYSTEMS}
본 발명은 일반적으로 멀티프로세서 시스템 상에서 실행되는 멀티스레드 애플리케이션 프로그램들 사이의 공유 메모리 액세스에 관한 것으로, 보다 구체적으로는 본 발명은, 예를 들어 가상화된 멀티스레드 애플리케이션의 복제를 용이하게 하기 위해서 공유 메모리 액세스를 결정론적 사건(deterministic events)으로 처리하는 것에 관한 것이다.
스레드들(threads) 사이의 공유 메모리 액세스를 가상화(virtualize)하기 위한 확실하고 단순한 방법은 메모리에 대한 모든 액세스를 로깅(log)하고 복제 머신(replication machine)에서 이를 재연(replay)하는 것이다. 이는 특히 성능의 측면에서 비효율적이다.
예를 들어, 복제 머신 상의 애플리케이션 프로그램 코드의 단순한 재실행(reexecuting)에 의해서 제1 머신(primary machine) 상의 가상화된 애플리케이션을 백업 머신 상에 복제하는 것이 가능하도록 하기 위해, 멀티스레드 프로그램의 공유 메모리 액세스를 결정론적으로 만들어야 할 필요가 있다.
주된 사용은 오류 허용 시스템(fault tolerant systems)에서 있을 수 있다. 오류 허용 시스템에서, 애플리케이션은 제1 머신 상에서 실행되고 이의 실행은 전적으로 제2 머신 상에 복제된다(제1 머신의 오류가 있는 경우에 복구를 위함.) 복제는 비결정론적인 결과를 발생시키는 사건의 기록 및 재연 또는 결정론적인 결과를 발생시키는 사건을 복제하기 위한 코드의 재실행에 의해서 수행된다. 멀티스레드 프로그램에 의한 공유 메모리 액세스를 결정론적으로 만드는데 있어서의 다른 용도는 (이와 같은 경우 동일한 머신 상에서) 코드를 필요한 횟수만큼 재실행함에 의해서 가상화된 프로그램을 디버깅하는 것이다.
기록가능한 공유 메모리 영역에 관한 프로세스의 인터리빙된 실행(interleaved execution)은 비결정론적(non-determinism)이 될 수 있는 잠재적인 소스이다. 공유 메모리 액세스를 결정론적으로 하기 위하여, 동시에 발생하는 프로세스에 의해서 공유 메모리에 액세스되는 순서가 기록되어야 한다. 유니프로세서 머신(uniprocessor machine)의 경우에, 기록 동작은 스케쥴링 기간 당 오직 하나의 기록을 로깅하도록 최적화될 수 있다. 공유 메모리 영역으로의 액세스를 매번 로깅하는 대신에, 공유 메모리 영역이 액세스되는 스케쥴링 기간 당 하나의 레코드를 로깅하는 것으로 충분한 경우가 있는데, 상기 레코드가 프로세스 식별자(process identifier)와 함께 스케쥴링 기간에 액세스가 수행되는 제1 명령의 위치를 특정하고, 스케쥴링 기간의 끝까지 프로세스에 의해서 실행되는 사용자 명령의 횟수를 특정하는 경우가 바로 그러한 경우이다. 따라서, 스케쥴링 기간 동안 공유 메모리 액세스는 결정론적인 사건이 된다. 백업 머신에서 상기 사건을 재생 하기 위해서는, 스케쥴링 기간의 레코드를 저장하고 이 기간 동안 코드를 재실행하는 것으로 충분하다.
멀티-프로세서 머신으로 이와 같은 최적화를 확장하기 위해서는, 상호배제(mutual exclusion)의 유니프로세서 속성이 공유 메모리 영역에 대한 액세스를 직렬화하도록 부과될 필요가 있다. IBM(International Business Machines Corporation)이 등록받은 프랑스 특허 출원 WO2006/077261은 멀티 프로세서 시스템 상에서 멀티-프로세서 애플리케이션의 결정론적인 재연을 구현하는 방법을 개시한다. 공유 메모리 액세스 제어 메커니즘은 본 명세서에 개시된다. 이는 프로세서의 MMU(Memory Management Unit)를 사용한다. 공유 메모리 액세스의 제어는 하나의 프로세서의 MMU 하드웨어 장치가 메모리 페이지로의 액세스를 허용하도록 하고, 다른 프로세서의 MMU는 동일한 페이지로의 임의의 액세스를 거절하도록 프로그래밍하여서 수행된다.
스케쥴링 기간에, 멀티-프로세서 머신 상에서, 공유 메모리에 대한 배타적인 액세스는 각 개별 프로세스에 주어진다. 프로세스의 페이지 테이블은 각 스케쥴링 기간에 선택적으로 단일 프로세스에 대한 액세스를 허용하도록 설정된다. 그러나, 멀티-스레드 프로그램의 경우에, 참여하는 프로세스들은 그들의 주소 공간(adress space)을 공유하며, 공유 페이지 테이블의 설정에 의한 모노 프로세서 솔루션의 채용은 전체 스레드 그룹에 영향을 준다. 더 나아가, 모노-프로세서 환경의 프로세스와는 대조적으로, 전체 주소 공간은 스레드 사이에서 공유되어 지고 이와 같은 액세스를 모니터링 및 제어하기 위해서, 공유된 주소 공간의 기록가능한 부분에 대 한 임의의 액세스가 추적(track)되어야 한다. 이는 메모리 페이지가 공유되더라도 각 작업은 자신 고유의 전용 메모리 기술자(memory descriptors) 세트를 가질 수 있다는 것을 의미한다. 이는 모든 메모리 기술자가 공유되는 멀티 스레드 프로그램의 경우에는 해당되지 않는다. 본 특허 출원은 하나 이상의 스레드를 생성하는 하나의 작업에 의한 공유 메모리 액세스를 추적하기 위해서 제안되었으며, 본 발명에 개시되는 바와 같이 페이지 테이블 항목들의 구조는 모니터링되는 각 작업의 내에서 클론(cloned)된 각 스레드로 확장될 필요가 있다. 본 발명의 원칙은 각 작업 또는 한 작업 내에서의 각 스레드에 적용될 수 있고, 공유 메모리 페이지로의 액세스는 스케쥴러에 의해 설정된 활성화 기간의 전체 지속 기간에 걸쳐서 배타적으로 된다. 이 기간 동안 공유된 메모리 페이지는 일관되게 유지된다.
따라서 종래 기술의 공유 메모리 액세스 직렬화 메커니즘을 (메모리 공간의 오직 부분만을 공유하는 프로세서가 아닌) 전체 메모리 공간을 모두 공유하는 멀티-스레드 프로그램들에 적용가능하도록 만들기 위해 커널의 가상 메모리 관리 모듈을 확장할 필요가 있다.
미국 특허 번호 6854108은 멀티 프로세서들 상에서의 분산된 멀티스레드 프로그램들의 관찰가능한 실행 시간 동작(run time behavior)을 결정론적으로 재연하기 위한 방법을 개시한다. 이와 같은 방법은 JVM에서의 락 루틴(locking routines)의 설정에 의한다. 이와 같은 해결책은 JVM의 수정을 의미하고 JVM의 최상단에서 동작하는 순수한 자바 애플리케이션에서는 제한되며, 모든 메모리 액세스는 JVM에 의해서 수행되도록 하기 위해서 락에 의해 보호되어야 한다는 사실에 의 해서도 제한된다.
임의의 형식의 애플리케이션에 일반적으로 그리고 투명하게 적용가능한, 멀티-프로세서 컴퓨터들에서의 멀티스레드 프로세스들에 적용되는 공유 메모리 액세스 제어 방법을 제공할 필요가 있다.
따라서 본 발명의 목적은 멀티-스레드 프로그램에 의한 공유 메모리 액세스를 모니터링가능하고 제어가능하도록 하여 이와 같은 액세스를 직렬화하고 이들을 결정론적인 사건으로 변환하도록 하는 것이다.
본 발명의 다른 목적은 본 애플리케이션에 대하여 투명하게 구현된 방법을 제공하는 것이다.
본 발명의 또 다른 목적은 멀티-프로세서 환경에서 공유 자원에 대한 액세스를 관리하기 위한, 임의의 작업 또는 스레드에 대한 배타적인 액세스를 제공하는, 기존의 방법을 더 효율적인 방식으로 사용하는 것이다.
이와 같은 목적은, 청구항 1에서 청구된 바와 같이 멀티 프로세서 컴퓨터 상에서 실행되는 프로세스에 의해서 생성되는, 스레드의 메모리에 대한 액세스를 제어하기 위한 방법에 의해서 수행된다.
본 방법은,
- 프로세스가 새로운 스레드의 생성을 요청하는 단계;
- 메모리 기술자에 새로운 페이지 테이블 디렉토리를 할당하는 단계 및 기존의 스레드의 페이지 테이블의 복사본을 생성하는 단계;
- 사건을 기다리는 단계;
- 페이지 오류가 발생하였을 때, 페이지가 메모리에 존재하는지 및 기록가능한지를 나타내는 2개의 비트를 테스트하는 단계;
- 페이지가 존재하고 기록가능하며, 스레드가 종료될 준비가 되었다고 테스트되면,
- 페이지 오류를 일으킨 스레드에 페이지로의 액세스를 허용하는 단계 및 페이지가 메모리에 존재하는지 및 기록가능한지를 나타내는 비트를 셋(setting)하는 단계, 및
- 사건을 대기하는 단계로 이동하는 단계를 수행하는 단계;
- 페이지가 존재하고 기록가능하며, 다른 스레드가 이 페이지에 대한 액세스 권한을 가지고 있으면, 다른 스레드에 의해서 페이지가 해제되기를 기다리는 단계;
- 스레드가 액세스를 해제할 때,
- 페이지 오류를 일으킨 스레드에 페이지로의 액세스를 허용하는 단계 및 페이지가 메모리에 존재하는지 및 기록가능한지를 나타내는 비트를 셋하는 단계, 및
- 사건을 기다리는 단계로 이동하는 단계를 포함한다.
본 목적은 또한, 청구항 2항에 따라 수행될 수 있는데,
이는 청구항 1항의 방법에 다음의 단계,
- 페이지가 메모리에 존재하는지 및 기록가능한지를 나타내는 2개의 비트를 테스트하는 단계 이후에, 페이지가 존재하지 않거나 기록가능하지 않다면, 커널이 페이지 오류를 처리하도록 하는 단계;
- 커널 프로세스에 의해서 새로운 페이지가 생성된 이후에 대응하는 비트의 테스트에 의해서 새로운 페이지가 기록가능한지를 테스트하는 단계;
- 새로운 페이지가 기록가능하다면, 새로운 페이지의 존재 비트(present bit)를 리셋(resetting)하는 단계;
- 커널에 의해서 생성된 페이지 테이블 항목을 모든 스레드의 다른 페이지 테이블로 전파하는 단계;
- 사건을 기다리는 단계로 이동하는 단계를 포함한다.
이와 같은 목적은 또한 바람직한 실시예의 해결책을 위한 청구항 3 내지 4의 방법 및 제2 실시예의 2페이지 테이블 구조를 위한 청구항 5 내지 7의 방법에 의해서 수행된다.
이와 같은 목적은 또한 청구항 8 및 9에 따른 컴퓨터 프로그램 및 시스템에 의해서 수행된다.
본 발명의 해결책은 멀티프로세서 시스템 상에서 실행되는 각 멀티스레드 애플리케이션에 대한 공유 메모리 페이지를 참조하는 별개의 메모리 기술자를 관리하는 것을 가능하게 한다.
멀티스레드 프로그램에 의한 공유 메모리 액세스를 모니터링가능하고 제어가능하도록 하도록 하는 것에 의해서 본 발명의 주된 목적을 수행하는 것 이외에, 다른 장점들은 아래와 같다.
- 성능: (시간: 명령 지속 기간부터 스케쥴링 지속 기간까지, 공간: 4byte의 워드로부터 4Kbyte의 페이지까지) 조밀도(granularity)가 변경될 때 공유 메모리 액세스 제어는 애플리케이션 성능을 향상시킬 수 있다. 이는 공유되는 객체 상의 경합 비율을 감소시키기 때문이다.
- 본 발명의 세 번째 목적에 따라서 개시된 해결책은 프로세서 내에 존재하는 하드웨어 기능의 사용을 최적화하기에 충분히 효율적이다. 바람직한 실시예의 상세한 설명에서 언급한 바와 같이, 본 발명의 해결책은 프로세서의 하드웨어의 수정뿐만 아니라 운영체제 커널의 소프트웨어의 큰 변경도 없도록 하여서 사용하는 컴퓨터의 큰 수정을 제한한다.
- 비 가상화된 작업은 수정에 의해서 영향을 받지 않는다.
원래의 메모리 관리 시스템은 비 가상화된 작업을 위해서 보존된다. 다른 해결책은 예측할 수 없는 결과를 가질 수 있는 모든 작업에 대한 수정을 전역화(globalize)할 수 있다. 이와 같은 해결책은 선택적으로 구현될 수 있다. 예를 들어, 메모리의 추가적인 사용은 모든 작업을 위해서 허용되지 않을 수 있다. 또한, 일부 작업은 조밀도의 변경을 지원하지 않을 수 있다(액세스를 모니터링하거나 관찰할 수 있는 능력이 없더라도, (하드웨어에 의해서 보증되는) 자연적인 액세스 제어가 오직 하나의 명령어 및 메모리의 하나의 메모리 워드의 크기만을 지원하는 경우). 바람직하지 않은 효과의 일예시는 2개의 작업이 교차적으로 공유된 페이지에 액세스하는 핑-퐁 효과이다. 본 발명의 해결책은, 다음의 작업이 약 1000개의 명령을 위해서 대기해야하는 이와 같은 경우의 발생을 방지한다. 왜냐하면 배타적인 메모리 워드가 시분할(time slice)로 할당되기 때문이다. 이에 대한 하나의 해결책이 존재한다. 특정한 명령에 의해서 페이지의 명시적인 해제를 허용하도록 애플리케이션을 수정하는 것이다.
도 1은 본 발명이 구현되지 않은, 멀티스레드 애플리케이션의 메모리 기술자의 구조를 도시하는 도면.
도 2는 본 발명의 바람직한 실시예에 따르는 작업당 하나의 테이블의 메모리 기술자의 구조를 도시하는 도면.
도 3은 제2 실시예에 따르는 메모리 기술자의 단순화된 구조를 도시하는 도면.
도 4는 바람직한 실시예에 따르는 본 방법의 흐름도.
도 5는 제2 실시예에 따르는 본 방법의 흐름도.
비-멀티스레드 애플리케이션에서, 공유 메모리 액세스의 순서를 효율적으로 재연하기 위해서, 스케쥴링 기간에 공유 메모리에 대한 배타적인 액세스가 개별적인 프로세스에 주어진다. 프로세스의 페이지 테이블은 각 스케쥴링 기간에 단일 프로세스로의 액세스를 선택적으로 허용하도록 설정된다. 그러나, 멀티스레드 프로그램의 경우에, 참여하는 프로세스들은 그들의 주소 공간을 공유하고, 공유 페이지 테이블의 설정이 전체 스레드 그룹에 영향을 준다. 더 나아가, 비-멀티스레드 애플리케이션의 프로세스와 대조적으로, 전체 주소 공간은 스레드들 사이에서 공유되고 이와 같은 액세스의 모니터링 및 제어를 위해서, 공유 주소 공간의 기록가능 한 부분에 대한 임의의 액세스를 추적해야 한다. 그 다음에, 오류 허용 시스템의 공유 주소 공간으로의 멀티스레드 프로그램 액세스를 복제하기 위하여 사용되고, 액세스 정보는 로깅되고 백업 머신에서 프로그램 코드의 재실행에 의해서 액세스가 재생되는데 사용될 것이다.
공유 메모리 영역에 프로세스가 액세스하는 순서를 추적하기 위해서, 공간 및 시간 상으로 액세스를 추적하는 조밀도를 변경함으로써 다양한 설계 선택권이 생긴다. 공간의 조밀도는 개별 메모리 위치에서부터, 페이지, 전체 주소 공간까지 변화할 수 있다. 반면에, 시간의 조밀도는 공유 영역에 액세스하는 단일 명령으로부터 전체 스케쥴링 기간까지 변화할 수 있다. 명령 레벨 조밀도에서 개별 메모리 위치로의 액세스를 추적하여, 제1 머신 상의 애플리케이션의 실행은 정확하게 재생될 수 있다. 그러나, 이와 같은 동작은 바람직하지도 않고 실행가능하지도 않다.
커널의 종래의 구현은 전체 스레드 그룹에 대해서 단일 페이지 테이블을 제공한다. 메모리 액세스의 순서를 추적하기 위해서, 다음의 기술이 채용될 수 있다. 공유 페이지 테이블은 주소 공간의 모든 기록가능한 부분으로의 액세스를 거부하도록 수정된다. 이와 같은 작업은 영역으로 액세스를 시도하는 임의의 스레드가 페이지 오류를 발생하도록 한다. 페이지 오류 처리기(page falut handler)에서, 액세스는 로깅되고 현재 명령은 일시적으로 사용가능한 메모리 위치로의 액세스에 의해서 재실행된다. 이는 모든 스레드에 의한 공유 메모리로의 모든 액세스가 로깅되는 것을 보증한다. 그러나, 이와 같은 접근은 또한 모든 메모리 액세스의 차단 때문에 높은 오버헤드를 부과한다.
상기의 접근의 효율성을 향상시키기 위해서, 조밀도가 명령어 레벨로부터 스케쥴링 기간으로 변경될 수 있다. 이는 스케쥴링 기간 동안 액세스의 상호 배타를 요구하고, 스레드 그룹의 각 스레드에 대한 페이지 테이블의 동기화된 세트의 유지에 의해서, 전체 스케쥴링 기간에 개별 프로세스에 선택적으로 액세스를 주는 것을 가능하게 한다. 스레드가 실행되도록 스케쥴링될 때, 대응하는 페이지 테이블은 MMU 컨텍스트로 로딩된다.
각 스레드 그룹에 사용되는 페이지 테이블의 세트는 완전히 동기화되어야 한다. 세트의 2개의 페이지 테이블에 걸쳐서 대응하는 항목 사이에서 존재 플래그에서만 오직 차이가 있을 수 있다. 페이지 테이블의 임의의 항목이 수정될 때마다, 이러한 변경이 남은 페이지 테이블로 전파되어야 한다. 많은 커널 서브시스템(예를 들어, 아이오(aio), 스왑 등)이 페이지 테이블을 수정하고, 각 인스턴스에서 이와 같은 수정은 그룹의 모든 페이지 테이블로 전파되어야 한다.
메모리의 조밀도는 다른 차원에서 고려된다. 바이트(또는 프로세서 워드) 레벨 조밀도는 공유 메모리 액세스의 순서를 추적하기 위해서 요구되는 최적화된 정도의 직렬화를 제공한다. 예를 들어 메모리의 단위가 페이지라면, 경합의 위치와는 대조적으로 경합하는 프로세스는 전체 페이지로의 액세스가 거부된다. 이는 특히 동일한 페이지에 위치된 많은 자원이 록(lock)될 때 문제된다. 페이지로의 액세스의 직렬화는 자원의 전체 세트로의 액세스를 직렬화한다. 워드 레벨 조밀도를 원하지만, 이는 기초적인 아키텍쳐에 의해서 사용되는 메모리의 단위에 따른다. 통상적인 MMU 아키텍쳐는 최적의 페이지 테이블 크기를 위해서 페이지 레벨 조밀도 에서 메모리를 관리한다.
다른 극단적인 경우에, 주소 공간 레벨 조밀도가 사용되면, 스케쥴링 기간 동안 배타적인 액세스를 제공하기 위해서 요구되는 페이지 테이블의 갯수는, 스레드 그룹의 스레드의 갯수와 무관하게 2개로 압축될 수 있다. 1개의 스레드에 대한 기록가능한 주소 공간으로의 배타적인 액세스를 제공하기 위해서, 스레드의 페이지 테이블의 대응하는 항목은 존재하는 것으로 표시되는 반면에 나머지 페이지 테이블의 기록가능한 항목은 존재하지 않는 것으로 표시된다. 주소 공간으로의 액세스가 거부된 스레드의 페이지 테이블은 동일하기 때문에, 단일 페이지 테이블(안티 페이지 테이블(anti page table)로 지칭됨)이 사용될 수 있다. 실제로, 안티 페이지 테이블의 항목은 페이지 변환(page translation)에서 사용되지 않기 때문에, 안티 페이지 테이블의 실제 항목은 관련이 없다. 안티 페이지 테이블은 오직 스레드의 컨텍스트로부터 수행된 메모리 액세스가 거부된 액세스일 때 오류를 발생하도록 하기 위해서 사용된다. 스레드가 주소 공간으로의 액세스를 거부당할 때 , 이의 페이지 테이블은 안티 페이지 테이블로 스위칭(switch)되고, 그 역도 성립한다.
다음은 리눅스 커널 및 리눅스 페이징 모델의 컨텍스트의 스레드를 위한 공유 메모리 배타적 액세스 메커니즘의 구현을 개시한다. 개시가 리눅스 전용 용어(terminology)를 사용하지만, 본 방법은 충분히 다른 운영체제 및 아키텍쳐에 일반적으로 적용될 수 있다.
공유 메모리로의 배타적 액세스를 제공하기 위해서, 종래 기술 특허 출원의 발명을 적용하면, 구현은 일관되게 단일 프로세스에 대해서 액세스를 허용하는 기 능을 제공해야 하고 영역으로의 임의의 다른 스레드의 액세스가 시도될 때 오류를 발생시켜야 한다. 가장 최근의 아키텍쳐에서 사용가능한 페이징 메커니즘은 이와 같은 목적을 위해서 레버리지(leveraged)된다. 특정한 페이지가 물리적 메모리에 할당되어 있는지 나타내는 '페이지-존재(page-present)' 비트는, 페이지에 대한 배타적인 액세스가 다른 프로세스로 할당될 때, 페이지 오류를 트리거하기 위해서 기교적으로(artifically) 리셋(reset)된다. 이와 같은 동작은 잠재적으로 통상의 페이징 메커니즘을 간섭할 수 있다. 이는 커널 스왑퍼가 페이지를 스왑하지 못하도록 페이지의 사용 카운터를 증가시킴에 의해 페이지 상에 락을 걸어서 회피한다.
도 1은 본 발명이 구현되지 않은 멀티스레드 애플리케이션의 메모리 기술자의 구조를 도시한다. 이는 종래의 스레드에 의해서 페이지 테이블이 어떻게 공유되는지에 관한 개요를 도시한다. 도 1에서 가상 메모리 관리를 포함한 대부분의 운영체제에서 발견되는 페이지 테이블 계층의 일예시를 도시한다. 메모리 기술자(110)는 메모리로의 액세스를 필요로 하는 프로세스의 모든 스레드에 의해서 액세스된다. 메모리 기술자는 페이지 테이블 계층의 최상위 레벨이다. 이는 트리의 루트(root)인 PGD(Page Global Directory; 130)에 대한 포인터(120)를 포함한다. PGD는 물리적 메모리의 페이지 프레임(160, 165)에 대한 포인터이며, 페이지 항목의 리스트(150)를 인덱스하는 PMD(Page Middle Directory)를 포인트한다. PGD, PMD 및 PTE는 스레드가 그들의 공통 주소 공간의 페이지로 액세스하는 것을 허용하는 페이지 테이블 구조(170)를 형성한다. 동일한 페이지 프레임(160, 165)은 개시된 페이지 테이블 구조(170)를 통해서 3개의 스레드(100)에 의해서 액세스된 다(155, 157.)
도 2는 본 발명의 바람직한 실시예에 따르는, 작업당 하나의 테이블인, 메모리 기술자의 구조를 도시한다.
제1 접근은 종래 기술의 특허 출원 발명의 적용을 포함하며, 이는 각각의 단일 스레드에 대해 배타적 액세스를 보증하기 위해서 각 스레드에 대한 PTE들을 복제하기에 충분하다. 이는 주어진 페이지 테이블 항목에 대한 대응하는 페이지 테이블의 존재 플래그를 선택적으로 턴 온(turning on)함에 의해서 수행된다. 그러나 주소 변환은 CPU의 MMU내에 고정배선되어 있기 때문에, 전체 페이지 테이블 계층은 복제될 필요가 있다. 실제로, 분리(segregation)는, 페이지 테이블 계층 및 프로세스 주소 공간과 관련된 다른 파라미터를 포함하는 메모리 기술자(200)의 최상위 레벨에서도 수행될 수 있다. 이와 같은 접근에서, 각 스레드는 별개의 메모리 기술자를 제공받을 수 있다. 리눅스에서 새로운 프로세스를 생성하고 페이지 테이블을 복제하는 포크 시스템 콜(fork system call)의 구현을 레버리지하는 것이 가능하다. 포크를 사용한다는 것은 난해한 동기화를 구현한다는 의미이다. 메모리 기술자는 아키텍쳐 독립적인 데이터 구조에 널리 사용되고 스레드를 위하여 이의 시멘틱(semantics)을 변경하는 것은 확장된 커널 수정이 필요하다. 더 나아가, 집중화된 락이 스레드 그룹의 상이한 메모리 기술자에 걸쳐서 페이지 테이블을 동기화하는데 요구되며, 이는 구현을 한층 더 복잡하게 한다.
도 2에 도시된 바와 같이, 바람직한 실시예에서 그룹의 각 스레드는 전용 페이지 테이블(210)을 할당받는다. 스레드 아이디(thread id)에 의해서 인덱싱되는, 이와 같은 전용 페이지 테이블의 헤시 테이블은, 스레드 그룹에 의해서 공유되는 메모리 기술자(200) 내에서 유지된다. 더 나아가, 페이지 디렉토리에 대한 포인터(220)는 대응하는 스레드의 프로세스 기술자에 위치하여 페이지 디렉토리는 컨텍스트 스위칭 동작 동안 신속하게 액세스될 수 있다. 해시 테이블은 커널의 가상 메모리 관리 서브시스템에서 동작할 때 프로세스의 메모리 기술자가 오직 사용가능할 때만 특정한 스레드의 페이지 디렉토리를 획득하기 위하여 사용된다. 각 스레드가 자신의 전용 페이지 테이블(210)을 가지게 되면, 메모리의 기록가능한 부분에 대한 액세스는 종래 기술의 특허 출원의 해결책에 따르는 일반적인 프로세스를 위한 공유 메모리 액세스 제어의 경우와 정확히 동일한 방식으로 제어된다. 스레드의 경우에 주소 공간의 각 페이지는, 프로세스의 경우와 달리 공유되고, 공유된 페이지는 명확화게 공유되었음이 표시된다. 도 5와 관련하여 개시된 바와 같이 프로세스를 사용하면, 메모리로의 일부 액세스는 2개의 스레드(스레드 1, 스레드 2)에 허가되고(255, 257), 일부 다른 액세스(263, 265, 267, 269)는 모든 스레드에 대해서 거부된다.
각 스레드가 자신의 전용 페이지 테이블(210)을 가지게 되면, 메모리의 기록가능한 부분으로의 액세스는 허가받은 스레드에 대한 액세스된 페이지의 PTE의 페이지_존재 비트를 셋하여서, 그룹의 스레드 중 하나에 선택적으로 허가된다. 반면에 모든 다른 스레드에 대한 비트를 리셋하여, 페이지에 대한 액세스 시도가 있을 때 페이지 오류를 발생시킬 수 있다.
도 3은 전체 주소 공간으로의 액세스가 스레드에 주어졌을 때, 멀티스레드 애플리케이션의 특정한 경우의 메모리 기술자의 단순화된 구조를 도시한다. 본 발명의 이와 같은 제2 실시예는 본 명세서에서 전술한 바와 같이 주소 공간 레벨 조밀도를 채용한다. 이와 같은 경우에, 스케쥴링 기간 동안 배타적인 액세스를 제공하기 위해 필요한 페이지 테이블의 갯수는 2개로 압축될 수 있다. 각 스레드 그룹은 관련된 페이지 테이블의 짝을 가질 수 있다. 프로 페이지 테이블(pro page table; 370) 및 안티 페이지 테이블(anti page table; 375)이다. 프로 페이지 테이블(370)은 주소 변환을 위해서 사용되고 스케쥴링 기간에 주소 공간에 대한 액세스를 수여받은 스레드(도 3의 스레드 1)에 할당된다. 나머지 스레드(스레드 2, 스레드 3)는 스케쥴링 기간에 액세스가 거부되고 안티 페이지 테이블(375)이 할당된다. 도시된 바와 같이 페이지 테이블 구조는 스레드 그룹에 의해서 공유되는 고유한 메모리 기술자(300)를 포함한다. 메모리 기술자는 각각의 페이지 테이블(370, 375)의 2개의 페이지 디렉토리(330, 335)에 대한 2개의 포인터(310, 320)를 포함한다. 각 페이지 테이블 구조는 각각이 항목의 리스트(350, 355)를 인덱싱하는 PMD(Page Middle Directory; 340, 345)를 포함한다. 도 3에서, 도 6과 관련되어 개시된 바와 같이 프로세스를 사용하면, 2개의 페이지 프레임(160, 165)에 액세스하기 위한 액세스가 스레드 1에 허용된다(365, 367). 2개의 페이지 프레임(160, 165)에 액세스하기 위한 다른 그룹의 스레드에 대한 액세스는 거부된다(362, 364).
도 4는 바람직한 실시예에 따르는 스레드 그룹의 스레드로부터 메모리에 액세스하기 위한 방법의 흐름도이다.
전용 페이지 테이블은 클론 시스템 콜(clone system call)의 일부로서 생성 된다. 가상화된 프로세스가 VM_CLONE 플래그 세트를 사용하여 클론 시스템 콜을 호출하지 않으면, 스레드를 위한 액세스 제어 시스템은 사용되지 않고 본 방법은 실행되지 않는다. 가상화된 프로세스가 VM_CLONE 플래그 세트를 사용하여 클론 시스템 콜을 호출할 때, 존재하는 copy_mm 함수가 생성된 스레드를 위한 전용 페이지 테이블을 유지하기 위해서 새로운 페이지 디렉토리를 할당하도록 수정되고, 이를 해시 테이블에 추가한다. 그 다음에, 전체 페이지 테이블 계층을 시스템적으로 복사하기 위한 새로운 함수, rr_dup_mas를 호출한다. 이와 같은 함수는 존재하는 함수가 포크에 의해서 호출되는 dup_vmas를 호출한 이후에 새롭게 생성된 자식 프로세스(child process)를 위한 새로운 페이지 테이블을 생성하기 위해서 모델화된다(modeled). 이와 같은 두 함수들 간의 중요한 차이는 다음과 같다. rr_dup_vmas의 경우에, 모든 페이지 테이블 항목들은 예외없이 복사되지만, dup_vmas는 페이지에 대해서 VM_DONT_COPY라는 플래그가 설정된 페이지는 스킵한다. 더 나아가 dup_vmas 함수는 카피-온-라이트(copy-on-write) 구현을 위해서 주소 영역의 기록가능한 부분에 부모 및 자식 프로세스 모두에 대해서 읽기-전용으로 표시한다. 반면에, rr_dup_vmas는 모든 읽기가능한 항목을 존재하지 않음으로 표시한다. 그룹에서 스레드에 의해서 사용되는 페이지 테이블의 세트는 스레드의 시멘틱을 공유하는 메모리를 보존하기 위해서 동기화가 유지된다. 임의의 페이지 테이블에 대한 임의의 수정은 나머지 테이블에 전파되어서 다른 피어 스레드(peer threads)의 컨텍스트에 이와 같은 변화가 반영된다.
스레드에 대한 공유 메모리 액세스 제어의 구현에는 프로세스의 경우에 발생 하지 않는 특정한 문제를 언급할 필요가 있다. 커널은 자주 프로세스의 주소 공간에 직접 액세스한다. 예를 들어, 사용자 레벨 스레드 또는 프로세스는 메모리 버퍼를 판독 시스템 콜(read system call)로 전달하고, 커널의 파일 시스템 컴포넌트는 사용자 공간 프로그램(user space program)에 의해서 제공된 버퍼에 직접 기록한다. 이와 같은 공유 메모리로의 액세스는 일반적으로 액세스 제어 메커니즘에 의해서 중재된다. 그러나, 스레드의 경우에 있어서, 커널은 스레드가 종료될 때 프로세스 주소 공간의 사용자 제공 메모리 포인터(user supplied memory pointer)에 스레드 식별자(thread identifier)의 값을 기록한다. 이와 같은 액세스는 프로세스 기술자에 존재하는 PF_EXITING 플래그의 검사에 의해서 감지되고, 만약 플래그가 셋되었다면, 특정한 액세스는 정상적인 액세스 제어로부터 제외되어서 커널은 무제한의 액세스를 받게 된다.
일반적으로, 명시적으로 종료 시스템 콜의 호출을 받거나 또는 암묵적으로 커널에 의해서 제거되어서 대응되는 스레드가 종료될 때 스레드에 대한 페이지 테이블(per-thread page table)이 풀려난다. 구체적으로, 프로세스의 스레드 중의 하나가 실행 시스템 콜(exec system call)을 호출하면, 프로세스의 현재 주소 공간을 언맵(unmap)하고 실행 시스템 콜을 호출한 스레드를 제외한 프로세스의 다른 스레드를 종료시킨다. 커널의 스레드 종료 동작은 종료하는 스레드와 관련된 페이지 디렉토리 및 페이지 테이블 계층을 해제하도록 수정된다. 실행 시스템 콜의 마지막에, 오직 하나의 프로세스만이 페이지 테이블의 새로운 세트와 함께 남는다. 이 프로세스에 의해서 생성되는 후속적인 스레드는 자신의 페이지 테이블의 복사본을 상속받고, 배타적인 액세스 제어가 다시 실행된다.
도 4의 흐름도에서 대응하는 스텝이 도시된다.
- VM_CLONE에 의해서 새로운 스레드의 생성을 요청하는 단계(405);
- 메모리 기술자에 새로운 페이지 테이블 디렉토리를 할당하는 단계 및 기존의 스레드의 페이지 테이블의 복사본을 생성하는 단계(410);
- 사건을 기다리는 단계(420);
- 페이지 오류가 발생하였을 때(430), 페이지가 메모리에 존재하는지 및 기록가능한지를 나타내는 2개의 비트를 테스트하는 단계(435);
- 페이지가 존재하고 기록가능하며(테스트 435에서 예인 경우), 스레드가 종료될 준비가 되었다고 테스트되면(리눅스 PF 비트 테스트(455): 예)
- 페이지 오류를 일으킨 스레드에 페이지로의 액세스를 허용하는 단계(465) 및 페이지가 메모리에 존재하는지 및 기록가능한지를 나타내는 비트를 셋하는 단계, 및
- 사건을 기다리는 단계로 이동하는 단계(420)를 수행하는 단계;
- 페이지가 존재하고 기록가능하며, 다른 스레드(460)가 이 페이지에 대한 액세스 권한을 가지고 있으면, 다른 스레드에 의해서 페이지가 해제되기를 기다리는 단계(470);
- 스레드가 액세스를 해제할 때,
- 페이지 오류를 일으킨 스레드에 페이지로의 액세스를 허용하는 단계 및 페이지가 메모리에 존재하는지 및 기록가능한지를 나타내는 비트를 셋하는 단 계, 및
- 사건을 기다리는 단계로 이동하는 단계를 수행하는 단계;
- 페이지가 메모리에 존재하는지 및 기록가능한지를 나타내는 2개의 비트를 테스트하는 단계 이후에(435), 페이지가 존재하지 않거나 기록가능하지 않으면, 커널이 페이지 오류를 처리하도록 하는 단계(440);
- 커널 프로세스에 의해서 새로운 페이지가 생성된 이후에, 대응하는 비트의 테스트에 의해서 새로운 페이지가 기록가능한지를 테스트하는 단계(445);
- 새로운 페이지가 기록가능하다면, 새로운 페이지의 존재 비트(present bit)를 리셋(resetting)하는 단계(450);
- 커널에 의해서 생성된 페이지 테이블 항목을 모든 스레드의 다른 페이지 테이블로 전파하는 단계(425);
- 사건을 기다리는 단계로 이동하는 단계(420).
사건을 기다리는 단계 이후에:
- 스레드가 스케쥴링될 때(475), 메모리의 하드웨어 컨텍스트를 스케쥴링될 스레드의 페이지 테이블로 스위칭하는 단계(480);
- 사건을 기다리는 단계로 이동하는 단계(420).
사건을 기다리는 단계 이후에:
- 스레드가 종료될 때(485), 스레드에 대한 페이지 디렉토리를 해제하는 단계(490);
- 스레드를 위한 메모리 액세스 제어를 종료하는 단계.
도 5는 2개의 페이지 테이블 실시예에 따르는 스레드 그룹의 스레드로부터 메모리에 엑세스하기 위한 방법의 흐름도이다.
안티 페이지 테이블은 프로 페이지 테이블의 복제이며 주소 공간의 모든 기록가능한 부분은 존재 플래그의 리셋에 의해서 비활성화된다. 제2 스레드를 포크하고 스레드 카운트가 하나 이상이 될 때, 그룹의 제1 스레드에 의해서 첫 번째로 생성된다. 부모 스레드와 자식 스레드는 모두 최초에 안티 페이지 테이블을 할당받는다. 후속적으로 생성된 스레드는 그들의 생성 시에 안티 페이지 테이블을 할당받는다. 포크로부터 회수되기 이전에, 부모의 하드웨어 컨텍스트는 안티 페이지 테이블을 사용하기 위하여 스위칭된다. 자식 스레드가 첫번째로 실행되도록 스케쥴링되었을 때, 컨텍스트 스위칭 루틴은 안티 페이지 테이블을 할당한다.
그룹의 임의의 스레드가 주소 공간의 기록가능한 부분에 액세스를 시도할 때, 페이지 오류 인터럽트가 생성된다. 페이지 오류 인터럽트는 커널이 디멘드 페이징(demand paging) 및 카피-온-라이트(copy-on-write) 같은 기능을 구현하는 것을 도와주기 위해서 프로세서에 의해서 제공된 인터럽트이다. 인터럽트 처리기는 인터럽트를 제공해서, 프로 페이지 테이블의 대응하는 항목의 존재 및 기록가능 플래그의 검사에 의해서, 액세스 제어로 인해 발생된 오류로부터 커널의 일반적인 기능의 일부로서 생성된 페이지 오류 인터럽트를 구별한다. 페이지가 존재하고 기록가능하면, 오류는 액세스 제어로 인해 발생했을 것이고 다른 스레드가 이미 액세스를 보유하고 있지 않다면 스레드는 주소 공간에 대한 액세스를 수여받는다. 페이지가 존재하지 않거나 읽기-전용 페이지에 기록 액세스가 있다면, 페이지 오류는 참인 것이고 이는 커널에 의해서 제공되는 일반 채널을 통해서 처리된다. 페이지가 프로 및 안티 페이지 테이블 모두에 존재하지 않는다면, 페이지 오류는 주소 공간에 대한 액세스 중재 이전에 우선 정상 페이지 오류로서 처리된다.
주어진 임의의 시간에, 스레드 그룹의 스레드 중 오직 하나만 주소 공간으로의 액세스를 가진다. 액세스를 보유하는 스레드의 스레드 식별자(thread identifier; tid)는 메모리 기술자에 저장되어 락에 의해서 보호된다. 스레드가 스케쥴링 기간에 공유 메모리에 처음으로 액세스 시도를 하고 공유 메모리는 아직 다른 프로세스가 보유하고 있지 않을 때, 이의 스레드 식별자는 메모리 기술자에 저장되고 작업의 하드웨어 컨텍스트는 새로운 페이지 테이블을 반영하도록 변경되며 오래된 페이지 테이블의 TLB 항목은 무효화된다. 페이지 오류가 발생하는 프로세서와 상이한 프로세스 상에 작업이 실행되도록 스케쥴링 되는 것이 가능하다. 그러나, 이는 문제를 발생시키지 않는데 새로운 페이지 테이블이 페이지 오류 처리로부터 회수되기 전에 로딩되기 때문이다.
액세스가 즉시 허용되지 않으면, 다른 작업이 실행되도록 스케쥴링된다. 대기 스레드는 결국 보유하고 있는 스레드에 의해서 주소 공간이 해제될 때 액세스를 가지게 된다. 작업이 중지되거나 작업이 종료를 호출할 때, 액세스는 메모리 기술자에 저장된 자신의 스레드 식별자의 제거에 의해서 해제된다.
도 5의 흐름도에서 대응하는 단계들이 도시된다.
제2 실시예에서, 메모리 기술자에 새로운 페이지 테이블 디렉토리를 할당하는 단계(410) 및 기존의 페이지 테이블의 복사본인 새로운 페이지 디렉토리를 생성 하는 단계는 이것이 첫번째 스레드일 경우에만 수행되고;
- 기록가능 비트 세트(writable bit set)를 가지는 모든 페이지의 페이지 존재 플래그를 리셋하는 단계;
메모리의 하드웨어 컨텍스트를 스케쥴링될 스레드의 페이지 테이블로 스위칭하는 단계는 다음 단계(500)로 대체된다.
- 스레드가 주소 공간에 대한 액세스 권한을 가지면 메모리의 하드웨어 컨텍스트를 기존의 페이지의 테이블로 스위칭하는 단계(프로 PGD);
- 스레드가 주소 공간에 대한 액세스 권한을 가지지 않으면 메모리의 하드웨어 컨텍스트를 새로 생성된 페이지 디렉토리로 스위칭하는 단계(안티 PGD);
스레드가 종료될 때 페이지 디렉토리를 해제하는 단계는 다음의 단계(510)로 대체된다.
- 프로세스에 하나 이상의 스레드가 남아있을 때만, 새로 생성된 페이지 디렉토리를 해제하는 단계.
바람직한 실시예의 해결책의 단점은 페이지 테이블이 각 스레드에 대해서 인스턴스화됨에 따라서 메모리 관리의 복잡성을 증가시킬 수 있다는 것이다. 하나의 스레드의 매핑의 변경은 그룹의 다른 스레드로 전파되어야 한다. 2개의 페이지 테이블 구현으로, 액세스 제어의 구현이 더 단순해진다.

Claims (9)

  1. 멀티프로세서 컴퓨터 상에서 실행되는 프로세스에 의해서 생성되는 스레드들에 의한 메모리로의 액세스(accesses)를 제어하기 위한 방법으로서,
    상기 프로세스에 의해 새로운 스레드의 생성을 요청하는 단계;
    메모리 기술자(memory descriptor)에 새로운 페이지 테이블 디렉토리를 할당하고 적어도 하나의 기존의 스레드(existing thread)의 기존 페이지 테이블의 복사본을 생성하는 단계;
    사건(event)을 기다리는 단계;
    페이지 오류(page fault)가 발생하는 경우, 페이지가 메모리에 존재하는지 여부 및 기록가능한지(writable) 여부를 결정하는 단계 - 상기 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부는 2개의 비트에 의해 지시됨 -;
    상기 페이지가 메모리에 존재하고 기록가능하며, 상기 페이지 오류를 일으킨 스레드가 종료될 예정인 것으로 결정되는 경우, 상기 페이지 오류를 일으킨 상기 스레드에 상기 페이지로의 액세스를 허용하고 상기 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부를 나타내는 상기 2개의 비트를 세팅(setting)하는 단계, 및 사건을 기다리는 상기 단계로 이동하는 단계를 수행하는 단계;
    상기 페이지가 메모리에 존재하고 기록가능하며, 상기 페이지 오류를 일으킨 스레드와 다른 스레드가 상기 페이지에 대한 액세스 권한을 가지고 있는 경우, 상기 다른 스레드에 의해서 상기 페이지가 해제되기를 기다리는 단계;
    상기 다른 스레드가 상기 페이지에 대한 액세스를 해제하는 경우, 상기 페이지 오류를 일으킨 스레드에 상기 페이지로의 액세스를 허용하고 상기 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부를 나타내는 상기 2개의 비트를 세팅하는 단계, 및 사건을 기다리는 상기 단계로 이동하는 단계를 수행하는 단계; 및
    상기 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부를 결정하는 상기 단계 이후, 만약 상기 페이지가 존재하지 않거나 기록가능하지 않다면, 커널이 상기 페이지 오류를 처리하도록 하는 단계, 상기 커널에 의해서 새로운 페이지를 생성된 이후, 대응하는 비트를 테스트함으로써 상기 새로운 페이지가 기록가능한지 여부를 결정하는 단계, 만약 상기 새로운 페이지가 기록가능하다면, 상기 새로운 페이지의 존재 비트(present bit)를 리셋(resetting)하는 단계, 상기 커널에 의해서 생성된 페이지 테이블 항목을 모든 스레드들의 다른 페이지 테이블들로 전파시키는 단계, 및 사건을 기다리는 상기 단계로 이동하는 단계
    를 포함하는 방법.
  2. 삭제
  3. 제1항에 있어서,
    사건을 기다리는 상기 단계 이후에,
    스레드가 스케쥴링될 때, 상기 메모리의 하드웨어 컨텍스트(hardware context)를 스케쥴링될 상기 스레드의 상기 페이지 테이블로 스위칭하는 단계; 및
    사건을 기다리는 상기 단계로 이동하는 단계
    를 더 포함하는 방법.
  4. 제1항에 있어서,
    사건을 기다리는 상기 단계 이후에,
    스레드가 종료될 때, 상기 스레드에 대한 페이지 디렉토리를 해제하는 단계; 및
    상기 스레드에 대한 상기 메모리 액세스 제어를 종료하는 단계
    를 더 포함하는 방법.
  5. 제1항에 있어서,
    상기 메모리 기술자에 새로운 페이지 테이블 디렉토리를 할당하고 적어도 하나의 기존의 스레드의 기존 페이지 테이블의 복사본을 생성하는 상기 단계는 첫번째 스레드에 대해서만 수행하고,
    상기 방법은,
    세팅된 기록가능 비트(writable bit)를 갖는 모든 페이지의 페이지 존재 플래그를 리셋하는 단계
    를 더 포함하는 방법.
  6. 제3항에 있어서,
    상기 메모리의 하드웨어 컨텍스트를 상기 스케쥴링될 스레드의 페이지 테이블로 스위칭하는 상기 단계는,
    상기 스레드가 주소 공간에 대한 액세스 권한을 가지는 경우, 상기 메모리의 상기 하드웨어 컨텍스트를 상기 기존 페이지 테이블로 스위칭하는 단계; 및
    상기 스레드가 상기 주소 공간에 대한 액세스 권한을 가지지 않는 경우, 상기 메모리의 상기 하드웨어 컨텍스트를 새로 생성된 페이지 디렉토리로 스위칭하는 단계
    를 포함하는 방법.
  7. 제4항에 있어서,
    스레드가 종료될 때 상기 페이지 디렉토리를 해제하는 상기 단계는,
    상기 프로세스에 하나의 스레드만이 남아있는 경우, 상기 새로 생성된 페이지 디렉토리를 해제하는 단계
    를 포함하는 방법.
  8. 컴퓨터 프로그램이 저장된 컴퓨터 판독 가능한 기록 매체로서,
    상기 컴퓨터 프로그램은 프로그래밍 코드 명령어들을 포함하고, 상기 컴퓨터 프로그램이 컴퓨터 상에서 실행될 때 상기 프로그래밍 코드 명령어들은,
    제1항에 따르는 방법의 상기 단계들을 실행하는,
    컴퓨터 판독 가능한 기록 매체.
  9. 멀티프로세서 컴퓨터 상에서 실행되는 프로세스에 의해서 생성되는 스레드들에 의한 메모리로의 액세스를 제어하기 위한 장치로서,
    상기 프로세스에 의해 새로운 스레드의 생성을 요청하기 위한 수단;
    메모리 기술자에 새로운 페이지 테이블 디렉토리를 할당하고 적어도 하나의 기존의 스레드의 기존 페이지 테이블의 복사본을 생성하고 사건을 기다리기 위한 수단;
    페이지 오류가 발생하는 경우, 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부를 결정하기 위한 수단 - 상기 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부는 2개의 비트에 의해 지시됨 -;
    상기 페이지가 메모리에 존재하고 기록가능하며, 상기 페이지 오류를 일으킨 스레드가 종료될 예정인 것으로 결정되는 경우, 상기 페이지 오류를 일으킨 상기 스레드에 상기 페이지로의 액세스를 허용하고 상기 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부를 나타내는 상기 2개의 비트를 세팅하고 사건을 기다리기 위한 수단;
    상기 페이지가 메모리에 존재하고 기록가능하며, 상기 페이지 오류를 일으킨 스레드와 다른 스레드가 상기 페이지에 대한 액세스 권한을 가지고 있는 경우, 상기 다른 스레드에 의해서 상기 페이지가 해제되기를 기다리기 위한 수단;
    상기 다른 스레드가 상기 페이지에 대한 액세스를 해제하는 경우, 상기 페이지 오류를 일으킨 스레드에 상기 페이지로의 액세스를 허용하고 상기 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부를 나타내는 상기 2개의 비트를 세팅하고 사건을 기다리기 위한 수단;
    상기 페이지가 메모리에 존재하는지 여부 및 기록가능한지 여부를 결정하기 위한 수단에 의해 상기 페이지가 존재하지 않거나 기록가능하지 않다고 결정된 경우, 커널이 상기 페이지 오류를 처리하도록 하기 위한 수단;
    상기 커널에 의해서 새로운 페이지가 생성된 이후, 대응하는 비트를 테스트함으로써 상기 새로운 페이지가 기록가능한지 여부를 결정하고, 상기 새로운 페이지가 기록가능하다면, 상기 새로운 페이지의 존재 비트를 리셋하기 위한 수단; 및
    상기 커널에 의해서 생성된 페이지 테이블 항목을 모든 스레드들의 다른 페이지 테이블들로 전파시키고 사건을 기다리기 위한 수단
    을 포함하는 장치.
KR1020097010498A 2006-12-21 2007-06-15 멀티프로세서 시스템 상에서 멀티스레드 프로그램으로부터의 메모리 액세스를 관리하기 위한 방법 및 시스템 KR101063604B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP06301287.6 2006-12-21
EP06301287A EP1936498A1 (en) 2006-12-21 2006-12-21 A method and system to manage memory accesses from multithread programs on multiprocessor systems
PCT/EP2007/055977 WO2008074520A1 (en) 2006-12-21 2007-06-15 A method and system to manage memory accesses from multithread programs on multiprocessor systems

Publications (2)

Publication Number Publication Date
KR20090084881A KR20090084881A (ko) 2009-08-05
KR101063604B1 true KR101063604B1 (ko) 2011-09-07

Family

ID=38436963

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097010498A KR101063604B1 (ko) 2006-12-21 2007-06-15 멀티프로세서 시스템 상에서 멀티스레드 프로그램으로부터의 메모리 액세스를 관리하기 위한 방법 및 시스템

Country Status (6)

Country Link
EP (1) EP1936498A1 (ko)
JP (1) JP5137966B2 (ko)
KR (1) KR101063604B1 (ko)
CN (1) CN101563674A (ko)
CA (1) CA2672481A1 (ko)
WO (1) WO2008074520A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101604259B (zh) * 2009-06-10 2011-12-21 深圳市共进电子有限公司 一种基于嵌入式系统的多进程同步调度的方法
CN101840312B (zh) * 2009-12-31 2012-01-11 创新科存储技术有限公司 一种用于多核处理器的raid5写数据方法及装置
WO2011127862A2 (zh) * 2011-05-20 2011-10-20 华为技术有限公司 多线程访问多副本的方法和装置
KR101252188B1 (ko) * 2011-05-31 2013-04-05 주식회사 잉카인터넷 가상 메모리 데이터 접근 제어방법
US9652289B2 (en) * 2012-04-27 2017-05-16 Microsoft Technology Licensing, Llc Systems and methods for S-list partitioning
WO2015142339A1 (en) 2014-03-20 2015-09-24 Hewlett-Packard Development Company, L.P. Storage system transactions
CN106033368B (zh) * 2015-03-09 2019-02-22 北京大学 一种多核虚拟机确定性重演的方法
KR102377726B1 (ko) * 2015-04-17 2022-03-24 한국전자통신연구원 분산 파일 시스템에서의 파일 복제 제어 장치 및 방법
CN107346253A (zh) * 2016-05-06 2017-11-14 中兴通讯股份有限公司 应用同步方法及装置
CN111045476B (zh) * 2019-12-18 2021-07-27 湖南国科微电子股份有限公司 多核cpu系统下时序波形控制方法、系统、设备及介质
CN111563066B (zh) * 2020-04-24 2023-08-11 深圳震有科技股份有限公司 基于文件锁实现应用程序单例处理方法、装置
CN116431315B (zh) * 2023-06-07 2023-08-29 成都登临科技有限公司 批处理任务的处理方法、装置、电子设备及存储介质
CN116737086B (zh) * 2023-08-14 2023-11-17 江苏云途半导体有限公司 一种嵌入式非易失性存储器读写方法
CN118152153B (zh) * 2024-05-09 2024-07-16 北京麟卓信息科技有限公司 基于合并访存的片上共享存储器访存事务大小测算方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006077261A2 (en) 2005-01-24 2006-07-27 International Business Machines Corporation Method for managing access to shared resources in a multi-processor environment

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175837A (en) * 1989-02-03 1992-12-29 Digital Equipment Corporation Synchronizing and processing of memory access operations in multiprocessor systems using a directory of lock bits

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006077261A2 (en) 2005-01-24 2006-07-27 International Business Machines Corporation Method for managing access to shared resources in a multi-processor environment

Also Published As

Publication number Publication date
JP5137966B2 (ja) 2013-02-06
KR20090084881A (ko) 2009-08-05
CN101563674A (zh) 2009-10-21
EP1936498A1 (en) 2008-06-25
CA2672481A1 (en) 2008-06-26
JP2010514030A (ja) 2010-04-30
WO2008074520A1 (en) 2008-06-26

Similar Documents

Publication Publication Date Title
KR101063604B1 (ko) 멀티프로세서 시스템 상에서 멀티스레드 프로그램으로부터의 메모리 액세스를 관리하기 위한 방법 및 시스템
US9164812B2 (en) Method and system to manage memory accesses from multithread programs on multiprocessor systems
US7047520B2 (en) Computer system with watchpoint support
Laadan et al. Transparent, lightweight application execution replay on commodity multiprocessor operating systems
JP5551269B2 (ja) 無制限トランザクショナル・メモリ(utm)モードでのオペレーティング・システム(os)トランザクションの処理
Venkatesh et al. Fast in-memory CRIU for docker containers
US8978131B2 (en) Deterministic serialization of access to shared resources in a multi-processor system for code instructions accessing resources in a non-deterministic order
US10049036B2 (en) Reliable distributed messaging using non-volatile system memory
US9767015B1 (en) Enhanced operating system integrity using non-volatile system memory
JPH05143453A (ja) 分散キヤツシユの階層無効化方法
JP2004295882A (ja) マルチスレッド・コンピュータにおけるコンピュータ・データの割振り解除
US9760480B1 (en) Enhanced logging using non-volatile system memory
GB2570161A (en) Simulation of exclusive instructions
US9519502B2 (en) Virtual machine backup
Lange et al. Symcall: Symbiotic virtualization through vmm-to-guest upcalls
US11366740B2 (en) Debugging shared memory errors
JP2008529114A (ja) 単一プロセッサまたはマルチプロセッサ・コンピュータ・システムにおけるマルチタスク・アプリケーションのロギングおよび再生を最適化する方法
US20220066806A1 (en) Memory copy during virtual machine migration in a virtualized computing system
US8898413B2 (en) Point-in-time copying of virtual storage
US10089220B1 (en) Saving state information resulting from non-idempotent operations in non-volatile system memory
US8892838B2 (en) Point-in-time copying of virtual storage and point-in-time dumping
Cui et al. SnapFiner: A page-aware snapshot system for virtual machines
Ren et al. Leveraging hardware-assisted virtualization for deterministic replay on commodity multi-core processors
Chen et al. Asymmetric virtual machine replication for low latency and high available service
Huang et al. Optimizing crash dump in virtualized environments

Legal Events

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