KR20140037749A - 실행 제어 방법 및 멀티프로세서 시스템 - Google Patents

실행 제어 방법 및 멀티프로세서 시스템 Download PDF

Info

Publication number
KR20140037749A
KR20140037749A KR1020130090798A KR20130090798A KR20140037749A KR 20140037749 A KR20140037749 A KR 20140037749A KR 1020130090798 A KR1020130090798 A KR 1020130090798A KR 20130090798 A KR20130090798 A KR 20130090798A KR 20140037749 A KR20140037749 A KR 20140037749A
Authority
KR
South Korea
Prior art keywords
thread
cpu
executed
processing
information
Prior art date
Application number
KR1020130090798A
Other languages
English (en)
Other versions
KR101521701B1 (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 KR20140037749A publication Critical patent/KR20140037749A/ko
Application granted granted Critical
Publication of KR101521701B1 publication Critical patent/KR101521701B1/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/22Microcontrol or microprogram arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc

Abstract

본 발명은 멀티프로세서 시스템의 처리 성능의 향상을 도모하는 것을 과제로 한다.
CPU #c1에서 실행되고 있는 OS 제어 애플리케이션(101)은, OS #o1에 의해서 실행되는 스레드 #t1로부터 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단한다. 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아니라고 판단한 경우, OS 제어 애플리케이션(101)은, CPU #c1에 고유한 기억 영역인 로컬 메모리 #lm1을 이용하여, 실행 요구가 있었던 동기 처리를 실행한다.

Description

실행 제어 방법 및 멀티프로세서 시스템{EXECUTION CONTROL METHOD AND MULTI-PROCESSOR SYSTEM}
본 발명은 실행 제어 방법 및 멀티프로세서 시스템에 관한 것이다.
종래, 복수의 Operating System(OS)에 의해서 제어되는 시스템이 있다. 예컨대, 복수의 OS 상에서 실행되는 스레드(thread)의 우선 순위에 기초하여, 프로세서에 의해 우선적으로 실행하는 OS를 전환하는 기술이 있다. 또한, 복수의 프로세서에 의해 복수의 OS를 실행하는 시스템에, 각 OS에 고유한 처리를 실행하는 처리부와, 복수의 OS에 의해 실행하는 병렬 처리를 실행하는 처리부를 포함하여, 병렬 처리를 실행하는 OS를 결정하는 기술이 있다(예컨대, 하기 특허문헌 1, 2를 참조)
특허문헌 1: 일본 특허 공개 제2000-242512호 공보 특허문헌 2: 일본 특허 공개 제2009-163527호 공보
그러나, 전술한 종래 기술을 적용한, 복수의 CPU에 의해 복수의 OS를 실행하는 멀티프로세서 시스템에 있어서, 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리에 의해서, 멀티프로세서 시스템의 처리 성능 저하를 초래한다.
본 발명은, 전술한 종래 기술에 의한 문제점을 해소하기 위해서, 멀티프로세서 시스템의 처리 성능의 향상을 도모하는 실행 제어 방법 및 멀티프로세서 시스템을 제공하는 것을 목적으로 한다.
전술한 과제를 해결하여 목적을 달성하기 위해서, 본 발명의 일 측면에 따르면, 복수의 OS에 의해서 제어되는 멀티프로세서 시스템의 제1 프로세서가, 기억부에 저장된, 복수의 OS 중 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 제1 정보를 참조하여, 제1 프로세서를 제어하는 복수의 OS 중 제1 OS에 의해서 실행되는 스레드로부터 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하여, 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아니라고 판단한 경우, 제1 OS가 액세스 가능한 제1 프로세서에 고유한 기억 영역을 이용하여, 실행 요구가 있었던 동기 처리를 실행하는 실행 제어 방법 및 멀티프로세서 시스템이 제안된다.
본 발명의 일측면에 따르면, 멀티프로세서 시스템의 처리 성능의 향상을 도모할 수 있다고 하는 효과를 발휘한다.
도 1은 본 실시형태에 따른 멀티프로세서 시스템의 동작예를 도시하는 설명도이다.
도 2는 멀티프로세서 시스템의 하드웨어 구성예의 일례를 도시하는 블록도이다.
도 3은 CPUs와 메모리의 접속예를 도시하는 설명도이다.
도 4는 멀티프로세서 시스템의 기능 구성예를 도시하는 블록도이다.
도 5는 스레드 및 OS 연관 테이블의 기억 내용의 일례를 도시하는 설명도이다.
도 6은 스레드 및 동기 처리 ID 연관 테이블의 기억 내용의 일례를 도시하는 설명도이다.
도 7은 동기 처리 ID 및 OS 연관 테이블의 기억 내용의 일례를 도시하는 설명도이다.
도 8은 관리 정보의 기억 내용의 일례를 도시하는 설명도이다.
도 9는 동기 처리 ID 및 OS 연관 테이블의 갱신예를 도시하는 설명도이다.
도 10은 동기 처리의 실행 주체 결정 처리 순서의 일례를 도시하는 흐름도이다.
도 11은 스레드 및 OS 연관 테이블의 갱신 처리 순서의 일례를 도시하는 흐름도이다.
도 12는 동기 처리 ID 및 OS 연관 테이블의 갱신 처리 순서의 일례를 도시하는 흐름도이다.
도 13은 CPU 할당 테이블의 기억 내용의 일례를 도시하는 설명도이다.
도 14는 스레드 정보 테이블의 기억 내용의 일례를 도시하는 설명도이다.
도 15는 할당 가능 OS수 테이블의 기억 내용의 일례를 도시하는 설명도이다.
도 16은 CPU 상태 테이블의 기억 내용의 일례를 도시하는 설명도이다.
도 17은 스레드 할당 예정 기억 테이블의 기억 내용의 일례를 도시하는 설명도이다.
도 18은 통일 스케쥴링을 행하기 전의 스레드의 할당 상태를 도시하는 설명도이다.
도 19는 통일 스케쥴링의 탐색 처리에 있어서의 제1 단계를 도시하는 설명도이다.
도 20은 통일 스케쥴링의 탐색 처리에 있어서의 제2 단계를 도시하는 설명도이다.
도 21은 통일 스케쥴링의 탐색 처리에 있어서의 제3 단계를 도시하는 설명도이다.
도 22는 통일 스케쥴링의 탐색 처리에 있어서의 제4 단계를 도시하는 설명도이다.
도 23은 통일 스케쥴링의 탐색 처리에 있어서의 제5 단계를 도시하는 설명도이다.
도 24는 통일 스케쥴링의 탐색 처리에 있어서의 제6 단계를 도시하는 설명도이다.
도 25는 통일 스케쥴링의 탐색 처리에 있어서의 제7 단계를 도시하는 설명도이다.
도 26은 통일 스케쥴링의 탐색 처리에 있어서의 제8 단계를 도시하는 설명도이다.
도 27은 통일 스케쥴링의 탐색 처리에 있어서의 제9 단계를 도시하는 설명도이다.
도 28은 통일 스케쥴링의 정지 재개 처리에 있어서의 제1 단계를 도시하는 설명도이다.
도 29는 통일 스케쥴링의 정지 재개 처리에 있어서의 제2 단계를 도시하는 설명도이다.
도 30은 통일 스케쥴링의 정지 재개 처리에 있어서의 제3 단계를 도시하는 설명도이다.
도 31은 통일 스케쥴링의 정지 재개 처리에 있어서의 제4 단계를 도시하는 설명도이다.
도 32는 통일 스케쥴링의 정지 재개 처리에 있어서의 제5 단계를 도시하는 설명도이다.
도 33은 통일 스케쥴링의 정지 재개 처리에 있어서의 제6 단계를 도시하는 설명도이다.
도 34는 통일 스케쥴링 처리 순서의 일례를 도시하는 흐름도이다.
도 35는 통일 스케쥴링의 전처리 순서의 일례를 도시하는 흐름도이다.
도 36은 통일 스케쥴링의 탐색 처리 순서의 일례를 도시하는 흐름도이다.
도 37은 통일 스케쥴링의 정지 재개 처리 순서의 일례를 도시하는 제1 흐름도이다.
도 38은 통일 스케쥴링의 정지 재개 처리 순서의 일례를 도시하는 제2 흐름도이다.
이하에 첨부 도면을 참조하여 개시하는 실행 제어 방법 및 멀티프로세서 시스템의 실시형태를 상세히 설명한다.
도 1은 본 실시형태에 따른 멀티프로세서 시스템의 동작예를 도시하는 설명도이다. 멀티프로세서 시스템(100)은 CPU #c1 ~ CPU #c3과, 로컬 메모리 #lm1, 공유 메모리 #sm2와, 글로벌 메모리 #gm을 포함한다. 이하의 설명에서, "#" 이후의 접미 부호를 도 1 ~ 도 38 내에서는 각 하드웨어, 각 소프트웨어의 식별 정보로서도 이용한다.
멀티프로세서 시스템이란, 복수의 프로세서를 포함하는 컴퓨터의 시스템이다. 또한, 하나의 프로세서에 복수의 코어가 포함되어 있더라도 좋다. 한편, 본 실시형태에서는, 싱글 코어의 프로세서인 CPU가 병렬되어 있는 형태를 예로 들어 설명한다.
CPU #c2와 CPU #c3은 공통의 명령 세트와 레지스터 세트의 프로세서이며, CPU #c1과 CPU #c2는 다른 명령 세트와 레지스터 세트의 프로세서이다. 이와 같이, 멀티프로세서 시스템(100)은 헤테로지니어스 프로세서로 되어 있다. CPU #c1 ~ CPU #c3을 하나의 OS로 제어하기 위해서는, 명령 세트나 레지스터 세트의 차이나 캐쉬의 차이로부터 캐쉬의 일관성을 취하는 처리량이 많아진다. 따라서, 멀티프로세서 시스템(100)은 CPU #c1을 OS #o1에 의해서 제어하고, CPU #c2, CPU #c3을 OS #o1과는 다른 OS #o2에 의해서 제어하고 있다. OS #o1은 스레드 #t1을 실행하고, OS #o2는 스레드 #t2를 실행하고 있다.
이어서, CPU와 로컬 메모리 #lm1, 공유 메모리 #sm2와 글로벌 메모리 #gm에 관해서 설명한다. 로컬 메모리 #lm1은 CPU #c1 고유의 기억 장치이다. 한편, CPU #c2와 CPU #c3의 고유의 기억 장치가 있더라도 좋다. CPU #c2와 CPU #c3의 고유의 기억 장치를 포함한 설명은 도 3에서 후술한다. 공유 메모리 #sm2는 CPU #c2와 CPU #c3으로부터 공유되는 기억 장치이다. 글로벌 메모리 #gm은 CPU #c1 ~ CPU #c3으로부터 공유되는 기억 장치이다. 로컬 메모리 #lm, 공유 메모리 #sm, 글로벌 메모리 #gm은 CPU에서 가까운 기억 장치 쪽이 기록 및 판독 속도가 빠르다.
이어서, 스레드 #t1, 스레드 #t2에 관해서 설명한다. 스레드란, 프로그램의 실행 단위이다. 스레드는 OS의 종류에 따라서는 태스크라고도 불린다. 본 실시형태에서는 스레드로 통일하여 설명한다. 스레드의 상태로서는, OS에 의해서 CPU에 할당되어 실행 중인 실행 상태, 실행 요구를 받아 실행 대기이지만 CPU에 할당되어 있지 않은 실행 가능 상태가 있다.
또한, OS 제어 애플리케이션(101)은 OS #o1 상에서 실행하는 소프트웨어이다. OS 제어 애플리케이션(101)은 OS #o2 상에서 실행하는 것도 가능하다. OS 제어 애플리케이션(101)은, 동기 처리가 실행되는 경우에, 처리 성능의 향상을 도모하기 위해서, 동기 처리가 이용하는 정보가 저장되는 위치를 변경한다. 또한, OS 제어 애플리케이션(101)은 멀티프로세서 시스템(100) 전체의 스레드 스케쥴링을 행하더라도 좋다. 이하, OS 제어 애플리케이션(101)이 실행하는 스케쥴링을 「통일 스케쥴링」이라고 부른다.
동기 처리란, 복수 스레드의 처리를 제어하는 처리이다. 동기 처리는 예컨대, 세마포르(semaphore), 이벤트 플래그, 메일 박스, 메모리 풀이 있다. 구체적으로, 복수의 스레드로 하나의 값을 공유하는 경우, 복수의 스레드는 세마포르를 이용하여 값의 공유를 실현할 수 있다. 이때, 세마포르가 이용하는 정보는 복수의 OS로부터 액세스할 수 있도록 글로벌 메모리 #gm이 된다. 멀티프로세서 시스템(100)의 제1 CPU가 되는 CPU #c1에서 실행되고 있는 OS 제어 애플리케이션(101)은, 처리 성능의 향상을 도모하기 위해서, 동기 처리가 이용하는 정보가 저장되는 위치를 변경한다.
OS 제어 애플리케이션(101)은, 제1 OS가 되는 OS #o1에 의해서 실행되는 스레드 #t1로부터 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단한다. 실행 요구가 있었던 동기 처리를 검출하는 방법으로서, 예컨대 OS 제어 애플리케이션(101)은 스레드가 호출하는 동기 처리의 Application Programming Interface(API)의 어드레스에 훅을 걸어 둔다. 이에 따라, OS 제어 애플리케이션(101)이 실행 요구가 있었던 동기 처리를 검출할 수 있다. 또한, 구체적인 판단 방법으로서, OS 제어 애플리케이션(101)은, 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 제1 정보를 기억하는 기억부를 참조한다. 구체적인 기억 내용에 관해서는 도 7에서 후술한다.
서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아니라고 판단한 경우, OS 제어 애플리케이션(101)은 CPU #c1에 고유한 기억 영역인 로컬 메모리 #lm1을 이용하여, 실행 요구가 있었던 동기 처리를 실행한다.
이와 같이, OS 제어 애플리케이션(101)은, 어떤 OS로부터의 동기 처리가 다른 OS가 실행하는 스레드로부터 호출되지 않을 때, OS를 실행하는 CPU 고유의 기억 영역을 이용하여 동기 처리를 한다. 이에 따라, 메모리 일관성을 취하지 않아도 되는 동기 처리에 관해서, 복수의 CPU 공유의 기억 영역인 글로벌 메모리 #gm을 이용하지 않아도 되어, 멀티프로세서 시스템(100)의 처리 성능이 향상된다. 이하, 도 2 ~ 도 38을 이용하여 멀티프로세서 시스템(100)에 관해서 상세히 설명한다.
(멀티프로세서 시스템(100)의 하드웨어)
도 2는 멀티프로세서 시스템의 하드웨어 구성예의 일례를 도시하는 블록도이다. 도 2에 있어서, 휴대 단말을 상정하는 멀티프로세서 시스템(100)은 CPUs(201)와, ROM(Read Only Memory)(202)와, RAM(Random Access Memory)(203)와, 플래시 ROM(204)과, 플래시 ROM 컨트롤러(205)과, 플래시 ROM(206)을 갖는다. 또한, 멀티프로세서 시스템(100)은 디스플레이(207)와, I/F(208)와, 키보드(209)와, 카메라 디바이스(210)를 더 갖는다. 또한, 도 1에 도시한 글로벌 메모리 #gm은 RAM(203), 플래시 ROM(204), 플래시 ROM(206)과 같은 기억 장치가 된다.
여기서, CPUs(201)는 멀티프로세서 시스템(100) 전체의 제어를 담당하는 제어 장치군이다. CPUs(201)의 구체적인 예에 관해서는 도 3에서 기술한다. ROM(202)은 부팅 프로그램 등의 프로그램을 기억하고 있는 불휘발성 메모리이다. RAM(203)은 CPUs(201)의 작업 영역으로서 사용되는 휘발성 메모리이다. 플래시 ROM(204)는 재기록 가능한 불휘발성 메모리이다. 예컨대, 플래시 ROM(204)은 판독 속도가 고속인 NOR형 플래시 메모리이다. 플래시 ROM(204)은 OS(Operating System) 등의 시스템 소프트웨어나 애플리케이션 등을 기억하고 있다. 예컨대, OS를 갱신하는 경우, 멀티프로세서 시스템(100)은 I/F(208)에 의해서 새로운 OS를 수신하여, 플래시 ROM(204)에 저장되어 있는 오래된 OS를 수신한 새로운 OS로 갱신한다.
플래시 ROM 컨트롤러(205)는 CPUs(201)의 제어에 따라서 플래시 ROM(206)에 대한 데이터의 리드/라이트를 제어하는 제어 장치이다. 플래시 ROM(206)은 재기록 가능한 불휘발성 메모리이며, 예컨대 데이터의 보존, 운반을 주목적으로 한 NAND형 플래시 메모리이다. 플래시 ROM(206)은 플래시 ROM 컨트롤러(205)의 제어로 기록된 데이터를 기억한다. 데이터의 구체예로서는, 멀티프로세서 시스템(100)을 사용하는 사용자가 I/F(208)를 통해서 취득한 화상 데이터, 영상 데이터 등이나 또한 본 실시형태에 따른 실행 제어 방법을 실행하는 프로그램을 기억하더라도 좋다. 플래시 ROM(206)은 예컨대 메모리 카드, SD 카드 등을 채용할 수 있다.
디스플레이(207)는 커서, 아이콘 혹은 툴박스를 비롯하여, 문서, 화상, 기능 정보 등의 데이터를 표시하는 표시 장치이다. 디스플레이(207)는 예컨대 TFT 액정 디스플레이 등을 채용할 수 있다.
I/F(208)는 통신 회선을 통하여 LAN(Local Area Network), WAN(Wide Area Network), 인터넷 등의 네트워크(212)에 접속되어, 네트워크(212)를 통해 다른 장치에 접속된다. 그리고, I/F(208)는 네트워크(212)와 내부의 인터페이스를 담당하여, 외부 장치로부터의 데이터 입출력을 제어한다. I/F(208)에는 예컨대 모뎀이나 LAN 어댑터 등을 채용할 수 있다.
키보드(209)는 숫자, 각종 지시 등의 입력을 위한 키를 가져, 데이터를 입력한다. 또한, 키보드(209)는 터치 패널식의 입력 패드나 텐키 등이라도 좋다. 카메라 디바이스(210)는 정지 화상이나 동화상을 촬영하는 장치이다.
도 3은 CPUs와 메모리와의 접속예를 도시하는 설명도이다. 도 3에서는, CPUs(201)에 포함되는 CPU군과, CPU군이 액세스 가능한 메모리인 로컬 메모리 #lm과, 공유 메모리 #sm과, 글로벌 메모리 #gm에 관해서 설명한다.
CPUs(201)는 CPU #c1 ~ CPU #c6을 포함한다. CPU #c1, CPU #c2와 CPU #c3, CPU #c4 ~ CPU #c6은 각각 공통의 명령 세트와 레지스터 세트의 프로세서이다. 또한, CPU #c2와 CPU #c3은 명령 세트와 레지스터 세트가 동일하다면, 처리 성능이 다르더라도 좋다. 마찬가지로, CPU #c4 ~ CPU #c6도 명령 세트와 레지스터 세트가 동일하다면, 처리 성능이 다르더라도 좋다.
OS #o1은 CPU #c1이 실행하는 OS이다. OS #o2는 CPU #c2와 CPU #c3이 실행하는 OS이다. OS #o3은 CPU #c4 ~ CPU #c6이 실행하는 OS이다.
로컬 메모리 #lm1 ~ 로컬 메모리 #lm6은 각각 CPU #c1 ~ CPU #c6의 고유의 기억 장치이다. 로컬 메모리 #lm1 ~ 로컬 메모리 #lm6은 예컨대 각 CPU에서 이용되는 데이터를 기억하고 있다. 또한, 로컬 메모리 #lm1은 OS #o1의 프로그램 데이터인 OS #o1 프로그램을 기억하고 있다. OS의 프로그램 데이터는, 변경되지 않는 명령 코드열과 고정치의 변수나 테이블, 변경하는 초기치를 지닌 변수나 테이블, 초기치 없는 변수나 테이블을 포함한다.
공유 메모리 #sm2는 CPU #c2와 CPU #c3에서 공유되는 기억 장치이다. 또한, 공유 메모리 #sm3은 CPU #c4 ~ CPU #c6에서 공유되는 기억 장치이다. 공유 메모리 #sm2는 OS #o2의 프로그램 데이터인 OS #o2 프로그램을 기억하고 있다. 마찬가지로, 공유 메모리 #sm3은 OS #o3의 프로그램 데이터인 OS #o3 프로그램을 기억하고 있다.
글로벌 메모리 #gm은 CPU #c1 ~ CPU #c6에서 공유되는 기억 장치이다. 로컬 메모리 #lm, 공유 메모리 #sm, 글로벌 메모리 #gm은 CPU에서 가까운 기억 장치 쪽이 기록 및 판독 속도가 빠르다. CPU #c2의 예에서는, 로컬 메모리 #lm2가 가장 기록 및 판독 속도가 빠르고, 공유 메모리 #sm2, 글로벌 메모리 #gm의 순으로 늦어진다.
(멀티프로세서 시스템(100)의 기능)
이어서, 멀티프로세서 시스템(100)의 기능에 관해서 설명한다. 도 4는 멀티프로세서 시스템의 기능 구성예를 도시하는 블록도이다. 멀티프로세서 시스템(100)은 연관부(401)와, 갱신부(402)와, 판단부(403)와, 실행부(404)와, 선택부(405)와, 제어부(406)를 포함한다. 연관부(401) ~ 제어부(406)는 기억 장치에 기억된 OS 제어 애플리케이션(101)의 프로그램 코드를 CPU #c1 ~ CPU #c6 중 어느 것이 실행함으로써, 연관부(401) ~ 제어부(406)의 기능을 실현한다. 기억 장치란, 구체적으로는 예컨대 로컬 메모리 #lm, 공유 메모리 #sm, 글로벌 메모리 #gm 등이다. 연관부(401) ~ 제어부(406)는 도 4에서는 OS #o3 상의 기능으로서 도시되어 있지만, OS #o1이나 OS #o2의 기능이라도 좋다.
또한, 멀티프로세서 시스템(100)은, 스레드 및 OS 연관 테이블(411)과, 스레드 및 동기 처리 ID 연관 테이블(412)과, 동기 처리 ID 및 OS 연관 테이블(413)과, 관리 정보(414)에 액세스 가능하다. 또한, 멀티프로세서 시스템(100)은, CPU 할당 테이블(421)과, 스레드 정보 테이블(422)과, 할당 가능 OS수 테이블(423)과, CPU 상태 테이블(424)과, 스레드 할당 예정 기억 테이블(425)에 액세스 가능하다.
스레드 및 OS 연관 테이블(411) ~ 관리 정보(414), CPU 할당 테이블(421) ~ 스레드 할당 예정 기억 테이블(425)은 글로벌 메모리 #gm에 저장되어 있다. 스레드 및 OS 연관 테이블(411) ~ 관리 정보(414), CPU 할당 테이블(421) ~ 스레드 할당 예정 기억 테이블(425)의 구체적인 설명은 도 5 ~ 도 8, 도 13 ~ 도 17에 설명한다.
동기 처리 ID 및 OS 연관 테이블(413)은 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 제1 정보를 기억한다. 제1 정보는 예컨대 동기 처리의 식별 정보와, 그 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 나타내는 값을 갖는다. 또한, 제1 정보는 동기 처리의 식별 정보와, 그 동기 처리의 실행 요구를 하는 스레드를 실행하는 OS의 식별 정보를 갖더라도 좋다.
연관부(401)는, 동기 처리의 실행 요구를 하는 스레드를 복수의 OS 중 어느 OS가 실행한 경우, 동기 처리의 실행 요구를 하는 스레드와 이 스레드를 실행한 OS를 연관짓는다. 예컨대, 스레드 #t1을 OS #o1이 실행한 경우, 연관부(401)는 스레드 #t1과 OS #o1을 연관짓는다. 또한, 어떤 스레드가 동기 처리의 실행 요구를 하는지를 특정하는지에 관해서, 연관부(401)는 스레드 및 동기 처리 ID 연관 테이블(412)을 참조하더라도 좋고, 스레드로부터 실행 요구가 있었던 동기 처리를 기억해 둔 정보를 참조하더라도 좋다. 한편, 연관지은 정보는 로컬 메모리 #lm, 스레드 및 OS 연관 테이블(411) 등에 기억된다.
갱신부(402)는 연관부(401)에 의해서 연관지어진 연관 결과에 기초하여, 동기 처리 ID 및 OS 연관 테이블(413)에 기억되어 있는, 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 제1 정보를 갱신한다. 예컨대, 연관부(401)가, 스레드 #t1과 OS #o1을 연관짓고, 또한, 스레드 #t1과 OS #o2를 연관지었다고 하자. 이때, 갱신부(402)는, 스레드 #t1로부터 실행 요구가 이루어지는 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리라고 하여, 동기 처리 ID 및 OS 연관 테이블(413)을 갱신한다.
판단부(403)는, 제1 정보를 참조하여, 제1 CPU를 제어하는 복수의 OS 중 제1 OS에 의해서 실행되는 스레드로부터 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단한다. 예컨대, 동기 처리 ID 및 OS 연관 테이블(413)이, 세마포르 ID #s1과, OS #o1 및 OS #o2를 연관지어 기억하고 있는 상태로 한다. 이 상태에서, 세마포르 ID #s1의 실행 요구가 있었던 경우, 판단부(403)는 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리라고 판단한다.
또한, 판단부(403)는, 제1 정보를 참조하여, 스레드로부터 실행 요구가 있었던 동기 처리가 복수의 CPU의 동일 종별의 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하더라도 좋다.
또한, 판단부(403)는, 갱신부(402)에 의해서 갱신된 제1 정보를 참조하여, 실행 요구가 있었던 동기 처리가 동일 종류의 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하더라도 좋다. 예컨대, 판단부(403)는, 세마포르 ID #s1과, OS #o1과, OS #o1과 동일 종류의 OS #o1'을 연관지어 기억하고 있다고 하자. 이때, 판단부(403)는 세마포르 ID #s1이 동일 종류의 OS에 의해서 실행되는 스레드 사이의 동기 처리라고 판단한다.
또한, 판단부(403)는, 제1 정보를 참조하여, 멀티프로세서 시스템(100)의 동작 모드에 기초하여, 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단한다. 멀티프로세서 시스템(100)의 동작 모드란, 사용자 등에 의해 지정되어, 멀티프로세서 시스템(100)의 동작 상태를 보이고 있다. 동작 모드가 변하면, 동기 처리의 실행 요구를 실행하는지 여부가 변하는 스레드가 있더라도 좋다. 한편, 판단 결과는 로컬 메모리 #lm 등에 기억된다.
실행부(404)는, 판단부(403)에 의해서 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아니라고 판단된 경우, 제1 OS가 액세스 가능한 제1 CPU에 고유한 기억 영역을 이용하여, 실행 요구가 있었던 동기 처리를 실행한다. 예컨대, 실행부(404)는 로컬 메모리 #lm을 이용하여 실행 요구가 있었던 동기 처리를 실행한다. 구체적으로, 실행부(404)로서, OS가 동기 처리를 실행하더라도 좋고, OS 제어 애플리케이션(101)이 동기 처리를 실행하더라도 좋다.
또한, 실행부(404)는, 판단부(403)에 의해서 실행 요구가 있었던 동기 처리가 동일 종류의 OS에 의해서 실행되는 스레드 사이의 동기 처리라고 판단된 경우, 동일 종류의 OS가 액세스 가능한 기억 영역을 이용하여, 실행 요구가 있었던 동기 처리를 실행하더라도 좋다. 예컨대, 판단부(403)가, OS #o1에 의해서 실행되는 스레드와, OS #o1과 동일 종류의 OS #o1'에 의해서 실행되는 스레드 사이의 동기 처리라고 판단했다고 하자. 이때, 실행부(404)는, OS #o1과 OS #o1'이 액세스 가능한 기억 영역을 이용하여, 실행 요구가 있었던 동기 처리를 실행하더라도 좋다. 이에 따라, 많은 CPU에 의해서 액세스되는 기억 영역을 가능한 한 피하여 동기 처리를 실행할 수 있으므로, 멀티프로세서 시스템(100)의 처리 성능을 향상시킬 수 있다.
또한, 실행부(404)는, 판단부(403)에 의해서 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리라고 판단된 경우, 복수의 OS가 액세스 가능한 기억 영역을 이용하여, 실행 요구가 있었던 동기 처리를 실행하더라도 좋다. 예컨대, 실행부(404)는 글로벌 메모리 #gm을 이용하여 실행 요구가 있었던 동기 처리를 실행한다.
선택부(405)는, 복수의 OS 중에서, 할당된 모든 스레드의 실행을 종료한 OS를 검출한 경우, 멀티프로세서 시스템 내에서 실행 대기하는 스레드 중, 종료된 OS가 실행 가능한 하나의 스레드를 선택한다. 예컨대, OS #o1에 할당된 하나의 스레드의 실행이 종료되었다고 하자. 이때, 선택부(405)는 OS #o1이 실행 가능한 스레드로부터 하나의 스레드를 선택한다.
또한, 복수의 OS 중에서, 할당된 모든 스레드의 실행이 종료된 OS를 검출했다고 하자. 이때, 선택부(405)는, 멀티프로세서 시스템 내에서 실행 대기하는 스레드 중, 종료된 OS를 실행하는 CPU가 실행 가능한 하나의 스레드를 선택하더라도 좋다. 예컨대, OS #o2에 할당된 하나의 스레드의 실행이 종료되었다고 하자. 이때, 선택부(405)는 OS #o2를 실행하는 CPU #c2가 실행 가능한 스레드로부터 하나의 스레드를 선택한다. 한편, 선택 결과는 로컬 메모리 #lm 등에 기억된다.
제어부(406)는 선택부(405)에 의해서 선택된 스레드를 종료된 OS에 의해서 실행시킨다. 예컨대, 제어부(406)는 스레드의 실행이 끝난 OS #o1에 스레드 #t2를 실행시킨다.
도 5는 스레드 및 OS 연관 테이블의 기억 내용의 일례를 도시하는 설명도이다.
스레드 및 OS 연관 테이블(411)은 동작 모드마다 스레드와 OS의 연관 정보를 기억하고 있다.
도 5에서 도시하는 스레드 및 OS 연관 테이블(411)은, 촬영 전의 뷰 모드에 있어서의 스레드 및 OS 연관 테이블(501-1)과, 정지 화상 촬영 모드에 있어서의 스레드 및 OS 연관 테이블(501-2)을 포함한다. 또한, 도 5에서 도시하는 스레드 및 OS 연관 테이블(411)은, 동화상 촬영 모드에 있어서의 스레드 및 OS 연관 테이블(501-3)과, 동화상 재생 모드에 있어서의 스레드 및 OS 연관 테이블(501-4)을 포함한다. 또한, 도 5에서 도시하지 않지만, 스레드 및 OS 연관 테이블(411)은 다른 모드에 있어서의 스레드 및 OS 연관 테이블(501-x)을 포함한다. x는 양의 정수이다.
각 동작 모드의 스레드와 OS의 연관 테이블은 동일한 필드를 갖고 있으며, 설명을 간략하게 하기 위해서, 촬영 전의 뷰 모드에 있어서의 스레드 및 OS 연관 테이블(501-1)에 관해서 설명한다.
촬영 전의 뷰 모드에 있어서의 스레드 및 OS 연관 테이블(501-1)은, 레코드(501-1-1) ~ 레코드(501-1-10)를 기억한다. 촬영 전의 뷰 모드에 있어서의 스레드 및 OS 연관 테이블(501-1)은 스레드 ID, 속하는 OS라는 2개의 필드를 포함한다. 스레드 ID 필드에는 스레드를 식별하는 식별 정보가 저장된다. 속하는 OS 필드에는, 스레드 필드에 저장된 스레드가 속하는 OS의 식별 정보가 저장된다. 예컨대, 레코드(501-1-1)는 스레드 #t1이 OS #o2에 속한다는 것을 나타내고 있다.
도 6은 스레드 및 동기 처리 ID 연관 테이블의 기억 내용의 일례를 도시하는 설명도이다. 스레드 및 동기 처리 ID 연관 테이블(412)은 스레드마다 그 스레드가 이용하는 동기 처리를 기억하고 있다. 도 6에 도시하는 스레드 및 동기 처리 ID 연관 테이블(412)은 레코드(601-1) ~ 레코드(601-10)를 기억하고 있다.
스레드 및 동기 처리 ID 연관 테이블(412)은 스레드 ID, 이용 세마포르 ID, 이용 이벤트 플래그 ID, 이용 메일 박스 ID, 이용 메모리 풀 ID라는 5개의 필드를 포함한다. 스레드 ID 필드에는 스레드를 식별하는 식별 정보가 저장된다. 이용 세마포르 ID 필드에는 스레드 필드에 저장된 스레드가 이용하는 세마포르의 식별 정보가 저장된다. 이용 이벤트 플래그 ID 필드에는 스레드 필드에 저장된 스레드가 이용하는 이벤트 플래그의 식별 정보가 저장된다. 이용 메일 박스 ID 필드에는 스레드 필드에 저장된 스레드가 이용하는 메일 박스의 식별 정보가 저장된다. 이용 메모리 풀 ID 필드에는 스레드 필드에 저장된 스레드가 이용하는 메모리 풀의 식별 정보가 저장된다.
예컨대, 레코드(601-2)는 스레드 #t2가, 세마포르 ID #s7과, 이벤트 플래그 ID #e3과, 이벤트 플래그 ID #e4와, 메일 박스 ID #mb1과, 메모리 풀 ID #mp2를 이용하는 것을 나타내고 있다.
도 7은 동기 처리 ID 및 OS 연관 테이블의 기억 내용의 일례를 도시하는 설명도이다. 동기 처리 ID 및 OS 연관 테이블(413)은 동기 처리마다 그 동기 처리를 이용하는 스레드가 속하는 OS를 기억하고 있다. 도 7에 도시하는 동기 처리 ID 및 OS 연관 테이블(413)은, 세마포르 ID 및 OS 연관 테이블(701-1)과, 이벤트 플래그 ID 및 OS 연관 테이블(701-2)을 포함한다. 또한, 도 7에 도시하는 동기 처리 ID 및 OS 연관 테이블(413)은, 메일 박스 ID 및 OS 연관 테이블(701-3)과, 메일 풀 ID 및 OS 연관 테이블(701-4)을 포함한다. 이하, 설명을 간략하게 하기 위해서, 세마포르 ID 및 OS 연관 테이블(701-1)에 관해서 설명한다.
도 7에 도시하는 세마포르 ID 및 OS 연관 테이블(701-1)은 레코드(701-1-1) ~ 레코드(701-1-8)를 기억한다. 세마포르 ID 및 OS 연관 테이블(701-1)은 세마포르 ID, 이용 스레드가 속하는 OS라는 2개의 필드를 포함한다. 세마포르 ID 필드에는 세마포르의 식별 정보가 저장된다. 이용 스레드가 속하는 OS 필드에는 그 세마포르를 이용하는 스레드가 속하는 OS의 식별 정보가 저장된다.
예컨대, 레코드(701-1-1)는 세마포르 ID #s1이 OS #o1과 OS #o2에 속하는 스레드로부터 이용됨을 나타내고 있다.
도 8은 관리 정보의 기억 내용의 일례를 도시하는 설명도이다. 관리 정보(414)는 실행중 관리 정보(801), 실행 가능 관리 정보(802), 스레드 정보(803), 시간 대기 관리 정보(804), 세마포르 정보(805), 이벤트 플래그 정보(806), 메일 박스 정보(807), 메모리 풀 정보(808)를 갖는다.
실행중 관리 정보(801)는 CPU 개수분만큼 있으며, 그 CPU가 실행 중인 스레드를 나타내는 정보이다. 실행중 관리 정보(801)의 체인 요소는 실행 중인 하나의 스레드 정보(803)에의 포인터가 저장되어 있다.
실행 가능 관리 정보(802)는 하나 존재하며, 실행 가능한 스레드군을 나타내는 정보이다. 실행 가능 관리 정보(802)의 대기 큐 요소는 일방향 리스트를 형성하고 있어, 실행 가능한 스레드 정보(803)가 줄줄이 묶여 이어진다.
스레드 정보(803)는 스레드 개수분만큼 있으며, 스레드의 속성을 나타내는 정보이다. 복수의 스레드 정보(803)를 식별하기 위해서, OS 제어 애플리케이션(101)은 스레드 ID를 이용하여 색인한다. 스레드 정보(803)의 체인 요소는 관리 정보(414) 중 시간 대기 관리 정보(804) 이외의 정보에 결합하고 있다.
스레드 정보(803)의 시간 대기 체인 요소는 타임아웃을 실현하는 경우, 시간 대기 관리 정보(804)의 대기 큐 요소로부터 이어진다. 스레드 정보(803)의 OS ID 요소는 스레드를 실행 중인 OS의 식별 정보를 나타내고 있다. 스레드 정보(803)의 스레드 ID 요소는 스레드의 식별 정보이다. 스레드 정보(803)의 CPU ID 요소는 스레드를 실행 중인 CPU의 식별 정보를 나타내고 있다.
스레드 정보(803)의 상태치 요소는 스레드의 상태이다. 스레드 정보(803)의 상태치는 실행 상태, 실행 가능 상태, 대기 상태(시간, 세마포르, 이벤트, 메일 박스, 메모리 풀), 미등록이 있다. 스레드 정보(803)의 우선도 요소는 스레드의 우선도를 나타내는 값이다. 스레드 정보(803)의 대기 플래그 요소와 스레드 정보(803)의 플래그 모드 요소는 이벤트 플래그 대기에 있어서 조건을 저장하는 것이다. 스레드 정보(803)의 대기 시간 요소는 시간 대기시에 복귀 시간을 나타내는 것이다.
시간 대기 관리 정보(804)는 하나 존재하며, 대기 상태로 되어 있는 스레드를 나타내는 정보이다. 시간 대기하고 있는 스레드 정보(803)가 대기 큐 요소에 의해 줄줄이 묶여 이어진다. 대기 시간은 스레드 정보(803) 내의 대기 시간 요소에 저장된다.
세마포르 정보(805)는 세마포르 개수분만큼 있다. 복수의 세마포르 정보(805)를 식별하기 위해서, OS 제어 애플리케이션(101)은 세마포르 ID로 색인한다. 세마포르 획득 대기의 스레드 정보(803)가 세마포르 정보(805)의 대기 큐 요소에 의해 줄줄이 묶여 이어진다. 세마포르 정보(805)의 카운터 요소는 미할당 자원수이다. 세마포르 정보(805)의 카운터 요소의 값이 0인 경우, 자원 없는 상태를 나타낸다.
이벤트 플래그 정보(806)는 이벤트 개수분만큼 있다. 복수의 이벤트 플래그 정보(806)를 식별하기 위해서, OS 제어 애플리케이션(101)은 이벤트 플래그 ID로 색인한다. 이벤트 플래그 대기의 스레드 정보(803)가 이벤트 플래그 정보(806)의 대기 큐 요소에 의해 줄줄이 묶여 이어진다. 이벤트 대기 조건은 스레드 정보(803) 내의 대기 플래그 요소와 플래그 모드 요소에 저장된다. 이벤트 플래그 정보(806)의 플래그 요소는 현재의 이벤트 플래그의 값이다.
메일 박스 정보(807)는 메일 박스 개수분만큼 있다. 복수의 메일 박스 정보(807)를 식별하기 위해서, OS 제어 애플리케이션(101)은 메일 박스 ID로 색인한다. 메일 대기의 스레드 정보(803)가 메일 박스 정보(807)의 대기 큐 요소에 의해 줄줄이 묶여 이어진다. 메일 박스 정보(807)의 선두 요소와 말미 요소는 메시지 체인 요소로부터 시작되는 메시지 버퍼의 선두와 말미의 위치를 나타내고 있다.
메모리 풀 정보(808)는 메모리 풀 개수분만큼 있다. 복수의 메모리 풀 정보(808)를 식별하기 위해서, OS 제어 애플리케이션(101)은 메모리 풀 ID로 색인한다. 메모리 풀 취득 대기의 스레드 정보(803)가 메모리 풀 정보(808)의 대기 큐 요소에 의해 줄줄이 묶여 이어진다. 메모리 풀 정보(808)의 카운터 요소는 최대 메모리 블록 개수의 값이다. 메모리 풀 정보(808)의 블록 사이즈 요소는 한 번의 메모리 풀 취득으로 취득할 수 있는 메모리 사이즈를 나타내고 있다. 메모리 풀 정보(808)의 관리 테이블 요소는 메모리 블록의 사용 상태를 나타내고 있다. 메모리 풀 정보(808)의 메모리 풀 어드레스 요소는 메모리 풀의 선두 어드레스를 나타내고 있다.
도 9는 동기 처리 ID 및 OS 연관 테이블의 갱신예를 도시하는 설명도이다. 도 9에서는 스레드의 할당 결과에 따라서 동기 처리 ID 및 OS 연관 테이블(413)을 갱신하는 예를 도시한다.
예컨대, 갱신 전의 레코드(701-1-1)는, 세마포르 ID #s1이 OS #o1과 OS #o2에 속하는 스레드로부터 이용됨을 나타내고 있었던 상태로 한다. 이 상태에서, 멀티프로세서 시스템(100)은, 스레드 #t1 ~ 스레드 #t10이 정해진 기간 OS #o1 ~ OS #o3에 할당된 결과, 스레드 #t9가 OS #o2에 할당되지 않고, OS #o1에 할당된 상태가 되었다고 하자. 정해진 기간은 멀티프로세서 시스템(100)의 개발자에 의해서 지정되는 기간이며, 예컨대 1초간이다. 이 상태에서, 멀티프로세서 시스템(100)은, 스레드 #t1 ~ 스레드 #t10을 정해진 기간 OS #o1 ~ OS #o3에 할당한 결과, 스레드 #t9가 OS #o2에 할당되지 않고, OS #o1에 할당되었다고 하자. 이때, 멀티프로세서 시스템(100)은 레코드(501-1-9)가 속하는 OS 필드의 값을 "o1, o2"에서 "o1"로 갱신한다.
이어서, 멀티프로세서 시스템(100)은, 레코드(601-9)를 참조하여, 스레드 #t9가 이용하는 세마포르 ID가 세마포르 ID #s1, 세마포르 ID #s2, 세마포르 ID #s5임을 특정한다. 이어서, 멀티프로세서 시스템(100)은, 동기 처리 ID 및 OS 연관 테이블(413) 중, 세마포르 ID #s1의 레코드(701-1-1)와, 세마포르 ID #s2의 레코드(701-1-2)와, 세마포르 ID #s5의 레코드(701-1-5)를 갱신한다. 예컨대, 레코드(701-1-1)에 관해서, 멀티프로세서 시스템(100)은 레코드(701-1-1)의 이용 스레드가 속하는 OS 필드의 값을 "o1, o2"에서 "o1"로 갱신한다. 이와 같이, 동기 처리에 대하여, 이용 스레드가 속하는 OS가 복수에서 하나로 된 경우, 멀티프로세서 시스템(100)은 복수의 OS에 걸친 동기 처리를 하지 않고서 끝나기 때문에, 멀티프로세서 시스템(100)의 처리 성능을 향상시킬 수 있다.
한편, 동기 처리 ID 및 OS 연관 테이블(413)을 갱신하는 경우, 멀티프로세서 시스템(100)은, 실제 동작에서 참조하여 이용하는 테이블과, 갱신용으로서 이용하는 테이블의 2개를 준비해 두더라도 좋다. 갱신할 때에, 멀티프로세서 시스템(100)은, 실제 동작에서 참조하여 이용하는 테이블을 복제한 테이블을, 갱신용으로서 이용하는 테이블로서 준비한다. 이어서, 멀티프로세서 시스템(100)은 갱신용으로서 이용하는 테이블에 대하여 갱신 처리를 한다.
또한, 스레드 및 OS 연관 테이블(411)의 갱신량에 관해서 설명한다. 동작 모드는, 멀티프로세서 시스템(100)이 디지털카메라라면, 촬영 전의 뷰 모드, 정지 화상 촬영 모드, 정지 화상 재생 모드, 동화상 촬영 모드, 동화상 재생 모드, 음성 녹음 모드, 음성 재생 모드, USB 접속 모드, 프린터 접속 모드 등이 있다. 이러한 동작 모드마다 스레드 및 OS 연관 테이블(411)을 준비하게 되는데, 사용자에 의한 부가 설정에 의해 실제로 실행되는 스레드가 변해 버리는 경우가 있다. 사용자에 의한 부가 설정으로서, 얼굴 검출 설정, 스마일 검출 설정, 고운 피부 설정, 동체 검출 설정, 동체 추적 설정, 장면 검출 설정, 손 흔들림 보정 설정 등이 있다.
따라서, 멀티프로세서 시스템(100)은 스레드 및 OS 연관 테이블(411)의 갱신량을 전체의 반 이상 행하게 된다. 따라서 갱신을 행함으로써, 멀티프로세서 시스템(100)은 글로벌 메모리 #gm을 이용하는 기회를 크게 줄일 수 있다.
이어서, 도 10 ~ 도 12를 이용하여, 동기 처리의 실행 주체 결정 처리와, 스레드 및 OS 연관 테이블(411) 및 동기 처리 ID 및 OS 연관 테이블(413)의 갱신 처리에 관해서 설명한다. 각각의 처리는 CPU #c1 ~ CPU #c6 중 어느 CPU가 실행하더라도 좋다. 설명을 간략하게 하기 위해서, 본 실시형태에서는, CPU #c1이 각각의 처리를 실행하는 경우를 예로 들어 설명한다.
도 10은 동기 처리의 실행 주체 결정 처리 순서의 일례를 도시하는 흐름도이다. 동기 처리의 실행 주체 결정 처리는, 동기 처리를 실행하는 실행 주체를, 동기 처리가 호출된 OS로 할지, OS 제어 애플리케이션(101)으로 할지를 결정하여, 결정한 실행 주체에 동기 처리를 실행시키는 처리이다.
CPU #c1은 스레드로부터 동기 처리의 실행 요구가 호출되었음을 검출한다(단계 S1001). 이어서, CPU #c1은, 동기 처리 ID 및 OS 연관 테이블(413)을 참조하여, 그 동기 처리가 복수의 OS에서 이용되는지 여부를 판단한다(단계 S1002). 그 동기 처리란, 스레드로부터 호출된 동기 처리를 말한다. 그 동기 처리가 단독의 OS에서 이용되는 경우(단계 S1002: No), CPU #c1은 그 동기 처리가 OS 제어 애플리케이션(101)에서 실행되고 있었는지 여부를 판단한다(단계 S1003).
그 동기 처리가 OS 제어 애플리케이션(101)에서 실행되고 있었던 경우(단계 S1003: Yes), OS 제어 애플리케이션(101)의 그 동기 처리의 관리 정보(414)를 동기 처리가 호출된 OS의 동기 처리의 관리 정보에 복제한다(단계 S1004). 동기 처리가 호출된 OS의 동기 처리의 관리 정보는, 동기 처리가 호출된 OS가 OS #o1이라면, 로컬 메모리 #lm1에 저장되어 있다. 또한, 동기 처리가 호출된 OS가 OS #o2이라면, 공유 메모리 #sm2에 저장되어 있고, 동기 처리가 호출된 OS가 OS #o3이라면, 공유 메모리 #sm3에 저장되어 있다. 단계 S1004의 종료 후 또는 그 동기 처리가 단독의 OS에서 실행되고 있었던 경우(단계 S1003: No), CPU #c1은 동기 처리가 호출된 OS에 의해서 동기 처리를 실행한다(단계 S1005).
그 동기 처리가 복수의 OS에서 이용되는 경우(단계 S1002: Yes), CPU #c1은 그 동기 처리가 단독의 OS에서 실행되고 있었는지 여부를 판단한다(단계 S1006). 그 동기 처리가 단독의 OS에서 실행되고 있었던 경우(단계 S1006: Yes), CPU #c1은 그 OS의 그 동기 처리의 관리 정보를 OS 제어 애플리케이션(101)의 동기 처리의 관리 정보(414)에 복제한다(단계 S1007). 단계 S1007의 종료 후 또는 그 동기 처리가 OS 제어 애플리케이션(101)으로 실행되고 있었던 경우(단계 S1006: No), CPU #c1은 OS 제어 애플리케이션(101)에 의해서 동기 처리를 실행한다(단계 S1008). 한편, 구체적인 OS 제어 애플리케이션(101)이 행하는 동기 처리의 처리 내용은 OS가 동기 처리를 행하는 처리 내용과 동일하기 때문에, 설명을 생략한다.
단계 S1005, 또는 단계 S1008의 실행 종료 후, CPU #c1은 동기 처리의 실행 주체 결정 처리를 종료한다. 동기 처리가 단독의 OS에서 이용되는 경우, CPU #c1은 로컬 메모리 #lm을 이용하여 동기 처리를 하고, CPU #c2 ~ CPU #c6은 공유 메모리 #sm을 이용하여 동기 처리를 한다. 따라서, 멀티프로세서 시스템(100)은, 동기 처리가 단독의 OS에서 이용되는 경우, 글로벌 메모리 #gm을 이용하지 않기 때문에, 멀티프로세서 시스템(100)의 성능을 향상시킬 수 있다.
또한, CPU #c1은 단계 S1003, 단계 S1004, 단계 S1006, 단계 S1007의 처리를 하지 않는 것도 가능하다. 단계 S1003, 단계 S1004, 단계 S1006, 단계 S1007을 행하지 않는 경우, CPU #c1은 동기 처리의 이용을 해방시킨 후에, 단계 S1005 또는 단계 S1008의 처리를 실행하면 된다. 동기 처리의 이용을 해방시키기가 곤란하다면, CPU #c1은 단계 S1003, 단계 S1004, 단계 S1006, 단계 S1007의 처리를 행함으로써, 동기 처리의 이용을 계속한 채로 동기 처리의 실행 주체를 전환할 수 있다.
도 11은 스레드 및 OS 연관 테이블의 갱신 처리 순서의 일례를 도시하는 흐름도이다. 스레드 및 OS 연관 테이블의 갱신 처리는 스레드의 할당 상태에 따라서 스레드 및 OS 연관 테이블(411)을 갱신하는 처리이다.
CPU #c1은 동작 모드의 천이가 발생했는지 여부를 판단한다(단계 S1101). 동작 모드의 천이가 발생한 경우(단계 S1101: Yes), CPU #c1은 천이한 동작 모드의 동작 로그용의 스레드 및 OS 연관 테이블(501-x)을 확보한다(단계 S1102). 이어서, CPU #c1은 스레드 천이 상태를, 정해진 기간으로서 1초간 기록한다(단계 S1103). 이어서, CPU #c1은 선두의 스레드를 선택한다(단계 S1104).
이어서, CPU #c1은 선택한 스레드가 1초 동안 중에 CPU에 할당되어 있었는지 여부를 판단한다(단계 S1105). 선택한 스레드가 CPU에 할당되어 있는 경우(단계 S1105: Yes), CPU #c1은 선택한 스레드와 할당된 OS를 연관지은 정보를 스레드 및 OS 연관 테이블(501-x)에 저장한다(단계 S1106).
선택한 스레드가 CPU에 할당되어 있지 않았던 경우(단계 S1105: No), CPU #c1은 선택한 스레드와 모든 OS를 연관지은 정보를 스레드 및 OS 연관 테이블(501-x)에 저장한다(단계 S1107).
단계 S1106 또는 단계 S1107 종료 후, CPU #c1은 모든 스레드를 선택했는지 여부를 판단한다(단계 S1108). 아직 선택하지 않은 스레드가 있는 경우(단계 S1108: No), CPU #c1은 다음 스레드를 선택한다(단계 S1109). 단계 S1109의 실행 종료 후, CPU #c1은 단계 S1105의 처리로 이행한다. 동작 모드의 천이가 발생하지 않은 경우(단계 S1101: No) 또는 모든 스레드를 선택한 경우(단계 S1108: Yes), CPU #c1은 스레드 및 OS 연관 테이블의 갱신 처리를 종료한다. 스레드 및 OS 연관 테이블의 갱신 처리를 실행함으로써, 멀티프로세서 시스템(100)은 복수의 OS에 걸쳐 동기 처리를 하는 실행 빈도를 줄이는 것을 도모하기 위해서 이용하는 정보를 생성할 수 있다.
도 12는 동기 처리 ID 및 OS 연관 테이블의 갱신 처리 순서의 일례를 도시하는 흐름도이다. 동기 처리 ID 및 OS 연관 테이블의 갱신 처리는, 도 11에 의해 갱신한, 스레드 및 OS 연관 테이블(411)과 스레드 및 동기 처리 ID 연관 테이블(412)에 기초하여, 동기 처리 ID 및 OS 연관 테이블(413)을 갱신하는 처리이다. 또한, 도 12에서는, 설명을 간략하게 하기 위해, 세마포르 ID 및 OS 연관 테이블(701-1)을 갱신하는 예에 관해서 설명한다.
CPU #c1은 선두의 세마포르 ID를 선택한다(단계 S1201). 이어서, CPU #c1은 선두의 스레드를 선택한다(단계 S1202). 이어서, CPU #c1은 스레드 및 동기 처리 ID 연관 테이블(412)을 참조하여, 선택한 스레드가 선택한 세마포르 ID를 이용하는지 여부를 판단한다(단계 S1203). 선택한 스레드가 선택한 세마포르 ID를 이용하는 경우(단계 S1203: Yes), CPU #c1은 선두의 OS를 선택한다(단계 S1204).
이어서, CPU #c1은, 도 11의 흐름도에 의해 갱신한 스레드 및 OS 연관 테이블(411)을 참조하여, 선택한 스레드가 선택한 OS에 할당될 가능성이 있는지 여부를 판단한다(단계 S1205). 할당될 가능성이 있는 경우(단계 S1205: Yes), CPU #c1은 선택한 세마포르 ID와 선택한 OS를 연관지은 정보를 동기 처리 ID 및 OS 연관 테이블(413)에 저장한다(단계 S1206).
단계 S1206 종료 후 또는 할당될 가능성이 없는 경우(단계 S1205: No), CPU #c1은 모든 OS를 선택했는지 여부를 판단한다(단계 S1207). 아직 선택하지 않은 OS가 있는 경우(단계 S1207: No), CPU #c1은 다음 OS를 선택한다(단계 S1208). 단계 S1208 종료 후, CPU #c1은 단계 S1205의 처리로 이행한다.
선택한 스레드가 선택한 세마포르 ID를 이용하지 않는 경우(단계 S1203: No), 또는 모든 OS를 선택한 경우(단계 S1207: Yes), CPU #c1은 모든 스레드를 선택했는지 여부를 판단한다(단계 S1209). 아직 선택하지 않은 스레드가 있는 경우(단계 S1209: No), CPU #c1은 다음 스레드를 선택한다(단계 S1210). 단계 S1210 종료 후, CPU #c1은 단계 S1203의 처리로 이행한다.
모든 스레드를 선택한 경우(단계 S1209: Yes), CPU #c1은 모든 세마포르 ID를 선택했는지 여부를 판단한다(단계 S1211). 아직 선택하지 않은 세마포르 ID가 있는 경우(단계 S1211: No), CPU #c1은 다음 세마포르 ID를 선택한다(단계 S1212). 단계 S1212 종료 후, CPU #c1은 단계 S1202의 처리로 이행한다.
모든 세마포르 ID를 선택한 경우(단계 S1211: Yes), CPU #c1은 동기 처리 ID 및 OS 연관 테이블의 갱신 처리를 종료한다. 동기 처리 ID 및 OS 연관 테이블의 갱신 처리를 실행함으로써, 멀티프로세서 시스템(100)은 복수의 OS에 걸쳐 동기 처리를 하는 실행 빈도를 줄이는 것을 도모할 수 있다.
(통일 스케쥴링의 설명)
이어서, 도 13 ~ 도 38을 이용하여 복수의 OS에 걸쳐 동기 처리를 하는 실행을 할 때에, OS 제어 애플리케이션(101)에 의해서 실행되는 통일 스케쥴링을 설명한다. 통일 스케쥴링은, 정지한 스레드가 있으면, 정지한 스레드 대신에 가장 우선도가 높은 스레드를 할당한다고 하는 우선도에 따른 스케쥴링 방법을 행한다.
도 13은 CPU 할당 테이블의 기억 내용의 일례를 도시하는 설명도이다. CPU 할당 테이블(421)은 현재 실행 중인 스레드의 식별 정보를 기억하는 테이블이다. 도 13에 도시하는 CPU 할당 테이블(421)은 레코드(1301-1) ~ 레코드(1301-6)를 기억한다. CPU 할당 테이블(421)은 CPU ID, 실행 상태 스레드 ID라는 2개의 필드를 포함한다. CPU ID 필드에는 CPU의 식별 정보가 저장된다. 실행 상태 스레드 ID 필드에는 CPU ID 필드에 저장되어 있는 CPU가 현재 실행 중인 스레드의 식별 정보가 저장된다.
예컨대, 레코드(1301-1)는 CPU #c1이 현재 스레드 #t1을 실행하고 있음을 보이고 있다. 또한, 레코드(1301-6)는 CPU #c6이 현재 실행하고 있는 스레드가 없음을 보이고 있다.
도 14는 스레드 정보 테이블의 기억 내용의 일례를 도시하는 설명도이다. 스레드 정보 테이블(422)은 스레드마다 그 스레드의 실행 가능한 CPU ID와 CPU가 실행하는 OS ID를 스레드의 우선도 순으로 기억한다. 도 14에 도시하는 스레드 정보 테이블(422)은 레코드(1401-1) ~ 레코드(1401-10)를 기억한다.
스레드 정보 테이블(422)은 검색 키, 스레드 ID, 할당 가능한 CPU ID, 제어 OS ID라는 4개의 필드를 포함한다. 검색 키 필드에는 그 레코드의 검색 순서를 나타내는 값이 저장된다. 도 14에서는, 먼저 검색되는 레코드가, 검색 키 필드에 저장되는 값이 작아지도록 되어 있다. 스레드 ID 필드에는 스레드의 식별 정보가 저장된다. 할당 가능한 CPU ID 필드에는 스레드 ID 필드에 저장되는 스레드가 할당 가능한 CPU의 식별 정보가 저장된다. 제어 OSID 필드에는 할당 가능한 CPU ID 필드에 저장된 CPU가 실행하는 OS의 식별 정보가 저장된다.
예컨대, 레코드(1401-1)는 1번째로 검색되어, 스레드 #t10이 CPU #c2에 할당 가능하고, CPU #c2가 OS #o2를 실행하는 것을 나타내고 있다. 또한, 레코드(1401-2)는 2번째로 검색되어, 스레드 #t9가 CPU #c1 ~ CPU #c6의 어느 것이나 할당 가능하고, CPU #c1 ~ CPU #c6이 OS #o1 ~ OS #o3을 실행하는 것을 나타내고 있다.
도 15는 할당 가능 OS수 테이블의 기억 내용의 일례를 도시하는 설명도이다. 할당 가능 OS수 테이블(423)은 OS마다 스레드가 미할당인 CPU의 개수를 기억하는 테이블이다. 도 15에 도시하는 할당 가능 OS수 테이블(423)은 레코드(1501-1) ~ 레코드(1501-3)를 기억하고 있다.
할당 가능 OS수 테이블(423)은 OS ID, 할당 가능수라는 2개의 필드를 포함한다. OS ID 필드에는 OS의 식별 정보가 저장된다. 할당 가능수 필드에는, OS ID 필드에 저장된 OS를 실행하는 CPU 중, 스레드가 미할당인 CPU의 개수가 저장된다. 예컨대, 레코드(1501-1)는 OS #o1을 실행하는 CPU 중, 스레드가 미할당인 CPU의 개수가 1개임을 나타내고 있다.
도 16은 CPU 상태 테이블의 기억 내용의 일례를 도시하는 설명도이다. CPU 상태 테이블(424)은 통일 스케쥴링의 탐색 처리에서 이용되는 테이블이며, CPU에의 할당 후보가 되는 스레드를 기억하는 테이블이다. 도 16에 도시하는 CPU 상태 테이블(424)은 레코드(1601-1) ~ 레코드(1601-6)를 기억하고 있다.
CPU 상태 테이블(424)은 CPU ID, 할당 스레드 ID라는 2개의 필드를 포함한다. CPU ID 필드에는 CPU의 식별 정보가 저장된다. 할당 스레드 ID 필드에는, CPU ID 필드에 저장되어 있는 CPU에의 할당 후보가 되는 스레드의 식별 정보가 저장된다. 할당 스레드 ID 필드에 "empty"가 저장되어 있는 경우, CPU ID 필드에 저장되어 있는 CPU에의 할당 후보가 되는 스레드가 없음을 나타낸다. 예컨대, 레코드(1601-1)는 CPU #c1에의 할당 후보가 되는 스레드가 없음을 나타낸다.
도 17은 스레드 할당 예정 기억 테이블의 기억 내용의 일례를 도시하는 설명도이다. 스레드 할당 예정 기억 테이블(425)은 OS마다 그 OS를 실행하는 CPU라면 어떤 CPU라도 할당 가능하게 된 스레드를 기억하는 테이블이다. 도 17에 도시하는 스레드 할당 예정 기억 테이블(425)은 레코드(1701-1) ~ 레코드(1701-3)를 기억하고 있다.
스레드 할당 예정 기억 테이블(425)은 OS ID, 할당 예정 스레드 ID라는 2개의 필드를 포함한다. OS ID 필드에는 OS의 식별 정보가 저장된다. 할당 예정 스레드 ID 필드에는, OS ID 필드에 저장된 OS를 실행하는 CPU라면 어떤 CPU라도 할당 가능하게 된 스레드의 식별 정보가 저장된다. 할당 예정 스레드 ID 필드에 "empty"가 저장되어 있었던 경우, 그 OS를 실행하는 CPU에 대하여 할당 가능하게 된 스레드가 없음을 나타낸다. 예컨대, 레코드(1701-1)는 OS #o1을 실행하는 CPU라면 어떤 CPU라도 할당 가능하게 된 스레드가 없음을 나타내고 있다.
도 18은 통일 스케쥴링을 행하기 전의 스레드의 할당 상태를 도시하는 설명도이다.
도 18에서는, 통일 스케쥴링을 행하기 전의 상태로서, CPU 할당 테이블(421)의 도 13에서 도시한 내용과, 스레드 정보 테이블(422)의 도 14에서 도시한 내용에 입각한 상태를 도시하고 있다. 도 18에서는, 각 스레드를, 스레드의 상태와 스레드가 할당 가능한 CPU와 OS에 기초하여, 영역(1801)과 영역(1802)을 이용하여 분류하고 있다.
영역(1801)은 실행 상태의 스레드군을 포함하고 있다. 영역(1802)은 실행 가능 상태의 스레드군을 포함하고 있다. 영역(1802)은 또한 스레드가 할당 가능한 CPU와 OS에 기초하여, 영역(1811) ~ 영역(1816), 영역(1821), 영역(1822), 영역(1831)을 포함한다.
영역(1801)은 스레드 #t1, 스레드 #t3, 스레드 #t4, 스레드 #t6, 스레드 #t7을 포함한다. 스레드 #t1은 CPU #c1에 할당되어 있다. 또한, 스레드 #t3은 CPU #c2에 할당되어 있고, 스레드 #t4는 CPU #c3에 할당되어 있다. 또한, 스레드 #t6은 CPU #c4에 할당되어 있고, 스레드 #t7은 CPU #c5에 할당되어 있다. 또한, CPU #c6에 할당된 스레드는 없다.
영역(1811)은 CPU #c1에 할당 가능한 스레드를 포함하는 영역이며, 스레드 #t2를 포함한다. 영역(1812)은 CPU #c2에 할당 가능한 스레드를 포함하는 영역이며, 스레드 #t10을 포함한다. 영역(1813)은 CPU #c3에 할당 가능한 스레드를 포함하는 영역이다. 영역(1814)은 CPU #c4에 할당 가능한 스레드를 포함하는 영역이다. 영역(1815)은 CPU #c5에 할당 가능한 스레드를 포함하는 영역이다. 영역(1816)은 CPU #c6에 할당 가능한 스레드를 포함하는 영역이다.
영역(1821)은 OS #o2를 실행하는 CPU #c2와 CPU #c3에 할당 가능한 스레드를 포함하는 영역이며, 스레드 #t5를 포함한다. 영역(1822)은 OS #o3을 실행하는 CPU #c4 ~ CPU #c6에 할당 가능한 스레드를 포함하는 영역이며, 스레드 #t8을 포함한다. 영역(1831)은 CPU #c1 ~ CPU #c6에 할당 가능한 스레드를 포함하는 영역이며, 스레드 #t9를 포함한다.
이어서, 도 19 ~ 도 27을 이용하여 통일 스케쥴링의 탐색 처리 동작에 관해서 설명한다. 통일 스케쥴링의 탐색 처리는 CPU마다 CPU의 할당 후보가 되는 스레드를 탐색하는 처리이다. 통일 스케쥴링 처리는, CPU #c1 ~ CPU #c6 중 어느 CPU가 실행하더라도 좋다. 설명을 간략하게 하기 위해서, 본 실시형태에서는, CPU #c1이 통일 스케쥴링 처리를 실행하는 경우를 예로 들어 설명한다.
도 19는 통일 스케쥴링의 탐색 처리에 있어서의 제1 단계를 도시하는 설명도이다.
도 19 상태에서는 탐색 CPU수가 6으로 되어 있다. 이 상태에서, CPU #c1은 스레드 정보 테이블(422)의 1번째 레코드인 레코드(1401-1)를 선택한다.
이어서, CPU #c1은 레코드(1401-1)의 할당 가능한 CPU ID 필드로부터 CPU #c2를 특정하고, CPU 상태 테이블(424)의 CPU #c2의 레코드인 레코드(1601-2)를 특정한다. 이어서, CPU #c1은 레코드(1601-2)의 할당 스레드 ID 필드가 "empty"이기 때문에, 스레드 #t10의 식별 정보 "t10"을 저장한다. OS #o2에 하나 스레드를 할당하게 되었기 때문에, CPU #c1은 할당 가능 OS수 테이블(423)의 레코드(1501-2)에 대해서 "2"에서 "1"로 변경한다. 또한, 도 19에서, CPU #2에 관해서 탐색했기 때문에, CPU #c1은 탐색 CPU수를 5로 설정한다.
도 20은 통일 스케쥴링의 탐색 처리에 있어서의 제2 단계를 도시하는 설명도이다.
도 20의 상태에서는 탐색 CPU수가 5로 되어 있다. 이 상태에서, CPU #c1은 스레드 정보 테이블(422)의 2번째 레코드인 레코드(1401-2)를 선택한다.
이어서, CPU #c1은 레코드(1401-2)의 할당 가능한 CPU ID 필드로부터 CPU #c1 ~ CPU #c6을 특정한다. 레코드(1401-2)가 나타내는 바와 같이, 스레드 #t9가 복수의 CPU에서 실행 가능하기 때문에, CPU #c1은 스레드 할당 예정 기억 테이블(425)에 스레드 #t9의 정보를 추가한다. 구체적으로, CPU #c1은 스레드 할당 예정 기억 테이블(425)의 레코드(1701-1) ~ 레코드(1701-3)의 "empty"를 "t9"로 변경한다.
또한, 스레드 #t9가 복수의 OS에서 동작 가능하기 때문에, CPU #c1은 할당 가능 OS수 테이블(423)의 갱신을 하지 않는다. 또한, CPU #c1은 탐색 CPU수를 4로 설정한다.
도 21은 통일 스케쥴링의 탐색 처리에 있어서의 제3 단계를 도시하는 설명도이다.
도 21의 상태에서는 탐색 CPU수가 4로 되어 있다. 이 상태에서, CPU #c1은 스레드 정보 테이블(422)의 3번째 레코드인 레코드(1401-3)를 선택한다.
이어서, CPU #c1은 레코드(1401-3)의 할당 가능한 CPU ID 필드로부터 CPU #c2, CPU #c3을 특정한다. 레코드(1401-3)가 나타내는 바와 같이, 스레드 #t3이 복수의 CPU에서 실행 가능하기 때문에, CPU #c1은 스레드 할당 예정 기억 테이블(425)에 스레드 #t3의 정보를 추가한다. 구체적으로, CPU #c1은 스레드 할당 예정 기억 테이블(425)의 레코드(1701-2)의 "t9"를 "t3, t9"로 변경한다.
OS #o2에 하나 스레드를 할당하게 되었기 때문에, CPU #c1은 할당 가능 OS수 테이블(423)의 레코드(1501-2)에 대해서 "1"에서 "0"으로 변경한다.
또한, CPU #c1은 탐색 CPU수를 3으로 설정한다.
도 22는 통일 스케쥴링의 탐색 처리에 있어서의 제4 단계를 도시하는 설명도이다.
도 22의 상태에서는 탐색 CPU수가 3으로 되어 있다. 이 상태에서, CPU #c1은 스레드 정보 테이블(422)의 4번째 레코드인 레코드(1401-4)를 선택한다.
이어서, CPU #c1은 레코드(1401-4)의 할당 가능한 CPU ID 필드로부터 CPU #c1을 특정하고, CPU 상태 테이블(424)의 CPU #c1의 레코드인 레코드(1601-1)를 특정한다. 이어서, CPU #c1은 레코드(1601-1)의 할당 스레드 ID 필드가 "empty"이기 때문에, 스레드 #t2의 식별 정보 "t2"를 저장한다. OS #o1에 하나 스레드를 할당하게 되었기 때문에, CPU #c1은 할당 가능 OS수 테이블(423)의 레코드(1501-1)에 대해서 "1"에서 "0"으로 변경한다. 또한, 도 22에서 CPU#1에 관해서 탐색했기 때문에, CPU #c1은 탐색 CPU수를 2로 설정한다.
도 23은 통일 스케쥴링의 탐색 처리에 있어서의 제5 단계를 도시하는 설명도이다.
도 23의 상태에서는 탐색 CPU수가 2로 되어 있다. 이 상태에서, CPU #c1은 스레드 정보 테이블(422)의 5번째 레코드인 레코드(1401-5)를 선택한다.
이어서, CPU #c1은 레코드(1401-5)의 할당 가능한 CPU ID 필드로부터 CPU #c1을 특정하고, CPU 상태 테이블(424)의 CPU #c1의 레코드인 레코드(1601-1)를 특정한다. 이어서, CPU #c1은 레코드(1601-1)의 할당 스레드 ID 필드가 "t2"이며, 이미 스레드의 할당 후보가 있기 때문에, 스레드 #t1을 할당 후보로 하지 않는다.
도 24는 통일 스케쥴링의 탐색 처리에 있어서의 제6 단계를 도시하는 설명도이다.
도 24의 상태에서는 탐색 CPU수가 2로 되어 있다. 이 상태에서, CPU #c1은 스레드 정보 테이블(422)의 6번째 레코드인 레코드(1401-6)를 선택한다.
이어서, CPU #c1은 레코드(1401-6)의 할당 가능한 CPU ID 필드로부터 CPU #c2, CPU #c3을 특정한다. 레코드(1401-6)가 나타내는 바와 같이, 스레드 #t4는 복수의 CPU에서 실행 가능하다. 그러나, 스레드 #t4를 실행하는 OS #o2는, 할당 가능 OS수 테이블(423)의 레코드(1501-2)가 나타내는 바와 같이, 할당 가능수가 0이므로, CPU #c1은 스레드 #t5를 할당 후보로 하지 않는다.
도 25는 통일 스케쥴링의 탐색 처리에 있어서의 제7 단계를 도시하는 설명도이다.
도 25의 상태에서는 탐색 CPU수가 2로 되어 있다. 이 상태에서, CPU #c1은 스레드 정보 테이블(422)의 7번째 레코드인 레코드(1401-7)를 선택한다.
이어서, CPU #c1은 레코드(1401-7)의 할당 가능한 CPU ID 필드로부터 CPU #c4 ~ CPU #c6을 특정한다. 레코드(1401-7)가 나타내는 바와 같이, 스레드 #t8이 복수의 CPU에서 실행 가능하기 때문에, CPU #c1은 스레드 할당 예정 기억 테이블(425)에 스레드 #t8의 정보를 추가한다. 구체적으로, CPU #c1은 스레드 할당 예정 기억 테이블(425)의 레코드(1701-3)의 "t9"를 "t8, t9"로 변경한다.
OS #o3에 하나 스레드를 할당하게 되었기 때문에, CPU #c1은 할당 가능 OS수 테이블(423)의 레코드(1501-3)에 대해서 "3"에서 "2"로 변경한다.
또한, CPU #c1은 탐색 CPU 수를 1로 설정한다.
도 26은 통일 스케쥴링의 탐색 처리에 있어서의 제8 단계를 도시하는 설명도이다.
도 26의 상태에서는 탐색 CPU수가 1로 되어 있다. 이 상태에서, CPU #c1은 스레드 정보 테이블(422)의 8번째 레코드인 레코드(1401-8)를 선택한다.
이어서, CPU #c1은 레코드(1401-8)의 할당 가능한 CPU ID 필드로부터 CPU #c4 ~ CPU #c6을 특정한다. 레코드(1401-8)가 나타내는 바와 같이, 스레드 #t7이 복수의 CPU에서 실행 가능하기 때문에, CPU #c1은 스레드 할당 예정 기억 테이블(425)에 스레드 #t7의 정보를 추가한다. 구체적으로, CPU #c1은 스레드 할당 예정 기억 테이블(425)의 레코드(1701-3)의 "t8, t9"를 "t7, t8, t9"로 변경한다.
OS #o3에 하나 스레드를 할당하게 되었기 때문에, CPU #c1은 할당 가능 OS수 테이블(423)의 레코드(1501-3)에 대해서 "2"에서 "1"로 변경한다.
또한, CPU #c1은 탐색 CPU수를 0으로 설정한다.
도 27은 통일 스케쥴링의 탐색 처리에 있어서의 제9 단계를 도시하는 설명도이다.
CPU #c1은 스레드 할당 예정 기억 테이블(425)에 등록되어 있는 스레드 중, CPU 할당 테이블(421)에 이미 등록되어 있는 스레드가 있어, 다른 CPU로 할당을 변경하지 않아도 되는 스레드는 그 CPU에 할당 완료로 설정한다. 도 27의 예에서는, CPU #c1은, CPU 할당 테이블(421)의 레코드(1301-5)에 스레드 #t7이 등록되어 있어, 다른 CPU로 할당을 변경하지 않아도 되기 때문에, CPU 상태 테이블(424)의 레코드(1601-5)에 대해서 "empty"에서 "t7"로 변경한다. 이어서, CPU #c1은 스레드 할당 예정 기억 테이블(425)의 레코드(1701-3)에 대해서 "t7, t8, t9"에서 "t8, t9"로 변경한다.
이어서, 도 28 ~ 도 33을 이용하여 통일 스케쥴링의 정지 재개 처리의 동작에 관해서 설명한다. 통일 스케쥴링의 정지 재개 처리는 CPU 상태 테이블(424)과 스레드 할당 예정 기억 테이블(425)의 레코드마다 실행 상태의 스레드를 전환하는지 여부를 판단하는 처리이다. 이어서, 통일 스케쥴링의 정지 재개 처리는, 전환하는 경우, 현재 실행 상태인 스레드를 정지시키고, 할당 후보로 된 스레드를 재개시킨다.
도 28은 통일 스케쥴링의 정지 재개 처리에 있어서의 제1 단계를 도시하는 설명도이다. 도 28에서 도시하는 멀티프로세서 시스템(100)의 상태는 도 27에서 탐색 처리가 완료된 후의 상태이다. CPU #c1에 관해서, CPU 상태 테이블(424)의 레코드(1601-1)의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있기 때문에, CPU #c1은 CPU 할당 테이블(421)의 레코드(1301-1)를 참조하여 스레드 #t1을 정지시킨다. 이어서, CPU #c1은 CPU 상태 테이블(424)의 레코드(1601-1)의 할당 스레드 ID 필드에 저장되어 있는 스레드 #t2를 재개시킨다.
도 29는 통일 스케쥴링의 정지 재개 처리에 있어서의 제2 단계를 도시하는 설명도이다. 도 29에서 도시하는 멀티프로세서 시스템(100)의 상태는 도 28에서 스레드 #t2를 재개시킨 후의 상태이다. CPU #c2에 관해서, CPU 상태 테이블(424)의 레코드(1601-2)의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있기 때문에, CPU #c1은 CPU 할당 테이블(421)의 레코드(1301-2)를 참조하여 스레드 #t3을 정지시킨다. 이어서, 멀티프로세서 시스템(100)은 CPU 상태 테이블(424)의 레코드(1601-2)의 할당 스레드 ID 필드에 저장되어 있는 스레드 #t10을 재개시킨다.
스레드 #t10을 재개시킨 후, CPU #c1은 CPU 상태 테이블(424)의 레코드(1601-3)의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있지 않기 때문에, CPU #c3에 대해서는 특별히 처리를 하지 않는다. 마찬가지로, 레코드(1601-4), 레코드(1601-6)에 대해서도, 스레드의 식별 정보가 저장되어 있지 않기 때문에, CPU #c1은 CPU #c4, CPU #c6에 대해서는 특별히 처리를 하지 않는다. 또한, 레코드(1601-5)에 저장되어 있는 스레드와, 레코드(1301-5)에 저장되어 있는 스레드가 함께 스레드 #t7이기 때문에, CPU #c1은 CPU #c5에 대해서도 특별히 처리를 하지 않는다.
도 30은 통일 스케쥴링의 정지 재개 처리에 있어서의 제3 단계를 도시하는 설명도이다. 도 30에서 도시하는 멀티프로세서 시스템(100)의 상태는 CPU 상태 테이블(424)의 레코드(1601-1) ~ 레코드(1601-6)에 관해서 확인한 후의 상태이다.
OS #o1에 관해서, 스레드 할당 예정 기억 테이블(425)의 레코드(1701-1)의 할당 스레드 ID 필드에 스레드의 식별 정보로서 "t9"가 저장되어 있다. 그러나, 이미 CPU 상태 테이블(424)의 레코드(1601-1)에 "t2"가 저장되어 있기 때문에, CPU #c1은 특별히 처리를 하지 않는다.
도 31은 통일 스케쥴링의 정지 재개 처리에 있어서의 제4 단계를 도시하는 설명도이다. 도 31에서 도시하는 멀티프로세서 시스템(100)의 상태는 스레드 할당 예정 기억 테이블(425)의 레코드(1701-1)에 관해서 확인한 후의 상태이다.
OS #o2에 관해서, 스레드 할당 예정 기억 테이블(425)의 레코드(1701-2)의 할당 스레드 ID 필드에 스레드의 식별 정보로서 "t3, t9"가 저장되어 있다. 또한, 레코드(1601-3)의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있지 않기 때문에, CPU #c1은 레코드(1601-3)의 할당 스레드 ID 필드에 대해서 "empty"에서 "t3"으로 변경한다. 또한, CPU #c1은 레코드(1701-2)의 할당 예정 스레드 ID 필드에 대해서 "t3, t9"에서 "t9"로 변경한다.
이어서, CPU #c1은 스레드 #t4를 정지시킨다. 이어서, CPU #c1은 레코드(1601-3)의 할당 스레드 ID 필드에 설정한 스레드 #t3을 재개시킨다.
도 32는 통일 스케쥴링의 정지 재개 처리에 있어서의 제5 단계를 도시하는 설명도이다. 도 32에서 도시하는 멀티프로세서 시스템(100)의 상태는 스레드 할당 예정 기억 테이블(425)의 레코드(1701-2)에 관해서 확인한 후의 상태이다.
OS #o3에 관해서, 스레드 할당 예정 기억 테이블(425)의 레코드(1701-3)의 할당 스레드 ID 필드에 스레드의 식별 정보로서 "t8, t9"가 저장되어 있다. 또한, 레코드(1601-4)의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있지 않기 때문에, CPU #c1은 레코드(1601-4)의 할당 스레드 ID 필드에 대해서 "empty"에서 "t8"로 변경한다. 또한, CPU #c1은 레코드(1701-3)의 할당 예정 스레드 ID 필드에 대해서 "t8, t9"에서 "t9"로 변경한다.
이어서, CPU #c1은 스레드 #t6를 정지시킨다. 이어서, CPU #c1은 레코드(1601-4)의 할당 스레드 ID 필드에 설정한 스레드 #t8을 재개시킨다.
도 33은 통일 스케쥴링의 정지 재개 처리에 있어서의 제6 단계를 도시하는 설명도이다. 도 33에서 도시하는 멀티프로세서 시스템(100)의 상태는 스레드 할당 예정 기억 테이블(425)의 레코드(1701-3)에 대해서 확인한 후의 상태이다.
OS #o3에 관해서, 스레드 할당 예정 기억 테이블(425)의 레코드(1701-3)의 할당 스레드 ID 필드에 스레드의 식별 정보로서 "t9"가 저장되어 있다. 또한, 레코드(1601-6)의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있지 않기 때문에, CPU #c1은 레코드(1601-6)의 할당 스레드 ID 필드에 대해서 "empty"에서 "t9"로 변경한다. 또한, CPU #c1은 레코드(1701-1) ~ 레코드(1701-3)의 할당 예정 스레드 ID 필드에 대해서 "t9"에서 "empty"로 변경한다. 이어서, CPU #c1은 레코드(1601-6)의 할당 스레드 ID 필드에 설정한 스레드 #t9를 재개시킨다.
통일 스케쥴링의 결과, 다음과 같이 된다. CPU #c1이 실행하는 스레드는 스레드 #t1에서 스레드 #t2로 된다. CPU #c2가 실행하는 스레드는 스레드 #t3에서 스레드 #t10으로 된다. CPU #c3이 실행하는 스레드는 스레드 #t4에서 스레드 #t3으로 된다. CPU #c4가 실행하는 스레드는 스레드 #t6에서 스레드 #t8로 된다. CPU #c5가 실행하는 스레드는 스레드 #t7 그대로 계속된다. CPU #c6이 실행하는 스레드는 스레드 #t9로 된다. 이어서, 도 34 ~ 도 38을 이용하여 통일 스케쥴링 처리에 관해서 설명한다. 통일 스케쥴링 처리는 CPU #c1 ~ CPU #c6 중 어느 CPU가 실행하더라도 좋다. 설명을 간략하게 하기 위해서, 본 실시형태에서는, CPU #c1이 통일 스케쥴링 처리를 실행하는 경우를 예로 들어 설명한다.
도 34는 통일 스케쥴링 처리 순서의 일례를 도시하는 흐름도이다. 통일 스케쥴링 처리는 멀티프로세서 시스템(100) 전체에서 스레드를 전환하는 처리이다. CPU #c1은 전처리를 실행한다(단계 S3401). 전처리의 상세한 것은 도 35에서 후술한다. 이어서, CPU #c1은 탐색 처리를 실행한다(단계 S3402). 탐색 처리의 상세한 것은 도 36에서 후술한다. 이어서, CPU #c1은 정지 재개 처리를 실행한다(단계 S3403). 정지 재개 처리의 상세한 것은 도 37과 도 38에서 후술한다. 단계 S3403의 실행 종료 후, CPU #c1은 통일 스케쥴링 처리를 종료한다. 통일 스케쥴링 처리를 실행함으로써, 멀티프로세서 시스템(100)은 멀티프로세서 시스템(100) 전체에서 스레드를 전환할 수 있다.
도 35는 통일 스케쥴링의 전처리 순서의 일례를 도시하는 흐름도이다. 통일 스케쥴링의 전처리는, CPU #c1은 변수 i에 1을 설정한다(단계 S3501). 이어서, CPU #c1은 CPU #ci에서 실행 중인 스레드를 CPU 할당 테이블(421)의 i번째 레코드에 저장한다(단계 S3502). 이어서, CPU #c1은 모든 CPU를 확인했는지 여부를 판단한다(단계 S3503). 아직 모든 CPU를 확인하지 않은 경우(단계 S3503: No), CPU #c1은 변수 i를 인크리먼트한다(단계 S3504). 단계 S3504의 실행 종료 후, CPU #c1은 단계 S3502의 처리로 이행한다.
모든 CPU를 확인한 경우(단계 S3503: Yes), CPU #c1은 탐색 CPU수를 CPU 총수로 설정한다(단계 S3505). 이어서, CPU #c1은 실행 대기 스레드를 스레드 정보 테이블(422)에 추가한다(단계 S3506). 이어서, CPU #c1은 CPU 상태 테이블(424)의 각 레코드의 할당 스레드 ID 필드의 값을 "empty"로 설정한다(단계 S3507). 이어서, CPU #c1은 할당 가능 OS수 테이블(423)의 각 레코드의 할당 가능수를 각 OS를 실행하는 CPU수의 개수로 설정한다(단계 S3508). 이어서, CPU #c1은 스레드 할당 예정 기억 테이블(425)의 각 레코드의 할당 예정 스레드 ID 필드의 값을 "empty"로 설정한다(단계 S3509). 단계 S3509의 실행 종료 후, CPU #c1은 통일 스케쥴링의 전처리를 종료한다. 통일 스케쥴링의 전처리를 실행함으로써, 멀티프로세서 시스템(100)은 통일 스케쥴링의 탐색 처리 준비를 할 수 있다.
도 36은 통일 스케쥴링의 탐색 처리 순서의 일례를 도시하는 흐름도이다.
통일 스케쥴링의 탐색 처리는 CPU마다 CPU의 할당 후보가 되는 스레드를 탐색하는 처리이다.
CPU #c1은 변수 i를 1로 설정한다(단계 S3601). 이어서, CPU #c1은 실행 가능한 스레드가 있는지 여부를 판단한다(단계 S3602). 실행 가능한 스레드가 있는 경우(단계 S3602: Yes), CPU #c1은 탐색 CPU수가 0인지 여부를 판단한다(단계 S3603). 실행 가능한 스레드가 없는 경우(단계 S3602: No), 또는 탐색 CPU수가 0인 경우(단계 S3603: Yes), CPU #c1은 통일 스케쥴링의 탐색 처리를 종료한다.
탐색 CPU수가 0가 아닌 경우(단계 S3603: No), CPU #c1은 스레드 정보 테이블(422)의 i번째 레코드의 할당 가능한 CPU 필드에 복수의 CPU의 식별 정보가 저장되어 있는지 여부를 판단한다(단계 S3604). 복수의 CPU의 식별 정보가 저장되어 있는 경우(단계 S3604: Yes), CPU #c1은 스레드 정보 테이블(422)의 i번째 레코드의 제어 OS ID 필드에 저장되어 있던 OS를 특정한다(단계 S3605).
한편, 단계 S3605의 처리는 설명을 간단하게 하기 위해서 기술하고 있기 때문에, 실제의 처리 내용으로서 행하지 않더라도 좋다. 단계 S3605의 처리를 하지 않는 경우, CPU #c1은, 후술하는 특정 OS에 관해서, 스레드 정보 테이블(422)의 i번째 레코드의 제어 OS ID 필드를 그때마다 참조함으로써 취득할 수 있다.
이어서, CPU #c1은 할당 가능 OS수 테이블(423)의, 특정 OS의 레코드의 할당 가능수 필드의 값이 0인지 여부를 판단한다(단계 S3606). 할당 가능수 필드의 값이 0가 아닌 경우(단계 S3606: No), CPU #c1은 스레드 할당 예정 기억 테이블(425)의 특정 OS의 레코드에 스레드 정보 테이블(422)의 i번째의 스레드를 추가한다(단계 S3607).
하나의 CPU의 식별 정보가 저장되어 있는 경우(단계 S3604: No), CPU #c1은 스레드 정보 테이블(422)의 i번째 레코드의 할당 가능한 CPU 필드에 저장되어 있던 CPU를 특정한다(단계 S3608). 이어서, CPU #c1은 CPU 상태 테이블(424)의, 특정 CPU의 레코드의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있는지 여부를 판단한다(단계 S3609). 스레드의 식별이 저장되어 있지 않은 경우(단계 S3609: No), CPU #c1은 CPU 상태 테이블(424)의, 특정 CPU의 레코드의 할당 스레드 ID 필드에 스레드 정보 테이블(422)의 i번째 레코드의 스레드의 식별 정보를 저장한다(단계 S3610). 이어서, CPU #c1은 스레드 정보 테이블(422)의 i번째 레코드의 제어 OS ID 필드에 저장되어 있던 OS를 특정한다(단계 S3611).
단계 S3607 또는 단계 S3611의 실행 종료 후, CPU #c1은 할당 가능 OS수 테이블(423)의 특정 OS의 레코드 할당 가능수 필드의 값을 디크리먼트한다(단계 S3612). 또한, CPU #c1은 탐색 CPU수를 디크리먼트한다(단계 S3613).
할당 가능수 필드의 값이 0인 경우(단계 S3606: Yes), 스레드의 식별 정보가 저장되어 있는 경우(단계 S3609: Yes), 또는 단계 S3613의 실행 종료 후, CPU #c1은 변수 i를 인크리먼트한다(단계 S3614). 단계 S3614의 실행 종료 후, CPU #c1은 단계 S3602의 처리로 이행한다. 통일 스케쥴링의 탐색 처리를 실행함으로써, 멀티프로세서 시스템(100)은 CPU마다 CPU의 할당 후보가 되는 스레드를 탐색하는 처리이다.
도 37은 통일 스케쥴링의 정지 재개 처리 순서의 일례를 도시하는 흐름도(그 1)이다. 통일 스케쥴링의 정지 재개 처리는 CPU 상태 테이블(424)과 스레드 할당 예정 기억 테이블(425)의 레코드마다 실행 상태의 스레드를 전환하는지 여부를 판단하는 처리이다. 이어서, 통일 스케쥴링의 정지 재개 처리는, 전환하는 경우, 현재 실행 상태인 스레드를 정지시키고, 할당 후보가 된 스레드를 재개시킨다.
CPU #c1은 변수 j에 1을 설정한다(단계 S3701). 이어서, CPU #c1은 모든 CPU를 확인했는지 여부를 판단한다(단계 S3702). 아직 확인하지 않는 CPU가 있는 경우(단계 S3702: No), 이어서, CPU #c1은 CPU 상태 테이블(424)의 j번째 레코드의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있는지 여부를 판단한다(단계 S3703). 스레드의 식별 정보가 저장되어 있는 경우(단계 S3703: Yes), CPU #c1은 CPU 상태 테이블(424)의 j번째 레코드의 할당 스레드 ID 필드에 저장되어 있는 스레드가 실행 중인 스레드와는 다른지 여부를 판단한다(단계 S3704).
할당 스레드 ID 필드에 저장되어 있는 스레드가 실행 중인 스레드와는 다른 경우(단계 S3704: Yes), CPU #c1은 CPU 할당 테이블(421)의 j번째 레코드의 CPU 담당인 OS에 실행 중인 스레드를 정지 지시한다(단계 S3705). 이어서, CPU #c1은 CPU 상태 테이블(421)의 j번째 레코드의 CPU 담당인 OS에 신규로 할당하는 스레드를 재개 지시한다(단계 S3706). 한편, 구체적인 정지 지시 방법으로서, CPU #c1에서 실행 중인 OS 제어 애플리케이션(101)이 OS #o1 ~ OS #o3의 스레드를 정지시키는 API를 호출한다. 재개 지시도 마찬가지로 OS 제어 애플리케이션(101)이 재개하는 API를 호출한다.
스레드의 식별 정보가 저장되어 있지 않은 경우(단계 S3703: No), 할당 스레드 ID 필드에 저장되어 있는 스레드가 실행 중인 스레드와 일치하는 경우(단계 S3704: No), 또는 단계 S3706의 실행 종료 후, CPU #c1은 변수 j를 인크리먼트한다(단계 S3707). 단계 S3707의 실행 종료 후, CPU #c1은 단계 S3702의 처리로 이행한다. 모든 CPU를 확인한 경우(단계 S3702: Yes), CPU #c1은 변수 j에 1을 설정한다(단계 S3708). 단계 S3708의 실행 종료 후, CPU #c1은 도 38에 도시하는 단계 S3801로 이행한다.
도 38은 통일 스케쥴링의 정지 재개 처리 순서의 일례를 도시하는 제2 흐름도이다. CPU #c1은 모든 OS를 확인했는지 여부를 판단한다(단계 S3801). 모든 OS를 확인한 경우(단계 S3801: Yes), CPU #c1은 통일 스케쥴링의 정지 재개 처리를 종료한다.
아직 확인하지 않은 OS가 있는 경우(단계 S3801: No), CPU #c1은 스레드 할당 예정 기억 테이블(425)의 j번째 레코드의 할당 예정 스레드 ID로부터 스레드 #i를 특정한다(단계 S3802). 이어서, CPU #c1은 스레드를 특정할 수 있었는지 여부를 판단한다(단계 S3803). 스레드를 특정할 수 있었던 경우(단계 S3803: Yes), CPU #c1은 j번째 OS를 실행하는 선두 CPU의 CPU ID를 k로 설정한다(단계 S3804). 이어서, CPU #c1은 j번째 OS를 실행하는 말미 CPU의 CPU ID를 m으로 설정한다(단계 S3805). 이어서, CPU #c1은 k가 m 이하인지 여부를 판단한다(단계 S3806). 스레드를 특정할 수 없는 경우(단계 S3803: No), 또는 k가 m보다 큰 경우(단계 S3806: No), CPU #c1은 변수 j를 인크리먼트한다(단계 S3807).
단계 S3807의 실행 종료 후, CPU #c1은 단계 S3801의 처리로 이행한다.
k가 m 이하인 경우(단계 S3806: Yes), CPU #c1은 CPU 상태 테이블(424)의 CPU #ck의 레코드의 할당 스레드 ID 필드에 스레드의 식별 정보가 저장되어 있는지 여부를 판단한다(단계 S3808). 스레드의 식별 정보가 저장되어 있지 않은 경우(단계 S3808: No), CPU #c1은 CPU 상태 테이블(424)의 CPU #ck의 레코드의 할당 스레드 ID 필드에 스레드 #i를 저장한다(단계 S3809). 이어서, CPU #c1은 j번째의 OS에 실행 중인 스레드를 정지 지시한다(단계 S3810). 이어서, CPU #c1은 j번째의 OS에 스레드 #i를 재개 지시한다(단계 S3811).
스레드의 식별 정보가 저장되어 있는 경우(단계 S3808: Yes), 또는 단계 S3811의 실행 종료 후, CPU #c1은 j번째의 OS를 실행하는 다음 CPU의 CPU ID를 k로 설정한다(단계 S3812). 단계 S3812의 실행 종료 후, CPU #c1은 단계 S3806의 처리로 이행한다. 통일 스케쥴링의 정지 재개 처리를 실행함으로써, 멀티프로세서 시스템(100)은 탐색 결과에 기초하여 스레드의 정지 재개를 할 수 있다.
이상 설명한 것과 같이, 멀티프로세서 시스템(100)에 따르면, 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아닌 경우, OS를 실행하는 CPU 고유의 기억 영역을 이용하여 동기 처리를 한다. 이에 따라, 멀티프로세서 시스템(100)은 복수의 CPU 공유의 기억 영역이 되는 글로벌 메모리 #gm을 이용하지 않아도 되기 때문에, 멀티프로세서 시스템(100)의 처리 성능이 향상된다. 동기 처리의 처리 결과를 글로벌 메모리 #gm에 기록하면, 글로벌 메모리 #gm에의 액세스에 시간이 걸려, 멀티프로세서 시스템(100)의 처리 성능 저하를 초래하게 된다.
또한, 멀티프로세서 시스템(100)에 따르면, 실행 요구가 있었던 동기 처리가 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인 경우, OS를 실행하는 CPU 고유의 기억 영역을 이용하여 동기 처리를 한다. 이에 따라, 멀티프로세서 시스템(100)은 동기 처리를 사양 그대로의 동작으로 처리할 수 있다.
또한, 멀티프로세서 시스템(100)에 따르면, 동기 처리의 실행 요구를 하는 스레드가 실행된 경우에, 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 정보를 갱신하더라도 좋다. 이에 따라, 멀티프로세서 시스템(100)은, 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리로 하고 있는 동기 처리의 수가 줄어들면, 글로벌 메모리 #gm을 이용하는 빈도도 감소하기 때문에, 멀티프로세서 시스템(100)의 처리 성능을 향상시킬 수 있다.
또한, 멀티프로세서 시스템(100)에 따르면, 멀티프로세서 시스템(100)의 동작 모드에 기초하여, 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하더라도 좋다. 동작 모드가 변함으로써, 실행되는 스레드의 처리 내용도 변화되어, 동기 처리의 실행 요구를 하지 않는 스레드가 발생할 가능성이 있다. 따라서, 동작 모드마다 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단함으로써, 멀티프로세서 시스템(100)의 처리 성능을 향상시킬 수 있을 가능성이 있다.
또한, 멀티프로세서 시스템(100)에 따르면, 할당된 모든 스레드의 실행이 종료된 OS를 검출한 경우, 실행 대기하는 스레드 중 종료된 OS가 실행 가능한 스레드로부터 하나의 스레드를 선택하여, 종료된 OS에 실행시키더라도 좋다. 이에 따라, 하나의 CPU에는 하나의 스레드밖에 실행하고 있지 않아, 다른 처리에 방해되는 일이 없어지기 때문에, 스레드에 일정 시간까지 정해진 처리를 한다고 하는 리얼타임 제약을 준수하기 쉽게 된다.
또한, 멀티프로세서 시스템(100)은, 할당된 모든 스레드의 실행이 종료된 OS를 검출했다고 하자. 이때, 멀티프로세서 시스템(100)에 따르면, 실행 대기 스레드 중 종료된 OS를 실행하는 CPU가 실행 가능한 스레드로부터 하나의 스레드를 선택하여, 종료된 OS에 실행시키더라도 좋다. 이에 따라, 하나의 CPU에는 하나의 스레드밖에 실행하고 있지 않아, 다른 처리에 방해되는 일이 없어지기 때문에, 스레드에 일정 시간까지 정해진 처리를 한다고 하는 리얼타임 제약을 준수하기 쉽게 된다. 또한, 특정 CPU가 아니면 실행할 수 없는 스레드를 우선함으로써, 실행 가능의 조건이 좁은 스레드를 먼저 실행할 수 있다.
한편, 동일한 OS를 이용함에도 불구하고, CPU에 의해서 실행할 수 있는 스레드, 실행할 수 없는 스레드라고 하는 것이 발생하는 이유의 하나로서, 일부의 명령 세트의 유무가 있다. 예컨대, 어떤 2개 CPU 중, 한쪽의 CPU가 Single Instruction Multiple Data(SIMD)와 같은 명령 세트를 갖고 있는 경우, SIMD 명령을 이용하는 스레드는 한쪽의 CPU에 의해서 실행 가능하게 되고, SIMD 명령을 이용하지 않고 CPU의 일반 명령을 이용하는 스레드는 양쪽의 CPU에 의해서 실행 가능하게 된다.
또한, 본 실시형태에 따른 멀티프로세서 시스템(100)은, 복수의 OS의 하나가 리얼타임 OS이며, 헤테로지니어스 프로세서가 되는 것이라면 어떠한 장치라도 적용할 수 있다. 예컨대, 멀티프로세서 시스템(100)은 복사기, 팩시밀리, 셋톱박스, 비디오 레코더, 휴대전화에 적용할 수 있다.
한편, 본 실시형태에서 설명한 실행 제어 방법은 미리 준비된 프로그램을 퍼스널컴퓨터나 워크스테이션 등의 컴퓨터로 실행함으로써 실현할 수 있다. 본 실행 제어 방법을 실행하는 프로그램은 하드디스크, 플렉시블 디스크, CD-ROM, MO, DVD 등의 컴퓨터로 판독 가능한 기록 매체에 기록되어, 컴퓨터에 의해서 기록 매체로부터 판독됨으로써 실행된다. 또한 실행 제어 방법을 실행하는 프로그램은 인터넷 등의 네트워크를 통해 배포하더라도 좋다.
전술한 실시형태에 관해 이하의 부기를 더 개시한다.
(부기 1) 복수의 Operating System(OS)에 의해서 제어되는 멀티프로세서 시스템의 제1 프로세서가, 기억부에 저장된, 상기 복수의 OS 중 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 제1 정보를 참조하여, 상기 제1 프로세서를 제어하는 상기 복수의 OS 중 제1 OS에 의해서 실행되는 스레드로부터 실행 요구가 있었던 동기 처리가 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하여, 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아니라고 판단한 경우, 상기 제1 OS가 액세스 가능한 상기 제1 프로세서에 고유한 기억 영역을 이용하여, 상기 실행 요구가 있었던 동기 처리를 실행하는 것을 특징으로 하는 실행 제어 방법.
(부기 2) 상기 제1 프로세서가,
상기 제1 OS에 의해서 실행되는 스레드로부터 실행 요구가 있었던 동기 처리가 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리라고 판단한 경우, 상기 복수의 OS가 액세스 가능한 기억 영역을 이용하여, 상기 실행 요구가 있었던 동기 처리를 실행하는 것을 특징으로 하는 부기 1에 기재된 실행 제어 방법.
(부기 3) 상기 제1 프로세서가,
동기 처리의 실행 요구를 하는 스레드를 상기 복수의 OS 중 어느 OS가 실행한 경우, 상기 동기 처리의 실행 요구를 행하는 스레드와 이 스레드를 실행한 OS를 연관짓고,
상기 연관지은 결과에 기초하여, 상기 제1 정보를 갱신하는 처리를 실행하고,
상기 판단하는 처리는,
갱신한 상기 제1 정보를 참조하여, 상기 실행 요구가 있었던 동기 처리가 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하는 것을 특징으로 하는 부기 1 또는 2에 기재된 실행 제어 방법.
(부기 4) 상기 기억부는, 상기 멀티프로세서 시스템의 동작 모드마다 상기 제1 정보를 기억하고 있고,
상기 판단하는 처리는,
상기 제1 정보를 참조하여, 상기 멀티프로세서 시스템의 동작 모드에 기초하여, 상기 실행 요구가 있었던 동기 처리가 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하는 것을 특징으로 하는 부기 1 ~ 3 중 어느 하나에 기재된 실행 제어 방법.
(부기 5) 상기 제1 프로세서가,
상기 복수의 OS 중에서, 할당된 모든 스레드의 실행을 종료한 OS를 검출한 경우, 상기 멀티프로세서 시스템 내에서 실행 대기하는 스레드 중, 상기 종료된 OS가 실행 가능한 하나의 스레드를 선택하고,
선택한 상기 스레드를 상기 종료된 OS에 의해서 실행시키는 것을 특징으로 하는 부기 1 ~ 4 중 어느 하나에 기재된 실행 제어 방법.
(부기 6) 상기 제1 프로세서가,
상기 복수의 OS 중에서, 할당된 모든 스레드의 실행이 종료된 OS를 검출한 경우, 상기 멀티프로세서 시스템 내에서 실행 대기하는 스레드 중, 상기 종료된 OS를 실행하는 프로세서가 실행 가능한 스레드로부터 하나의 스레드를 선택하고,
선택한 상기 스레드를 상기 종료된 OS에 의해서 실행시키는 처리를 실행하는 것을 특징으로 하는 부기 1 ~ 5 중 어느 하나에 기재된 실행 제어 방법.
(부기 7) 복수의 OS에 의해서 제어되는 멀티프로세서 시스템으로서,
제1 프로세서와,
상기 복수의 OS 중 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 제1 정보를 기억하는 기억부와,
상기 제1 정보를 참조하여, 상기 제1 프로세서를 제어하는 상기 복수의 OS 중 제1 OS에 의해서 실행되는 스레드로부터 실행 요구가 있었던 동기 처리가 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하는 판단부를 가지며,
상기 제1 프로세서는, 상기 판단부에 의해서 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아니라고 판단된 경우, 상기 제1 OS가 액세스 가능한 상기 제1 프로세서에 고유한 기억 영역을 이용하여, 상기 실행 요구가 있었던 동기 처리를 실행하는 것을 특징으로 하는 멀티프로세서 시스템.
c1 ~ c6: CPU o1 ~ o3: OS
lm1 ~ lm6: 로컬 메모리 sm2, sm3: 공유 메모리
gm: 글로벌 메모리 t1 ~ t10: 스레드
100: 멀티프로세서 시스템 401: 연관부
402: 갱신부 403: 판단부
404: 실행부 405: 선택부
406: 제어부

Claims (7)

  1. 복수의 Operating System(OS)에 의해서 제어되는 멀티프로세서 시스템의 제1 프로세서가,
    기억부에 저장된, 상기 복수의 OS 중 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 제1 정보를 참조하여, 상기 제1 프로세서를 제어하는 상기 복수의 OS 중 제1 OS에 의해서 실행되는 스레드로부터 실행 요구가 있었던 동기 처리가, 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하여,
    상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아니라고 판단한 경우, 상기 제1 OS가 액세스 가능한 상기 제1 프로세서에 고유한 기억 영역을 이용하여, 상기 실행 요구가 있었던 동기 처리를 실행하는 것을 특징으로 하는 실행 제어 방법.
  2. 제1항에 있어서, 상기 제1 프로세서는,
    상기 제1 OS에 의해서 실행되는 스레드로부터 실행 요구가 있었던 동기 처리가 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리라고 판단한 경우, 상기 복수의 OS가 액세스 가능한 기억 영역을 이용하여, 상기 실행 요구가 있었던 동기 처리를 실행하는 것을 특징으로 하는 실행 제어 방법.
  3. 제1항 또는 제2항에 있어서, 상기 제1 프로세서는,
    동기 처리의 실행 요구를 행하는 스레드를 상기 복수의 OS 중 어느 OS가 실행한 경우, 상기 동기 처리의 실행 요구를 행하는 스레드와 이 스레드를 실행한 OS를 연관짓고,
    그 연관지은 결과에 기초하여, 상기 제1 정보를 갱신하는 처리를 실행하고,
    상기 판단하는 처리는,
    갱신한 상기 제1 정보를 참조하여, 상기 실행 요구가 있었던 동기 처리가 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하는 것을 특징으로 하는 실행 제어 방법.
  4. 제1항 또는 제2항에 있어서, 상기 기억부는, 상기 멀티프로세서 시스템의 동작 모드마다 상기 제1 정보를 기억하고,
    상기 판단하는 처리는,
    상기 제1 정보를 참조하여, 상기 멀티프로세서 시스템의 동작 모드에 기초하여, 상기 실행 요구가 있었던 동기 처리가 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하는 것을 특징으로 하는 실행 제어 방법.
  5. 제1항 또는 제2항에 있어서, 상기 제1 프로세서는,
    상기 복수의 OS 중에서, 할당된 모든 스레드의 실행을 종료한 OS를 검출한 경우, 상기 멀티프로세서 시스템 내에서 실행 대기하는 스레드 중, 상기 종료된 OS가 실행 가능한 하나의 스레드를 선택하고,
    선택한 상기 스레드를 상기 종료된 OS에 의해서 실행시키는 것을 특징으로 하는 실행 제어 방법.
  6. 제1항 또는 제2항에 있어서, 상기 제1 프로세서는,
    상기 복수의 OS 중에서, 할당된 모든 스레드의 실행이 종료된 OS를 검출한 경우, 상기 멀티프로세서 시스템 내에서 실행 대기하는 스레드 중, 상기 종료된 OS를 실행하는 프로세서가 실행 가능한 스레드로부터 하나의 스레드를 선택하고,
    선택한 상기 스레드를 상기 종료된 OS에 의해서 실행시키는 처리를 실행하는 것을 특징으로 하는 실행 제어 방법.
  7. 복수의 OS에 의해서 제어되는 멀티프로세서 시스템으로서,
    제1 프로세서와,
    상기 복수의 OS 중 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리를 특정하는 제1 정보를 기억하는 기억부와,
    상기 제1 정보를 참조하여, 상기 제1 프로세서를 제어하는 상기 복수의 OS 중 제1 OS에 의해서 실행되는 스레드로부터 실행 요구가 있었던 동기 처리가, 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리인지 여부를 판단하는 판단부를 가지며,
    상기 제1 프로세서는, 상기 판단부에 의해서 상기 서로 다른 OS에 의해서 실행되는 스레드 사이의 동기 처리가 아니라고 판단된 경우, 상기 제1 OS가 액세스 가능한 상기 제1 프로세서에 고유한 기억 영역을 이용하여, 상기 실행 요구가 있었던 동기 처리를 실행하는 것을 특징으로 하는 멀티프로세서 시스템.
KR1020130090798A 2012-09-19 2013-07-31 실행 제어 방법 및 멀티프로세서 시스템 KR101521701B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JPJP-P-2012-206398 2012-09-19
JP2012206398A JP6051721B2 (ja) 2012-09-19 2012-09-19 実行制御方法、およびマルチプロセッサシステム

Publications (2)

Publication Number Publication Date
KR20140037749A true KR20140037749A (ko) 2014-03-27
KR101521701B1 KR101521701B1 (ko) 2015-05-19

Family

ID=50275881

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130090798A KR101521701B1 (ko) 2012-09-19 2013-07-31 실행 제어 방법 및 멀티프로세서 시스템

Country Status (3)

Country Link
US (1) US20140082624A1 (ko)
JP (1) JP6051721B2 (ko)
KR (1) KR101521701B1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102285749B1 (ko) 2014-11-10 2021-08-05 삼성전자주식회사 세마포어 기능을 갖는 시스템 온 칩 및 그것의 세마포어 구현 방법
US10671426B2 (en) 2016-11-28 2020-06-02 Arm Limited Data processing
US10423446B2 (en) * 2016-11-28 2019-09-24 Arm Limited Data processing
US10552212B2 (en) 2016-11-28 2020-02-04 Arm Limited Data processing
US11861403B2 (en) * 2020-10-15 2024-01-02 Nxp Usa, Inc. Method and system for accelerator thread management

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2825839B2 (ja) * 1989-03-20 1998-11-18 富士通株式会社 デッドロック検出処理方式
JPH07234850A (ja) * 1994-02-24 1995-09-05 Mitsubishi Electric Corp マルチプロセッサの装置と方法
JP2001249821A (ja) * 2000-03-07 2001-09-14 Hitachi Ltd ジョブスケジューリング方法
US7058948B2 (en) * 2001-08-10 2006-06-06 Hewlett-Packard Development Company, L.P. Synchronization objects for multi-computer systems
JP4420055B2 (ja) * 2007-04-18 2010-02-24 日本電気株式会社 マルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法
US8752057B1 (en) * 2008-06-30 2014-06-10 Emc Corporation Techniques for synchronizing processing of at least two code threads
US8341643B2 (en) * 2010-03-29 2012-12-25 International Business Machines Corporation Protecting shared resources using shared memory and sockets
CN103080921B (zh) * 2010-08-30 2015-11-25 富士通株式会社 多核处理器系统、同步控制系统、同步控制装置、信息生成方法
US8893147B2 (en) * 2012-01-13 2014-11-18 Ca, Inc. Providing a virtualized replication and high availability environment including a replication and high availability engine
US8893137B2 (en) * 2012-03-13 2014-11-18 Cisco Technology, Inc. Transaction-based shared memory protection for high availability environments

Also Published As

Publication number Publication date
US20140082624A1 (en) 2014-03-20
KR101521701B1 (ko) 2015-05-19
JP6051721B2 (ja) 2016-12-27
JP2014063235A (ja) 2014-04-10

Similar Documents

Publication Publication Date Title
JP5516744B2 (ja) スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法
KR101366075B1 (ko) 멀티코어 플랫폼에서의 태스크 이동 방법 및 장치
KR100759280B1 (ko) 복수의 오퍼레이팅 시스템을 실행하는 계산기
WO2012093488A1 (ja) スケジューリング方法、およびマルチコアプロセッサシステム
JP2006515690A (ja) 複数のプロセッサを有するデータ処理システムと、複数のプロセッサを有するデータ処理システムのためのタスクスケジューラと、タスクスケジューリングの対応する方法
KR101521701B1 (ko) 실행 제어 방법 및 멀티프로세서 시스템
JP2007034414A (ja) データベース管理システム及び方法
US20110265093A1 (en) Computer System and Program Product
JP2010257428A (ja) 情報処理装置、並列処理最適化方法およびプログラム
US8291426B2 (en) Memory allocators corresponding to processor resources
WO2013001613A1 (ja) スケジューリング方法およびシステム
JP5321748B2 (ja) マルチコアプロセッサシステム、スレッド制御方法、およびスレッド制御プログラム
US20220237016A1 (en) Apparatus for determining resource migration schedule
JP5708450B2 (ja) マルチコアプロセッサシステム、レジスタ利用方法、およびレジスタ利用プログラム
JP5776813B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム
JP5737298B2 (ja) スケジューリング方法およびスケジューリングシステム
KR101271211B1 (ko) 다중 쓰레드의 비동기 입출력 처리 장치 및 그 방법
JP4559958B2 (ja) マルチコアプロセッサにおけるマルチコア制御方法
JP6349837B2 (ja) スケジューラ装置及びそのスケジューリング方法、演算処理システム、並びにコンピュータ・プログラム
Gazit A deterministic parallel algorithm for planar graphs isomorphism
JP2010044703A (ja) マルチタスクosにおけるタスク切り替え方法及びプログラム
JP2006065658A (ja) 並列計算機システムおよびジョブ投入方法
CN114443255A (zh) 一种线程调用方法和装置
JP2016103258A (ja) 並列演算装置、並列演算システム、およびジョブ制御プログラム
JP2011034575A (ja) データベース管理システム及び方法

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