KR20130076696A - 정보 처리 장치 및 부정 액세스 방지 방법 - Google Patents

정보 처리 장치 및 부정 액세스 방지 방법 Download PDF

Info

Publication number
KR20130076696A
KR20130076696A KR1020120120734A KR20120120734A KR20130076696A KR 20130076696 A KR20130076696 A KR 20130076696A KR 1020120120734 A KR1020120120734 A KR 1020120120734A KR 20120120734 A KR20120120734 A KR 20120120734A KR 20130076696 A KR20130076696 A KR 20130076696A
Authority
KR
South Korea
Prior art keywords
memory
node
access
token
identification information
Prior art date
Application number
KR1020120120734A
Other languages
English (en)
Other versions
KR101403233B1 (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 KR20130076696A publication Critical patent/KR20130076696A/ko
Application granted granted Critical
Publication of KR101403233B1 publication Critical patent/KR101403233B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • G06F11/2033Failover techniques switching over of hardware resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2035Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant without idle spare hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2043Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant where the redundant components share a common memory address space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • 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
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering

Landscapes

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

Abstract

본 발명은 공유 메모리 구성에서의 페일오버를 정확하게 행하는 것을 목적으로 한다.
일부 이상을 공유 메모리 영역으로서 설정할 수 있는 메모리(17∼24)와 하나 이상의 CPU(12∼15)를 각각이 구비하는 복수의 노드(10)와, 노드 사이를 접속하는 인터커넥트를 갖는 정보 처리 시스템이다. 여기서, CPU(12)는, 타노드의 메모리에 액세스하기 위한 액세스 토큰을 유지하는 액세스 토큰 테이블을 가지며, 메모리 액세스 요구에 액세스 토큰을 부가하여 송신한다. 또한, CPU(15)는, 타노드로부터 자노드내의 메모리에의 액세스의 허가를 제어하는 메모리 토큰을 유지하는 메모리 토큰 레지스터를 갖는다. 또한 CPU(15)는, CPU(12)로부터의 메모리 액세스 요구에 부가된 액세스 토큰과, 메모리 토큰 레지스터에 유지한 메모리 토큰에 기초하여, 메모리 액세스 요구 실행의 가부를 제어한다.

Description

정보 처리 장치 및 부정 액세스 방지 방법{INFORMATION PROCESSING APPARATUS AND UNAUTHORIZED ACCESS PREVENTION METHOD}
본 발명은, 정보 처리 장치 및 부정 액세스 방지 방법에 관한 것이다.
종래, 하나 또는 복수의 CPU와 메모리를 갖는 복수의 노드를 LAN이나 인피니밴드(InfiniBand)로 접속하고, 각 노드마다 독립된 OS(Operating System)를 실행시키는 클러스터 구성의 정보 처리 시스템이 알려져 있다. 이러한 클러스터 구성의 정보 처리 시스템은, 각 CPU가 각 노드의 메모리를 공유하고, 병렬하여 처리를 실행한다.
도 33은, 클러스터 구성의 정보 처리 시스템을 설명하기 위한 도면이다. 도 33에 도시하는 예에서는, 정보 처리 시스템은, LAN이나 인피니밴드로 서로 접속된 복수의 노드(50∼52)를 갖는다. 여기서, 노드(50)는 메모리(50a), OS(50b), CPU(Central Processing Unit)(50c)를 갖는다. 마찬가지로, 노드(51)는 메모리(51a), OS(51b), CPU(51c)를 가지며, 노드(52)는 메모리(52a), Os(52b), CPU(52c)를 갖는다.
각 노드(50∼52)는, 노드마다 독립된 OS(50b∼52b)를 실행하고 있어, OS(50b∼52b)의 고장이 정보 처리 시스템 전체에 파급하는 것을 막는다. 또한, 각 노드(50∼52)에 포함되는, 하나 또는 복수의 CPU(50c∼52c)는 각 메모리(50a∼52a)를 노드내에서 공유하고 있고, LAN이나 인피니밴드를 통해, 다른 노드가 갖는 메모리에 액세스한다.
도 34는, 노드 사이의 메모리 액세스를 설명하기 위한 도면이다. 예컨대 노드(50)는, 자(自)노드로 동작하는 애플리케이션이 발행한 메모리 액세스의 요구를 드라이버, OS, 하드웨어를 통해, 노드(51)에 송신한다. 그렇게 하면, 노드(51)는, 노드(50)로부터 수신한 리퀘스트를, 하드웨어, OS, 드라이버를 통해 애플리케이션에 전하고, 애플리케이션에 메모리 액세스를 실행시킨다.
여기서, 클러스터 구성의 정보 처리 시스템에서는, 액세스 대상이 되는 노드의 애플리케이션을 통해 메모리 액세스가 실행되기 때문에, 메모리 액세스의 레이턴시가 증가하고, 애플리케이션의 아키텍쳐가 복잡하게 된다. 그래서, 복수의 노드를 인터커넥트로 접속하고, 동일한 어드레스 공간에 맵핑한 메모리에 대하여, 각 노드의 애플리케이션이 직접 액세스하는 공유 메모리 구성의 정보 처리 시스템이 알려져 있다.
도 35는, 공유 메모리 구성의 기술이 적용된 정보 처리 시스템을 설명하기 위한 도면이다. 도 35에 도시하는 예에서는, 노드(53)와 노드(54)가 인터커넥트로 접속되어 있고, 노드(53)와 노드(54)가 실행하는 애플리케이션이 직접 액세스 가능한 어드레스 공간에, 리모트 메모리가 맵핑되어 있다. 그리고, 각 노드(53, 54)가 실행하는 애플리케이션은, 자노드의 메모리에 대한 메모리 액세스와 마찬가지로, 리모트 메모리에 대한 메모리 액세스의 요구를 발행한다.
한편, 메모리의 기억 영역에 액세스하기 위한 스토리지 키를 설정함으로써, 애플리케이션이 액세스해야 하는 것이 아닌 메모리 영역에의 부정한 액세스를 방지하는 기술이 알려져 있다. 도 36은, 부정한 메모리 액세스를 방지하는 기능을 설명하기 위한 도면이다. 예컨대 도 36에 도시하는 예에서는, OS가, 메모리 영역에 대하여, 2 킬로바이트 또는 4 킬로바이트마다, 4비트의 스토리지 키를 미리 설정한다. 또한 OS는, 프로그램 카운터를 세팅할 때에, 애플리케이션이 이용하는 메모리 영역의 스토리지 키를 액세스 키로서 프로그램 스테이터스 워드에 세팅한다.
그렇게 하면, 명령 유닛은, 프로그램 카운터를 판독하고, 메모리 액세스의 요구를 메모리 액세스 유닛에 발행한다. 또한, 메모리 액세스 유닛은, 명령 유닛으로부터 메모리 액세스의 요구를 취득하면, 프로그램 스테이터스 워드에 세팅된 액세스 키와, 스토리지 키가 일치하는지의 여부를 판별한다.
그리고, 메모리 액세스 유닛은, 스토리지 키와 액세스 키가 일치하는 것으로 판별한 경우에는, 메모리 액세스를 허가하고, 액세스 대상이 되는 메모리 영역에 기억된 데이터를 명령 유닛에 출력한다. 또한, 메모리 액세스 유닛은, 스토리지 키와 액세스 키가 일치하지 않는 경우는, 메모리 액세스를 허가하지 않고, 애플리케이션이 사용해야 하는 것이 아닌 메모리 영역에의 부정한 액세스를 방지한다.
특허문헌 1: 일본 특허 공표 제2009-537879호 공보 특허문헌 2: 일본 특허 공개 평05-204762호 공보 특허문헌 3: 일본 특허 공개 평2000-235558호 공보
여기서, 전술한 공유 메모리 구성의 정보 처리 시스템은, 어떤 노드가 실행하는 애플리케이션이 고장나 다른 노드와 통신 불능이 된 경우에는, 고장난 노드의 처리를 다른 노드에 옮기는 페일오버(failover)를 정확하게 실행할 수 없다고 하는 문제가 있다.
이하, 도 37a, 도 37b를 이용하여, 페일오버를 정상적으로 실행할 수 없는 예에 대해서 설명한다. 도 37a는, 페일오버를 정상적으로 실행할 수 없는 예에 대해서 설명하기 위한 제1 도면이다. 또한, 도 37b는, 페일오버를 정상적으로 실행할 수 없는 예에 대해서 설명하기 위한 제2 도면이다. 또한 도 37a, 도 37b에 도시하는 예에서는, 노드(55)가 실행하는 애플리케이션에 장해가 발생하여, 다른 노드와 통신을 할 수 없게 된 예에 대해서 설명한다.
예컨대 도 37a에 도시하는 바와 같이, 노드(56)는, 노드(55)가 실행하는 애플리케이션으로부터의 메모리 액세스를 접수하지만, 노드(55)와 통신을 행할 수 없게 되었기 때문에, 노드(55)가 고장난 것으로 판별한다. 이러한 경우에는, 도 37b에 도시하는 바와 같이, 노드(55)가 실행하는 처리를 노드(57)에 옮기는 페일오버가 실행된다.
그러나, 노드(56)는, 노드(55)와 통신할 수 없기 때문에, 노드(55)로부터의 메모리 액세스를 정지시킬 수 없다. 이 결과, 노드(55)와 노드(57)가 동일한 애플리케이션을 실행하는 스플릿 브레인(split brain) 상태가 발생하여, 페일오버를 정확하게 실행할 수 없다.
그래서, 전술한 스토리지 키를 설정하는 기술을 공유 메모리 구성의 정보 처리 시스템에 적용하여, 스토리지 키를 변경함으로써, 타노드로부터 자노드가 갖는 메모리에의 액세스를 막는 것도 생각할 수 있다. 그러나, 전술한 스토리지 키를 설정하는 기술에서는, 동일한 OS가 스토리지 키와 애플리케이션 키를 설정한다. 이 때문에, 메모리 액세스원의 노드와 액세스 대상이 되는 노드가 상이한 OS를 실행하는 경우에는, 스토리지 키를 변경할 수 없어, 고장난 노드로부터의 액세스를 막을 수 없다.
일 측면에서는, 본 발명은, 공유 메모리 구성에서의 페일오버를 정확하게 행하는 것을 목적으로 한다.
일 측면에서는, 일부 이상을 공유 메모리 영역으로서 설정할 수 있는 기억 장치와 하나 이상의 연산 장치를 각각이 구비하는 복수의 노드와, 복수의 노드 사이를 접속하는 인터커넥트를 갖는 정보 처리 장치이다. 여기서, 제1 노드가 갖는 연산 장치의 각각은, 다른 노드의 기억 장치에 액세스하기 위한 식별 정보를 유지하는 제1 기억부와, 다른 노드에의 통신 데이터에 식별 정보를 부가하여 송신하는 송신부를 갖는다. 또한 제2 노드는, 타노드로부터 자노드의 기억 장치의 공유 메모리 영역에의 액세스 허가의 제어에 이용하는 식별 정보를 유지하는 제2 기억부를 갖는다. 또한 제2 노드는, 제1 노드로부터의 통신 데이터에 부가된 식별 정보와, 제2 기억부에 기억된 식별 정보에 기초하여, 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스 가부를 제어하는 제어부를 갖는다.
일 실시형태에 의하면, 공유 메모리 구성에서의 페일오버를 정확하게 행한다.
도 1은 실시예 1에 따른 정보 처리 시스템을 설명하기 위한 도면.
도 2는 실시예 1에 따른 노드의 기능 구성을 설명하기 위한 도면.
도 3은 실시예 1에 따른 메모리의 할당을 설명하기 위한 도면.
도 4는 실시예 1에 따른 정보 처리 시스템이 각 메모리에 맵핑하는 메모리 맵을 설명하기 위한 도면.
도 5는 실시예 1에 따른 정보 처리 시스템이 할당하는 공유 메모리 영역을 설명하기 위한 도면.
도 6은 실시예 1에 따른 공유 메모리 세그먼트 관리 테이블을 설명하기 위한 도면.
도 7은 실시예 1에 따른 메모리 토큰 관리 테이블을 설명하기 위한 도면.
도 8은 실시예 1에 따른 CPU의 일례를 설명하기 위한 도면.
도 9는 실시예 1에 따른 액세스 토큰 테이블의 레지스터 구성을 설명하기 위한 도면.
도 10은 액세스 토큰 테이블의 레지스터 필드를 설명하기 위한 도면.
도 11은 실시예 1에 따른 메모리 토큰 체커의 일례를 설명하기 위한 도면.
도 12는 메모리 액세스 요구의 일례를 설명하기 위한 도면.
도 13은 오퍼레이션 코드가 나타내는 처리의 일례를 설명하기 위한 도면.
도 14는 액세스 판정 제어기에 의한 판정의 일례를 설명하기 위한 도면.
도 15는 홈 스테이트 머신이 실행하는 처리의 내용을 나타내는 도면.
도 16은 노드 사이의 메모리 액세스의 흐름을 설명하기 위한 도면.
도 17은 고장난 노드로부터의 메모리 액세스를 멈추는 처리에 대해서 설명하기 위한 도면.
도 18은 고장이 발생한 노드에 의한 메모리 액세스를 막는 처리를 설명하기 위한 제1 도면.
도 19는 고장이 발생한 노드에 의한 메모리 액세스를 막는 처리를 설명하기 위한 제2 도면.
도 20은 액세스 토큰을 취득하는 처리의 흐름을 설명하기 위한 시퀀스도.
도 21은 복수의 세그먼트에 대하여 액세스를 행하는 처리의 흐름을 설명하기 위한 시퀀스도.
도 22는 콘텍스트 스위치의 흐름을 설명하기 위한 시퀀스도.
도 23은 메모리 토큰을 변경하는 처리의 흐름을 설명하기 위한 시퀀스도.
도 24는 메모리 토큰을 변경하는 처리의 변형을 설명하기 위한 시퀀스도.
도 25는, 고장난 노드를 분리하는 처리의 흐름을 설명하기 위한 시퀀스도.
도 26은 메모리 토큰을 변경하는 처리 흐름의 일례를 설명하기 위한 흐름도.
도 27은 공유 메모리 세그먼트 관리 테이블과 메모리 토큰 관리 테이블을 갱신하는 처리의 흐름에 대해서 설명하기 위한 흐름도.
도 28은 공유 메모리 세그먼트 관리 테이블의 갱신을 설명하기 위한 도면.
도 29는 메모리 토큰 관리 테이블의 갱신을 설명하기 위한 도면.
도 30은 멀티 스레드(multi-thread) 대응의 액세스 토큰 테이블의 일례를 설명하기 위한 도면.
도 31은 메모리 토큰 체커의 변형을 설명하기 위한 도면.
도 32는, 미리 허가된 노드에만 메모리 액세스를 허가하는 메모리 토큰 체커를 설명하기 위한 도면.
도 33은 클러스터 구성의 정보 처리 시스템을 설명하기 위한 도면.
도 34는 노드 사이의 메모리 액세스를 설명하기 위한 도면.
도 35는 공유 메모리 구성의 기술이 적용된 정보 처리 시스템을 설명하기 위한 도면.
도 36은 부정한 메모리 액세스를 방지하는 기능을 설명하기 위한 도면.
도 37a는 페일오버를 정상적으로 실행할 수 없는 예에 대해서 설명하기 위한 제1 도면.
도 37b는 페일오버를 정상적으로 실행할 수 없는 예에 대해서 설명하기 위한 제2 도면.
이하에 첨부 도면을 참조하여 본원에 따른 정보 처리 장치 및 부정 액세스 방지 방법에 대해서 설명한다.
[실시예 1]
이하의 실시예 1에서는, 도 1을 이용하여, 정보 처리 시스템의 일례를 설명한다. 도 1은, 실시예 1에 따른 정보 처리 시스템을 설명하기 위한 도면이다. 도 1에 도시하는 예에서는, 정보 처리 시스템(1)은 클라이언트 단말(2), 클라이언트 단말(2a), LAN(Local Area Network) 스위치(3), 관리 단말(4), LAN 스위치(5), 2중 글로벌 크로스바(6), 복수의 노드(10∼10m)를 갖는다. 또한, 글로벌 크로스바(6)는, 서비스 프로세서(7)를 갖는다.
본 실시예에서, 노드는 하나의 독립된 OS(Operating System)가 주행하는 단위이며, OS가 주행하기 위해 최저한 필요한 장치를 포함한다. 뒤에 상세히 진술하지만, 이들은 하나 이상의 CPU, 메모리, HDD(Hard Disk Drive) 또는 HDD 대신에 외부 기억 장치를 갖는다. 노드는 물리적으로 단일 장치여도 좋고, 케이블 등의 장치간 접속 기능에 의해 접속되어 물리적으로 복수의 장치로 구성되어 있어도 좋다.
각 노드(10∼10m)는, 서비스용 LAN에 의해 LAN 스위치(3) 및 각 클라이언트 단말(2, 2a)과 접속되어 있다. 또한, 각 노드(10∼10m)는 내부 LAN에 의해 LAN 스위치(5)와 접속되어 있다. 또한, 각 노드(10∼10m)는 관리 LAN을 통해 관리 단말(4)과 접속되어 있다. 또한, 각 노드(10∼10m)는 2중 글로벌 크로스바(6)와 접속되어 있고, 인터커넥트를 통해 서로 접속되어 있다.
각 클라이언트 단말(2, 2a)은, 서비스용 LAN을 통해 각 노드(10∼10m)로부터 서비스를 취득한다. 또한 도 1에서는 도시를 생략했지만, 정보 처리 시스템(1)은, 임의의 수의 클라이언트 단말을 추가로 가져도 좋다.
노드(10)는, 서비스 프로세서(11), CPU(12), 로컬 XB(크로스바)(16)를 갖는다. 또한, 다른 노드(10a∼10m)는, 노드(10)와 마찬가지로, 서비스 프로세서(11a∼11m), CPU(12a∼12m), 로컬 XB(16a∼16m)를 갖는다.
각 서비스 프로세서(11∼11m)는, 관리 LAN을 통해 관리 단말(4)과 접속되어 있고, 각 노드(10∼10m)의 전원 관리 등의 관리 제어를 실행한다. 또한 글로벌 크로스바(6)가 갖는 서비스 프로세서(7)는, 각 서비스 프로세서(11∼11m)의 마스터로서 동작하고, 전체를 관리 제어한다. 여기서, 각 서비스 프로세서(7, 11∼11m)가 실행하는 관리 제어의 예로서는, 전원 관리, 리셋, 동작 모드의 변경, 노드의 추가나 삭제의 설정, 에러 로그의 수집, 축퇴 동작 제어 등이다.
또한, 노드(10∼10m)는, 각각 독립적으로 OS(Operating System)를 실행한다. 또한, 도 1에서는 생략했지만, 각 노드(10∼10m)는 CPU(12∼12m) 이외에도 복수의 CPU를 갖는다. 각 노드(10∼10m)의 CPU는, 로컬 XB(16∼16m)를 통해, 글로벌 크로스바(6)와 접속되어 있다.
각 노드(10∼10m)의 CPU는, 메모리 액세스의 리퀘스트인 메모리 액세스 요구를 로컬 XB(16∼16m)에 출력함으로써, 다른 노드에 메모리 액세스 요구를 전송한다. 그리고, 각 노드(10∼10m)의 CPU는, 메모리 액세스 요구를 취득하면, 자신이 자신과 접속된 메모리에 대하여 액세스를 행할 때와 마찬가지로 메모리 액세스를 실행한다.
다음에, 도 2를 이용하여, 각 노드(10∼10m)의 기능 구성에 대해서 설명한다. 또한, 이하의 설명에서는, 노드(10)의 기능 구성에 대해서 설명하고, 각 노드(10a∼10m)는, 노드(10)와 같은 처리를 실행하는 것으로서, 설명을 생략한다.
도 2는, 실시예 1에 따른 노드의 기능 구성을 설명하기 위한 도면이다. 도 2에 도시하는 예에서는, 노드(10)는 서비스 프로세서(11), 복수의 CPU(12∼15), 로컬 XB(16), 복수의 메모리(17∼24), PCIe(Peripheral Component Interconnect Express) 스위치(25)를 갖는다. 또한 노드(10)는, 서비스용 LAN과 접속하기 위한 LAN 어댑터(26), 관리용 LAN과 접속하기 위한 LAN 어댑터(27), SAS(Serial Attached SCSI)(28), HDD(Hard Disk Drive)(29)를 갖는다.
또한, 메모리(17) 및 메모리(18)는, CPU(13)와 접속되어 있고, CPU(13)에 의한 메모리 액세스를 접수하는 기억 장치이다. 또한, 메모리(19) 및 메모리(20)는, CPU(12)와 접속되어 있고, CPU(12)에 의한 메모리 액세스를 접수하는 기억 장치이다. 또한, 메모리(21) 및 메모리(22)는, CPU(14)와 접속되어 있고, CPU(14)에 의한 메모리 액세스를 접수하는 기억 장치이다.
또한, 메모리(23) 및 메모리(24)는, CPU(15)와 접속되어 있고, CPU(15)에 의한 메모리 액세스를 접수하는 기억 장치이다. 또한, 도 2에 도시하는 예에서는, 노드(10)는, HDD(29)를 갖고 있지만, 실시예는 이것에 한정되는 것이 아니라, SAN(Storage Area Network) 등의 기술을 적용하여, 노드(10) 외부에 설치하여도 좋다.
서비스 프로세서(11)는, 노드(10)의 관리 제어를 실행한다. 구체적으로는, 서비스 프로세서(11)는, 처리를 실행하는 프로세서와 FPGA(Field-Programmable Gate Array)를 가지며, 관리 단말(4)로부터 관리용 LAN을 통해, 관리 제어의 실행 명령을 접수한다. 그리고, 서비스 프로세서(11)는, 관리 단말(4)로부터 접수한 실행 명령에 따라, 각종 관리 제어를 실행한다.
PCIe 스위치(25)는, 각 CPU(12∼15)로부터 PCIe 슬롯을 통해 접속되는 I/O 장치 등에의 액세스를 제어하는 스위치이다. 또한, LAN 어댑터(26)는, 서비스용 LAN과 노드(10)를 접속하는 LAN 어댑터이다. 또한, LAN 어댑터(27)는, 관리용 LAN과 노드(10)를 접속하는 LAN 어댑터이다. 또한, SAS(28)는 PCIe 슬롯에 탑재된 LAN이나 SAS용 어댑터이며, HDD(29)와 각 CPU(12∼15)의 접속을 중계한다.
다음에, 각 CPU(12∼15)에 대해서 설명한다. 또한, 이하의 설명에서는, CPU(12)에 대해서 설명하고, CPU(13∼15)는, CPU(12)와 같은 기능을 발휘하는 것으로서 설명을 생략한다.
CPU(12)는, 다른 CPU(13∼15)와 서로 접속되어 있다. 또한, CPU(12)는 메모리(19) 또는 메모리(20)가 기억하는 데이터를 캐시하는 캐시 메모리를 가지며, 캐시한 데이터를 이용하여, 연산 처리를 실행한다. 또한, CPU(12)는 메모리(19) 및 메모리(20)에 대하여 메모리 액세스를 행하는 메모리 인터페이스의 기능을 갖는다. 또한 CPU(12)는, PCIe 스위치(25)를 통해, HDD(29)나 내부 LAN, 관리용 LAN 등을 이용한 액세스를 제어하는 PCIe 인터페이스 기능을 갖는다.
또한, CPU(12)는 로컬 XB(16), 글로벌 크로스바(6)를 통해, 다른 노드(10a∼10m)가 갖는 CPU와 인터커넥트로 접속되고, 상호 메모리 액세스의 요구 등을 송수신하는 인터커넥트 라우터 기능을 갖는다. 이러한 CPU(12)는, 예컨대 실행하는 프로세스에 의해, 메모리(19), 또는 메모리(20)에 대한 메모리 액세스 요구가 발행된 경우에는, 이하의 처리를 실행한다. 즉, CPU(12)는 메모리(19), 또는 메모리(20)에 액세스하고, 액세스 대상이 되는 데이터를 캐시한다.
또한, CPU(12)는 실행하는 프로세스에 의해, 메모리(19), 메모리(20) 이외의 메모리에 대한 메모리 액세스 요구가 발행된 경우에는, 메모리 액세스 대상이 되는 메모리와 접속된 CPU를 식별하고, 식별한 CPU에 대하여 메모리 액세스 요구를 송신한다. 상세하게는, CPU(12)는 액세스 대상이 되는 메모리 어드레스와, 메모리 어드레스가 나타내는 기억 영역에 액세스하는 CPU를 일의로 나타내는 정보를 대응시킨 노드맵을 갖는다.
그리고, CPU(12)는, 프로세스가 메모리 액세스 요구를 발행한 경우에는, 노드맵을 참조하여, 메모리 액세스의 대상이 되는 메모리 어드레스에 대응한 CPU를 식별한다. 그 후, CPU(12)는, 식별한 CPU를 수신 목적지로 하는 패킷을 생성하고, 생성한 패킷에 메모리 액세스 요구를 저장하여, CPU(12∼15)의 상호 접속, 또는 로컬 XB(16)에 출력한다. 로컬 XB(16)에 출력된 경우에는, 로컬 XB(16)는, 글로벌 크로스바(6)를 통해, 패킷을 수신 목적지가 되는 CPU에 송신한다.
여기서, CPU(12)는, 전술한 처리에 더하여, 이하의 처리를 실행한다. 우선, CPU(12)는, 메모리(19) 및 메모리(20)의 각 기억 영역 중, 다른 노드와 공유하는 기억 영역에, 메모리 토큰이라고 불리는 값을 미리 설정한다. 그리고, CPU(12)는, 메모리(19) 또는 메모리(20)에 대하여 메모리 액세스 요구를 발행하는 CPU에 대하여, 액세스를 허가하는 기억 영역을 통지하고, 통지한 기억 영역에 대응하는 메모리 토큰을 액세스 토큰으로서 통지한다.
또한, CPU(12)는, 자신이 메모리 액세스 요구를 송신하는 노드로부터, 액세스 토큰을 미리 취득하고, 취득한 액세스 토큰을 유지한다. 그리고, CPU(12)는, 메모리 액세스 요구를 발행하는 경우에는, 메모리 액세스 요구와 함께, 유지한 액세스 토큰을 패킷에 저장하여 송신한다.
또한, CPU(12)는, 다른 노드의 CPU로부터 메모리 액세스 요구를 수신한 경우는, 메모리 액세스 요구와 함께 수신한 액세스 토큰이, 액세스 대상이 되는 기억 영역에 대응하는 메모리 토큰과 일치하는지의 여부를 판별한다. 그리고, CPU(12)는, 액세스 토큰과 메모리 토큰이 일치하는 경우에는, 메모리 액세스를 실행하고, 액세스 토큰과 메모리 토큰이 일치하지 않는 경우에는, 메모리 액세스의 실행을 거부한다.
또한, CPU(12)는 메모리(19), 및 메모리(20)에 대한 메모리 액세스를 실행하는 경우에는, 메모리(19), 또는 메모리(20)로부터 캐시된 데이터의 코히런시를 유지하는 처리를 실행한다. 예컨대 CPU(12)는 메모리(19), 또는 메모리(20)로부터 데이터를 캐시한 CPU에 대하여 스누프를 송신하고, 캐시된 데이터의 라이트백(write back)을 실행한다.
로컬 XB(16)는 노드(10)가 갖는 CPU(12∼15)와, 다른 노드(10a∼10m)가 갖는 CPU 사이에서 교환되는 패킷을, 지정 상대 목적지에 전송하기 위한 스위치이다. 예컨대 로컬 XB(16)는 CPU(12)가, CPU(12a)를 수신 목적지로서 발행한 패킷을, 글로벌 크로스바(6)를 통해, 노드(10a)가 갖는 CPU(12a)에 송신한다.
메모리(17)∼메모리(24)는, OS나 애플리케이션이 이용하는 데이터를 기억하는 메모리이며, 예컨대 DIMM(Dual In-Line Memory Module)이다. 또한 메모리(17∼24)는, 동일한 메모리 어드레스 공간에 맵핑되어 있다.
또한, 메모리(17∼24)는, 동일 노드내의 CPU(12∼15)만이 액세스 가능한 영역, 즉, 자신을 갖는 노드 전용의 영역인 로컬 영역을 갖는다. 또한 메모리(17∼24)는, 정보 처리 시스템(1)이 갖는 임의의 CPU가 액세스 가능한 영역, 즉 모든 노드가 이용 가능한 공유 메모리 영역을 갖는다. 또한, 메모리(17)∼메모리(24)의 공유 메모리 영역은, 복수의 세그먼트로 분할된다. 그리고, 각 세그먼트는, 메모리 토큰에 의한 액세스 제어가 행해지는 프로텍트 영역, 또는 메모리 토큰에 의한 액세스 제어를 행하지 않는 논프로텍트 영역이 된다.
여기서, 도 3, 도 4를 이용하여, 각 메모리(17∼24)에 맵핑되는 메모리 어드레스에 대해서 설명한다. 도 3은, 실시예 1에 따른 메모리의 할당을 설명하기 위한 도면이다. 예컨대 정보 처리 시스템(1)은, 각 노드가 갖는 2개의 메모리 중, 한쪽 메모리를 로컬 영역뿐인 메모리로 하고, 다른 쪽 메모리를 공용 메모리 영역뿐인 메모리로 한다. 즉, 도 3중 (A)에 도시하는 바와 같이, 메모리(17), 메모리(19), 메모리(21), 메모리(23)를 노드 전용의 메모리로 하고, 도 3중 (B)에 도시하는 바와 같이, 메모리(18), 메모리(20), 메모리(22), 메모리(24)를 공용하는 메모리로 한다.
도 4는, 실시예 1에 따른 정보 처리 시스템이 각 메모리에 맵핑하는 메모리 맵을 설명하기 위한 도면이다. 또한 도 4에는, 전부 128 테라바이트의 메모리 어드레스 공간이 준비되고, 그 중 로컬 영역에 64 테라바이트가 할당되며, 공유 메모리 영역에 64 테라바이트가 할당되는 예에 대해서 도시한다.
예컨대 정보 처리 시스템(1)은, 노드(10∼10m)가 갖는 메모리 중, 로컬 영역으로서 이용하는 범위에 「0」부터 「246-1」까지의 메모리 어드레스를 할당한다. 또한 정보 처리 시스템(1)은, 노드(10∼10m)가 갖는 메모리 중, 공유 메모리 영역으로서 이용하는 범위에, 「246」부터 「247-1」까지의 메모리 어드레스를 할당한다.
즉, 도 3 및 도 4에 도시하는 예에서는, 정보 처리 시스템(1)은, 도 3 중 (A)에 도시하는 메모리(17), 메모리(19), 메모리(21), 메모리(23)에 대하여, 도 4 중 (C)에 도시하는 범위의 메모리 어드레스를 맵핑한다. 또한, 정보 처리 시스템(1)은, 도 3 중 (B)에 도시하는 메모리(18), 메모리(20), 메모리(22), 메모리(24)에 대하여, 도 4 중 (D)에 도시하는 범위의 메모리 어드레스를 맵핑한다. 또한 도 4 중 「247」부터 「248-1」까지의 어드레스는, UC(Uncacheable) 영역으로서 이용되는 어드레스의 범위이며, 예컨대 HDD(29) 등의 I/O 장치가 이용하는 I/O 공간으로서 이용되는 어드레스의 범위이다.
이와 같이, 정보 처리 시스템(1)은, 각 노드(10∼10m)가 갖는 메모리에 대하여, 단일의 메모리 어드레스 공간을 맵핑한다. 이 때문에, 임의의 CPU가 임의의 노드의 공유 메모리 영역에 대하여 직접 액세스할 수 있다. 또한 도 4에 도시하는 메모리 맵은 어디까지 일례이며, 임의의 할당을 행하는 것으로 하여도 좋다.
즉, 메모리 맵 상의 메모리 어드레스 모두가 메모리에 할당되어 있을 필요는 없고, 메모리 홀이 존재하여도 좋다. 또한, 정보 처리 시스템(1)이 갖는 각 노드에 OS가 이용하는 로컬 영역이 존재하고, 하나 이상의 노드에 공유 메모리 영역이 존재하도록, 메모리 맵을 설정하면 좋다.
또한, 정보 처리 시스템(1)은, 하나의 노드 내에 포함되는 메모리[예컨대 메모리(17)와 메모리(18)]에 대하여 연속하는 메모리 어드레스를 맵한 경우는, 제어자원을 삭감할 수 있다. 또한, 정보 처리 시스템(1)은, 적어도 세그먼트 영역의 얼라인먼트를 맞출 수 있도록 메모리 어드레스를 할당한다.
다음에, 도 5를 이용하여, 각 노드의 메모리에 대하여 할당되는 공유 메모리 영역에 대해서 설명한다. 도 5는, 실시예 1에 따른 정보 처리 시스템이 할당하는 공유 메모리 영역을 설명하기 위한 도면이다. 또한 도 5에 도시하는 예에서는, 정보 처리 시스템(1)이 노드 #0∼#n를 가지며, 각 노드 #0∼#n에 대하여 공유 메모리 영역을 분류하는 예에 대해서 설명한다.
예컨대 도 5 중 (1)에 도시하는 바와 같이, 정보 처리 시스템(1)은, 64 테라바이트의 로컬 영역과, 64 테라바이트의 메모리 영역을, 각 노드 #0∼#n에 대하여 할당한다. 상세하게는, 정보 처리 시스템(1)은, 도 5 중 (2)에 도시하는 바와 같이, 64 테라바이트의 공유 메모리 영역을, 각 노드 #0∼#n에 대하여 균등하게 분류한다.
여기서, 각 노드 #0∼#n은, 분류된 공유 메모리 영역을, 프로텍트 영역과 논프로텍트 영역으로 나눈다. 여기서, 프로텍트 영역이란, 다른 노드로부터 메모리 액세스 요구를 수신했을 때에, 액세스 토큰과 메모리 토큰이 일치하는지의 여부를 판별함으로써, 액세스 보호를 행하는 영역이다. 또한, 논프로텍트 영역이란, 다른 노드로부터 자유롭게 메모리 액세스를 행할 수 있는 영역이다.
예컨대, 도 5 중 (3)에 도시하는 바와 같이, 노드 #1은, 자신에게 할당된 공유 메모리 영역 중, 최대 4 테라바이트를 프로텍트 영역, 또는 논프로텍트 영역으로 할 수 있다. 또한, 도 5 중 (4)에 도시하는 바와 같이, 노드 #1은, 공유 메모리 영역을 세그먼트 #0∼#2047까지의 2 기가바이트의 세그먼트로 분할한다. 그리고, 노드 #1은, 도 5 중 (5)에 도시하는 바와 같이, 세그먼트마다 메모리 토큰을 설정한다.
또한, 도 5에 도시하는 예에서는, 노드 #1은, 세그먼트 #0∼#2를 프로텍트 영역으로 하고, 메모리 토큰을 설정한다. 또한 메모리 토큰은, 예컨대 13비트의 값이다. 또한 도 5에 도시하는 예에서는, 노드 #1은 세그먼트 #3∼#2047를 논프로텍트 영역으로 하고, 메모리 토큰으로서, 「all0」을 설정한다. 즉, 각 노드 #0∼#n은, 논프로텍트 영역에 대하여 액세스를 행하는 경우에는, 「all0」의 액세스 토큰을 이용함으로써, 액세스를 행할 수 있다.
또한, 노드 #m도, 자신의 공유 메모리 영역을 세그먼트 #0∼#2047로 분할하고, 각 세그먼트 #0∼#2047에 메모리 토큰을 설정한다. 또한, 노드 #m이 자신의 각 세그먼트 #0∼#2047에 대하여 설정한 메모리 토큰은, 도 5 중 (6)에 도시하는 바와 같이, 노드 #1이 액세스 토큰으로서 이용하게 된다. 이 때문에, 노드 #1은, 노드 #m의 공유 메모리 영역에 액세스하는 경우에는, 노드 #m이 설정한 메모리 토큰을 취득하고, 취득한 메모리 토큰을 액세스 토큰으로서 이용함으로써, 노드 #m의 공유 메모리 영역에 액세스를 행한다.
또한, 각 노드 #0∼#n은, 공유 메모리 영역의 각 세그먼트를 관리하기 위한 공유 메모리 세그먼트 관리 테이블을 로컬 영역에 갖는다. 또한, 각 노드 #0∼#n은, 동일한 메모리 토큰을 복수의 세그먼트에 설정하는 것을 막기 위해, 설정 완료된 메모리 토큰을 관리하는 메모리 토큰 관리 테이블을 로컬 영역에 갖는다. 이하, 도 6 및 도 7을 이용하여, 공유 메모리 세그먼트 관리 테이블과, 메모리 토큰 관리 테이블에 대해서 설명한다.
우선, 도 6을 이용하여, 공유 메모리 세그먼트 관리 테이블의 일례를 설명한다. 도 6은, 실시예 1에 따른 공유 메모리 세그먼트 관리 테이블을 설명하기 위한 도면이다. 또한, 도 6에는, 노드 #2가 갖는 공유 메모리 세그먼트 관리 테이블을 도시한다. 도 6에 도시하는 바와 같이, 공유 메모리 세그먼트 관리 테이블은, 세그먼트 번호, 사용 플래그, 애플리케이션 ID, 사용 노드 플래그, 토큰이 저장된다.
여기서, 세그먼트 번호란, 공유 메모리 영역의 각 세그먼트를 나타내는 번호이다. 사용 플래그란, 각 세그먼트가 사용되고 있는지의 여부를 나타내는 플래그이다. 애플리케이션 ID란, 각 세그먼트를 이용하고 있는 프로세스를 일의로 나타내는 ID이다. 또한, 사용 노드 플래그란, 각 세그먼트를 이용하고 있는 노드를 나타내는 플래그이다. 또한, 토큰이란, 각 세그먼트에 대하여 설정된 메모리 토큰이다.
도 6에 도시하는 예에서는, 노드 #2의 세그먼트 #0 및 세그먼트 #1은, 노드 #1이 실행하는 프로세스 중, 애플리케이션 ID 「100」이 나타내는 프로세스에 의해 사용되어 있고, 메모리 토큰이 각각 「3015」, 「2156」인 것을 나타낸다. 또한, 노드 #2의 세그먼트 #2는, 사용되어 있지 않고, 세그먼트 #3은, 노드 #3이 실행하는 프로세스 중, 애플리케이션 ID 「150」이 나타내는 프로세스에 의해 사용되어 있고, 메모리 토큰이 「all0」인 것을 나타낸다. 즉, 세그먼트 #3은, 논프로텍트 영역인 것을 나타낸다.
각 노드 #0∼#n은, 도 6에 예시한 공유 메모리 세그먼트 관리 테이블을 이용하여, 타노드로부터 수신한 메모리 액세스를 실행한다. 예컨대 노드 #2는, 노드 #1의 애플리케이션 ID 「100」이 나타내는 프로세스로부터, 액세스 토큰 「3015」과 함께 세그먼트 #0에 대한 메모리 액세스 요구를 취득한다. 이러한 경우에는, 취득한 액세스 토큰과 공유 메모리 세그먼트 관리 테이블에 저장된 메모리 토큰이 일치하기 때문에, 노드 #2는, 메모리 액세스를 실행한다.
한편, 노드 #2는, 노드 #1의 애플리케이션 ID 「100」이 나타내는 프로세스로부터, 액세스 토큰 「3000」과 함께 세그먼트 #0에 대한 메모리 액세스 요구를 취득한 경우는, 메모리 토큰과 액세스 토큰이 일치하지 않는 것으로 판별한다. 이 때문에, 노드 #2는, 메모리 액세스 요구를 실행하지 않는다.
또한, 각 노드 #0∼#n은, 어느 하나의 세그먼트에 대해서 메모리 토큰을 변경하는 경우는, 공유 메모리 세그먼트 관리 테이블을 참조하여, 변경하는 메모리 토큰과 대응하는 세그먼트를 이용중인 노드를 식별한다. 그리고, 각 노드 #0∼#n은, 식별한 노드에 대하여, 새로운 메모리 토큰을 통지한다.
또한, 공유 메모리 세그먼트 관리 테이블은, 임의의 타이밍에, 공유 메모리의 관리를 행하는 드라이버 소프트웨어인 공유 메모리 드라이버가 설정하는 것으로 하여도 좋다. 예컨대 공유 메모리 드라이버는, 정보 처리 시스템(1)의 부팅 시나, 공유 메모리 영역에 대하는 첫회 액세스시에, 공유 메모리 세그먼트 관리 테이블을 작성한다.
다음에, 도 7을 이용하여, 메모리 토큰 관리 테이블에 대해서 설명한다, 도 7은, 실시예 1에 따른 메모리 토큰 관리 테이블을 설명하기 위한 도면이다. 도 7에 도시하는 예에서는, 메모리 토큰 관리 테이블은, 메모리 토큰의 값과, 사용 플래그와, 애플리케이션 ID를 대응시켜 기억한다. 또한 도 7에는, 노드 #1이 기억하는 메모리 토큰 관리 테이블을 도시한다.
예컨대 도 7에 도시하는 예에서는, 메모리 토큰 관리 테이블은, 애플리케이션 ID 「100」이 나타내는 프로세스가 이용하는 세그먼트에 대하여, 메모리 토큰 「0」과 메모리 토큰 「1」을 분배하고 있는 취지를 나타낸다. 또한, 메모리 토큰 관리 테이블은, 메모리 토큰 「2」를 어느 세그먼트에 대하여도 분배하고 있지 않은 취지를 나타낸다. 또한, 메모리 토큰 관리 테이블은, 애플리케이션 ID 「150」이 나타내는 프로세스가 이용하는 세그먼트에 대하여, 메모리 토큰 「3」을 분배하고 있는 취지를 나타낸다. 또한 메모리 토큰 관리 테이블은, 공유 메모리 세그먼트 관리 테이블과 마찬가지로, 공유 메모리 드라이버가 임의의 타이밍에 작성하는 것으로 하여도 좋다.
다음에, 도 8을 이용하여, CPU(12)의 상세한 기능 구성의 일례에 대해서 설명한다. 도 8은, 실시예 1에 따른 CPU의 일례를 설명하기 위한 도면이다. 또한 도 8에 도시하는 예예서는, CPU(12)는, 복수의 코어를 갖는 멀티 코어 프로세서이며, L1(Level 1) 캐시, L2 캐시, 및 메모리 액세스 컨트롤러(MAC)를 내장한 프로세서로서 기재한다.
도 8에 도시하는 바와 같이, CPU(12)는 복수의 코어(30a, 30d), L1 캐시(30b, 30e), 복수의 TLB(Translation Lookaside Buffer)(30c, 30f)를 갖는다. 또한 CPU(12)는 각 코어(30a, 30d)마다, 액세스 토큰 테이블(31, 31a)을 갖는다. 또한, CPU(12)는 L2(Level 2) 캐시 태그(32), L2 캐시(32a), 캐시 스누프 컨트롤러(33), 메모리 리퀘스트 스테이트 머신(34), 어드레스 맵(35), 메모리 액세스 포트(36), 타겟 어드레스 체커(37)를 갖는다.
또한, CPU(12)는, 메모리 토큰 체커(38), 홈 스테이트 머신(39), 메모리 액세스 컨트롤러(40), 비캐시 리퀘스트 스테이트 머신(41), PCIe 인터페이스(42), 에러 레지스터(43)를 갖는다. 또한, CPU(12)는 레지스터 컨트롤러(44), 라우터(46)를 갖는다. 여기서, 레지스터 컨트롤러(44)는, 리퀘스트 레지스터(45)를 갖는다. 또한, 도 8에서는, 코어(30a), 코어(30d) 이외의 코어에 대해서는, 도시를 생략했지만, CPU(12)는, 임의의 수의 코어를 갖는 구성으로 할 수 있다.
코어(30a, 30d)는, L1 캐시(30b, 30e)에 저장된 데이터를 이용하여, 연산 처리를 실행한다. L1 캐시(30b, 30e)는, 고속으로 액세스 가능한 기억 장치이며, 메모리(19, 20)에 저장된 데이터를 캐시하는 캐시 메모리이다. TLB(30c, 30f)는, 코어(30a, 30d)가 출력하는 가상 어드레스를 물리 어드레스로 변환한다.
액세스 토큰 테이블(31)은, 코어(30a)가 실행하는 프로세스가 공유 메모리 영역에 액세스하기 위한 액세스 토큰을 기억하는 레지스터이다. 예컨대 액세스 토큰 테이블(31)에는, 코어(30a)가 실행하는 애플리케이션에 의해, 다른 노드로부터 통지된 액세스 토큰이 세팅된다.
또한, 코어(30a)는, 액세스 대상의 데이터가 L1 캐시(30b)에 유지되어 있지 않은 경우에는, 액세스 대상의 물리 어드레스와 메모리 액세스 요구의 내용을 나타내는 오퍼레이션 코드를 출력한다. 그렇게 하면, 액세스 토큰 테이블(31)은, 세팅된 액세스 토큰과 메모리 액세스 요구를 L2 캐시 태그(32)에 출력한다.
여기서, 액세스 토큰 테이블(31)은, 코어(30a)가 실행하는 프로세스를 변경할 때에, 콘텍스트 스위치를 행하는 대상이 되는 레지스터이다. 이 때문에, CPU(12)는, 코어(30a)가 실행하는 프로세스를 다른 프로세스로 변경할 때에, 액세스 토큰 테이블(31)에 세팅된 액세스 토큰을 용이하게 변경할 수 있다. 즉, CPU(12)는, 코어(30a)가 실행하는 프로세스를 변경할 때에, 액세스 대상의 노드로부터 재차 액세스 토큰 테이블의 통지를 받지 않고도, 콘텍스트 스위치를 행하면, 신속하고 용이하게 액세스 토큰을 변경할 수 있다.
L2 캐시 태그(32)는, L2 캐시(32a)의 태그이며, L2 캐시(32a)에 액세스하기 위한 파이프 라인이다. 또한 L2 캐시 태그(32)는, 각 코어(30a, 30d)가 발행한 동일한 어드레스에 대한 메모리 액세스 요구를 시리얼라이즈 처리하는 기구를 갖는다.
캐시 스누프 컨트롤러(33)는, L2 캐시(32a)의 스누프를 제어한다. 구체적으로는, 캐시 스누프 컨트롤러(33)는, 홈 스테이트 머신(39), 또는 다른 노드가 발행한 스누프를 접수한다. 그렇게 하면, 캐시 스누프 컨트롤러(33)는, L2 캐시 태그(32)에 대하여 스누프를 발행함으로써, L2 캐시(32a)가 캐시하는 데이터의 상태를 검사한다. 그 후, 캐시 스누프 컨트롤러(33)는, 스누프의 발행원인 홈 스테이트 머신(39), 또는 다른 노드에 대하여, L2 캐시(32a)의 스누프 결과를 송신한다.
메모리 리퀘스트 스테이트 머신(34)은, L2 캐시(32a)에 액세스 대상이 되는 데이터가 저장되어 있지 않은 경우, 즉 L2 캐시 미스했을 때에 이하의 처리를 실행한다. 즉, 메모리 리퀘스트 스테이트 머신(34)은, 홈 스테이트 머신(39)에의 메모리 액세스 요구의 발행, 및 응답의 취득까지의 관리를 실행한다.
또한, 메모리 리퀘스트 스테이트 머신(34)은, 메모리 액세스 요구를 발행한 후 응답을 취득할 때까지의 사이에, 동일한 메모리 어드레스를 대상으로 하는 메모리 액세스 요구를 취득한 경우는, 후단의 메모리 액세스 요구를 대기시킨다. 그리고, 메모리 리퀘스트 스테이트 머신(34)은, 전단의 메모리 액세스 요구의 응답이 발행된 경우는, 대기시킨 메모리 액세스 요구를 발행한다. 또한 메모리 리퀘스트 스테이트 머신(34)은, 복수의 엔트리를 가지며, 엔트리마다 식별자인 8비트의 엔트리 ID를 메모리 리퀘스트 요구에 부가하여 발행한다.
또한, 메모리 리퀘스트 스테이트 머신(34)은, 메모리 액세스 요구의 대상이 되는 물리 어드레스를, 어드레스 맵(35)에 출력함으로써, 물리 어드레스가 나타내는 기억 영역에 액세스하는 CPU의 식별자를 취득한다. 그리고, 메모리 리퀘스트 스테이트 머신(34)은, CPU의 식별자를 DID(Destination ID), 즉 수신 목적지로서, 메모리 액세스 요구를 발행한다.
어드레스 맵(35)은, 물리 어드레스와, 물리 어드레스가 나타내는 기억 영역에 액세스하는 CPU의 식별자를 대응시켜 기억하고, 물리 어드레스를 CPU의 식별자로 변환한다. 예컨대 어드레스 맵(35)은, 메모리 리퀘스트 스테이트 머신(34)으로부터 물리 어드레스를 취득한 경우에는, 취득한 물리 어드레스와 대응시켜 기억된 CPU의 식별자를 DID로서 메모리 리퀘스트 스테이트 머신(34)에 발행한다.
메모리 액세스 포트(36)는, 메모리(19), 메모리(20)에 대한 메모리 액세스 요구, 즉, 홈 노드(자노드)에 대한 메모리 액세스 요구를 접수하는 포트이다. 예컨대 메모리 액세스 포트(36)는, FIFO이며, 홈 노드에 대한 메모리 액세스 요구를 일시적으로 유지한다. 그리고, 메모리 액세스 포트(36)는, 홈 스테이트 머신(39)이 메모리 액세스 요구를 실행할 수 있는 상태가 된 경우에는, 타겟 어드레스 체커(37), 메모리 토큰 체커(38), 홈 스테이트 머신(39)에 대하여, 유지한 메모리 액세스 요구를 발행한다.
타겟 어드레스 체커(37)는, 메모리 액세스 포트(36)로부터, 메모리 액세스 요구의 액세스 대상이 되는 메모리 어드레스가 자노드의 메모리, 즉 메모리(19) 및 메모리(20)의 메모리 어드레스인지의 여부를 판별한다. 그리고, 타겟 어드레스 체커(37)는, 판별 결과를 홈 스테이트 머신(39)에 통지한다.
메모리 토큰 체커(38)는, 메모리 액세스 요구의 액세스 대상이 되는 메모리 어드레스에 설정된 메모리 토큰과, 메모리 액세스 요구와 함께 발행된 액세스 토큰이 일치하는지의 여부를 판별한다. 그리고, 메모리 토큰 체커(38)는, 메모리 토큰과 액세스 토큰이 일치하는 경우에는, 액세스의 허가를 나타내는 신호를 홈 스테이트 머신(39)에 발행한다. 또한, 메모리 토큰 체커(38)는, 메모리 토큰과 액세스 토큰이 일치하지 않은 경우에는, 액세스의 불허가를 나타내는 신호를 홈 스테이트 머신(39)에 발행한다.
또한, 메모리 토큰 체커(38)는, 메모리 토큰을 기억하는 메모리 토큰 레지스터를 갖고 있고, 레지스터 컨트롤러(44)에 의해, 메모리 토큰의 설정이나 갱신이 행해진다.
홈 스테이트 머신(39)은, 메모리 액세스 요구와 함께 발행된 액세스 토큰이 메모리 토큰과 일치하는지의 여부에 따라, 메모리 액세스를 실행한다. 구체적으로는, 홈 스테이트 머신(39)은, 메모리 액세스 포트(36)로부터 메모리 액세스 요구를 취득한다. 또한 홈 스테이트 머신(39)은, 타겟 어드레스 체커(37)로부터, 메모리 액세스 요구의 대상이 자노드인지의 여부를 나타내는 판별 결과를 취득한다. 또한, 홈 스테이트 머신(39)은, 메모리 토큰 체커(38)로부터, 액세스의 허가를 나타내는 신호, 또는 액세스의 불허가를 나타내는 신호를 취득한다.
그리고, 홈 스테이트 머신(39)은, 메모리 액세스 요구의 대상이 자노드인 취지의 판별 결과를 취득하고, 액세스의 허가를 나타내는 신호를 취득한 경우에는, 메모리 액세스를 실행한다. 또한 홈 스테이트 머신(39)은, 메모리 액세스 요구의 대상이 자노드가 아닌 취지의 판별 결과를 취득한 경우, 또는 액세스의 불허가를 나타내는 신호를 취득한 경우에는, 메모리 액세스 요구를 실행하지 않고, 후술하는 액세스 예외 처리를 실행한다. 또한, 홈 스테이트 머신(39)은 액세스의 불허가를 나타내는 신호를 취득한 경우에는, 메모리 토큰과 액세스 토큰이 일치하지 않는 취지를 나타내는 토큰 불일치 에러를 에러 레지스터(43)에 저장한다.
또한, 홈 스테이트 머신(39)은, 메모리 액세스를 실행하는 경우는, 이하의 처리를 실행한다. 우선, 홈 스테이트 머신(39)은, 메모리 액세스 요구의 대상이 되는 물리 어드레스를 메모리 액세스 컨트롤러(40)에 발행하고, 메모리 액세스 요구의 대상이 되는 데이터를 메모리(19), 또는 메모리(20)로부터 취득한다. 다음에, 홈 스테이트 머신(39)은, 디렉토리 정보를 이용하여, 취득한 데이터의 캐시 상태를 판정한다.
그리고, 홈 스테이트 머신(39)은, 판정 결과에 따라, 스누프의 발행 등을 행하고, 취득한 데이터와, 캐시된 데이터를 일치시키는 처리를 실행한다. 또한 취득한 데이터와 캐시된 데이터를 일치시키는 처리에 대해서는, 코히런시를 유지하는 종래의 방법을 적용하는 것으로 한다. 그 후, 홈 스테이트 머신(39)은, 판독이나 기록 등의 메모리 액세스를 실행하고, 그 후, 발행원에 대하여, 메모리 액세스의 완료 응답을 송신한다.
메모리 액세스 컨트롤러(40)는, 메모리(19) 및 메모리(20)에 대하여 메모리 액세스를 실행한다. 예컨대 메모리 액세스 컨트롤러(40)는, 홈 스테이트 머신(39)으로부터 물리 어드레스와 데이터의 판독 지시를 취득한다. 그렇게 하면, 메모리 액세스 컨트롤러(40)는, 물리 어드레스가 나타내는 기억 영역에 저장된 데이터를 홈 스테이트 머신(39)에 송신한다.
또한, 메모리 액세스 컨트롤러(40)는, 홈 스테이트 머신(39)으로부터 물리 어드레스와 기록 지시와 데이터를 취득한 경우에는, 취득한 데이터를 취득한 물리 어드레스가 나타내는 기억 영역에 기록한다. 또한 메모리 액세스 컨트롤러(40)는, 패트롤(patrol) 기능이나 코렉트 라이트(correct write) 등의 처리를 실행하는 기능을 가져도 좋다.
비캐시 리퀘스트 스테이트 머신(41)은, CPU(12)가 갖는 각 코어(30a, 30d)나, 다른 CPU가 갖는 코어로부터, UC 영역의 메모리 어드레스에 의한 지시를 접수하고, PCIe를 통한 처리의 설정 등을 실행한다.
예컨대 비캐시 리퀘스트 스테이트 머신(41)은, 각 코어(30a, 30d)가 HDD(29) 등의 I/O 장치에 대한 판독이나 기록의 리퀘스트를 취득한 경우에는, 취득한 리퀘스트를 PCIe 인터페이스(42)에 발행한다. 그리고, 비캐시 리퀘스트 스테이트 머신(41)은, PCIe 인터페이스(42)로부터 리퀘스트의 응답을 취득한 경우에는, 취득한 응답을 코어(30a, 30d)에 송신한다.
또한, 비캐시 리퀘스트 스테이트 머신(41)은, 레지스터 컨트롤러(44)에 대한 리퀘스트를 각 코어(30a, 30d)로부터 취득한다. 이러한 경우에는, 비캐시 리퀘스트 스테이트 머신(41)은, 취득한 리퀘스트를 레지스터 컨트롤러(44)에 발행한다. 또한, 비캐시 리퀘스트 스테이트 머신(41)은, 레지스터 컨트롤러(44)로부터, 리퀘스트의 응답을 취득한 경우에는, 취득한 응답을 코어(30a, 30d)에 송신한다.
또한, 비캐시 리퀘스트 스테이트 머신(41)은, 레지스터 컨트롤러(44)를 통해, 서비스 프로세서(11)로부터, 어드레스 맵의 설정 요구를 취득한 경우에는, 취득한 요구에 따라 어드레스 맵(35)의 설정을 행하는 기능을 갖는다.
PCIe 인터페이스(42)는, PCIe 스위치(25)와 접속되어 있고, PCIe의 루트 콤플렉스이다. 예컨대 PCIe 인터페이스(42)는, 비캐시 리퀘스트 스테이트 머신(41)으로부터 I/O 장치 등에 대한 리퀘스트를 취득한 경우에는, 취득한 리퀘스트를 PCIe 스위치(25)를 통해, I/O 장치 등에 발행한다. 그리고, PCIe 인터페이스(42)는, PCIe 스위치(25)를 통해, 응답을 취득한 경우에는, 취득한 응답을 비캐시 리퀘스트 스테이트 머신(41)에 송신한다.
또한, PCIe 인터페이스(42)는, DMA(Direct Memory Access)의 기능을 갖고 있고, 임의의 CPU에 대하여 DMA 리퀘스트를 발행할 수 있다. 또한, PCIe 인터페이스(42)는, 다른 노드로부터 DMA 리퀘스트를 취득한 경우에는, DMA 리퀘스트를 실행하고, 그 후, DMA 응답을 리퀘스트원으로 발행한다.
에러 레지스터(43)는, CPU(12)내에서 발생한 에러의 정보를 유지하는 레지스터이다. 레지스터 컨트롤러(44)는, CPU(12)가 갖는 각 레지스터의 기록이나 판독을 행하는 컨트롤러이다. 예컨대 에러 레지스터(43)는, 물리 어드레스를 레지스터 어드레스로 변환하는 기능을 갖는다.
그리고, 레지스터 컨트롤러(44)는, 비캐시 리퀘스트 스테이트 머신(41) 등으로부터, 물리 어드레스로 지정된 레지스터의 판독 요구나 기록 요구를 취득한다. 그 후, 레지스터 컨트롤러(44)는, 지정된 물리 어드레스를 레지스터 어드레스로 변환하고, 레지스터 어드레스가 나타내는 레지스터의 기록이나 판독을 실행한다.
또한, 레지스터 컨트롤러(44)는, 리퀘스트 레지스터(45)를 가지며, 서비스 프로세서(11)로부터 I2C(Inter-Integrated Circuit)나 JTAG(Joint Test Action Group) 등을 통해 리퀘스트 레지스터(45)의 판독이나, 기록 요구를 취득한다. 이러한 경우에는, 레지스터 컨트롤러(44)는, 취득한 요구를 실행하고, 서비스 프로세서(11)에 응답을 출력한다. 예컨대 레지스터 컨트롤러(44)는, 각 코어(30a, 30d)가 실행하는 프로세스로부터, 비캐시 리퀘스트 스테이트 머신(41)을 통해, 메모리 토큰의 변경이 지시된 경우에는, 후술하는 메모리 토큰 레지스터를 갱신한다.
라우터(46)는, 인터커넥트용 라우터이며, DID로 지정된 수신 목적지 CPU에 패킷을 송신한다. 또한, 라우터(46)는 패킷을 송신하는 경우에는, 송신하는 패킷 보호를 위해, CRC(Cyclic Redundancy Check)의 부가 등을 행한다.
또한, 도 8에 도시하는 예에서는, 스누프를 「Snoop」로 기재하고, 응답을 「Response」, 또는 「Rsp」로 기재하며, 물리 어드레스를 「Address」로 기재하고, 메모리 토큰, 또는 액세스 토큰을 「Token」으로 기재하였다. 또한, 도 8에 도시하는 예에서는, 오퍼레이션 코드를 「op code」로 기재하였다. 또한, 메모리 리퀘스트 스테이트 머신(34)이 발행하는 메모리 액세스 요구, 즉 자노드에 의한 리퀘스트를 「Home Request」로 기재하였다.
또한, 메모리 액세스 요구를 「MEM Req」로 기재하고, 메모리 액세스 요구에 대한 응답을 「MEM Rsp」로 기재하였다. 특히, 메모리 액세스 요구에 대한 자노드의 메모리로부터의 응답을 「MEM Rsp from own」으로 기재하고, 타노드의 메모리로부터의 응답을 「MEM Rsp from other」로 기재하였다. 또한, 타노드로부터의 메모리 액세스 요구에 대한 응답을 「MEM Rsp to other」로 기재하였다.
또한, 타노드로부터의 스누프를 「Snoop from other」로 기재하고, 타노드에 송신하는 스누프를 「Snoop to other」로 기재하였다. 또한, 자신이 갖는 L2 캐시 메모리에 대하여 발행한 스누프를 「Snoop to own」으로 기재하고, 자신이 갖는 L2 캐시 메모리에 대하여 발행한 스누프의 응답을 「Snoop rsp to own」으로 기재하였다. 또한, 타노드에 송신한 스누프에 대한 응답을 「Snoop rsp from other」로 기재하고, 타노드에 송신하는 스누프의 응답을 「Snoop rsp to other」로 기재하였다.
또한, 비캐시 리퀘스트 스테이트 머신(41)이 송수신하는 리퀘스트 및 응답을 「NC(No Coherence) Req/NC Response」로 기재하였다. 또한, 레지스터 컨트롤러(44)가 송수신하는 레지스터의 판독 요구나, 기록 요구, 및 응답을 「REG R/W REQ and Response」로 기재하였다. 또한, 레지스터 컨트롤러(44)가 행하는 레지스터의 판독이나 기록을 「Register R/W and Response」로 기재하였다. 또한, PCIe 인터페이스(42)를 통하는 요구 및 응답을 「PCI CNFG Req and Response」로 기재하였다. 또한, DMA 리퀘스트를 「DMA Request」로 기재하고, DMA 응답을 「DMA Response」로 기재하였다.
다음에, 도 9를 이용하여, CPU(12)가 갖는 레지스터로서의 액세스 토큰 테이블(31)에 대해서 설명한다. 도 9는, 실시예 1에 따른 액세스 토큰 테이블의 레지스터 구성을 설명하기 위한 도면이다. 도 9에 도시하는 바와 같이, CPU(12)는, 코어(30a)로부터 직접 기록 가능한 복수의 ASI(Address Space Identifier) 레지스터(47∼47c)를 갖는다. 또한 CPU(12)는, ASI 레지스터의 하나를 액세스 토큰 테이블(31)로서 이용한다.
여기서, 도 10은, 액세스 토큰 테이블의 레지스터 필드를 설명하기 위한 도면이다. 도 10에 도시하는 예에는, 액세스 토큰 테이블(31)은, 「0」부터 「31」까지의 32비트의 필드를 가지며, 「31」∼「13」 비트까지를 리저브로 한다. 또한 액세스 토큰 테이블(31)은, 「12」∼「0」 비트까지를 액세스 토큰을 저장하는 필드로서 이용한다.
여기서, 액세스 토큰 테이블(31)은, 「12」∼「0」 비트까지의 13 비트를 액세스 토큰으로 한다. 즉, 액세스 토큰 테이블(31)은, 세그먼트와 같은 수의 액세스 토큰을 설정한 경우는, 액세스 프리용 액세스 토큰을 설정할 수 없게 된다. 그래서 액세스 토큰 테이블(31)은, 세그먼트보다 많은 수의 액세스 토큰을 설정한다.
도 9를 다시 참조하면, 코어(30a)는, 각 ASI 레지스터(47∼47c), 및 액세스 토큰 테이블(31)에 대하여, 「ASI Reg R/W command」와 「Address[11:2]」와, 「Byte Enable[3:0]」을 발행한다. 여기서 「ASI Reg R/W command」는, 각 ASI 레지스터(47∼47c), 및 액세스 토큰 테이블(31)의 판독, 또는 기록을 지시하는 커맨드이다.
또한, 「Address[11:2]」란, 메모리 액세스 요구의 대상이 되는 가상 어드레스이다. 또한 「Byte Enable[3:0]」이란, 인에이블을 나타내는 비트이다. 또한 코어(30a)는, 각 ASI 레지스터(47∼47c), 액세스 토큰 테이블(31)에, 기록을 지시하는 경우에는, 「ASI Reg write data 31:0]」을 동시에 발행한다.
ASI 레지스터(47∼47c)는, 판독을 지시하는 커맨드를 취득하면, 「Read Data Reg A[31:0]」∼「Read Data Reg X[31:0]」를 발행한다. 또한, 액세스 토큰 테이블(31)은, 「Read Data Reg AKT[0:31]」를 출력한다. 그 후, 코어(30a)는, 「Read Data Reg A[31:0]」∼「Read Data Reg X[31:0]」, 「Read Data Reg AKT[0:31]」에 기초하여 「Read Data[31:0]」을 취득한다.
여기서, 액세스 토큰 테이블(31)은, 판독을 지시하는 커맨드를 취득하면, 액세스 토큰[12:0]을 출력한다. 또한 L1 캐시(30b)는, 코어(30a)로부터 메모리 액세스 요구인 「MEM REQ」를 수신하면, 캐시 히트하는지 판별한다. 그리고, L1 캐시(30b)는, 캐시 히트한 경우에는, 캐시 히트한 데이터를 「MEM REQ L1 HIT 응답」으로서 코어(30a)에 송신한다.
한편, L1 캐시(30b)는, 캐시 미스한 경우는, 메모리 액세스 요구를 TLB(30c)에 송신한다. TLB(30c)는, 메모리 액세스 요구의 대상이 되는 가상 어드레스를 물리 어드레스로 변환하고, 메모리 액세스 요구를 L2 캐시 태그(32)에 발행한다. L2 캐시 태그(32)는, 메모리 액세스 요구의 대상이 되는 물리 어드레스가 캐시 히트하는 지를 판별하고, 캐시 히트한 경우에는, 데이터를 TLB(30c)를 통해, L1 캐시(30b), 코어(30a)에 송신한다.
한편, L2 캐시(32a)는, 캐시 미스한 경우에는, 메모리 액세스 요구를 메모리 리퀘스트 스테이트 머신(34)에 송신한다. 이 때, 메모리 액세스 요구에는, 액세스 토큰 테이블(31)이 발행한 액세스 토큰[12:0]이 부여되고, 「Home Request」로서, 메모리 리퀘스트 스테이트 머신(34)에 송신된다. 또한, 코어(30a)가 발행하는 「NC Request」는, TLB(30c)를 통해 비캐시 리퀘스트 스테이트 머신(41)에 의해 실행되고, 「NC Response」가 코어(30a)에 발행된다.
다음에, 도 11을 이용하여, 메모리 토큰 체커(38)의 구성예에 대해서 설명한다. 도 11은 실시예 1에 따른 메모리 토큰 체커의 일례를 설명하기 위한 도면이다. 도 11에 도시하는 예에서는, 메모리 토큰 체커(38)는, 자노드 ID 레지스터(38a), 메모리 토큰 레지스터(38b), 오퍼레이션 코드 토큰 디코더(38c), 액세스 판정 제어기(38d)를 갖는다. 또한 도 11에 도시하는 예에서는, 하나의 노드에 4개의 CPU가 포함되는 예에 대해서 설명한다. 또한, 메모리 토큰 레지스터(38b)는, 도 10에 도시하는 액세스 토큰 레지스터와 같은 레지스터를, 512 엔트리분 갖는 레지스터인 것으로 한다.
예컨대 메모리 토큰 체커(38)는, 레지스터 컨트롤러(44)로부터, 「Reg R/W command」, 「Address[11:2]」, 「Byte Enable[3:0]」, 「Write Data[31:0]」을 취득한다. 또한 토큰 체커(31)는, 레지스터 컨트롤러(44)로부터 「SID(Sender ID)[7:3]」을 취득한다. 여기서, 「SID(Sender ID)[7:3]」란, 메모리 리퀘스트 요구의 요구원이 되는 CPU를 나타내는 식별자이다.
또한, 메모리 토큰 체커(38)는, 메모리 액세스 포트(36)로부터 메모리 액세스 요구를 취득한다. 여기서, 도 12는, 메모리 액세스 요구의 일례를 설명하기 위한 도면이다. 도 12에 도시하는 바와 같이, 메모리 액세스 요구의 패킷에는, 포맷, 송신 목적지 ID, 오퍼레이션 코드, 송신원 ID, 엔트리 ID, 토큰, 대상 어드레스가 저장된다. 여기서, 포맷에는, 패킷의 포맷 타입을 나타내는 4비트의 정보가 저장된다.
송신 목적지 ID에는, 송신 목적지의 CPU를 나타내는 ID, 즉 8비트의 DID가 저장된다. 오퍼레이션 코드에는, 메모리 액세스 요구의 내용을 나타내는 4비트의 정보가 저장된다. 토큰에는, 16비트의 액세스 토큰이 저장된다. 대상 어드레스에는, 메모리 액세스 요구의 대상이 되는 물리 어드레스가 저장된다. 또한 데이터의 기록을 요구하는 메모리 액세스 요구에는, 도 12에 도시하는 패킷에 더하여, 바이트 인에이블과 기록하는 데이터가 송신된다.
또한, 액세스 토큰을 필요로 하지 않는 메모리 액세스 요구, 예컨대 플래시백 명령, 라이트백 명령에 대해서는, 토큰을 리저브로 하는 패킷이 송신된다. 또한 스누프에 대해서는, 토큰 대신에, 리퀘스트원의 CPU를 나타내는 8비트의 CPU ID와, 리퀘스트원의 프로세스를 일의로 나타내는 8비트의 엔트리 ID가 저장된다.
또한, 메모리 액세스 요구에 대한 응답도, 도 12에 도시하는 패킷에 유사한 형식의 패킷이 송신된다. 예컨대 스누프의 회신에는, 토큰 대신에, 8비트의 스누프 응답 정보가 저장된다. 또한, 메모리 액세스 요구의 완료 응답에는, 토큰을 리저브로 한 패킷이 송신되고, 판독의 요구에 대한 응답에는, 판독한 데이터가 부가되게 된다.
도 11을 다시 참조하면, 메모리 토큰 체커(38)는, 취득한 메모리 액세스 요구로부터 SID[7:0]를 취득하고, 취득한 SID가, 자노드가 갖는 CPU의 ID인 자노드 ID와 일치하는지의 여부를 판별하고, 도 11에 도시하는 예에서는, 메모리 토큰 체커(38)는, CPU ID0∼CPU ID3까지의 4개의 CPU의 ID와 SID가 일치하는지의 여부를 판별한다. 그리고, 메모리 토큰 체커(38)는, 판별 결과를 「MY Node HIT」로서 액세스 판정 제어기(38d)에 입력한다.
또한, 메모리 토큰 체커(38)는, 메모리 액세스 요구로부터 오퍼레이션 코드(op code[3:0])를 취득하고, 오퍼레이션 코드 토큰 디코더(38c)에 입력한다. 이러한 경우에는, 오퍼레이션 코드 토큰 디코더(38c)는, 취득한 오퍼레이션 코드를 분석하고, 처리 내용이, 액세스 토큰과 메모리 토큰과의 일치를 요하는 처리인지의 여부를 판별한다. 그리고, 오퍼레이션 코드 토큰 디코더(38c)는, 판별 결과를 토큰 인에이블로서, 액세스 판정 제어기(38d)에 입력한다.
여기서, 도 13은, 오퍼레이션 코드가 나타내는 처리의 일례를 설명하기 위한 도면이다. 또한 도 13에는, MESI 프로토콜(일리노이 프로토콜(Illinois protocol))을 이용한 캐시 코히런시가 실행될 때에 발행되는 메모리 액세스 요구의 오퍼레이션 코드를 나타낸다.
예컨대 오퍼레이션 코드 「0000」이 저장된 메모리 액세스 요구는, 「READ IF」로 불리는 처리의 실행 요구이다. 또한 「READ IF」는, 코어로부터의 명령 영역 리드, 및 캐시의 스테이트가 「S(Shared)」일 때에 캐시의 획득을 실행하는 처리이다. 오퍼레이션 코드 「0001」이 저장된 메모리 액세스 요구는, 「READ OP」로 불리는 처리의 실행 요구이다. 또한 「READ OP」는, 코어로부터의 데이터 영역 리드, 및 캐시의 스테이트가 「S」 또는 「E(Exclusive)」일 때에 캐시의 획득을 실행하는 처리이다.
오퍼레이션 코드 「0010」이 저장된 메모리 액세스 요구는, 「READ EX」로 불리는 처리의 실행 요구이다. 또한 「READ EX」는, 코어로부터의 데이터 스토어를 위한 배타권 획득 리드의 획득, 및 캐시의 스테이트가 「S(Shared)」일 때에 캐시의 획득을 실행하는 처리이다. 오퍼레이션 코드 「0100」이 저장된 메모리 액세스 요구는, 「DMA Read」로 불리는 처리의 실행 요구이다. 또한 「DMA Read」는, I/O로부터의 DMA 리드를 나타내고, 캐시를 획득하지 않는 처리이다.
오퍼레이션 코드 「0110」이 저장된 메모리 액세스 요구는, 「DMA Write」로 불리는 처리의 실행 요구이다. 또한 「DMA Write」는, I/O로부터의 DMA 라이트를 나타내고, 캐시를 획득하지 않는 처리이다. 오퍼레이션 코드 「0111」이 저장된 메모리 액세스 요구는, 「DMA Write Partial」로 불리는 처리의 실행 요구이다. 또한 「DMA Write Partial」은, I/O로부터의 DMA 라이트를 파셜로 실행하는 처리이며, 캐시를 획득하지 않는 처리이다.
오퍼레이션 코드 「1000」이 저장된 메모리 액세스 요구는, 「Write Back」으로 불리는 처리의 실행 요구이다. 또한 「Write Back」은, CPU의 캐시 축출(eviction)을 행할 때에, 캐시 스테이트가 「M(Modified)」인 데이터를 기록하는 처리이다. 오퍼레이션 코드 「1001」이 저장된 메모리 액세스 요구는, 「Flash Back」으로 불리는 처리의 실행 요구이다.
또한, 「Flash Back」은, CPU의 캐시 축출을 행할 때에, 캐시 스테이트가 「E」 또는 「S」를 「I(Invalid)」로 하는 처리이다. 오퍼레이션 코드 「1010」이 저장된 메모리 액세스 요구는, 「Cache Flush」로 불리는 처리의 실행 요구이다. 또한 「Cache Flush」는, 코어로부터의 캐시 플러시(cache flush)의 실행 요구이다.
도 13에 나타내는 예에서는, 오퍼레이션 코드 토큰 디코더(38c)는, 오퍼레이션 코드가 「0000」, 「0001」, 「0010」일 때는, 액세스 토큰과 메모리 토큰과의 일치를 요하는 것으로 판별하고, 토큰 인에이블 「1」을 출력한다. 또한, 오퍼레이션 코드 토큰 디코더(38c)는, 오퍼레이션 코드가 「0000」, 「0001」, 「0010」 이외일 때는, 액세스 토큰과 메모리 토큰과의 일치를 요하지 않는 것으로 판별하고, 토큰 인에이블 「0」을 출력한다. 또한 도 13에 나타내는 오퍼레이션 코드와 각 처리의 대응은, 어디까지나 일례이며, 임의의 오퍼레이션 코드를 임의의 처리와 대응시킬 수 있다.
도 11을 다시 참조하면, 메모리 토큰 체커(38)는, 액세스 대상이 되는 물리 어드레스를 포함하는 세그먼트 어드레스를 이용하여, 메모리 토큰 레지스터(38b)로부터 메모리 토큰을 검색한다. 그리고, 메모리 토큰 체커(38)는, 검색한 메모리 토큰과, 메모리 액세스 요구의 액세스 토큰이 일치하는지의 여부를 나타내는 「토큰 매치」를 액세스 판정 제어기(38d)에 입력한다.
또한, 도 11에 도시하는 예에서는, 하나의 노드의 세그먼트에 연속한 메모리 어드레스가 할당되어 있는 예이며, 불연속적인 메모리 어드레스가 할당되어 있는 경우에는, 전단에, 어드레스 토큰 엔트리 번호를 변환하는 회로를 설치하면 좋다. 도 11에 도시하는 예에서는, 메모리 토큰 체커(38)는, 어드레스 토큰이 「0000」인 경우에는, 논프로텍트 영역에 대한 메모리 액세스 요구이기 때문에, 「액세스 프리」를 나타내는 신호를 액세스 판정 제어기(38d)에 입력한다.
액세스 판정 제어기(38d)는, 입력된 「MY Node HIT」와, 「토큰 인에이블」과, 「토큰 매치」와, 「액세스 프리」에 따라, 메모리 액세스 요구의 실행을 허가할지 불허가로 할지를 홈 스테이트 머신(39)에 통지한다. 여기서, 도 14는, 액세스 판정 제어기에 의한 판정의 일례를 설명하기 위한 도면이다.
예컨대 액세스 판정 제어기(38d)는, 「MY Node HIT」가 「No(0)」, 토큰 인에이블이 「Yes(1)」, 토큰 매치가 「No(0)」, 액세스 프리가 「No(0)」를 나타내는 경우에는, 메모리 액세스 요구의 실행을 불허가로 한다. 이 이외의 경우에는, 액세스 판정 제어기(38d)는, 메모리 액세스 요구의 실행을 허가한다. 즉, 액세스 판정 제어기(38d)는, 라이트백 등의, 캐시 코히런스를 유지하기 위한 처리에 대해서는, 토큰 매치의 값에 관계없이, 메모리 액세스 요구의 실행을 허가하게 된다.
도 11을 다시 참조하면, 홈 스테이트 머신(39)은, 액세스 판정 제어기(38d)와 타겟 어드레스 체커(37)로부터의 통지에 따라, 메모리 액세스 포트(36)로부터 취득한 메모리 액세스의 요구를 실행한다. 도 15는, 홈 스테이트 머신이 실행하는 처리의 내용을 나타내는 도면이다. 예컨대 홈 스테이트 머신(39)은, 액세스 판정 제어기(38d)로부터 메모리 액세스 요구의 실행을 불허가로 하는 취지가 통지되면, 액세스 토큰과 메모리 토큰이 일치하지 않는 경우의 액세스 예외 동작을 실시한다.
또한, 홈 스테이트 머신(39)은, 액세스 판정 제어기(38d)로부터 메모리 액세스 요구의 실행을 허가로 하는 취지의 통지를 받고, 타겟 어드레스 체커(37)로부터 자노드의 메모리가 아닌 취지(MISS)가 통지된 경우에는, 이하의 처리를 실행한다. 즉, 홈 스테이트 머신(39)은, 대상 어드레스가 일치하지 않는 경우의 액세스 예외 동작을 실시한다.
또한, 홈 스테이트 머신(39)은, 액세스 판정 제어기(38d)로부터 메모리 액세스 요구의 실행을 허가로 하는 취지의 통지를 받고, 타겟 어드레스 체커(37)로부터 자노드의 메모리인 취지(HIT)가 통지된 경우에는, 메모리 액세스 요구를 실시한다. 또한, 각 CPU(12∼15, 12a∼12m)는, 자신이 발행한 메모리 액세스 요구의 실행이 허가되지 않은 경우에는, 동일한 메모리 액세스 요구를 송신함으로써, 재시도를 실행하여도 좋다.
다음에, 도 16을 이용하여, 정보 처리 시스템(1)에서 노드 사이의 메모리 액세스가 어떻게 실행되는지를 설명한다. 도 16은, 노드 사이의 메모리 액세스의 흐름을 설명하기 위한 도면이다. 또한, 도 16에는, 노드 #1이 노드 #2의 메모리에 대하여 메모리 액세스를 행하는 예에 대해서 도시한다.
예컨대, 도 16 중 (E)에 도시하는 바와 같이, 노드 #2가 실행하는 애플리케이션은, 메모리 토큰 관리 테이블을 이용하여, 미사용의 메모리 토큰을 선택한다. 그리고, 노드 #2가 실행하는 애플리케이션은, 도 16 중 (F)에 도시하는 바와 같이, 노드 #1이 실행하는 애플리케이션에 대하여, 액세스 대상이 되는 어드레스 영역과, 메모리 토큰과 동일한 액세스 토큰을 통지한다.
이러한 경우에는, 도 16 중 (G)에 도시하는 바와 같이, 노드 #1이 실행하는 애플리케이션은, 액세스 토큰을 액세스 토큰 테이블(31)에 세팅한다. 또한, 도 16 중 (H)에 도시하는 바와 같이, 노드 #2가 실행하는 애플리케이션은, 노드 #1에 통지한 액세스 토큰과 동일한 메모리 토큰을 메모리 토큰 레지스터(38b)에 세팅한다.
여기서, 노드 #1은, 도 16 중 (I)에 도시하는 바와 같이, 코어(30a)가 메모리 액세스 요구를 발행하면, 액세스 토큰 테이블(31)에 세팅한 액세스 토큰을 부여하고, 인터커넥트를 통해 메모리 액세스 요구를 노드 #2에 송신한다. 그렇게 하면, 노드 #2는, 도 16 중 (J)에 도시하는 바와 같이, 메모리 액세스 요구에 부여된 액세스 토큰과, 메모리 토큰 레지스터(38b)에 세팅된 메모리 토큰이 일치하는지의 여부를 판별한다.
그리고, 노드 #2는, 액세스 토큰과 메모리 토큰이 일치하는 경우에는, 액세스 대상 영역에 대한 메모리 액세스 요구를 실행하고, 액세스 토큰과 메모리 토큰이 일치하지 않는 경우는, 메모리 액세스 요구를 실행하지 않는다.
이와 같이, 정보 처리 시스템(1)의 각 노드는, 자노드의 메모리에 액세스하는 노드에 대하여, 액세스 토큰을 통지하고, 통지한 액세스 토큰을 메모리 토큰으로서 메모리 토큰 레지스터에 저장한다. 그리고, 각 노드는, 타노드의 메모리에 액세스하는 경우에는, 액세스 대상의 노드로부터 통지된 액세스 토큰을 메모리 액세스 요구에 부여하여 송신한다. 그 후, 각 노드는, 메모리 액세스 요구에 부여된 액세스 토큰과 메모리 토큰이 일치하는지의 여부를 판별하고, 일치하는 것으로 판별한 경우에는, 메모리 액세스를 실행한다.
이 때문에, 정보 처리 시스템(1)은, 어느 하나의 노드가 고장난 경우에도, 다른 노드의 통신을 할 수 없게 된 경우에도, 액세스 대상이 되는 노드가 메모리 토큰을 변경함으로써, 고장난 노드로부터의 메모리 액세스를 멈출 수 있다. 이 결과, 정보 처리 시스템(1)은, 페일오버를 정확하게 행할 수 있다.
이하, 도면을 이용하여, 액세스 대상이 되는 노드가 메모리 토큰을 변경함으로써, 고장난 노드로부터의 메모리 액세스를 멈추는 처리에 대해서 설명한다. 도 17은, 고장난 노드로부터의 메모리 액세스를 멈추는 처리에 대해서 설명하기 위한 도면이다. 또한, 도 17에는, 노드 #1이 노드 #2의 메모리에 대하여 액세스를 행하고 있는 예에 대해서 설명한다. 예컨대 노드 #1은, 노드 #2의 애플리케이션으로부터 통지된 액세스 토큰을 액세스 토큰 테이블에 저장하고, 메모리 액세스에 액세스 토큰을 부가하여 노드 #2에 송신한다.
여기서, 노드 #1이 실행하는 애플리케이션에 고장이 발생하여, 노드 #2와 통신을 행할 수 없게 된 경우에는, 노드 #2의 애플리케이션은, 노드 #1의 액세스 토큰을 변경할 수 없다. 그러나, 노드 #2가 실행하는 애플리케이션은, 자노드가 기억하는 메모리 토큰을 변경할 수 있다. 이 때문에, 노드 #2가 실행하는 애플리케이션은, 자노드가 메모리 토큰 레지스터에 기억하는 메모리 토큰을 변경한다. 그렇게 하면, 고장난 노드 #1이 송신하는 액세스 토큰과, 노드 #2가 기억하는 메모리 토큰이 일치하지 않게 되기 때문에, 노드 #2는, 노드 #1로부터의 메모리 액세스를 막을 수 있다.
여기서, 노드 #2는, 메모리 토큰을 임의의 타이밍으로 변경할 수 있다. 즉, 노드 #2는, 메모리 토큰을 변경하고, 변경 후의 메모리 토큰을 액세스 토큰으로서 노드 #1에 송신한다. 그렇게 하면, 노드 #1은, 노드 #2와 통신을 행할 수 있는 경우는, 정상적으로 액세스 토큰을 변경하기 때문에, 노드 #2에의 액세스를 계속할 수 있다.
한편, 노드 #1은, 고장이 발생하여, 노드 #2와 통신을 행할 수 없는 경우는, 액세스 토큰을 변경할 수 없기 때문에, 노드 #2에의 액세스를 행할 수 없게 된다. 이 결과, 정보 처리 시스템(1)은, 노드 #1이 실행하는 처리를 다른 노드에 옮겼을 때에, 스플릿 브레인 상태가 발생하는 것을 막을 수 있다. 이 때문에, 정보 처리 시스템(1)은, 정확하게 페일오버를 실행할 수 있다.
이하, 도 18, 도 19를 이용하여, 고장이 발생한 노드를 분리하는 처리에 대해서 설명한다. 도 18은, 고장이 발생한 노드에 의한 메모리 액세스를 막는 처리를 설명하기 위한 제1 도면이다. 도 19는, 고장이 발생한 노드에 의한 메모리 액세스를 막는 처리를 설명하기 위한 제2 도면이다. 또한 도 18, 도 19에서는, 노드 #1∼#3이 노드 #4에 대하여 메모리 액세스 요구를 발행할 때에, 노드 #1의 애플리케이션이 고장나고, 다른 노드(#2∼#4)와 통신을 행할 수 없게 된 예에 대해서 설명한다.
예컨대, 도 18 중 (K)에 도시하는 바와 같이, 노드 #4가 실행하는 감시 애플리케이션은, 임의의 타이밍에, 노드 #4가 기억하는 메모리 토큰 「777」을 「888」로 변경한다. 또한, 노드 #4는, 새로운 메모리 토큰 「888」을 액세스 토큰으로서, 노드 #1∼# 3에 대하여 분배한다.
여기서, 노드 #1은, 애플리케이션이 고장나고, 다른 노드(#2∼#4)와 통신을 행할 수 없기 때문에, 도 18 중 (L)에 도시하는 바와 같이, 액세스 토큰 「777」을 새로운 액세스 토큰 「888」로 갱신할 수 없다. 한편, 노드 #2 및 노드 #3은, 도 18 중 (M)에 도시하는 바와 같이, 액세스 토큰 「777」을 새로운 액세스 토큰 「888」로 변경할 수 있다.
이 결과, 도 19 중 (N)에 도시하는 바와 같이, 애플리케이션이 고장난 노드 #1은, 노드 #4에 액세스할 수 없지만, 노드 #2 및 노드 #3은, 노드 #4에의 액세스를 계속할 수 있다. 이 때문에, 각 노드(#1∼#4)는, 고장난 노드의 분리를 용이하게 행할 수 있다.
또한, 각 노드(#1∼#4)는, 핸드쉐이크(handshake) 등의 처리에 의해 애플리케이션에 고장이 발생했는지의 여부를 판별하지 않아도 좋다. 즉, 각 노드(#1∼#4)는, 어느 하나의 노드에 고장이 발생한 것을 식별하지 않고도, 고장난 노드를 분리할 수 있다. 이 때문에, 각 노드(#1∼#4)는, 고장난 노드를 고속으로 분리할 수 있다.
다음에, 도 20∼도 25를 이용하여, 메모리 토큰 및 액세스 토큰을 이용한 메모리 액세스의 처리 흐름에 대해서 설명한다. 또한, 이하의 설명에서는, 코어(30a)와 메모리(19)를 갖는 노드 #1이, 코어(30g)와 메모리(19a) 및 메모리(19b)를 갖는 노드 #2에 대하여 메모리 액세스 요구를 송신하는 예에 대해서 설명한다. 또한 메모리(19a)는, 로컬 영역만을 갖는 메모리이며, 메모리(19b)는, 공유 메모리 영역만을 갖는 메모리이다.
또한, 이하의 설명에서, 애플리케이션이란, 각 노드 #1, #2가 실행하는 애플리케이션이고, OS란, 각 노드 #1, #2가 독립적으로 동작시키는 OS이며, 공유 메모리 드라이버란, 공유 메모리 영역을 제어하는 드라이버이다. 또한, 각 노드 사이의 토큰에 관한 요구, 통지를 실현하는 통신 수단으로서는, 각 노드의 각 애플리케이션간의 통신을 할 수 있으면 좋고, LAN 경유의 메시지 통신, 인터커넥트 경유로 공유 메모리를 이용한 메시지 통신, 공유 스토리지를 이용한 통신 등의 수단으로 실현할 수 있다.
우선, 도 20을 이용하여, 노드 #1이 액세스 토큰을 취득하는 처리의 흐름에 대해서 설명한다. 도 20은, 액세스 토큰을 취득하는 처리의 흐름을 설명하기 위한 시퀀스도이다. 예컨대 코어(30a)가 실행하는 애플리케이션은, 코어(30g)가 실행하는 애플리케이션에 대하여, 액세스 토큰을 요구한다(단계 S101). 그렇게 하면, 코어(30g)가 실행하는 애플리케이션은, 공유 메모리 드라이버에 메모리 토큰의 할당을 요구한다(단계 S102).
그렇게 하면, 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리(19a)에 저장된 메모리 토큰 관리 테이블을 참조한다. 그리고, 코어(30g)가 실행하는 공유 메모리 드라이버는, 사용되고 있지 않는 메모리 토큰을 메모리 토큰 관리 테이블에 등록하고(단계 S103), 메모리 토큰을 취득한다(단계 S104). 이 때, 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리 토큰을 이용하는 프로세스의 애플리케이션 ID의 등록을 함께 행한다.
또한, 코어(30g)가 실행하는 공유 메모리 드라이버는, 공유 메모리 세그먼트 관리 테이블과, 메모리 토큰 레지스터에, 취득한 메모리 토큰을 등록한다(단계 S105). 이 때, 코어(30g)가 실행하는 공유 메모리 드라이버는, 액세스 대상이 되는 세그먼트 번호나, 사용 플래그, 애플리케이션 ID 등의 등록을 함께 행한다. 또한, 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리 토큰을 액세스 토큰으로서 코어(30a)가 실행하는 애플리케이션에 통지한다(단계 S106).
한편, 코어(30a)가 실행하는 애플리케이션은, 액세스 토큰을 취득하면(단계 S107), 취득한 액세스 토큰을 세팅하도록 코어(30a)가 실행하는 공유 메모리 드라이버에 요구한다(단계 S108). 그렇게 하면, 코어(30a)가 실행하는 공유 메모리 드라이버는, 액세스 토큰 테이블(31)에, 취득한 액세스 토큰을 세팅한다(단계 S109).
다음에, 코어(30a)가 실행하는 공유 메모리 드라이버는, 액세스 대상이 되는 VA(Virtual Address: 가상 어드레스)를 코어(30a)가 실행하는 애플리케이션에 통지한다(단계 S110). 그렇게 하면, 코어(30a)가 실행하는 애플리케이션은, 데이터 리드 요구를 발행한다(단계 S111). 여기서, 데이터 리드 요구에는, 액세스 토큰 테이블(31)에 세팅된 액세스 토큰이 세팅된다(단계 S112).
그렇게 하면, 노드 #2는, 데이터 리드 요구에 세팅된 액세스 토큰이 메모리 토큰 레지스터에 등록된 메모리 토큰과 일치하는지의 여부를 판별한다(단계 S113). 그리고, 노드 #2는, 액세스 토큰과 메모리 토큰이 일치하는 경우에는, 세그먼트 영역에의 액세스를 허가한다(단계 S114).
다음에, 도 21을 이용하여, 노드 #1이 노드 #2의 복수의 세그먼트에 대하여 액세스를 행하는 예에 대해서 설명한다. 도 21은, 복수의 세그먼트에 대하여 액세스를 행하는 처리의 흐름을 설명하기 위한 시퀀스도이다. 예컨대 코어(30a)가 실행하는 애플리케이션은, 메모리(19b)의 세그먼트 #A에 액세스하기 위한 액세스 토큰 #A를 세팅하도록 코어(30a)가 실행하는 공유 메모리 드라이버에 요구한다(단계 S201). 그렇게 하면, 코어(30a)가 실행하는 공유 메모리 드라이버는, 액세스 토큰 테이블(31)에 액세스 토큰 #A를 세팅한다(단계 S202).
또한, 코어(30a)가 실행하는 애플리케이션은, 세그먼트 #A에 대한 데이터 리드 요구를 발행한다(단계 S203). 이 때, 데이터 리드 요구에는, 액세스 토큰 #A가 세팅된다(단계 S204). 그렇게 하면, 노드 #2는, 데이터 리드 요구에 세팅된 액세스 토큰 #A가 세그먼트 #A의 메모리 토큰과 일치하는지의 여부를 판별한다(단계 S205). 그리고, 노드 #2는, 액세스 토큰 #A와 세그먼트 #A의 메모리 토큰이 일치하는 경우에는, 세그먼트 #A에 대한 메모리 액세스를 허가한다(단계 S206).
또한, 코어(30a)가 실행하는 애플리케이션은, 메모리(19b)의 세그먼트 #B에 액세스하기 위한 액세스 토큰 #B를 세팅하도록 코어(30a)가 실행하는 공유 메모리 드라이버에 요구한다(단계 S207). 그렇게 하면, 코어(30a)가 실행하는 공유 메모리 드라이버는, 액세스 토큰 테이블(31)에 액세스 토큰 #B를 세팅한다(단계 S208).
또한, 코어(30a)가 실행하는 애플리케이션은, 세그먼트 #B에 대한 데이터 리드 요구를 발행한다(단계 S209). 이 때, 데이터 리드 요구에는, 액세스 토큰 #B가 세팅된다(단계 S210). 그렇게 하면, 노드 #2는, 데이터 리드 요구에 세팅된 액세스 토큰 #B가 세그먼트 #B의 메모리 토큰과 일치하는지의 여부를 판별한다(단계 S211). 그리고, 노드 #2는, 액세스 토큰 #B와 세그먼트 #B의 메모리 토큰이 일치하는 경우에는, 세그먼트 #B에 대한 메모리 액세스를 허가한다(단계 S212).
다음에, 도 22를 이용하여, 콘텍스트 스위치가 발생했을 때에, 액세스 토큰 테이블(31)의 데이터가 스택되는 처리의 흐름에 대해서 설명한다. 도 22는, 콘텍스트 스위치의 흐름을 설명하기 위한 시퀀스도이다. 또한 도 22에 도시하는 예에서는, 코어(30a)가 애플리케이션 #A를 실행중에, 인터럽트 처리가 발생했기 때문에, 실행하는 애플리케이션을 애플리케이션 #B로 스위치하는 처리의 흐름에 대해서 설명한다.
예컨대, 코어(30a)가 애플리케이션 #A의 실행중에, 타이머 인터럽트가 발생한다(단계 S301). 이러한 경우에는, 코어(30a)가 실행하는 OS는, 액세스 토큰 테이블(31)의 데이터를 포함한 콘텍스트 스위치를 실행하고(단계 S302), 각 레지스터의 값을 메모리(19)에 스택한다(단계 S303). 다음에, 코어(30a)가 실행하는 OS는, 메모리(19)에 스택되어 있던 애플리케이션 #B 실행시의 각 레지스터의 값을 취득한다(단계 S304). 그리고, 코어(30a)가 실행하는 OS는, 액세스 토큰 테이블(31)에, 취득한 값을 세팅한다(단계 S305).
계속해서, 코어(30a)가 실행하는 애플리케이션 #B가 데이터 리드 요구를 발행한다(단계 S306). 그렇게 하면, 액세스 토큰 테이블(31)에 세팅된 액세스 토큰, 즉 애플리케이션 #B가 사용하는 액세스 토큰이 데이터 리드 요구에 세팅된다(단계 S307). 그렇게 하면, 노드 #2는, 애플리케이션 #B가 이용하는 세그먼트의 메모리 토큰과, 데이터 리드 요구에 세팅된 액세스 토큰이 일치하는지의 여부를 판별한다(단계 S308). 그리고, 노드 #2는, 메모리 토큰과 액세스 토큰이 일치한 경우는, 공유 메모리 영역에의 액세스를 허가한다(단계 S309).
다음에, 도 23을 이용하여, 노드 #2가 메모리 토큰을 변경하는 처리에 대해서 설명한다. 도 23은, 메모리 토큰을 변경하는 처리의 흐름을 설명하기 위한 시퀀스도이다. 또한, 도 23에 도시하는 예에서는, 노드 #1에 장해가 발생하고 있지 않고, 노드 #2가 메모리 토큰의 변경을 행한 후에도, 정상적으로 액세스를 행할 수 있는 예에 대해서 설명한다. 또한 도 23 중 단계 S411∼S414는, 도 22에 도시하는 단계 S306∼S309와 같은 처리인 것으로 하고, 이하의 설명을 생략한다.
예컨대, 코어(30g)가 실행하는 애플리케이션은, 임의의 타이밍에 토큰의 갱신을 코어(30g)가 실행하는 공유 메모리 드라이버에 요구한다(단계 S401). 그렇게 하면, 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리 토큰 관리 테이블로부터, 새롭게 사용 가능한 메모리 토큰을 검색하고(단계 S402), 새롭게 사용하는 메모리 토큰을 코어(30g)가 실행하는 애플리케이션에 통지한다. 다음에, 코어(30g)가 실행하는 애플리케이션은, 코어(30a)가 실행하는 애플리케이션에 대하여, 액세스의 정지 요구를 발행하고(단계 S403), 일정 시간 대기한다(단계 S404).
그 후, 코어(30g)가 실행하는 애플리케이션은, 새롭게 사용하는 메모리 토큰을 코어(30g)가 실행하는 공유 메모리 드라이버에 통지한다(단계 S405). 이러한 경우에는, 코어(30g)가 실행하는 공유 메모리 드라이버는, 새로운 메모리 토큰을 메모리 토큰 레지스터에 세팅한다(단계 S406). 또한, 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리 토큰 관리 테이블을 갱신한다(단계 S407).
그렇게 하면, 코어(30g)가 실행하는 애플리케이션은, 새로운 액세스 토큰을 코어(30a)가 실행하는 애플리케이션에 통지하고, 메모리 액세스의 재개를 통지한다(단계 S408). 이러한 경우에는, 코어(30a)가 실행하는 애플리케이션은, 코어(30a)가 실행하는 공유 메모리 드라이버에 대하여 새로운 액세스 토큰을 통지한다(단계 S409). 그렇게 하면, 코어(30a)가 실행하는 공유 메모리 드라이버는, 액세스 토큰 테이블(31)에 새로운 액세스 토큰을 세팅한다(단계 S410).
또한, 메모리 액세스의 재시도를 인정하는 경우에는, 메모리 토큰을 변경하는 처리를 실행할 때에 대기할 필요는 없다. 그래서, 도 24를 이용하여, 노드 #2가 메모리 토큰을 변경하는 처리의 변형에 대해서 설명한다. 도 24는, 메모리 토큰을 변경하는 처리의 변형을 설명하기 위한 시퀀스도이다. 또한, 도 24에 도시하는 예에서는, 노드 #1에 장해가 발생하지 않고, 노드 #2가 메모리 토큰의 변경을 행한 후에도, 정상적으로 액세스할 수 있는 예에 대해서 설명한다.
예컨대, 코어(30g)가 실행하는 애플리케이션은, 임의의 타이밍에 토큰의 갱신을 코어(30g)가 실행하는 공유 메모리 드라이버에 요구한다(단계 S501). 그렇게 하면, 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리 토큰 관리 테이블로부터, 새롭게 사용 가능한 메모리 토큰을 검색하고(단계 S502), 새롭게 사용하는 메모리 토큰을 코어(30g)가 실행하는 애플리케이션에 통지한다(단계 S503).
다음에, 코어(30g)가 실행하는 애플리케이션은, 새롭게 사용하는 메모리 토큰을 코어(30g)가 실행하는 공유 메모리 드라이버에 통지한다(단계 S504). 이러한 경우에는, 코어(30g)가 실행하는 공유 메모리 드라이버는, 새로운 메모리 토큰을 메모리 토큰 레지스터에 세팅한다(단계 S505). 또한 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리 토큰 관리 테이블에 새로운 메모리 토큰을 등록하고(단계 S506), 새로운 메모리 토큰의 등록을, 코어(30g)가 실행하는 애플리케이션에 통지한다(단계 S507).
또한, 코어(30g)가 실행하는 애플리케이션은, 새로운 액세스 토큰을 코어(30a)가 실행하는 애플리케이션에 송신한다(단계 S508). 여기서, 코어(30a)가 실행하는 애플리케이션은, 데이터 리드 요구를 발행한다(단계 S509). 그렇게 하면, 코어(30a)가 실행하는 공유 메모리 드라이버는, 액세스 토큰 테이블(31)에 새로운 액세스 토큰을 세팅한다(단계 S510).
그러나, 단계 S510에서 세팅된 액세스 토큰은, 새로운 메모리 토큰과 일치하지 않기 때문에, 메모리 액세스가 거부된다(단계 S511). 이 때문에, 노드 #2는, 노드 #1에 액세스 거부의 응답을 송신한다(단계 S512). 여기서, 코어(30a)가 실행하는 애플리케이션은, 코어(30g)가 실행하는 애플리케이션으로부터 새로운 액세스 토큰을 수신하기 때문에, 코어(30a)가 실행하는 공유 메모리 드라이버에 토큰을 통지한다(단계 S513). 그렇게 하면, 코어(30a)가 실행하는 공유 메모리 드라이버는, 새로운 액세스 토큰을 액세스 토큰 테이블(31)에 설정한다(단계 S514).
그 후, 코어(30a)가 실행하는 애플리케이션은, 데이터 리드 요구의 재시도를 송신한다(단계 S515). 그렇게 하면, 데이터 리드 요구의 재시도에는, 새로운 액세스 토큰이 세팅된다(단계 S516). 이 결과, 노드 #2는, 애플리케이션 #B가 이용하는 세그먼트의 메모리 토큰과, 데이터 리드 요구에 세팅된 액세스 토큰이 일치하는지의 여부를 판별한다(단계 S517).
그리고, 노드 #2는, 메모리 토큰과 액세스 토큰이 일치한 경우는, 공유 메모리 영역에의 액세스를 허가한다(단계 S518). 또한 노드 #2는, 노드 #1로부터 수신한 재시도의 액세스 토큰이, 메모리 토큰과 일치하지 않은 경우에는, 메모리 액세스 에러가 발생한 것으로 판별하고, 노드 #1의 분리 처리를 실행하는 것으로 하여도 좋다.
다음에, 도 25를 이용하여, 노드 #2가 메모리 토큰을 변경했을 때에, 노드 #1에 장해가 발생하여, 정상적으로 액세스할 수 없기 때문에, 노드 #1의 분리를 행하는 처리의 흐름에 대해서 설명한다. 도 25는, 고장난 노드를 분리하는 처리의 흐름을 설명하기 위한 시퀀스도이다.
또한, 도 25에 도시하는 예에서는, 노드 #1에 장해가 발생하여, 노드 #2와 통신할 수 없게 된 예에 대해서 설명한다. 또한, 도 25에 도시하는 예에서는, 노드 #1은, 액세스 목적지의 노드 #2에 대하여, 정해진 시간 간격으로 생존 통지를 발행하는 것으로 한다.
우선, 코어(30a)가 실행하는 애플리케이션은, 생존 통지를 발행한다(단계 S601). 그러나, 노드 #1에 장해가 발생되어 있기 때문에, 노드 #2에 생존 통지가 도달하지 않는다. 이 때문에, 코어(30g)가 실행하는 애플리케이션은, 노드 #1의 이상을 검출한다(단계 S602). 그렇게 하면, 코어(30g)가 실행하는 애플리케이션은, 메모리 토큰의 갱신을 코어(30g)가 실행하는 공유 메모리 드라이버에 요구한다(단계 S603). 그렇게 하면, 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리 토큰 관리 테이블로부터 새로운 메모리 토큰을 검색하고(단계 S604), 새로운 메모리 토큰을 코어(30g)가 실행하는 애플리케이션에 통지한다.
그렇게 하면, 코어(30g)가 실행하는 애플리케이션은, 새로운 메모리 토큰을 액세스 토큰으로서 노드 #1에 송신하지만, 노드 #1에 장해가 발생되어 있기 때문에, 새로운 액세스 토큰은 노드 #1에 도달하지 않는다. 다음에, 코어(30g)가 실행하는 애플리케이션은, 새롭게 사용하는 메모리 토큰을 코어(30g)가 실행하는 공유 메모리 드라이버에 통지한다(단계 S605).
이러한 경우에는, 코어(30g)가 실행하는 공유 메모리 드라이버는, 새로운 메모리 토큰을 메모리 토큰 레지스터에 세팅한다(단계 S606). 또한, 코어(30g)가 실행하는 공유 메모리 드라이버는, 메모리 토큰 관리 테이블에 새로운 메모리 토큰을 등록하고(단계 S607), 새로운 메모리 토큰의 등록을, 코어(30g)가 실행하는 애플리케이션에 통지한다.
또한, 코어(30g)가 실행하는 애플리케이션은, 통신의 재개 통지를 노드 #1에 통지하지만(단계 S608), 노드 #1에 고장이 발생되어 있기 때문에, 통신의 재개 통지는 노드 #1에 도달하지 않는다. 그래서, 코어(30g)가 실행하는 애플리케이션은, 노드 #1의 분리 요구를 코어(30g)가 실행하는 공유 메모리 드라이버에 발행한다(단계 S609). 그렇게 하면, 코어(30g)가 실행하는 공유 메모리 드라이버는, 분리 대상이 되는 노드 #1이 사용하는 공유 메모리 영역을 공유 메모리 세그먼트 관리 테이블로부터 검색한다(단계 S610).
여기서, 코어(30a)가 실행하는 애플리케이션이 데이터 리드 요구를 발행하면(단계 S611), 노드 #1은, 데이터 리드 요구에 액세스 토큰을 세팅하고(단계 S612), 노드 #2에 송신한다. 그러나, 액세스 토큰과 새로운 메모리 토큰이 일치하지 않기 때문에(단계 S613), 노드 #2는, 메모리 액세스를 거부하고, 어드레스 예외를 노드 #1에 송신한다(단계 S614).
이러한 경우에는, 노드 #1은, L1 캐시(30b), L1 캐시(30e), L2 캐시(32a)에 저장된 데이터를 노드 #2에 송신하는 라이트백 처리를 실행한다(단계 S615). 이와 같이, 노드 #1로부터 라이트백의 데이터를 취득한 경우에는, 노드 #2는, 메모리 액세스의 가부 판단을 행하지 않고, 공유 메모리 영역에의 라이트백을 행한다(단계 S616).
그 후, 노드 #1과 노드 #2는, 캐시 플러시와 임플리싯 라이트백(implicit writeback)을 이용하여, 각 캐시(30b, 30e, 32a)에 유지된 데이터와 메모리(19b)에 유지된 데이터를 일치시킨다. 그리고, 노드 #2는, 노드 #1의 코어(30a)가 실행하고 있던 프로세스의 작업을 다른 CPU가 실행하는 프로세스에 이동시켜, 노드 #1을 분리하는 분리 처리를 실행한다(단계 S617, 단계 S618). 그 후, 코어(30g)가 실행하는 공유 메모리 드라이버는, 노드 #1의 분리가 완료된 취지를, 코어(30g)가 실행하는 애플리케이션에 통지한다(단계 S619).
다음에, 도 26을 이용하여, 메모리 토큰을 변경하는 처리의 일례에 대해서 설명한다. 도 26은, 메모리 토큰을 변경하는 처리의 흐름의 일례를 설명하기 위한 흐름도이다. 또한 도 26에 도시하는 예에서는, CPU(12)는, 프로세스마다, 메모리 액세스 요구가 토큰 에러가 된 횟수 「N」을 카운트하는 것으로 한다. 또한, CPU(12)는, 도 26에 도시하는 처리를 실행하기 전에, 각 프로세스의 「N」에 초기값 「0」을 설정한다. 또한, 도 26에는, 10회 이상 재시도가 실패한 노드를 메모리 에러 핸들링에 의해 분리하는 예를 도시한다.
예컨대, CPU(12)는, 메모리 토큰과 액세스 토큰에 따른 메모리 액세스 요구의 실행을 정상적인 프로세스로서 실행한다(단계 S701). 여기서, CPU(12)는, 에러시그널이 발생하는지의 여부를 판별한다(단계 S702). 또한 에러 시그널이란, 에러가 발생했을 때에 통지되는 신호이며, 예컨대 에러 레지스터(43)에 에러가 저장되면 통지되는 신호이다.
여기서, CPU(12)는, 에러 시그널이 발생한 것으로 판별한 경우에는(단계 S702 긍정), 에러 시그널이 나타내는 에러의 내용이, 메모리 토큰과 액세스 토큰과의 불일치를 나타내는 토큰 에러인지의 여부를 판별한다(단계 S703). 그리고, CPU(12)는, 에러 시그널이 나타내는 에러의 내용이 토큰 에러인 것으로 판별한 경우에는(단계 S703 긍정), 이하의 처리를 실행한다. 즉, CPU(12)는, 토큰 에러가 된 메모리 액세스를 요구한 프로세스의 「N」의 값이 「10」 미만인지의 여부를 판별한다(단계 S704).
그리고, CPU(12)는, 메모리 액세스를 요구한 프로세스의 「N」의 값이 「10」 미만인 것으로 판별한 경우에는(단계 S704 긍정), 메모리 액세스를 요구한 프로세스의 「N」의 값에 「1」을 가산한다(단계 S705). 그 후, CPU(12)는, 재차 정상 프로세스를 실행한다(단계 S701).
또한, CPU(12)는, 메모리 액세스를 요구한 프로세스의 「N」의 값이 「10」 이상인 것으로 판별한 경우에는(단계 S704 부정), 이하의 처리를 실행한다. 즉, CPU(12)는, 메모리 에러 핸들링을 실행하고(단계 S706), 메모리 액세스를 요구한 프로세스를 실행하는 노드를 분리하여, 처리를 종료한다.
다음에, CPU(12)가 노드의 분리 처리를 실행할 때에, 공유 메모리 세그먼트 관리 테이블과 메모리 토큰 관리 테이블을 갱신하는 처리에 대해서 설명한다. 도 27은, 공유 메모리 세그먼트 관리 테이블과 메모리 토큰 관리 테이블을 갱신하는 처리의 흐름에 대해서 설명하기 위한 흐름도이다. 또한 CPU(12)는, 공유 메모리 세그먼트 관리 테이블의 엔트리마다, 도 27에 도시하는 처리를 실행한다. 또한, CPU(12)는, 메모리 액세스 요구 발행원의 노드가 실행하는 프로세스로부터, 세그먼트의 해제 요구를 취득한 것을 계기로서, 도 27에 도시하는 처리를 실행한다.
예컨대 CPU(12)는, 사용 플래그를 참조하여, 사용 플래그가 「1」인지를 판별한다(단계 S801). 그리고, CPU(12)는, 사용 플래그가 「1」인 경우는(단계 S801 긍정), 세그먼트 해제 요구를 발행한 프로세스의 애플리케이션 ID와, 엔트리의 애플리케이션 ID가 일치하는지의 여부를 판별한다(단계 S802).
그리고, CPU(12)는, 애플리케이션 ID가 일치하는 것으로 판별한 경우에는(단계 S802 긍정), 세그먼트 해제 요구를 발행한 프로세스를 실행하는 노드의 사용 노드 플래그가 「1」인지의 여부를 판별한다(단계 S803). 그리고, CPU(12)는, 세그먼트 해제 요구를 발행한 프로세스를 실행하는 노드의 사용 노드 플래그가 「1」인 경우에는(단계 S803 긍정), 세그먼트 해제 요구를 발행한 프로세스를 실행하는 노드의 사용 노드 플래그를 「0」으로 한다(단계 S804).
다음에, CPU(12)는, 다른 사용 노드 플래그가 「0」인지의 여부를 판별하고(단계 S805), 다른 사용 노드 플래그가 「0」인 경우는(단계 S805 긍정), 사용 플래그를 「0」으로 한다(단계 S806). 다음에, CPU(12)는, 엔트리의 메모리 토큰의 값을 식별하고, 메모리 토큰 관리 테이블의 각 엔트리 중, 식별한 값과 동일한 값의 메모리 토큰이 저장된 엔트리를 검색한다. 그리고, CPU(12)는, 검색한 엔트리의 사용 플래그를 「0」으로 한다(단계 S807).
그 후, CPU(12)는, 노드의 분리가 종료된 취지의 완료 응답을 발행하고(단계 S808), 처리를 종료한다. 또한 CPU(12)는, 사용 플래그가 「1」이 아닌 경우(단계 S801 부정), 애플리케이션 ID가 일치하지 않는 경우(단계 S802 부정), 사용 노드 플래그가 「0」인 경우(단계 S803 부정)에는, 완료 응답을 발행한다(단계 S808). 또한 CPU(12)는, 사용 노드 플래그가 모두 「0」이 아닌 경우에는(단계 S805 부정), 완료 응답을 발행한다(단계 S808).
여기서, 도 28은, 공유 메모리 세그먼트 관리 테이블의 갱신을 설명하기 위한 도면이다. 예컨대 도 28 중 어둡게 도시하는 바와 같이, CPU(12)는, 도 27 중 단계 S804 및 단계 S806에 나타내는 처리를 실행하는 것에 의해, 사용 플래그와 사용 노드 플래그를 「0」으로 설정한다.
또한, 도 29는, 메모리 토큰 관리 테이블의 갱신을 설명하기 위한 도면이다. 예컨대 도 29 중 어둡게 도시하는 바와 같이, CPU(12)는, 도 27 중 단계 S807에 도시하는 처리를 실행하는 것에 의해, 사용 플래그를 「0」으로 설정한다. 이와 같이, CPU(12)는, 도 27에 도시하는 처리를 실행함으로써, 공유 메모리 세그먼트 관리 테이블과 메모리 토큰 관리 테이블을 적절히 갱신하여, 노드를 분리할 수 있다.
[실시예 1의 효과]
전술한 바와 같이, 각 CPU(12∼15, 12a∼12m)는, 액세스 토큰 테이블(31, 31a)을 갖는다. 그리고, 각 CPU(12∼15, 12a∼12m)는, 타노드에의 메모리 액세스 요구에, 액세스 토큰을 부가하여 송신한다. 또한, 각 CPU(12∼15, 12a∼12m)는, 자신에게 메모리 액세스 요구를 발행하는 CPU에 대하여 송신한 액세스 토큰과 동일한 값의 메모리 액세스 토큰을 기억하는 메모리 토큰 레지스터를 갖는다. 그리고, 각 CPU(12∼15, 12a∼12m)는, 수신한 메모리 액세스 요구의 액세스 토큰과 메모리 토큰 레지스터가 기억하는 메모리 토큰에 기초하여, 메모리 액세스 요구의 실행 가부를 제어한다.
이 때문에, 각 CPU(12∼15, 12a∼12m)는, 자신의 메모리 토큰 레지스터가 기억하는 메모리 토큰을 변경함으로써, 고장난 노드가 발행한 메모리 액세스 요구의 실행을 막을 수 있다. 이 결과, 정보 처리 시스템(1)은, 스플릿 브레인 상태의 발생을 방지하는 결과, 정확하게 페일오버를 실행할 수 있다.
또한, 각 CPU(12∼15, 12a∼12m)는, 메모리 토큰을 변경할 때에, 새로운 메모리 토큰을 액세스 토큰으로서, 메모리 액세스 요구의 발행원이 되는 노드에 통지한다. 그리고, 각 CPU(12∼15, 12a∼12m)는, 새로운 메모리 토큰과, 수신한 메모리 액세스 요구의 액세스 토큰이 일치한 경우에는, 메모리 액세스 요구의 실행을 허가한다.
이 때문에 각 CPU(12∼15, 12a∼12m)는, 액세스원의 노드에 고장이 발생하는지의 여부를 판별하지 않고도, 고장이 발생한 노드에 의한 메모리 액세스를 막을 수 있다. 이 결과, 각 CPU(12∼15, 12a∼12m)는, 핸드쉐이크 등을 이용하여 액세스원의 노드에 고장이 발생하는지 판별하는 방법보다, 고속이며 용이하게 노드를 분리할 수 있다.
또한, 각 CPU(12∼15, 12a∼12m)는, 메모리 액세스 요구의 실행을 거부한 경우에는, 메모리 토큰의 갱신을 행하고, 그 후, 메모리 액세스 요구의 발행원이 되는 노드의 CPU가 캐시한 데이터를 자신이 액세스하는 메모리에 재기록한다. 이 때문에, 각 CPU(12∼15, 12a∼12m)는, 캐시 메모리를 갖는 경우에도, 캐시 코히런시를 유지한 채, 노드의 분리를 정확하게 행할 수 있다.
또한, 각 CPU(12∼15, 12a∼12m)는, 메모리 액세스 요구의 발행원에 대하여 액세스 정지의 지시와 함께, 새로운 액세스 토큰을 송신한다. 그리고, 각 CPU(12∼15, 12a∼12m)는, 일정 시간 경과 후에, 메모리 토큰을 갱신하고, 액세스 재개를 메모리 액세스 요구의 발행원에 지시한다.
이 때문에, 각 CPU(12∼15, 12a∼12m)는, 메모리 액세스 요구의 발행원으로부터 재시도를 접수하지 않고도, 고장난 노드로부터의 메모리 액세스를 불허가로 할 수 있다. 이 결과, 각 CPU(12∼15, 12a∼12m)는, 메모리 액세스 요구를 불허가로 했을 때에, 발생한 에러의 종별을 판별하지 않고도, 적절히 고장난 노드를 분리할 수 있다.
또한, 각 CPU(12∼15, 12a∼12m)는, 타노드에 대한 메모리 액세스가 불허가가 된 경우에는, 재시도를 행하여도 좋다. 즉, 각 CPU(12∼15, 12a∼12m)는, 메모리 액세스가 불허가가 된 경우에는, 동일한 메모리 액세스를 요구하는 재시도 기능을 갖는다.
이러한 경우에는, 각 CPU(12∼15, 12a∼12m)는, 새로운 액세스 토큰을 통지했을 때에 대기하지 않고도, 고장난 노드를 정확하게 분리할 수 있다. 즉, 액세스원의 노드가 변경 후의 액세스 토큰을 적용하여 메모리 액세스를 행하는 타이밍과, 액세스 목적지의 노드가 메모리 토큰을 변경하는 타이밍에는, 어긋남이 존재하기 때문에, 액세스가 거부되는 경우가 있다.
예컨대, 액세스원의 노드가 변경 전의 액세스 토큰을 부여하고, 액세스 목적지의 노드가 변경 후의 메모리 토큰으로 액세스의 가부를 판별하는 결과, 액세스가 거부되는 경우가 있다. 마찬가지로, 액세스원의 노드가 변경 후의 액세스 토큰을 부여하고, 액세스 목적지의 노드가 변경 전의 메모리 토큰으로 액세스의 가부를 판별하는 결과, 액세스가 거부되는 경우가 있다.
여기서, 액세스가 거부된 경우는, 액세스원의 노드가 재시도를 송신한다. 그렇게 하면, 정상적으로 동작하는 액세스원의 노드는, 메모리 액세스의 재시도로 변경 후의 액세스 토큰을 부여한다. 그리고, 액세스 목적지의 노드가 변경 후의 메모리 토큰으로 액세스의 가부를 판별한다. 이 결과, 각 CPU(12∼15, 12a∼12m)는, 정상적으로 동작하는 액세스원의 노드에 의한 메모리 액세스를 허가할 수 있다.
한편, 정상적으로 동작할 수 없는 액세스원의 노드는, 메모리 액세스의 재시도로 변경 전의 액세스 토큰을 부여하고, 액세스 목적지의 노드는, 변경 후의 메모리 토큰으로 액세스의 가부를 판별한다. 이 결과, 각 CPU(12∼15, 12a∼12m)는, 정상적으로 동작할 수 없는 액세스원의 노드에 의한 메모리 액세스의 재시도를 거부하고, 재시도의 발행원이 되는 노드를 분리할 수 있다.
또한, 각 CPU(12∼15, 12a∼12m)는, 메모리 액세스의 재시도를 거부한 경우에는, 메모리 액세스 요구의 발행원이 되는 노드의 CPU가 캐시한 데이터를 자신이 액세스하는 메모리에 재기록한다. 이 때문에, 각 CPU(12∼15, 12a∼12m)는, 캐시 코히런시를 유지한 채, 노드의 분리를 정확하게 행할 수 있다.
또한, 각 CPU(12∼15, 12a∼12m)는, 콘텍스트 스위치를 행할 때에 스택하는 레지스터를 액세스 토큰 테이블로 한다. 이 때문에, 각 CPU(12∼15, 12a∼12m)는, 멀티 스레드로 처리를 실행하는 경우에도, OS나 애플리케이션을 복잡화시키지 않고, 고장난 노드로부터의 메모리 액세스를 막아, 페일오버를 정확하게 실행할 수 있다.
[실시예 2]
지금까지 본 발명의 실시예에 대해서 설명했지만 실시예는, 전술한 실시예 이외에도 여러 가지 다른 형태로써 실시되어도 좋은 것이다. 그래서, 이하에서는 실시예 2로서 본 발명에 포함되는 다른 실시예를 설명한다.
(1) 액세스 토큰 테이블에 대해서
전술한 CPU(12)는, 각 코어(30a, 30d)에 하나의 액세스 토큰 테이블(31, 31a)을 갖고 있었다. 그러나, 실시예는, 이것에 한정되는 것이 아니다. 예컨대 CPU(12)는, 코어(30a)가 멀티 스레드 대응인 경우에는, 하드웨어 스레드마다 액세스 토큰 테이블을 설치하는 것으로 하여도 좋다.
예컨대 도 30은 멀티 스레드 대응의 액세스 토큰 테이블의 일례를 설명하기 위한 도면이다. 도 30에 도시하는 예에서는, 코어(30a)는, 2개의 하드웨어 스레드를 갖는다. 이러한 경우에는, CPU(12)는, 각 하드웨어 스레드가 이용하는 2개의 액세스 토큰 테이블(31b, 31c)을 갖는다. 그리고, CPU(12)는, 메모리 액세스 요구를 발행한 스레드가 이용하는 액세스 토큰 테이블이 출력한 액세스 토큰을 패킷에 저장한다. 또한 CPU(12)는, 도 30에 도시하는 예에 한하지 않고, 임의의 수의 액세스 토큰 테이블을 갖는 것으로 하여도 좋다.
이와 같이, CPU(12)는, 하드웨어 스레드마다 액세스 토큰 테이블을 설치한 경우에는, 멀티 스레드로 처리를 실행하는 경우에도, OS나 애플리케이션을 복잡화시키지 않고, 고장난 노드로부터의 메모리 액세스를 막는다. 이 결과, 정보 처리 시스템(1)은, 페일오버를 정확하게 실행할 수 있다.
(2) 논프로텍트 영역에 대해서
전술한 CPU(12)는, 논프로텍트 영역에 액세스를 행하는 경우에는, 액세스 토큰 및 메모리 토큰으로서 「all0」를 이용하였다. 그러나, 실시예는 이것에 한정되는 것이 아니다. 예컨대 메모리 토큰 레지스터가 기억하는 메모리 토큰에 밸리드 비트(valid bit)를 설정하고, 밸리드 비트를 이용하여 액세스 대상이 프로텍트 영역인지 논프로텍트 영역인지를 나타내는 것으로 하여도 좋다.
예컨대 도 31은, 메모리 토큰 체커의 변형을 설명하기 위한 도면이다. 도 31에 도시하는 예에서는, 메모리 토큰 체커(38e)는, 메모리 토큰 레지스터(38f)를 갖는다. 메모리 토큰 레지스터(38f)는, 메모리 토큰 레지스터(38f)가 갖는 리저브의 1비트를 밸리드 비트로 하고, 논프로텍트 영역과 대응하는 필드에 밸리드 비트 「0」을 기억한다. 이러한 경우에는, 액세스 대상이 논프로텍트 영역인 경우에는, 액세스 판정 제어기(38d)에 액세스 프리를 나타내는 신호가 입력되기 때문에, 논프로텍트 영역에 대한 메모리 토큰을 설정하지 않고, 적절한 메모리 액세스를 실현할 수 있다.
(3) 부정한 액세스에 의한 메모리 토큰의 일치에 대해서
전술한 CPU(12)는, 메모리 토큰과 액세스 토큰이 일치하는지의 여부에 따라 메모리 액세스 요구의 실행 가부를 판단하였다. 그러나, 실시예는, 이것에 한정되는 것이 아니라, 예컨대 메모리 토큰과 액세스 토큰이 일치하는지의 여부에 더하여, 메모리 액세스 요구를 발행한 노드가 미리 허가된 노드인지의 여부를 함께 판별하여도 좋다.
예컨대 도 32는, 미리 허가된 노드에만 메모리 액세스를 허가하는 메모리 토큰 체커를 설명하기 위한 도면이다. 도 32에 도시하는 예에서는, 메모리 토큰 체커(38g)는, 메모리 토큰 레지스터(38b)에 더하여, 노드 판정 회로(38h)를 가지며, 노드 판정 회로(38h)는, 노드 리스트 레지스터(38i)를 갖는다. 여기서, 노드 리스트 레지스터(38i)는, 각 세그먼트 영역마다, 액세스를 허가한 노드의 노드 ID가 저장되어 있다.
노드 리스트 레지스터(38i)는, 메모리 액세스 요구의 대상이 되는 세그먼트의 어드레스로부터, 액세스가 허가된 노드의 노드 ID를 출력한다. 그리고, 노드 판정 회로(38h)는, 노드 리스트 레지스터(38i)가 출력한 노드 ID와, 메모리 액세스 요구의 발행원인 노드의 노드 ID가 일치하는지의 여부를 나타내는 노드 ID 매치를 액세스 판정 제어기(38d)에 출력한다.
그리고, 액세스 판정 제어기(38d)는, 토큰 인에이블이 「Yes(1)」이며, MY Node HIT와 토큰 매치와 노드 ID 매치와 액세스 프리가 모두 「0」인 경우에는, 메모리 액세스 요구의 실행을 불허가로 한다. 이 이외의 경우에는, 액세스 판정 제어기(38d)는, 메모리 액세스 요구의 실행을 허가한다. 이와 같이, CPU(12)는, 노드 ID의 체크를 행하는 것에 의해, 부정한 액세스를 방지할 수 있다.
1: 정보 처리 시스템, 2, 2a: 클라이언트 단말, 3, 5: LAN 스위치, 4: 관리 단말, 6: 글로벌 크로스바, 7: 서비스 프로세서, 10∼10m: 노드, 11∼11m: 서비스 프로세서, 12∼12m, 13∼15: CPU, 16∼16m: 로컬 XB, 17∼24: 메모리, 25: PCIe 스위치, 26, 27: LAN 어댑터, 28: SAS, 29: HDD, 30a, 30d: 코어, 30b, 30e: L1 캐시, 30c, 30f: TLB, 31∼31c: 액세스 토큰 테이블, 32: L2 캐시 태그, 32a: L2 캐시, 33: 캐시 스누프 컨트롤러, 34: 메모리 리퀘스트 스테이트 머신, 35: 어드레스 맵, 36: 메모리 액세스 포트, 37: 타겟 어드레스 체커, 38, 38e, 38g: 메모리 토큰 체커, 38a: 자노드 ID 레지스터, 38b, 38f: 메모리 토큰 레지스터, 38c: 오퍼레이션 코드 토큰 디코더, 38d: 액세스 판정 제어기, 38h: 노드 판정 회로, 38i: 노드 리스트 레지스터, 39: 홈 스테이트 머신, 40: 메모리 액세스 컨트롤러, 41: 비캐시 리퀘스트 스테이트 머신, 42: PCIe 인터페이스, 43: 에러 레지스터, 44: 레지스터 컨트롤러, 45: 리퀘스트 레지스터, 47∼47c: ASI 레지스터

Claims (9)

  1. 일부 이상을 공유 메모리 영역으로서 설정할 수 있는 기억 장치와 하나 이상의 연산 장치를 각각이 구비하는 복수의 노드와, 상기 복수의 노드 사이를 접속하는 인터커넥트를 갖는 정보 처리 장치로서,
    상기 복수의 노드 중 제1 노드는,
    다른 노드의 기억 장치에 액세스하기 위한 식별 정보를 기억하는 제1 기억부와,
    상기 다른 노드에의 통신 데이터에 상기 식별 정보를 부가하여 송신하는 송신부
    를 구비한 연산 장치를 가지고,
    상기 복수의 노드 중 제2 노드는,
    다른 노드로부터 이 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스 허가의 제어에 이용하는 식별 정보를 기억하는 제2 기억부와,
    상기 제1 노드로부터의 통신 데이터에 부가된 상기 식별 정보와, 상기 제2 기억부에 기억된 식별 정보에 기초하여, 상기 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스 가부를 제어하는 제어부
    를 갖는 것을 특징으로 하는 정보 처리 장치.
  2. 제1항에 있어서, 상기 제1 노드가 갖는 연산 장치의 각각은, 상기 제2 노드로부터 통지되는 식별 정보를 상기 제1 기억부에 저장하고,
    상기 제2 노드는,
    상기 제1 노드에 새로운 식별 정보를 통지하는 통지부와,
    상기 제2 기억부에 기억된 식별 정보를, 상기 통지부가 통지한 식별 정보로 변경하는 변경부
    를 가지고,
    상기 제어부는, 상기 제1 노드로부터의 통신 데이터에 부가된 상기 식별 정보와, 상기 제2 기억부에 기억된 식별 정보가 일치한 경우는, 상기 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스를 허가하고, 상기 제1 노드로부터의 통신데이터에 부가된 상기 식별 정보와, 상기 제2 기억부에 기억된 식별 정보가 일치하지 않는 경우에는, 상기 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스를 허가하지 않는 것을 특징으로 하는 정보 처리 장치.
  3. 제2항에 있어서, 상기 제1 노드가 갖는 연산 장치의 각각은, 상기 제2 노드의 기억 장치로부터 취득한 데이터를 유지하는 캐시 메모리를 가지고,
    상기 제어부는, 상기 제2 노드의 기억 장치로부터 상기 제1 노드의 상기 캐시 메모리에 데이터를 유지하기 위한 액세스를 허가하지 않은 경우에는, 상기 제1 노드의 연산 장치가 갖는 캐시 메모리가 유지한 데이터를 상기 제2 노드의 기억 장치에 재기록하고,
    상기 변경부는, 상기 제어부가, 상기 제1 노드의 연산 장치가 갖는 캐시 메모리가 유지한 데이터를 상기 제2 노드의 기억 장치에 재기록하기 전에, 상기 제2 기억부에 기억된 식별 정보를 새로운 식별 정보로 변경하는 것을 특징으로 하는 정보 처리 장치.
  4. 제2항 또는 제3항에 있어서, 상기 통지부는, 상기 제1 노드에 대하여, 액세스 정지의 지시와 함께 새로운 식별 정보를 통지하고,
    상기 변경부는, 상기 통지부가 상기 액세스 정지의 지시를 통지한 후 정해진 시간이 경과한 후에, 상기 제2 기억부에 기억된 식별 정보를, 상기 통지부가 상기 제1 노드에 통지한 새로운 식별 정보로 변경하는 것을 특징으로 하는 정보 처리 장치.
  5. 제2항 또는 제3항에 있어서, 상기 통지부는, 상기 제1 노드에 새로운 식별 정보를 통지하고,
    상기 변경부는, 상기 제2 기억부에 기억된 식별 정보를, 상기 새로운 식별 정보로 변경하고,
    상기 송신부는, 상기 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스가 허가되지 않은 경우에는, 동일한 액세스를 요구하는 통신 데이터를 재차 송신하는 것을 특징으로 하는 정보 처리 장치.
  6. 제5항에 있어서, 상기 제어부는, 상기 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스를 허가하지 않은 경우는, 상기 제1 노드의 연산 장치가 갖는 캐시 메모리가 유지한 데이터를 상기 제2 노드의 기억 장치에 재기록하는 것을 특징으로 하는 정보 처리 장치.
  7. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 제1 노드가 갖는 연산 장치의 각각은, 콘텍스트 스위치(context switch)를 행할 때에 스택(stack)하는 레지스터의 일부를, 상기 제1 기억부로서 이용하는 것을 특징으로 하는 정보 처리 장치.
  8. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 제1 노드가 갖는 연산 장치의 각각은, 병행하여 실행하는 스레드(thread)와 동일한 수의 제1 기억부를 갖는 것을 특징으로 하는 정보 처리 장치.
  9. 일부 이상을 공유 메모리 영역으로서 설정할 수 있는 기억 장치와 하나 이상의 연산 장치를 각각이 구비하는 복수의 노드와, 상기 복수의 노드 사이를 접속하는 인터커넥트를 갖는 정보 처리 장치가 실행하는 부정 액세스 방지 방법에 있어서,
    상기 복수의 노드 중 제1 노드가 갖는 연산 장치의 각각은,
    다른 노드의 기억 장치에 액세스하기 위한 식별 정보를 상기 다른 노드에의 통신 데이터에 부가하여 송신하고,
    상기 복수의 노드 중 제2 노드는,
    다른 노드로부터 이 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스 허가의 제어에 이용하는 식별 정보를 유지하고,
    상기 제1 노드로부터의 통신 데이터에 부가된 상기 식별 정보와, 유지된 상기 식별 정보에 기초하여, 상기 제2 노드의 기억 장치의 공유 메모리 영역에의 액세스 가부를 제어하는
    처리를 실행하는 것을 특징으로 하는 부정 액세스 방지 방법.
KR1020120120734A 2011-12-28 2012-10-29 정보 처리 장치 및 부정 액세스 방지 방법 KR101403233B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JPJP-P-2011-290025 2011-12-28
JP2011290025A JP5541275B2 (ja) 2011-12-28 2011-12-28 情報処理装置および不正アクセス防止方法

Publications (2)

Publication Number Publication Date
KR20130076696A true KR20130076696A (ko) 2013-07-08
KR101403233B1 KR101403233B1 (ko) 2014-06-02

Family

ID=47044866

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120120734A KR101403233B1 (ko) 2011-12-28 2012-10-29 정보 처리 장치 및 부정 액세스 방지 방법

Country Status (6)

Country Link
US (2) US20130174224A1 (ko)
EP (1) EP2610755A3 (ko)
JP (1) JP5541275B2 (ko)
KR (1) KR101403233B1 (ko)
CN (1) CN103186481A (ko)
TW (1) TWI453625B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017123051A (ja) * 2016-01-07 2017-07-13 富士通株式会社 情報処理装置、情報処理装置の制御方法及び演算処理装置

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9361243B2 (en) 1998-07-31 2016-06-07 Kom Networks Inc. Method and system for providing restricted access to a storage medium
JP5983744B2 (ja) * 2012-06-25 2016-09-06 富士通株式会社 情報処理装置および情報処理装置の故障検出方法
US20150269092A1 (en) * 2014-03-19 2015-09-24 Fujitsu Limited Information processing device and shared memory management method
US10540284B2 (en) * 2014-07-29 2020-01-21 Nxp Usa, Inc. Cache-coherent multiprocessor system and a method for detecting failures in a cache-coherent multiprocessor system
TWI502400B (zh) * 2014-07-30 2015-10-01 Elan Microelectronics Corp 微處理器及其資料保密方法
JP6406027B2 (ja) 2015-01-20 2018-10-17 富士通株式会社 情報処理システム、情報処理装置、メモリアクセス制御方法
JP6428430B2 (ja) * 2015-03-26 2018-11-28 富士ゼロックス株式会社 情報処理装置、画像形成装置、情報処理システムおよびプログラム
GB2539428B (en) * 2015-06-16 2020-09-09 Advanced Risc Mach Ltd Data processing apparatus and method with ownership table
US9514083B1 (en) * 2015-12-07 2016-12-06 International Business Machines Corporation Topology specific replicated bus unit addressing in a data processing system
JP6651836B2 (ja) 2015-12-18 2020-02-19 富士通株式会社 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム
JP2017111750A (ja) * 2015-12-18 2017-06-22 富士通株式会社 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム
JP6668908B2 (ja) * 2016-04-13 2020-03-18 富士通株式会社 情報処理システム、送信装置および情報処理システムの制御方法
WO2017188036A1 (ja) 2016-04-27 2017-11-02 日本電気株式会社 アクセス制御装置、アクセス制御システム、アクセス制御方法、及び、アクセス制御プログラムが格納された記録媒体
JP2017227969A (ja) * 2016-06-20 2017-12-28 富士通株式会社 制御プログラム、システム、及び方法
CN106557280B (zh) * 2016-10-31 2019-10-15 北京华为数字技术有限公司 数据存储方法、存储阵列及主机服务器
US10705994B2 (en) * 2017-05-04 2020-07-07 Nvidia Corporation Unified cache for diverse memory traffic
GB2570692B (en) * 2018-02-02 2020-09-09 Advanced Risc Mach Ltd Controlling guard tag checking in memory accesses
GB2576005B (en) * 2018-07-31 2020-10-07 Advanced Risc Mach Ltd Handling guard tag loss
JP6922879B2 (ja) * 2018-11-30 2021-08-18 日本電気株式会社 通信装置、情報処理システム、および通信方法
US10838631B2 (en) * 2019-02-25 2020-11-17 International Business Machines Corporation Detection of alteration of storage keys used to protect memory
WO2021081944A1 (zh) * 2019-10-31 2021-05-06 华为技术有限公司 处理非缓存写数据请求的方法、缓存器和节点
CN110943934A (zh) * 2019-11-19 2020-03-31 上海钧正网络科技有限公司 服务请求处理方法、系统、终端及可读存储介质
CN113470831B (zh) * 2021-09-03 2021-11-16 武汉泰乐奇信息科技有限公司 一种基于数据简并的大数据转换方法与装置

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01240947A (ja) * 1988-03-23 1989-09-26 Hitachi Ltd 主記憶の記憶保護方式
US5163096A (en) 1991-06-06 1992-11-10 International Business Machines Corporation Storage protection utilizing public storage key control
US5448698A (en) * 1993-04-05 1995-09-05 Hewlett-Packard Company Inter-processor communication system in which messages are stored at locations specified by the sender
US5619671A (en) * 1993-04-19 1997-04-08 International Business Machines Corporation Method and apparatus for providing token controlled access to protected pages of memory
US5845129A (en) * 1996-03-22 1998-12-01 Philips Electronics North America Corporation Protection domains in a single address space
US5900019A (en) * 1996-05-23 1999-05-04 International Business Machines Corporation Apparatus for protecting memory storage blocks from I/O accesses
US6247091B1 (en) * 1997-04-28 2001-06-12 International Business Machines Corporation Method and system for communicating interrupts between nodes of a multinode computer system
US6209064B1 (en) * 1998-01-07 2001-03-27 Fujitsu Limited Cache coherence unit with integrated message passing and memory protection for a distributed, shared memory multiprocessor system
JP4306811B2 (ja) * 1998-01-07 2009-08-05 富士通株式会社 分散共有メモリマルチプロセッサシステムのための統合されたメッセージ・パッシング及びメモリ保護を有するキャッシュ・コヒーレンス・ユニット
US6212610B1 (en) * 1998-01-07 2001-04-03 Fujitsu Limited Memory protection mechanism for a distributed shared memory multiprocessor with integrated message passing support
EP0930616B1 (en) * 1998-01-20 2005-07-13 Fujitsu Limited Data storage device and control method therefor
US7536524B2 (en) * 1998-07-31 2009-05-19 Kom Networks Inc. Method and system for providing restricted access to a storage medium
EP1026898A1 (en) * 1999-02-04 2000-08-09 CANAL+ Société Anonyme Method and apparatus for encrypted transmission
JP4123621B2 (ja) 1999-02-16 2008-07-23 株式会社日立製作所 主記憶共有型マルチプロセッサシステム及びその共有領域設定方法
US6745272B2 (en) * 2001-04-04 2004-06-01 Advanced Micro Devices, Inc. System and method of increasing bandwidth for issuing ordered transactions into a distributed communication system
CN100347667C (zh) * 2001-06-27 2007-11-07 索尼公司 集成电路器件、信息处理设备、信息存储器件的存储管理方法、移动终端设备、半导体集成电路器件、以及使用移动终端设备的通信方法
JP3727887B2 (ja) * 2002-02-19 2005-12-21 富士通株式会社 マルチスレッドプロセッサにおける共有レジスタファイル制御方式
US20030177367A1 (en) * 2002-03-14 2003-09-18 International Business Machines Corporation Controlling access to a disk drive in a computer system running multiple operating systems
US7003631B2 (en) * 2002-05-15 2006-02-21 Broadcom Corporation System having address-based intranode coherency and data-based internode coherency
AU2003276045A1 (en) * 2002-10-07 2004-04-23 Fujitsu Siemens Computers, Inc. Method of solving a split-brain condition
US6981097B2 (en) * 2003-03-14 2005-12-27 Wisconsin Alumni Research Foundation Token based cache-coherence protocol
US6986017B2 (en) * 2003-04-24 2006-01-10 International Business Machines Corporation Buffer pre-registration
JP4576894B2 (ja) * 2004-06-14 2010-11-10 ソニー株式会社 情報管理装置及び情報管理方法
US8756390B2 (en) * 2005-12-05 2014-06-17 International Business Machines Corporation Methods and apparatuses for protecting data on mass storage devices
JP4219964B2 (ja) * 2006-04-06 2009-02-04 ソニー株式会社 ブリッジ、プロセッサユニット、情報処理装置およびアクセス制御方法
US7581074B2 (en) 2006-05-19 2009-08-25 International Business Machines Corporation Facilitating use of storage access keys to access storage
US7752417B2 (en) * 2006-06-05 2010-07-06 Oracle America, Inc. Dynamic selection of memory virtualization techniques
US7886156B2 (en) * 2006-09-18 2011-02-08 John Franco Franchi Secure universal transaction system
US8185709B2 (en) * 2006-10-10 2012-05-22 Data Locker International Llc Security system for external data storage apparatus and control method thereof
US8060716B2 (en) * 2006-12-22 2011-11-15 Panasonic Corporation Information processing device for securely processing data that needs to be protected using a secure memory
US8086585B1 (en) * 2008-09-30 2011-12-27 Emc Corporation Access control to block storage devices for a shared disk based file system
US8363663B2 (en) * 2009-04-02 2013-01-29 The Boeing Company Methods and apparatus for routing data to nodes
US9275734B2 (en) * 2010-02-18 2016-03-01 Katsumi Inoue Memory having information refinement detection function by applying a logic operation in parallel for each memory address to the match/mismatch results of data items and memory addresses, information detection method using memory, and memory address comparison circuit for the memory

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017123051A (ja) * 2016-01-07 2017-07-13 富士通株式会社 情報処理装置、情報処理装置の制御方法及び演算処理装置

Also Published As

Publication number Publication date
US8521977B2 (en) 2013-08-27
TWI453625B (zh) 2014-09-21
KR101403233B1 (ko) 2014-06-02
CN103186481A (zh) 2013-07-03
EP2610755A2 (en) 2013-07-03
US20130173867A1 (en) 2013-07-04
US20130174224A1 (en) 2013-07-04
JP2013140446A (ja) 2013-07-18
JP5541275B2 (ja) 2014-07-09
EP2610755A3 (en) 2014-04-09
TW201342112A (zh) 2013-10-16

Similar Documents

Publication Publication Date Title
KR101403233B1 (ko) 정보 처리 장치 및 부정 액세스 방지 방법
US6449699B2 (en) Apparatus and method for partitioned memory protection in cache coherent symmetric multiprocessor systems
US8234407B2 (en) Network use of virtual addresses without pinning or registration
JP5598493B2 (ja) 情報処理装置、演算装置および情報転送方法
US8171230B2 (en) PCI express address translation services invalidation synchronization with TCE invalidation
JP5565425B2 (ja) 演算装置、情報処理装置および演算方法
US8145878B2 (en) Accessing control and status register (CSR)
US10019276B2 (en) Dynamic non-uniform memory architecture (NUMA) locality for remote direct memory access (RDMA) applications
JP5583849B2 (ja) ポート共有ハードウェアを介した記憶装置への帯域外アクセス
US20070150665A1 (en) Propagating data using mirrored lock caches
EP4031963B1 (en) Tracing status of a programmable device
US20130227224A1 (en) Information processing apparatus, control method, and computer-readable recording medium
JP2013130976A (ja) 情報処理装置およびメモリアクセス方法
US9170963B2 (en) Apparatus and method for generating interrupt signal that supports multi-processor
JPWO2010097925A1 (ja) 情報処理装置
WO2010119802A1 (ja) コンピュータ・システム及びコンピュータ・システムの処理方法
US20220414020A1 (en) Software interface to xpu address translation cache
CN115203110A (zh) PCIe功能及其操作方法
EP4272081A1 (en) Migrating pages of memory accessible by input-output devices
US10394636B2 (en) Techniques for managing a hang condition in a data processing system with shared memory
JP6680973B2 (ja) 情報処理装置、情報処理装置の制御方法及び演算処理装置
CN116662984A (zh) 内存隔离装置以及基于内存隔离装置的多核计算系统
TW202338619A (zh) 定義用於經轉譯存取請求的權限資訊的裝置權限表

Legal Events

Date Code Title Description
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