KR100591727B1 - 스케줄링 방법과 이 방법을 실행하기 위한 프로그램을 기록한 기록매체 및 정보처리시스템 - Google Patents
스케줄링 방법과 이 방법을 실행하기 위한 프로그램을 기록한 기록매체 및 정보처리시스템 Download PDFInfo
- Publication number
- KR100591727B1 KR100591727B1 KR1020040013134A KR20040013134A KR100591727B1 KR 100591727 B1 KR100591727 B1 KR 100591727B1 KR 1020040013134 A KR1020040013134 A KR 1020040013134A KR 20040013134 A KR20040013134 A KR 20040013134A KR 100591727 B1 KR100591727 B1 KR 100591727B1
- Authority
- KR
- South Korea
- Prior art keywords
- thread
- vpu
- threads
- programs
- execution
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Debugging And Monitoring (AREA)
- Advance Control (AREA)
Abstract
본 발명에서는, 프로그램의 코드내에 각각의 처리의 시간적인 제약조건을 상세히 기술하지 않고 실시간 처리를 실행하기 위한 스레드군을 효율좋게 스케줄링한다.
프로그램 모듈(100)은, 복수의 처리요소 각각에 대응하는 수순을 기술한 복수의 프로그램(111~116)과 구성기술정보(117)를 포함한다. 구성기술정보(117)는 복수의 프로그램(111~116)간의 입출력관계 및 각 프로그램(111~116)의 실행에 요하는 코스트를 나타낸다. 프로그램 모듈(100)의 실행시에는, 구성기술정보(117)에 기초하여 복수의 프로그램(111~116)을 실행하는 복수의 스레드 각각의 실행개시 타이밍 및 실행기간을 결정함으로써, 복수의 스레드 각각을 1이상의 프로세서에 할당하는 스케줄링 처리가 실행된다.
Description
도 1은 본 발명의 1실시형태에 따른 실시간 처리시스템을 구성하는 계산기 시스템의 예를 나타낸 블록도이고,
도 2는 동 실시형태의 실시간 처리시스템에 설치된 MPU 및 VPU 각각의 구성을 나타낸 블록도,
도 3은 동 실시형태의 실시간 처리시스템에서 이용되는 가상 어드레스 변환기구의 예를 나타낸 도면,
도 4는 동 실시형태의 실시간 처리시스템에서의 실어드레스공간에 매핑되는 데이터의 예를 나타낸 도면,
도 5는 동 실시형태의 실시간 처리시스템에서의 실효 어드레스공간, 가상 어드레스공간, 실어드레스공간을 설명하기 위한 도면,
도 6은 디지털 텔레비전 방송의 수신기의 구성을 나타낸 블록도,
도 7은 동 실시형태의 실시간 처리시스템에 의해 실행되는 프로그램 모듈의 구성의 예를 나타낸 도면,
도 8은 도 7의 프로그램 모듈내에 포함되는 구성기술의 예를 나타낸 도면,
도 9는 도 7의 프로그램 모듈에 대응하는 프로그램간의 데이터의 흐름을 나 타낸 도면,
도 10은 도 7의 프로그램 모듈이 2개의 VPU에 의해 병렬로 실행되는 상태를 나타낸 도면,
도 11은 도 7의 프로그램 모듈이 2개의 VPU에 의해 파이프라인형식으로 실행되는 상태를 나타낸 도면,
도 12는 동 실시형태의 실시간 처리시스템에서의 오퍼레이팅 시스템의 실장형태의 예를 나타낸 도면,
도 13은 동 실시형태의 실시간 처리시스템에서의 오퍼레이팅 시스템의 실장형태의 다른 예를 나타낸 도면,
도 14는 동 실시형태의 실시간 처리시스템에서의 가상 계산기 OS와 게스트 OS의 관계를 나타낸 도면,
도 15는 동 실시형태의 실시간 처리시스템에 있어서 복수의 게스트 OS에 시분할로 자원이 할당되는 상태를 나타낸 도면,
도 16은 동 실시형태의 실시간 처리시스템에서의 어떤 특정의 게스트 OS에 의해 특정의 자원이 전유되는 상태를 나타낸 도면,
도 17은 동 실시형태의 실시간 처리시스템에 있어서 스케줄러로서 이용되는 VPU 실행환경을 나타낸 도면,
도 18은 동 실시형태의 실시간 처리시스템에서 이용되는 가상 계산기 OS에 VPU 실행환경을 실장한 예를 나타낸 도면,
도 19는 동 실시형태의 실시간 처리시스템에서 이용되는 하나의 게스트 OS로 서 VPU 실행환경을 실장하는 예를 나타낸 도면,
도 20은 동 실시형태의 실시간 처리시스템에서 이용되는 복수의 게스트 OS 각각에 VPU 실행환경을 실장하는 예를 나타낸 도면,
도 21은 동 실시형태의 실시간 처리시스템에서 이용되는 하나의 게스트 OS에 VPU 실행환경을 실장하는 예를 나타낸 도면,
도 22는 동 실시형태의 실시간 처리시스템에서 이용되는 MPU측 VPU 실행환경과 VPU측 VPU 실행환경을 설명하기 위한 도면,
도 23은 동 실시형태의 실시간 처리시스템에서 이용되는 VPU측 VPU 실행환경에 의해 실행되는 처리수순을 나타낸 플로우차트,
도 24는 동 실시형태의 실시간 처리시스템에서 이용되는 MPU측 VPU 실행환경에 의해 실행되는 처리수순을 나타낸 플로우차트,
도 25는 동 실시형태의 실시간 처리시스템에 있어서 밀결합 스레드 그룹에 속하는 스레드군이 각각 다른 프로세서에 의해 동시에 실행되는 상태를 나타낸 도면,
도 26은 동 실시형태의 실시간 처리시스템에서의 밀결합 스레드간의 상호작용을 설명하기 위한 도면,
도 27은 동 실시형태의 실시간 처리시스템에 있어서 각 밀결합 스레드의 실효 어드레스공간에 상대 스레드가 실행되는 VPU의 로컬기억장치가 매핑되는 상태를 나타낸 도면,
도 28은 동 실시형태의 실시간 처리시스템에서의 소결합 스레드 그룹에 속하 는 스레드군에 대한 프로세서의 할당을 설명하기 위한 도면,
도 29는 동 실시형태의 실시간 처리시스템에서의 소결합 스레드간의 상호작용을 설명하기 위한 도면,
도 30은 동 실시형태의 실시간 처리시스템에서의 프로세스와 스레드의 관계를 설명하기 위한 도면,
도 31은 동 실시형태의 실시간 처리시스템에서의 스케줄링 처리의 수순을 나타낸 플로우차트,
도 32는 동 실시형태의 실시간 처리시스템에서의 로컬기억장치의 매핑에 관한 제1문제를 설명하기 위한 도면,
도 33은 동 실시형태의 실시간 처리시스템에서의 물리 VPU와 논리 VPU의 관계를 나타낸 도면,
도 34는 동 실시형태의 실시간 처리시스템에서의 로컬기억장치의 매핑에 관한 제2문제를 설명하기 위한 도면,
도 35는 동 실시형태의 실시간 처리시스템에서의 실효 어드레스공간 공유모델을 나타낸 도면,
도 36은 동 실시형태의 실시간 처리시스템에서의 가상 어드레스공간 공유모델을 나타낸 도면,
도 37은 동 실시형태의 실시간 처리시스템에서의 비공유모델을 나타낸 도면,
도 38은 동 실시형태의 실시간 처리시스템에서의 로컬기억장치의 매핑변경을 설명하기 위한 제1도,
도 39는 동 실시형태의 실시간 처리시스템에서의 로컬기억장치의 매핑변경을 설명하기 위한 제2도,
도 40은 동 실시형태의 실시간 처리시스템에서의 로컬기억장치의 매핑변경을 설명하기 위한 제3도,
도 41은 동 실시형태의 실시간 처리시스템에서의 로컬기억장치의 매핑변경을 설명하기 위한 제4도,
도 42는 동 실시형태의 실시간 처리시스템에서의 로컬기억장치의 매핑변경을 설명하기 위한 제5도,
도 43은 동 실시형태의 실시간 처리시스템에 있어서 로컬기억장치의 매핑변경을 행하기 위해 실행되는 어드레스 관리처리의 수순을 나타낸 플로우차트,
도 44는 동 실시형태의 실시간 처리시스템에 있어서 실행되는 로컬기억장치와 메모리 사이의 매핑변경을 설명하기 위한 도면,
도 45는 동 실시형태의 실시간 처리시스템에 있어서 실행되는 로컬기억장치와 메모리 사이의 매핑변경처리의 수순을 나타낸 플로우차트,
도 46은 동 실시형태의 실시간 처리시스템에서의 스레드의 상태천이를 나타낸 도면,
도 47은 동 실시형태의 실시간 처리시스템에서의 스레드와 실효기간의 관계를 설명하기 위한 도면,
도 48은 동 실시형태의 실시간 처리시스템에서의 밀결합 스레드군이 어떤 실효기간에 있어서 동시에 실행되는 상태를 나타낸 도면,
도 49는 동 실시형태의 실시간 처리시스템에서의 주기실행모델을 나타낸 도면,
도 50은 동 실시형태의 실시간 처리시스템에서의 비주기실행모델을 나타낸 도면,
도 51은 태스크 그래프를 설명하기 위한 도면,
도 52는 동 실시형태의 실시간 처리시스템에서 이용되는 예약그래프의 원리를 설명하기 위한 도면,
도 53은 동 실시형태의 실시간 처리시스템에서 이용되는 예약그래프의 예를 설명하기 위한 도면,
도 54는 동 실시형태의 실시간 처리시스템에서 이용되는 계층형 스케줄러를 설명하기 위한 도면,
도 55는 동 실시형태의 실시간 처리시스템이 하드 실시간 클래스의 스케줄링을 위해 사용하는 파라미터의 예를 설명하는 도면,
도 56은 동 실시형태의 실시간 처리시스템에서 이용되는 절대 타이밍제약을 설명하는 도면,
도 57은 동 실시형태의 실시간 처리시스템에서 이용되는 상대 타이밍제약을 설명하는 도면,
도 58은 동 실시형태의 실시간 처리시스템에서 이용되는 상호배타제약을 설명하는 도면,
도 59는 동 실시형태의 실시간 처리시스템에서의 동기기구를 설명하기 위한 도면,
도 60은 동 실시형태의 실시간 처리시스템에 있어서 동기기구를 적절하게 분간하여 사용하는 수순을 나타낸 플로우차트,
도 61은 동 실시형태의 실시간 처리시스템에 있어서 이용되는 예약그래프의 예를 나타낸 도면,
도 62는 동 실시형태의 실시간 처리시스템에 있어서 생성되는 예약요청의 예를 나타낸 도면,
도 63은 동 실시형태의 실시간 처리시스템이 도 62의 예약요청에 기초하여 실행하는 스케줄링의 예를 나타낸 도면,
도 64는 동 실시형태의 실시간 처리시스템에 의해 실행되는 소프트웨어 파이프라인형식의 스케줄링을 설명하기 위한 제1도,
도 65는 동 실시형태의 실시간 처리시스템에 의해 실행되는 소프트웨어 파이프라인형식의 스케줄링을 설명하기 위한 제2도,
도 66은 동 실시형태의 실시간 처리시스템에 있어서 실행되는 버퍼량을 고려한 스케줄링을 설명하기 위한 제1도,
도 67은 동 실시형태의 실시간 처리시스템에 있어서 실행되는 버퍼량을 고려한 스케줄링을 설명하기 위한 제2도,
도 68은 동 실시형태의 실시간 처리시스템에 있어서 실행되는 버퍼량을 고려한 스케줄링을 설명하기 위한 제3도,
도 69는 동 실시형태의 실시간 처리시스템에 있어서 실행되는 버퍼량을 고려 한 스케줄링 처리의 수순을 나타낸 플로우차트,
도 70은 동 실시형태의 실시간 처리시스템에 있어서 이용되는 계층구조를 갖춘 예약그래프의 예를 나타낸 도면,
도 71은 동 실시형태의 실시간 처리시스템에 의해 생성되는 밀결합 스레드 그룹을 고려한 예약요청의 예를 나타낸 도면,
도 72는 동 실시형태의 실시간 처리시스템이 도 71의 예약요청에 기초하여 행하는 스케줄링의 예를 나타낸 도면,
도 73은 동 실시형태의 실시간 처리시스템에 있어서 이용되는 예약리스트의 예를 나타낸 도면,
도 74는 동 실시형태의 실시간 처리시스템에서의 실행기간 예약처리의 수순을 나타낸 플로우차트이다.
<도면부호의 설명>
11 -- MPU(Master Processing Unit),
12 -- VPU(Versatile Processing Unit),
14 -- 메인메모리, 21 -- 처리유닛,
22 -- 메모리 관리유닛, 31 -- 처리유닛,
32 -- 로컬기억장치, 33 -- 메모리 콘트롤러,
50 -- 세그먼트 테이블, 60 -- 페이지 테이블,
100 -- 프로그램 모듈, 111~116 -- 프로그램,
117 -- 구성기술, 331 -- 어드레스 변환 유닛,
401 -- VPU 실행환경.
본 발명은 실시간 처리를 실행하기 위한 스레드(thread)군을 스케줄링하는 스케줄링 방법과 이 방법을 실행하기 위한 프로그램을 기록한 기록매체 및 정보처리시스템에 관한 것이다.
종래부터 서버컴퓨터와 같은 계산기 시스템에 있어서는, 그 연산처리능력의 향상을 도모하기 위해 멀티프로세서, 병렬프로세서와 같은 시스템 아키텍처가 이용되고 있다. 멀티프로세서 및 병렬프로세서 어느 쪽도 복수의 프로세서 유닛을 이용함으로써 연산처리의 병렬화를 실현하고 있다.
복수의 프로세서 유닛을 갖춘 시스템으로서는, 예컨대 1대의 고속 CPU, 복수대의 저속 CPU 및 공유메모리를 갖춘 시스템이 알려져 있다(예컨대, 특허문헌1 참조). 이 시스템에 있어서는, 고속 CPU 및 복수대의 저속 CPU에 대한 처리프로그램의 프로세스군의 할당은 프로세스군의 병렬동작도의 대소 및 처리시간의 대소에 따라 행해진다.
또, 복수의 프로세서에 스레드군을 할당하기 위한 스케줄링 기술로서는 동일한 프로세스내에 속하는 스레드를 동일한 프로세서로 실행시키는 기술이 알려져 있다(예컨대, 특허문헌2 참조).
그런데, 최근에는 계산기 시스템뿐만 아니라, 예컨대 AV(오디오ㆍ비디오) 데이터와 같은 대용량의 데이터를 실시간으로 처리하는 짜넣은 기기에 있어서도 그 연산처리능력의 향상을 위해 멀티프로세서, 병렬프로세서와 같은 시스템 아키텍처의 도입이 요구되고 있다.
[특허문헌1]
일본 특개평10-143380호 공보
[특허문헌2]
일본 특개평8-180025호 공보
그러나, 멀티프로세서, 병렬프로세서와 같은 시스템 아키텍처를 전제로 한 실시간 처리시스템의 보고는 거의 이루어지고 있지 않은 것이 현상(現狀)이다.
실시간 처리시스템에 있어서는, 어떤 허용시간의 제한내에 각각의 처리를 완료하는 것이 요구된다. 이 때문에, 실시간 처리를 실행하기 위한 프로그램을 작성하는 경우에는 프로그램의 코드내에 각각의 처리의 실행개시 타이밍, 종료타이밍 등의 시간적인 제약조건을 상세히 기술하지 않으면 안되고, 코딩작업에 팽대한 노력과 시간이 필요하게 된다. 또, 복수의 프로세서 유닛을 유효하게 이용하기 위해서는 코드내에 프로세서를 지정하는 기술(記述)을 포함하는 것도 필요하게 된다.
본 발명은 상술한 사정을 고려하여 이루어진 것으로, 프로그램의 코드내에 각각의 처리의 시간적인 제약조건을 상세히 기술하지 않아도 실시간 처리를 실행하기 위한 스레드군을 효율좋게 스케줄링하는 것이 가능한 스케줄링 방법과 이 방법을 실행하기 위한 프로그램을 기록한 기록매체 및 정보처리시스템을 제공하는 것을 목적으로 한다.
상술한 과제를 해결하기 위해, 본 발명은 복수의 처리요소의 조합으로 구성되는 실시간 처리를 실행하기 위한 스레드군을 스케줄링하는 스케줄링 방법에 있어서, 상기 복수의 처리요소 각각에 대응하는 수순을 기술한 복수의 프로그램과 상기 복수의 프로그램간의 입출력관계 및 상기 각 프로그램의 실행에 요하는 코스트를 나타내는 구성기술정보를 입력하는 단계와, 상기 구성기술정보에 기초하여 상기 복수의 프로그램을 실행하는 복수의 스레드 각각의 실행개시 타이밍 및 실행기간을 결정함으로써, 상기 복수의 스레드 각각을 1이상의 프로세서에 할당하는 스케줄링 처리를 실행하는 단계를 구비한 것을 특징으로 한다.
이 스케줄링 방법에 의하면, 구성기술정보에 기초하여 복수의 프로그램을 실행하는 복수의 스레드 각각의 실행개시 타이밍 및 실행기간이 결정된다. 따라서, 프로그램의 코드내에 각각의 처리의 시간적인 제약조건을 상세히 기술하지 않아도 실시간 처리를 실행하기 위한 스레드군을 효율좋게 스케줄링하는 것이 가능해진다.
(발명의 실시형태)
이하, 도면을 참조하여 본 발명의 실시형태를 설명한다.
도 1은 본 발명의 1실시형태에 따른 실시간 처리시스템을 실현하기 위한 계산기 시스템의 구성례를 나타낸다. 이 계산기 시스템은 요구되는 각종 처리를 그 시간적인 제약조건의 범위내에서 실행하는 정보처리시스템으로, 범용계산기로서 이용할 수 있는 외에 실시간성이 요구되는 처리를 실행하기 위한 각종 전자기기용의 매립 시스템으로서 이용할 수 있다. 도 1에 나타낸 바와 같이, 이 계산기 시스템에 있어서는 마스터 프로세서 유닛(MPU: Master Processing Unit; 11), 복수의 버서타일 프로세서 유닛(VPU: Versatile Processing Unit; 12), 메인메모리(14), 입출력 제어장치(15)가 접속장치(13)에 의해 서로 접속되어 있다. 접속장치(13)는, 예컨대 크로스바 스위치와 같은 상호결합망, 혹은 버스에 의해 구성되어 있다. 링모양의 버스구조를 이용할 수도 있다. MPU(11)는 계산기 시스템의 동작을 제어하는 메인 프로세서이다. 오퍼레이팅 시스템(OS: Operating System)은 주로 MPU(11)에 의해 실행된다. OS 일부의 기능은 VPU(12)나 입출력 제어장치(15)에서 분담하여 실행할 수도 있다. 각 VPU(12)는 MPU(11)의 관리하에서 각종 처리를 실행하는 프로세서이다. MPU(11)는 복수의 VPU(12)에 처리를 분배하여 병렬로 실행시키기 위한 제어를 행한다. 이에 따라 고속으로 효율좋은 처리의 실행을 행할 수 있다. 메인메모리(14)는 MPU(11), 복수의 VPU(12) 및 입출력 제어장치(15)에 의해 공유되는 기억장치(공유메모리)이다. OS 및 어플리케이션 프로그램은 메인메모리(14)에 격납된다. 입출력 제어장치(15)에는 1개 혹은 복수의 입출력 디바이스(입출력장치; 16)가 접속된다. 입출력 제어장치(15)는 브리지(bridge)라고도 불리워진다.
접속장치(13)는 데이터 전송레이트를 보증하는 QoS 기능을 갖는다. 이 기능은 접속장치(13)를 매개로 한 데이터 전송을 예약된 밴드폭(전송속도)으로 실행함으로써 실현된다. QoS 기능은, 예컨대 어떤 VPU(12)로부터 메모리(14)로 5Mbps로 기록 데이터(write data)를 송신하는 경우, 혹은 어떤 VPU(12)와 다른 VPU(12) 사이에서 100Mbps로 데이터 전송하는 경우에 이용된다. VPU(12)는 접속장치(13)에 대해 밴드폭(전송속도)을 지정(예약)한다. 접속장치(13)는 지정된 밴드폭을 요구한 VPU(12)에 대해 우선적으로 할당한다. 어떤 VPU(12)의 데이터전송에 대해 밴드폭이 예약되었다면 그 VPU(12)에 의한 데이터전송중에 다른 VPU(12), MPU(11) 혹은 입출력 제어장치(15)가 대량의 데이터전송을 행해도 예약된 밴드폭은 확보된다. 이 기능은 특히 실시간 처리를 행하는 계산기에 있어서 중요한 기능이다.
도 1의 구성에서는 MPU(11)가 1개, VPU(12)가 4개, 메모리(14)가 1개, 입출력 제어장치가 1개이지만, VPU(12)의 갯수는 제한되지 않는다. 또, MPU(11)를 갖추지 않은 구성도 가능하다. 이 경우, MPU(11)가 행할 처리는 어떤 1개의 VPU(12)가 담당한다. 즉, 가상적인 MPU(11)의 역할을 VPU가 겸한다.
도 2에는 MPU(11)와 각 VPU(12)의 구성을 나타낸다. MPU(11)는 처리유닛(21) 및 메모리 관리유닛(22)을 갖추고 있다. 처리유닛(21)은 메모리 관리유닛(22)을 통해 메모리(14)를 억세스한다. 메모리 관리유닛(22)은 가상기억관리와 메모리 관리유닛(22)내의 캐쉬메모리의 관리를 행하는 유닛이다. 각 VPU(12)는 처리유닛(31), 로컬기억장치(로컬메모리; 32) 및 메모리 콘트롤러(33)를 구비하고 있다. 각 VPU(12)의 처리유닛(31)은 그 VPU 내부의 로컬기억장치(32)를 직접 억세스할 수 있다. 메모리 콘트롤러(33)는 로컬기억장치(32)와 메모리(14)간의 데이터전송을 행하는 DMA 콘트롤러의 역할을 갖는다. 이 메모리 콘트롤러(33)는 접속장치(14)의 QoS 기능을 이용할 수 있도록 구성되어 있고, 밴드폭을 예약하는 기능 및 예약한 밴드폭으로 데이터 입출력을 행하는 기능을 갖추고 있다. 또, 메모리 콘트롤러(33)는 MPU(11)의 메모리 관리유닛(22)과 마찬가지의 가상기억 관리기능을 갖는다. VPU(12)의 처리유닛(31)은 로컬기억장치(32)를 주기억으로서 사용한다. 처리유닛(31)은 메모리(14)에 대해 직접적으로 억세스하는 것은 아니고, 메모리 콘트롤러(33)에 지시하여 메모리(14)의 내용을 로컬기억장치(32)로 전송하여 읽거나 로컬기억장치(32)의 내용을 메모리(14)에 기록하거나 한다.
MPU(11)의 메모리 관리유닛(22) 및 VPU(12)의 메모리 콘트롤러(33) 각각에 의해 실행되는 가상기억관리는, 예컨대 도 3과 같이 실시할 수 있다. MPU(11)의 처리유닛(21) 혹은 VPU(12)의 메모리 콘트롤러(33)에서 본 어드레스는 도 3의 윗부분에 나타낸 바와 같은 64비트의 어드레스이다. 이 64비트의 어드레스는 상위 36비트가 세그먼트 번호, 중앙의 16비트가 페이지번호, 하위 12비트가 페이지 오프셋이다. 이 어드레스로부터 실제로 접속장치(13)를 통해 억세스하는 실어드레스(RA; Real Address) 공간으로의 변환은 세그먼트 테이블(50) 및 페이지 테이블(60)을 이용하여 실행된다. 세그먼트 테이블(50) 및 페이지 테이블(60)은 메모리 관리유닛(22) 및 메모리 콘트롤러(33)에 각각 설치되어 있다.
MPU(11) 및 각 VPU(12)에서 본 실어드레스(RA) 공간에는 도 4에 나타낸 바와 같이, 예컨대 이하와 같은 데이터가 매핑되어 있다.
1. 메모리(주기억장치)
2. MPU(11)의 각종 제어레지스터
3. 각 VPU(12)의 각종 제어레지스터
4. 각 VPU(12)의 로컬기억장치
5. 각종 입출력 디바이스(입출력장치)의 제어레지스터(입출력 제어장치의 제어레지스터도 포함)
MPU(11) 및 각 VPU(12)는 실어드레스 공간의 해당하는 어드레스에 억세스함으로써, 1~5의 각 데이터를 읽고 쓸 수 있다. 특히, 실어드레스 공간에 억세스함으로써, 어떤 MPU(11)부터라도, 혹은 어떤 VPU(12)부터라도, 더욱이 입출력 제어장치(15)부터라도 임의의 VPU(12)의 로컬기억장치(32)에 억세스할 수 있는 것은 중요하다. 또, 세그먼트 테이블 혹은 페이지 테이블을 이용하여 VPU(12)의 로컬기억장치(32)의 내용이 자유롭게 읽히고 쓰여지지 않도록 보호할 수도 있다.
MPU(11) 혹은 VPU(12)에서 본 어드레스 공간은 도 3의 가상기억 메커니즘을 이용하여, 예컨대 도 5에 나타낸 바와 같이 매핑된다. MPU(11) 혹은 VPU(12)상에서 실행하고 있는 프로그램으로부터 직접 볼 수 있는 것은 실효 어드레스(EA; Effective Address) 공간이다. EA는 세그먼트 테이블(50)에 의해 가상어드레스(VA; Virtual Address) 공간에 매핑된다. 더욱이, VA는 페이지 테이블(60)에 의해 실어드레스 공간에 매핑된다. 이 RA가 도 4에서 설명한 바와 같은 구조를 갖추고 있다.
MPU(11)는 제어레지스터 등의 하드웨어 기구에 의해, 예컨대 각 VPU(12)의 레지스터의 읽고 쓰기, 각 VPU(12)의 프로그램의 실행개시/정지 등의 각 VPU(12)의 관리를 행할 수 있다. 또, MPU(11)와 VPU(12)간, 혹은 어떤 VPU(12)와 다른 VPU(12)간의 통신이나 동기는 메일박스나 이벤트 플래그 등의 하드웨어 기구에 의해 행할 수 있다.
이 실시형태의 계산기 시스템은 종래 하드웨어에서 실현되고 있는 바와 같은 실시간성의 요구가 엄격한 기기의 동작을 소프트웨어를 이용하여 실현하는 것을 가능하게 한다. 예컨대, 어떤 VPU(12)가 어떤 하드웨어를 구성하는 어떤 몇개의 하 드웨어 컴포넌트에 대응하는 연산처리를 실행하고, 그것과 병행하여 다른 VPU(12)가 다른 몇개의 하드웨어 컴포넌트에 대응하는 연산처리를 실행한다.
도 6은 디지털 텔레비전 방송의 수신기의 간략화한 하드웨어 구성을 나타내고 있다. 도 6에 있어서는, 수신한 방송신호는 DEMUX(디멀티플렉서)회로(101)에 의해 음성데이터와 영상데이터와 자막데이터 각각에 대응하는 압축부호화된 데이터 스트림으로 분해된다. 압축부호화된 음성데이터 스트림은 A-DEC(음성디코더)회로(102)에 의해 디코드된다. 압축부호화된 영상데이터 스트림은 V-DEC(영상디코더)회로(103)에 의해 디코드된다. 디코드된 영상데이터 스트림은 PROG(프로그레시브 변환)회로(105)로 전송되고, 그 때 프로그레시브 영상신호로 변환하기 위한 프로그레시브 변환처리가 실시된다. 프로그레시브 변환된 영상데이터 스트림은 BLEND(화상합성)회로(106)로 전송된다. 자막데이터 스트림은 TEXT(자막처리)회로(104)에 의해 자막의 영상으로 변환된 후, BLEND회로(106)로 전송된다. BLEND회로(106)는 PROG회로(105)로부터 전송되어 오는 영상과 TEXT회로(104)로부터 전송되어 오는 자막영상을 합성하여 영상 스트림으로서 출력한다. 이 일련의 처리가 영상의 프레임 레이트(예컨대, 1초동안 30콤마, 32콤마, 또는 60콤마)에 따라 반복실행된다.
도 6과 같은 하드웨어의 동작을 소프트웨어로 실행하기 위해, 본 실시형태에서는, 예컨대 도 7에 나타낸 바와 같이 각 하드웨어의 동작을 소프트웨어로서 실현한 프로그램 모듈(100)을 준비한다. 이 프로그램 모듈(100)은 도 6의 DEMUX회로(101), A-DEC회로(102), V-DEC회로(103), TEXT회로(104), PROG회로(105) 및 BLEND회로(106)에 대응하는 처리를 계산기 시스템에 실행시키는 어플리케이션 프로그램으로서, 멀티스레드 프로그래밍을 이용하여 기술되어 있다. 이 프로그램 모듈(100)은 각각 스레드로서 실행되는 복수의 프로그램(복수의 루틴군)으로 구성되어 있다. 즉, 프로그램 모듈(100)에는 DEMUX 프로그램(111), A-DEC 프로그램(112), V-DEC 프로그램(113), TEXT 프로그램(114), PROG 프로그램(115) 및 BLEND 프로그램(116)이 포함되어 있다. DEMUX 프로그램(111), A-DEC 프로그램(112), V-DEC 프로그램(113), TEXT 프로그램(114), PROG 프로그램(115) 및 BLEND 프로그램(116)은 각각 도 6의 DEMUX회로(101), A-DEC회로(102), V-DEC회로(103), TEXT회로(104), PROG회로(105) 및 BLEND회로(106)에 대응하는 처리요소 각각에 대응하는 수순을 기술한 프로그램으로서, 각각 스레드로서 실행된다. 즉, 프로그램 모듈(100)의 실행시에는 DEMUX 프로그램(111), A-DEC 프로그램(112), V-DEC 프로그램(113), TEXT 프로그램(114), PROG 프로그램(115) 및 BLEND 프로그램(116) 각각에 대응하는 스레드가 생성되고, 생성된 스레드 각각이 1이상의 VPU(12)에 디스패치(dispatch)되어 실행된다. VPU(12)의 로컬기억장치(32)에는 그 VPU(12)에 디스패치된 스레드에 대응하는 프로그램이 로드되고, 스레드는 로컬기억장치(32)상의 프로그램을 실행한다. 디지털 텔레비전 방송의 수신기를 구성하는 하드웨어 모듈군 각각에 대응하는 프로그램(111~116)과, 구성기술(117)이라 불리는 데이터를 패키지화한 것이 디지털 텔레비전 방송의 수신기를 실현하는 프로그램 모듈(100)로 된다.
구성기술(117)은 프로그램 모듈(100)내의 각 프로그램(스레드)을 어떻게 조합하여 실행해야 할지를 나타내는 정보로서, 프로그램(111~116)간의 입출력 관계 및 각 프로그램의 처리에 필요한 코스트(시간) 등을 나타낸다. 도 8에는 구성기술(117)의 예를 나타내고 있다.
도 8의 구성기술(117)의 예에서는 스레드로서 동작하는 각 모듈(프로그램 모듈(100)내의 각 프로그램)에 대해 그 입력에 관련되는 모듈, 그 출력이 관련되는 모듈, 그 모듈의 실행에 요하는 코스트, 출력이 관련되는 모듈 각각으로의 출력에 필요한 버퍼사이즈가 기술되어 있다. 예컨대, 번호 ③의 V-DEC 프로그램은 번호 ①의 DEMUX 프로그램의 출력을 입력으로 하고, 그 출력은 번호 ⑤의 PROG 프로그램을 향하고 있으며, 그 출력에 필요한 버퍼는 1MB이고, 번호 ③의 V-DEC 프로그램 자체의 실행코스트는 50인 것을 나타내고 있다. 또한, 실행에 필요한 코스트는 실행에 필요한 시간(실행기간)이나 단계수 등을 단위로 해서 기술할 수 있다. 또, 어떤 가상적인 사양의 VPU로 실행한 경우의 시간을 단위로 하는 것도 가능하다. 계산기에 따라 VPU의 사양이나 처리성능이 다른 경우도 있기 때문에, 이와 같이 가상적인 단위를 설계하여 코스트를 표현하는 것은 바람직한 형태이다. 도 8에 나타낸 구성기술(117)에 따라 실행하는 경우의 프로그램간의 데이터의 흐름은 도 9와 같다.
더욱이, 구성기술(117)에는 프로그램(111~116) 각각에 대응하는 스레드간의 결합속성을 나타내는 결합속성 정보가 스레드 파라미터로서 기술되어 있다. 또한, 스레드 파라미터는 프로그램(111~116)내에 코드로서 직접 기술하는 것도 가능하다.
다음으로, 도 10, 도 11을 참조하여 프로그램(111~116)이 본 실시형태의 계산기 시스템에 의해 어떻게 실행되는지를 설명한다. 여기에서는, VPU0과 VPU1의 2개의 VPU(12)가 계산기 시스템에 설치되어 있는 구성을 상정한다. 매초 30프레임으로 영상을 표시하는 경우의 각 VPU(12)에 대한 프로그램의 할당을 시간에 따라 기입한 것이 도 10이다. 여기에서는, 주기 1 동안에 1프레임만큼의 음성과 영상을 출력하고 있다. 먼저, VPU0에서 DEMUX 프로그램이 처리를 행하고, 그 결과의 음성과 영상 및 자막의 데이터를 버퍼에 기입한다. 그 후, VPU1에서 A-DEC 프로그램과 TEXT 프로그램을 순차 실행하여 각각의 처리결과를 버퍼에 기입한다. VPU0에서는, 다음으로 V-DEC 프로그램이 영상데이터의 처리를 행하여 결과를 버퍼에 기입한다. VPU0에서는, 이어서 PROG 프로그램이 처리를 행하여 결과를 버퍼에 기입한다. 이 시점에서, VPU1에서의 TEXT의 처리는 끝나고 있기 때문에, 최후의 BLEND 프로그램의 실행을 VPU0에서 행하여 최종적인 영상데이터를 작성한다. 이 처리의 흐름을 매주기 반복하도록 실행한다.
여기에서 설명한 바와 같이, 소망하는 동작을 지체없이 행하도록 각 VPU(12)상에서 언제, 어떤 프로그램을 실행할지를 결정하는 작업을 스케줄링이라고 부른다. 스케줄링을 행하는 모듈을 스케줄러라고 부른다. 본 실시형태에서는 프로그램 모듈(100)내에 포함되는 상술한 구성기술(117)에 기초하여 스케줄링이 행해진다. 즉, 스케줄링 처리에서는 구성기술(117)에 기초하여 복수의 프로그램(111~116)을 실행하는 복수의 스레드 각각의 실행개시 타이밍 및 실행기간이 결정되고, 복수의 스레드 각각이 1이상의 VPU(12)에 할당된다. 프로그램 모듈(100)의 실행시에는 이하의 처리가 행해진다.
1. VPU 실행환경(401)은 프로그램 모듈(100)을 그것이 기억되어 있는 외부기 억장치 또는 메모리(13)로부터 입력하고, 구성기술(117)을 읽어들인다.
2. VPU 실행환경(401)은 구성기술(117)에 기초하여 프로그램 모듈(100)내의 복수의 프로그램(111~116)을 실행하기 위한 복수의 스레드(DEMUX, V-DEC, A-DEC, TEXT, PROG, BLEND) 각각의 실행개시 타이밍 및 실행기간을 결정함으로써, 복수의 스레드(DEMUX, V-DEC, A-DEC, TEXT, PROG, BLEND)를 1이상의 VPU에 할당하여 실행한다.
이와 같이, 본 실시형태의 실시간 처리시스템에서는, 프로그램 모듈(100)에 포함되는 구성기술(117)에 기초하여 복수의 프로그램(111~116)을 실행하는 복수의 스레드(DEMUX, V-DEC, A-DEC, TEXT, PROG, BLEND) 각각의 실행개시 타이밍 및 실행기간이 결정되기 때문에, 프로그램의 코드내에 각각의 처리의 시간적인 제약조건을 상세히 기술하지 않아도 실시간 처리를 실행하기 위한 스레드군을 효율좋게 스케줄링하는 것이 가능해진다.
도 11은 매초 60프레임으로 표시하는 경우의 실행상태를 나타내고 있다. 도 10과 다른 점은, 도 10에서는 매초 30프레임이었기 때문에, 1주기(1/30초)에서 1프레임만큼의 처리를 완료할 수 있었던 것에 반해, 도 11에서는 매초 60프레임을 처리할 필요가 있다는 점이다. 즉, 1주기(1/60초)에서는 1프레임만큼의 처리를 완료할 수 없기 때문에, 도 11에서는 복수(여기에서는 2) 주기에 걸친 소프트웨어 파이프라인 처리를 행하고 있다. 에컨대, 주기 1 이전에 입력된 신호에 대해 VPU0에서 DEMUX 처리와 V-DEC 처리를 행한다. 그 후, 주기 2에 있어서 VPU1에서 A-DEC, TEXT, PROG, BLEND의 각 처리를 행하여 최종적인 영상데이터를 출력한다. 주기 2에서는 VPU0은 다음의 프레임의 DEMUX와 V-DEC의 처리를 행하고 있다. 이와 같이, VPU0에 의한 DEMUX와 V-DEC의 처리와, VPU1에 의한 A-DEC, TEXT, PROG, BLEND의 처리를 2주기에 걸쳐 파이프라인적으로 실행한다.
또한, 도 7에 나타낸 프로그램 모듈(100)은 본 실시형태의 계산기 시스템을 짜넣은 기기내의 플래시 ROM이나 하드디스크에 미리 기록해 두어도 좋지만, 네트워크를 매개로 유통시키도록 해도 좋다. 이 경우, 본 실시형태의 계산기 시스템에 의해 실행되는 처리의 내용은 네트워크를 매개로 다운로드한 프로그램 모듈의 종류에 따라 결정된다. 따라서, 예컨대 본 실시형태의 계산기 시스템을 짜넣은 기기에 여러 가지 전용 하드웨어 각각에 대응하는 실시간 처리를 실행시킬 수 있다. 예컨대, 새로운 콘텐츠의 재생에 필요한 새로운 플레이어 소프트웨어나 디코더 소프트웨어나 암호 소프트웨어 등을 본 실시형태의 계산기 시스템에서 실행가능한 프로그램 모듈로서 콘텐츠와 함께 배포함으로써, 본 실시형태의 계산기 시스템을 탑재한 기기라면 어떠한 기기라도 그 능력이 허용하는 범위내에서 그 콘텐츠를 재생할 수 있다.
(오퍼레이팅 시스템)
본 계산기 시스템에서는, 시스템내에 OS(오퍼레이팅 시스템)를 1개만 실장하는 경우에는, 도 12에 나타낸 바와 같이 그 OS(201)가 모든 실자원(예컨대, MPU(11), VPU(12), 메모리(14), 입출력 제어장치(15), 입출력장치(16) 등)을 관리한다.
한편, 가상계산기 방식을 이용하여 복수의 OS를 동시에 동작시키는 것도 가능하다. 이 경우에는 도 13에 나타낸 바와 같이, 먼저 가상계산기 OS(301)를 실장하고, 그것이 모든 실자원(예컨대, MPU(11), VPU(12), 메모리(14), 입출력 제어장치(15), 입출력장치(16) 등)을 관리한다. 가상계산기 OS(301)는 호스트 OS라고 불리우는 경우도 있다. 더욱이, 가상계산기 OS(301)상에 1개 이상의 OS(게스트 OS라고도 칭한다)를 실장한다. 각 게스트 OS(302, 303)는 도 14에 나타낸 바와 같이, 가상계산기 OS(301)에 의해 제공되는 가상적인 계산기 자원으로 구성되는 계산기상에서 동작하고, 게스트 OS(302, 303)가 관리하는 어플리케이션 프로그램에 각종 서비스를 제공한다. 도 14의 예에서는 게스트 OS(302)는 1개의 MPU(11)와 2개의 VPU(12) 및 메모리(14)로 구성되는 계산기상에서 동작하고 있다고 생각하고 있고, 게스트 OS(303)는 1개의 MPU(11)와 4개의 VPU(12) 및 메모리(14)로 구성되는 계산기상에서 동작하고 있다고 생각하고 있다. 게스트 OS(302)에서 본 VPU(12)나, 게스트 OS(303)에서 본 VPU(12)가 실제로는 실자원의 어느 VPU(12)에 대응하고 있는지는 가상계산기 OS(301)가 관리하고 있다. 게스트 OS(302, 303)는 그 대응을 의식할 필요는 없다.
가상계산기 OS(301)는 계산기 시스템 전체의 자원을 시분할로 각 게스트 OS(302, 303)에 할당하도록 게스트 OS(302, 303)의 스케줄링을 행한다. 예컨대, 게스트 OS(302)가 실시간 처리를 행하는 것으로 하자. 예컨대, 1초 동안 30회, 올바른 페이스로 처리를 행하고자 하는 경우에는, 각 게스트 OS(302)가 그 파라미터를 가상계산기 OS(301)에 설정한다. 가상계산기 OS(301)는 1/30초에 1회, 확실하게 그 게스트 OS(301)에 필요한 만큼의 처리시간이 할당되도록 스케줄링을 행한다. 실시간성을 요구하지 않는 처리를 행하는 게스트 OS에는 실시간성을 요구하는 게스트 OS보다도 낮은 우선도로 처리시간의 할당을 행하도록 스케줄링이 행해진다. 도 15는 시간축을 횡으로 취하여 게스트 OS(302)와 게스트 OS(303)가 절환되면서 동작하고 있는 상태를 나타내고 있다. 게스트 OS(302)가 동작하고 있는 동안은 MPU(11)와 모든 VPU(12)가 게스트 OS(302)의 자원으로서 사용되고, 게스트 OS(303)가 동작하고 있는 동안은 MPU(11)와 모든 VPU(12)가 게스트 OS(303)의 자원으로서 사용된다.
도 16은 다른 동작모드를 나타내고 있다. 타겟 어플리케이션에 따라서는 VPU(12)를 계속 점유하여 이용하고자 하는 경우가 있다. 예컨대, 항상 데이터나 이벤트를 계속 감시하는 것이 필요한 어플리케이션이 이에 상당한다. 이러한 경우에는, 특정의 VPU(12)를 특정의 게스트 OS에 의해 점유하도록 가상계산기 OS(301)의 스케줄러가 스케줄 관리한다. 도 16에서는 VPU4를 게스트 OS(302)의 전용자원에 지정한 경우의 예이다. 가상계산기 OS(301)가 게스트 OS(302; OS1)와 게스트 OS(303; OS2)를 절환해도 VPU4는 항상 게스트 OS(301; OS1)의 관리하에서 계속 동작한다.
복수의 VPU(12)를 이용하여 프로그램을 동작시키기 위해, 본 실시형태에서는 복수의 VPU(12) 각각에 할당하는 스레드를 스케줄링하기 위한 스케줄러를 포함하는, VPU 실행환경이라 불리는 소프트웨어 모듈을 이용한다. 본 계산기 시스템에 OS가 1개밖에 탑재되어 있지 않은 경우는 도 17에 나타낸 바와 같이 그 OS(201)에 VPU 실행환경(401)을 실장한다. 이 때, VPU 실행환경(401)은 OS(201)의 커넬(kernel)내에 실장할 수도 있고, 사용자 프로그램 레벨에서 실장할 수도 있으며, 양자로 분할해서 협조하여 동작하도록 실장할 수도 있다. 한편, 가상계산기 OS상에서 1개 혹은 복수의 OS를 동작시키는 경우, VPU 실행환경(401)을 실장하는 방식으로는 다음과 같은 방식이 있다.
1. 가상계산기 OS(301)내에 VPU 실행환경(401)을 실장하는 방식(도 18)
2. VPU 실행환경(401)을 가상계산기 OS(301)가 관리하는 1개의 OS로서 실장하는 방식(도 19). 도 19에서는 가상계산기 OS(301)상에서 동작하는 게스트 OS(304) 자체가 VPU 실행환경(401)이다.
3. 가상계산기 OS(301)가 관리하는 각 게스트 OS에 각각 전용의 VPU 실행환경(401)을 실장하는 방식(도 20). 도 20에 있어서는, 게스트 OS(302, 303)에 각각 VPU 실행환경(401, 402)이 실장되어 있다. VPU 실행환경(401, 402)은 가상계산기 OS(301)가 제공하는 게스트 OS간의 통신기능을 이용하여 필요에 따라 서로 제휴하여 동작한다.
4. 가상계산기 OS(301)가 관리하는 게스트 OS중 하나에 VPU 실행환경(401)을 실장하고, VPU 실행환경을 갖추지 않은 게스트 OS는 가상계산기 OS(301)가 제공하는 게스트 OS간의 통신기능을 이용하여 VPU 실행환경(401)을 갖춘 게스트 OS의 VPU 실행환경(401)을 이용하는 방식(도 21).
이들 방식의 장점은 이하와 같다.
방식 1의 장점
ㆍ가상계산기 OS가 갖춘 게스트 OS(가상계산기 OS가 관리하는 대상의 OS)의 스케줄링과, VPU(12)의 스케줄링을 일체화할 수 있기 때문에, 효율좋고 세밀한 스케줄링이 가능하여 자원을 유효하게 이용할 수 있다.
ㆍ복수의 게스트 OS간에서 VPU 실행환경을 공유할 수 있기 때문에, 새로운 게스트 OS를 도입하는 경우에 새로 VPU 실행환경을 만들지 않아도 좋다.
방식 2의 장점
ㆍ가상계산기 OS상에 있는 게스트 OS간에서 VPU(12)의 스케줄러를 공유할 수 있기 때문에, 효율좋고 세밀한 스케줄링이 가능하여 자원을 유효하게 이용할 수 있다.
ㆍ복수의 게스트 OS간에서 VPU 실행환경을 공유할 수 있기 때문에, 새로운 게스트를 도입하는 경우에 새로 VPU 실행환경을 만들지 않아도 좋다.
ㆍVPU 실행환경을 가상계산기 OS나 특정 게스트 OS에 의존하지 않고 만들 수 있기 때문에, 표준화가 쉽고, 교환하여 사용할 수도 있다. 특정의 짜넣은 기기에 적응한 VPU 실행환경을 만들고, 그 기기의 특성을 살린 스케줄링 등을 행함으로써 효율좋은 실행이 가능하다.
방식 3의 장점
ㆍ각 게스트 OS에 대해 VPU 실행환경을 최적으로 실장할 수 있기 때문에, 효율좋고 세밀한 스케줄링이 가능하여 자원을 유효하게 이용할 수 있다.
방식 4의 장점
ㆍ모든 게스트 OS가 VPU 실행환경을 실장할 필요가 없기 때문에, 새로운 게스트 OS를 추가하기 쉽다.
이와 같이, 어느 방식이라도 VPU 실행환경을 실장할 수 있다. 또, 이 이외에도 적당히 실시가능하다.
(서비스 프로바이더)
본 실시형태의 계산기 시스템에 있어서는, VPU 실행환경(401)은 각 VPU(12)에 관련하는 각종 자원(각 VPU의 처리시간, 메모리, 접속장치의 밴드폭 등)의 관리와 스케줄링 기능 외에 여러 가지 서비스(네트워크를 이용한 통신기능, 파일의 입출력기능, 코덱 등의 라이브러리 기능의 호출, 사용자와의 인터페이스 처리, 입출력 디바이스를 이용한 입출력처리, 날짜나 시간의 독출 등)를 제공한다. 이들 서비스는, VPU(12)상에서 동작하는 어플리케이션 프로그램으로부터 호출되고, 간단한 서비스의 경우에는 그 VPU(12)상의 서비스 프로그램에서 처리된다. 그러나, 통신이나 파일의 처리 등 VPU(12)만으로는 처리할 수 없는 서비스에 관해서는, MPU(11)상의 서비스 프로그램에 의해 처리한다. 이러한 서비스를 제공하는 프로그램을 서비스 프로바이더(SP)라고 칭한다.
도 22에 VPU 실행환경의 하나의 실시예를 나타낸다. VPU 실행환경의 주요부분은 MPU(11)상에 존재한다. 이것이 MPU측 VPU 실행환경(501)이다. 각 VPU(12)상에는 그 VPU(12)내에서 처리가능한 서비스를 실행하는 최소한의 기능만을 갖춘 VPU측 VPU 실행환경(502)이 존재한다. MPU측 VPU 실행환경(501)의 기능은 크게 VPU 콘트롤러(511)와 서비스 브로커(512) 2개로 나뉘어진다. VPU 콘트롤러(511)는 주로 각 VPU(12)에 관련된 각종 자원(VPU의 처리시간, 메모리, 가상공간, 접속장치의 밴드폭 등)의 관리기구나 동기기구나, 시큐리티의 관리기구나, 스케줄링 기능을 제공한다. 스케줄링 결과에 기초하여 VPU(12)상의 프로그램의 디스패치를 행하는 것은 이 VPU 콘트롤러(511)이다. 서비스 브로커(512)는 VPU(12)상의 어플리케이션이 호출한 서비스 요구를 받아 적당한 서비스 프로그램(서비스 프로바이더)을 호출하여 그 서비스를 제공한다.
VPU측 VPU 실행환경(502)은 주로 VPU(12)상의 어플리케이션 프로그램이 호출한 서비스 요구를 받아 VPU(12)내에서 처리할 수 있는 것은 처리하고, 그렇지 않은 것은 MPU측 VPU 실행환경(501)의 서비스 브로커(512)에 처리를 의뢰하는 동작을 한다.
도 23에 VPU측 VPU 실행환경(502)이 서비스 요구를 처리하는 수순을 나타낸다. VPU측 VPU 실행환경(502)은 어플리케이션 프로그램으로부터의 서비스 호출을 수취하면(단계 S101), VPU 실행환경(502)내에서 처리할 수 있는 서비스인지 아닌지를 판별하며(단계 S102), 처리할 수 있는 서비스라면 대응하는 서비스를 실행하여 결과를 호출하여 원상태로 되돌린다(단계 S103, S107). 한편, VPU 실행환경(502)내에서 처리할 수 있는 서비스가 아니라면, 해당하는 서비스를 실행가능한 서비스 프로그램이 VPU(12)상에서 실행가능한 프로그램으로서 등록되어 있는지의 여부를 판단한다(단계 S104). 등록되어 있다면, 당해 서비스 프로그램을 실행하고서 결과를 호출하여 원상태로 되돌린다(단계 S105, S107). 등록되어 있지 않다면, 서비스 브로커(512)에 처리를 의뢰하고, 그리고 서비스 브로커(512)로부터 되돌려지는 서비스의 결과를 호출하여 원상태로 되돌린다(단계 S106, S107).
도 24에 MPU측 VPU 실행환경(501)의 서비스 브로커(512)가 VPU측 VPU 실행환경(502)으로부터 요구된 서비스를 처리하는 수순을 나타낸다. 서비스 브로커(512)는 VPU측 VPU 실행환경(502)으로부터의 서비스 호출을 수취하면(단계 S111), VPU 실행환경(501)내에서 처리할 수 있는 서비스인지 아닌지를 판별하고(단계 S112), 처리할 수 있는 서비스라면 대응하는 서비스를 실행하고서 결과를 호출하여 원래의 VPU측 VPU 실행환경(502)으로 되돌린다(단계 S113, S114). 한편, VPU 실행환경(501)내에서 처리할 수 있는 서비스가 아니라면, 해당하는 서비스를 실행가능한 서비스 프로그램이 MPU(11)상에서 실행가능한 프로그램으로서 등록되어 있는지의 여부를 판단한다(단계 S114). 등록되어 있다면, 당해 서비스 프로그램을 실행하여 결과를 호출하여 원래의 VPU측 VPU 실행환경(502)으로 되돌린다(단계 S116, S114). 등록되어 있지 않다면, 에러를 호출하여 원래의 VPU측 VPU 실행환경(502)으로 되돌린다(단계 S117).
또한, VPU(12)에서 실행하는 프로그램이 발행하는 서비스 요구에는, 서비스의 실행결과의 응답을 되돌리는 것도 있으면, 요구를 낼 뿐 응답이 없는 것도 있다. 또, 응답처는 통상은 요구를 제시한 스레드이지만, 응답처로서 다른 스레드, 스레드 그룹, 혹은 프로세스를 지정할 수도 있다. 그 때문에, 서비스 요구의 메세지에는 응답처의 지정도 포함시키는 것이 바람직하다. 서비스 브로커(512)는 널리 사용되고 있는 오브젝트 요청 브로커를 이용하여 실현할 수 있다.
(실시간 처리)
본 실시형태의 계산기 시스템은 실시간 처리시스템으로서 기능한다. 이 경우, 그 실시간 처리시스템의 대상으로 하는 처리는 크게,
1. 하드 실시간 처리
2. 소프트 실시간 처리
3. 베스트 에포트 처리(논실시간 처리)의 3종류로 분류할 수 있다. 1과 2는 소위 실시간 처리라고 일컬어지는 경우이다. 본 실시형태의 실시간 처리시스템은 많은 기존의 OS와 마찬가지로 스레드와 프로세스의 개념을 갖고 있다. 여기에서는 먼저, 본 실시형태의 실시간 처리시스템에서의 스레드와 프로세스에 관해 설명한다.
스레드에는 다음의 3가지의 클래스가 있다.
1. 하드 실시간 클래스
이 스레드 클래스는, 그 시간요건(timing requirements)이 매우 중요한 바, 그 요건이 충족되지 않았을 때에 중대한 상황으로 되는 것과 같은 중요한 어플리케이션에 이용한다.
2. 소프트 실시간 클래스
이 스레드 클래스는, 예컨대 그 시간요건이 충족되지 않은 경우에 있어서도 그 품질이 저하하는 것뿐인 어플리케이션에 이용한다.
3. 베스트 에포트 클래스
이 스레드 클래스는 그 요건내에 일절의 시간요건을 포함하지 않는 어플리케이션에 이용한다.
스레드는 본 실시간 처리시스템내에 있어서 처리를 실행하는 실체이다. 스레드에는 그 스레드가 실행하는 프로그램이 관련지워져 있다. 각 스레드는 스레드 콘텍스트라고 부르는 각각의 스레드에 고유의 정보를 유지하고 있다. 스레드 콘텍스트에는, 예컨대 프로세서의 레지스터의 값이나 스택 등의 정보가 포함되어 있다.
본 실시간 처리시스템에 있어서는, MPU 스레드와 VPU 스레드 2종류의 스레드가 존재한다. 이들 2개의 스레드는 그 스레드가 실행되는 프로세서(MPU(11)나 VPU(12))에 의해 분류되어 있고, 스레드로서의 모델은 완전히 같다. VPU 스레드의 스레드 콘텍스트에는 VPU(12)의 로컬기억장치(32)의 내용이나, 메모리 콘트롤러(33)가 갖춘 DMA 콘트롤러의 상태 등도 포함한다.
복수의 스레드를 그룹으로서 합친 것을 스레드 그룹이라고 칭한다. 스레드 그룹은 그룹에 포함되는 스레드 전체에 대해 같은 속성을 제공하는 등의 처리를 효율좋고 간단하게 할 수 있는 장점이 있다. 하드 실시간 클래스 또는 소프트 실시간 클래스의 스레드 그룹은 밀결합 스레드 그룹(tightly coupled thread group)과 소결합 스레드 그룹(loosely coupled thread group)의 2종류로 크게 나뉘어진다. 밀결합 스레드 그룹과 소결합 스레드 그룹은 스레드 그룹에 부가된 속성정보(결합속성정보)에 의해 식별된다. 어플리케이션 프로그램내의 코드 또는 상술한 구성기술에 의해 스레드 그룹의 결합속성을 명시적으로 지정할 수 있다.
밀결합 스레드 그룹은 서로 협조하여 동작하는 복수의 스레드의 집합으로 구성되는 스레드 그룹이다. 즉, 밀결합 스레드 그룹은 그 그룹에 속하는 스레드군이 서로 밀접하게 제휴하여 동작하는 것을 나타낸다. 밀접한 제휴는, 예컨대 빈번하게 스레드 사이에서 통신 혹은 동기처리 등의 상호작용(interaction)을 행하거나, 혹은 레이턴시(latency; 지연)가 작은 상호작용을 필요로 하는 경우 등이다. 한 편, 소결합 스레드 그룹은 밀결합 스레드 그룹에 비해 그 그룹에 속하는 스레드군 사이의 밀접한 제휴가 불필요한 스레드 그룹이고, 스레드군은 메모리(14)상의 버퍼를 매개로 데이터 주고받기를 위한 통신을 행한다.
(밀결합 스레드 그룹)
도 25에 나타낸 바와 같이, 밀결합 스레드 그룹에 속하는 스레드군에는 각각 다른 VPU가 할당되고, 각 스레드가 동시에 실행된다. 밀결합 스레드 그룹에 속하는 스레드를 밀결합 스레드라고 칭한다. 이 경우, 밀결합 스레드 그룹에 속하는 밀결합 스레드 각각의 실행기간이 그들 밀결합 스레드의 갯수와 동수인 VPU 각각에 대해 예약되고, 그들 밀결합 스레드가 동시에 실행된다. 도 25에 있어서는, 어떤 밀결합 스레드 그룹에 스레드 A, B의 2개가 밀결합 스레드로서 포함되어 있고, 그들 스레드 A, B가 각각 VPU0, VPU1에 의해 동시에 실행되고 있는 상태를 나타내고 있다. 스레드 A, B를 각각 다른 VPU에 의해 동시에 실행하는 것을 보증함으로써, 각 스레드는 상대 스레드가 실행되고 있는 VPU의 로컬기억장치나 제어 레지스터를 통해 상대 스레드와의 통신을 직접적으로 행할 수 있다. 도 26은 스레드 A, B가 각각 실행되는 VPU0, VPU1의 로컬기억장치를 매개로 스레드 A, B간의 통신이 실행되는 상태를 나타내고 있다. 이 경우, 스레드 A가 실행되는 VPU0에 있어서는 그 스레드 A의 EA 공간의 일부에 통신상대 스레드 B가 실행되는 VPU1의 로컬기억장치(32)에 대응하는 RA 공간이 매핑된다. 이 매핑을 위한 어드레스 변환은 VPU0의 메모리 콘트롤러(33)내에 설치된 어드레스 변환 유닛(331)이 세그먼트 테이블 및 페이지 테이블을 이용하여 실행한다. 스레드 B가 실행되는 VPU1에 있어서는, 그 스레드 B의 EA공간의 일부에 통신상대 스레드 A가 실행되는 VPU0의 로컬기억장치(32)에 대응하는 RA공간이 매핑된다. 이 매핑을 위한 어드레스 변환은 VPU1의 메모리 콘트롤러(33)내에 설치된 어드레스 변환 유닛(331)이 세그먼트 테이블 및 페이지 테이블을 이용하여 실행한다. 도 27은 VPU0상에서 실행되는 스레드 A가 자신의 EA공간에 스레드 B가 실행되는 VPU1의 로컬기억장치(LS1; 32)를 매핑하고, VPU1상에서 실행되는 스레드 B가 자신의 EA공간에 스레드 A가 실행되는 VPU0의 로컬기억장치(LS0; 32)를 매핑한 상태를 나타낸다. 예컨대, 스레드 A는 스레드 B에 넘겨줘야 할 데이터가 로컬기억장치(LS0)상에 준비가능한 시점에서 그것을 나타내는 프래그를 로컬기억장치(LS0) 또는 스레드 B가 실행되는 VPU1의 로컬기억장치(LS1)에 세트한다. 스레드 B는 그 플래그의 세트에 응답하여 로컬기억장치(LS0)상의 데이터를 독출(read)한다.
이와 같이, 결합속성정보에 따라 밀결합관계에 있는 스레드를 특정할 수 있도록 함과 더불어, 밀결합관계에 있는 스레드 A, B가 각각 다른 VPU에 의해 동시에 실행되는 것을 보증함으로써, 스레드 A, B간의 통신, 동기에 관한 상호작용을 보다 경량이면서 지연없이 행하는 것이 가능하게 된다.
(소결합 스레드 그룹)
소결합 스레드 그룹에 속하는 스레드군 각각의 실행시간은 그들 스레드군 사이의 입출력관계에 따라 결정되고, 가령 실행순서의 제약이 없는 스레드끼리라고 하더라도 그것들이 동시에 실행되는 것은 보증되지 않는다. 소결합 스레드 그룹에 속하는 스레드를 소결합 스레드라고 칭한다. 도 28에 있어서는, 어떤 소결합 스레드 그룹에 스레드 C, D의 2개가 소결합 스레드로서 포함되어 있고, 그들 스레드 C, D가 각각 VPU0, VPU1에 의해 실행되고 있는 상태를 나타내고 있다. 도 28에 나타낸 바와 같이, 각 스레드의 실행시간은 제각각으로 된다. 스레드 C, D간의 통신은 도 29에 나타낸 바와 같이, 메인메모리(14)상에 준비한 버퍼를 매개로 행해진다. 스레드 C는 로컬기억장치(LS0)에 준비한 데이터를 DMA전송에 의해 메인메모리(14)상에 준비한 버퍼에 기입하고, 스레드 D는 그 개시시에 DMA전송에 의해 메인메모리(14)상의 버퍼로부터 로컬기억장치(LS1)로 데이터를 읽어들인다.
(프로세스와 스레드)
프로세스는 도 30에 나타낸 바와 같이, 하나의 어드레스공간과 하나 이상의 스레드로 구성된다. 하나의 프로세스에 포함되는 스레드수와 종류는 어떠한 조합이라도 무방하다. 예컨대, VPU 스레드만으로 구성되는 프로세스도 구축가능하고, VPU 스레드와 MPU 스레드가 혼재(混在)하는 프로세스도 구축가능하다. 스레드가 스레드 고유의 정보로서 스레드 콘텍스트를 유지하고 있는 것과 마찬가지로 프로세스도 프로세스 고유의 정보로서 프로세스 콘텍스트를 유지한다. 이 프로세스 콘텍스트에는 프로세스에 고유인 어드레스공간과, 프로세스가 포함되어 있는 전체 스레드의 스레드 콘텍스트가 포함된다. 프로세스의 어드레스공간은 프로세스에 속하는 전체 스레드 사이에서 공유할 수 있다. 하나의 프로세스는, 복수의 스레드 그룹을 포함할 수 있다. 그러나, 하나의 스레드 그룹이 복수의 프로세스에 속할 수는 없다. 이 때문에, 어떤 프로세스에 속하는 스레드 그룹은 그 프로세스에 고유인 것으로 된다. 본 실시형태의 실시간 처리시스템에 있어서, 스레드를 새로 생성하는 방식에는 스레드 우선 모델(Thread first model)과 어드레스공간 우선 모델(Address space first model)의 2종류가 있다. 어드레스공간 우선 모델은 기존의 OS에서 채용되고 있는 것과 마찬가지의 방식으로, MPU 스레드에도 VPU 스레드에도 적용할 수 있다. 한편, 스레드 우선 모델은 VPU 스레드밖에 적용할 수 없는 방식으로, 본 발명의 실시간 처리시스템에 있어서 특유의 방식이다. 스레드 우선 모델에서는, 기존의 스레드(새로 스레드를 만들고 싶다고 생각하고 있는 측의 스레드. 새로 만드는 스레드의 근본이 되는 스레드)는 먼저 신규 스레드가 실행하는 프로그램을 지정하고, 신규 스레드에 프로그램의 실행을 개시시킨다. 이 때, 프로그램은 VPU(12)의 로컬기억장치에 격납되고, 소정의 실행개시번지로부터 처리가 개시된다. 이 시점에서는 이 신규 스레드에는 어드레스공간이 관련지워져 있지 않기 때문에, 자신의 로컬기억장치는 억세스할 수 있지만, 메모리(14)는 억세스할 수 없다. 그 후, 신규 스레드는 필요에 따라 자신에서 VPU 실행환경의 서비스를 호출해 어드레스공간을 생성하여 관련지우거나, MPU(11)측의 처리에 의해 어드레스공간을 관련지우거나 하여 메모리(14)에 억세스할 수 있게 된다. 어드레스공간 우선 모델에서는, 기존의 스레드는 새로 어드레스공간을 생성하거나 혹은 기존의 어드레스공간을 지정하여 그 어드레스공간에 신규 스레드가 실행하는 프로그램을 배치한다. 그리고, 신규 스레드에 그 프로그램의 실행을 개시시킨다. 스레드 우선 모델의 장점은, 로컬기억장치만으로 동작하기 때문에, 스레드의 생성이나 디스패치나 종료처리 등의 오버헤드를 작게 할 수 있다는 점이다.
(스레드군의 스케줄링)
다음으로, 도 31의 플로우차트를 참조하여 VPU 실행환경(401)에 의해 실행되는 스케줄링 처리에 대해 설명한다. VPU 실행환경(401)내의 스케줄러는 스케줄 대상의 스레드군에 스레드 그룹 단위로 부가되어 있는 결합속성정보에 기초하여 스레드간의 결합속성을 체크하고(단계 S121), 각 스레드 그룹마다 그 스레드 그룹이 밀결합 스레드 그룹 및 소결합 스레드 그룹중 어느 것인지를 판별한다(단계 S122). 결합속성의 체크는, 프로그램 코드내의 스레드에 관한 기술 혹은 상술한 구성기술(117)내의 스레드 파라미터를 참조함으로써 행해진다. 이렇게 하여, 밀결합 스레드 그룹 및 소결합 스레드 그룹을 각각 특정함으로써, 스케줄 대상의 스레드군은 밀결합 스레드 그룹과 소결합 스레드 그룹으로 분리된다.
밀결합 스레드 그룹에 속하는 스레드군에 대한 스케줄링은 다음과 같이 행해진다. 즉, VPU 실행환경(401)내의 스케줄러는 스케줄 대상의 스레드군으로부터 선택된 밀결합 스레드 그룹에 속하는 스레드군이 각각 다른 VPU에 의해 동시에 실행되도록 그 밀결합 스레드 그룹에 속하는 스레드군과 동수의 VPU 각각의 실행기간을 예약하고, 스레드군을 그들 예약한 VPU 각각에 동시에 디스패치한다(단계 S123). 그리고, 스케줄러는 각 스레드가 실행되는 VPU내의 어드레스 변환 유닛(331)을 이용해서, 각 스레드의 EA공간의 일부에 협조하여 상호작용을 행하는 상대로 되는 다른 스레드가 실행되는 VPU의 로컬기억장치에 대응하는 RA공간을 매핑한다(단계 S124). 한편, 스케줄 대상의 스레드군으로부터 선택된 소결합 스레드 그룹에 속하는 소결합 스레드군에 대해서는 스케줄러는 그들 스레드군 사이의 입출력관계에 기초하여 그들 스레드군을 1이상의 VPU에 순차적으로 디스패치한다(단계 S125).
(로컬기억장치의 매핑)
본 실시형태의 실시간 처리시스템에 있어서, MPU 스레드와 VPU 스레드 사이, 혹은 VPU 스레드와 다른 VPU 스레드 사이에서 어떤 통신이나 동기를 행하면서 협조하여 동작을 행하는 경우에는, 협조상대 VPU 스레드의 로컬기억장치에 억세스할 필요가 있다. 예컨대, 보다 경량이고 고속인 동기기구는 로컬기억장치상에 동기변수를 할당하여 실장한다. 그 때문에, 어떤 VPU(12)의 로컬기억장치를 다른 VPU(12) 혹은 MPU(11)의 스레드가 직접 억세스할 필요가 있다. 도 4에 나타낸 예와 같이, 각 VPU(12)의 로컬기억장치가 실(實) 어드레스공간에 할당되어 있는 경우, 세그먼트 테이블이나 페이지 테이블을 적절히 설정하면, 상대 VPU(12)의 로컬기억장치를 직접 억세스할 수 있다. 그러나, 이 경우에 크게 2가지의 문제가 발생한다.
제1문제는, VPU 스레드의 디스패치처 VPU(12)의 변경에 관한 문제이다. 도 32와 같이, VPU 스레드 A와 B가 존재하고, 각각 VPU0과 VPU1에서 동작하고 있는 것으로 한다. 그리고, 이 스레드 A와 B는 서로의 스레드와 협조하려고 하기 때문에, 서로의 스레드의 LS(로컬기억장치)를 자신의 EA공간에 매핑하고 있는 것으로 한다. 또, VPU0, VPU1, VPU2의 LS0, LS1, LS2는 각각 도 32와 같이 RA공간에 존재하는 것으로 한다. 이 때, VPU 스레드 A가 자신의 EA공간에 매핑하고 있는 것은 VPU 스레드 B가 동작하고 있는 VPU의 LS, 즉 VPU1의 LS인 LS1이다. 반대로, VPU 스레드 B가 자신의 EA공간에 매핑하고 있는 것은 VPU 스레드 A가 동작하고 있는 VPU의 LS, 즉 VPU0의 LS인 LS0이다. 그 후, VPU 실행환경내의 스케줄러에 의해 VPU 스레드 A를 실행하는 VPU가 디스패치되고, VPU 스레드 A는 VPU2에서 동작하게 된 것으로 한다. 이 때, 이미 VPU 스레드 A는 VPU0에서는 동작하고 있지 않기 때문에, VPU 스레드 B가 자신의 EA공간에 매핑하고 있는 VPU0의 LS는 의미가 없어진다. 이 경우, 스레드 B가 스레드 A의 디스패치처 VPU가 변경된 것을 몰라도 좋도록 시스템은 어떤 방법으로 LS0에 매핑되어 있는 EA공간의 어드레스를 LS2에 매핑하고, 스레드 B로부터 스레드 A의 로컬기억장치로서 VPU2의 LS인 LS2가 보이도록 할 필요가 있다.
제2문제는 물리 VPU와 논리 VPU의 대응관계의 문제이다. VPU를 VPU 스레드에 할당할 때까지는 실제로는 2개의 레벨이 있다. 하나는 논리 VPU의 VPU 스레드로의 할당이고, 다른 하나는 물리 VPU의 논리 VPU로의 할당이다. 물리 VPU는 가상계산기 OS(301)가 관리하고 있는 물리적인 VPU(12)이다. 그리고, 논리 VPU라고 하는 것은 가상계산기 OS(301)가 게스트 OS 할당한 논리적인 VPU의 것이다. 이 관계는 도 14에도 나타내고 있다. 예컨대, VPU 실행환경(401)이 논리적인 VPU를 관리하는 경우, 도 32의 예에서 VPU 스레드의 할당대상으로 되는 VPU는 논리 VPU이다.
도 33은 이 2개의 레벨의 할당의 개념을 나타내고 있다. 직전에 설명한 제1문제는 도 33의 상단에 위치하는 VPU 스레드의 논리 VPU로의 할당문제에 상당한다. 제2문제인 물리 VPU의 논리 VPU로의 할당문제는 아래의 단에 위치하는 할당에 상당한다. 도 33에서는 4개의 물리 VPU에서 3개의 VPU를 선택하여 3개의 논리 VPU에 할당하고 있는 것을 나타내고 있다. 만일, 이 물리 VPU와 논리 VPU의 대응관계가 변화한 경우, VPU 스레드의 논리 VPU로의 할당이 변경되어 있지 않아도 적절한 설정의 변경이 필요하게 된다. 예컨대, 변경후의 논리 VPU의 LS에 대한 억세스가 올바른 물리 VPU의 LS를 가리키도록 LS에 대응하는 페이지 테이블 엔트리를 교체하는 등이다.
어떤 시각에, 도 34와 같이 물리 VPU1, 2, 3이 논리 VPU0, 1, 2에 각각 할당되어 있는 것으로 한다. 그리고, 논리 VPU1은 VPU 스레드 A에, 그리고 논리 VPU2는 VPU 스레드 B에 할당되어 있는 것으로 한다. 그리고, VPU 스레드 A와 B는 각각 서로 상대가 동작하고 있는 물리 VPU의 LS를 자신의 EA공간에 매핑하고 있는 것으로 한다. VPU 스레드 A의 EA공간에는 VPU 스레드 B가 실행되고 있는 물리 VPU3의 LS3이, 그리고 VPU 스레드 B의 EA공간에는 VPU 스레드 A가 실행되고 있는 물리 VPU2의 LS2가 매핑되어 있다. 그 후, 어떤 시각에 가상계산기 OS(301)에 의해 논리 VPU0, 1이 물리 VPU0, 1에 재할당된 것으로 한다. 그러면, 지금까지 VPU 스레드 A가 동작하고 있는 논리 VPU1은 물리 VPU2로부터 물리 VPU1로 변화한다. 물리 VPU의 VPU 스레드로의 할당은 변화하고 있지 않지만, 물리 VPU와 논리 VPU의 대응관계가 변화한 것으로 된다. 이 때문에, VPU 스레드 B가 EA공간에 매핑하고 있는 VPU 스레드 A가 동작하고 있는 VPU의 LS를, LS2로부터 LS1으로 변경하여 올바르게 억세스할 수 있도록 할 필요가 있다.
이들 2가지의 문제를 해결하기 위해, 본 실시형태의 실시간 처리시스템에서는, 스레드에서 본 EA공간의 고정 어드레스에, 먼저 상대 스레드를 실행하고 있는 VPU의 로컬기억장치가 매핑되어 보이도록 가상기억장치를 제어한다. 즉, VPU 스케줄러에 의한 논리 VPU의 디스패치시 및 가상계산기 OS 등에 의한 물리 VPU와 논리 VPU의 대응관계의 절환시에 적당히 페이지 테이블이나 세그먼트 테이블을 바꿔씀으로써, VPU상에서 동작하고 있는 스레드로부터는 항상 같은 번지에 상대 스레드를 실행하고 있는 VPU의 로컬기억장치가 보이도록 한다.
먼저, 2개의 스레드의 EA공간의 관계에 대해 설명하는 2개의 스레드의 EA공간은 다음의 3가지 중 어느 하나의 패턴으로 공유 혹은 비공유로 되어 있다.
1. 공유 EA형: 2개의 스레드 1, 2가 세그먼트 테이블도 페이지 테이블도 공유하고 있다(도 35).
2. 공유 VA형: 2개의 스레드 1, 2가 페이지 테이블은 공유하지만, 세그먼트 테이블은 공유하지 않고, 각각이 가지고 있다(도 36).
3. 비공유형: 2개의 스레드 1, 2는 페이지 테이블도 세그먼트 테이블도 공유하지 않고, 각각이 가지고 있다(도 37).
이하, 1의 공유 EA형을 예로, VPU의 로컬기억장치를 어떻게 매핑하도록 제어하는지에 대해 설명한다.
먼저, 도 38에 나타낸 바와 같이 VA 공간상에 각 논리 VPU에 대응한 영역을 형성하고, 거기에 그 논리 VPU가 대응지워져 있는 물리 VPU의 로컬기억장치가 매핑되도록 페이지 테이블을 설정한다. 이 예의 경우, 물리 VPU0, 1, 2가 각각 논리 VPU0, 1, 2에 대응지워져 있는 상태를 나타내고 있다. 다음으로, 스레드 A로부터는 스레드 B를 실행하고 있는 VPU의 로컬기억장치가 고정 어드레스인 세그먼트 a의 영역에 보이도록 세그먼트 테이블을 설정한다. 또, 스레드 B로부터는 스레드 A를 실행하고 있는 논리 VPU의 로컬기억장치가 고정 어드레스인 세그먼트 b에 보이도록 세그먼트 테이블을 설정한다. 이 예에서는, 스레드 A는 논리 VPU2에서, 스레드 B 는 논리 VPU1에서 실행하고 있는 상황을 나타내고 있다. 여기에서, VPU 실행환경(401)의 스케줄러가, 스레드 B를 논리 VPU0에 디스패치한 것으로 한다. 이 때, VPU 실행환경(401)은 도 39에 나타낸 바와 같이, 스레드 A로부터는 고정 어드레스인 세그먼트 a를 통해 스레드 B를 현재 실행하고 있는 논리 VPU0의 로컬기억장치를 보이도록 VPU 실행환경(401)은 세그먼트 테이블을 자동적으로 바꿔쓴다.
더욱이, 여기에서, 예컨대 가상계산기 OS(301)가 게스트 OS의 디스패치를 했기 때문에, 물리 VPU와 논리 VPU의 대응이 변화한 것으로 한다. 이 때, 예컨대 도 40에 나타낸 바와 같이 VPU 실행환경(401)은 페이지 테이블을 바꿔써서 VA공간상에 고정되어 있는 논리 VPU의 로컬기억장치의 영역이 올바른 물리 VPU의 로컬기억장치의 영역을 가리키도록 한다. 도 40의 예에서는 물리 VPU1, 2, 3이 논리 VPU0, 1, 2에 대응하도록 변경되었기 때문에, 페이지 테이블을 바꿔써서 현재의 올바른 매핑으로 되도록 하고 있다.
이와 같이, VPU 실행환경(401)의 스케줄러의 디스패치에 의해 스레드를 실행하는 논리 VPU가 변경된 경우에는, EA공간으로부터 VA공간으로의 매핑을 행하고 있는 세그먼트 테이블을 바꿔써서 제1문제를 해결하고 있다. 또, 가상계산기 OS(301) 등에 의해 물리 VPU와 논리 VPU의 대응이 변경된 경우는 VA공간으로부터 RA공간으로의 매핑을 행하고 있는 페이지 테이블을 바꿔써서 제2문제를 해결하고 있다.
이렇게 하여 상호작용을 행하는 상대 스레드가 실행되는 프로세서에 따라 실효 어드레스공간에 매핑되는 상대 스레드에 대응하는 프로세서의 로컬메모리가 자 동적으로 변경함으로써, 각 스레드는 상대 스레드가 디스패치되는 프로세서를 의식하는 일없이 상대 스레드와의 상호작용을 효율좋게 행할 수 있다. 따라서, 복수의 스레드를 효율좋게 병렬로 실행하는 것이 가능해진다.
이상, 공유 EA형의 경우의 예를 설명했지만, 2의 공유 VA형, 3의 비공유형에 대해서도, 세그먼트 테이블 또는 페이지 테이블을 바꿔씀으로써 마찬가지로 하여 제1문제 및 제2문제를 해결할 수 있다.
상기의 제1 및 제2문제를 해결하는 다른 방법에 대해 설명한다. 여기에서도, 공유 EA형의 경우를 예로 설명한다. 도 41에 나타낸 바와 같이, 협조하여 동작하는 복수의 VPU 스레드가 있는 경우, 그들 스레드를 실행하는 VPU의 로컬기억장치를 세그먼트상에 연속하여 매핑하도록 페이지 테이블과 세그먼트 테이블을 설정한다. 도 41의 예의 경우, 스레드 A는 물리 VPU2에서, 스레드 B는 물리 VPU0에서 실행되고 있고, 각각의 VPU의 로컬기억장치가 동일한 세그먼트에 연속하여 배치되도록 페이지 테이블과 세그먼트 테이블을 설정하고 있다. 여기에서, VPU 실행환경(401)의 스케줄러에 의해 스레드를 실행하는 논리 VPU가 디스패치되거나, 가상계산기 OS(301) 등에 의해 물리 VPU와 논리 VPU의 대응이 변경된 경우에는 각각의 변경이 스레드 A 및 스레드 B에 대해 은폐되도록 페이지 테이블을 바꿔써서 VA공간과 RA공간의 매핑을 변경한다. 예컨대, 도 42는 스레드 A를 실행하고 있는 VPU가 물리 VPU1으로, 스레드 B를 실행하고 있는 VPU가 물리 VPU3으로 변경된 경우의 매핑을 나타내고 있다. 이 변경이 행해져도 스레드 A 및 스레드 B로부터는 고정한 어드레스를 갖는 세그먼트내의 소정의 영역을 억세스함으로써, 항상 상대 스레드를 실행하고 있는 VPU의 로컬기억장치를 억세스할 수 있다.
다음으로, 도 43의 플로우차트를 참조하여 VPU 실행환경(401)에 의해 실행되는 어드레스 관리처리의 수순에 대해 설명한다. VPU 실행환경(401)은 각 스레드의 EA공간상의 고정 어드레스에 상대 스레드를 실행하고 있는 VPU의 로컬기억장치에 대응하는 RA공간을 매핑한다(단계 S201). 이 후, VPU 실행환경(401)은 상대 스레드의 디스패치처 VPU의 변경 혹은 논리 VPU와 물리 VPU의 대응관계의 변경에 기인하여 상대 스레드가 실행되는 VPU가 변경되었는지의 여부를 판별한다(단계 S202). 상대 스레드가 실행되는 VPU가 변경되었다면, VPU 실행환경(401)은 세그먼트 테이블 또는 페이지 테이블의 내용을 바꿔써서 각 스레드의 EA공간상의 고정 어드레스에 매핑되어 있는 로컬기억장치를 상대 스레드가 실행되는 VPU에 포함시켜 변경한다(단계 S203).
이제까지의 예에서는, 밀결합 스레드 그룹과 같이 서로 VPU에 의해 실행중인 스레드 사이에서 상대 스레드를 실행하고 있는 VPU의 로컬기억장치를 억세스하는 방식을 설명했다. 그러나, 소결합 스레드 그룹 등 협조하여 동작하는 스레드가 반드시 동시에 VPU에 할당되어 실행하고 있지 않은 경우도 존재한다. 그러한 경우에도, EA공간상에는 상대 스레드를 실행하고 있는 VPU(12)의 로컬기억장치를 매핑하는 영역은 존재하기 때문에, 그 영역을 이하와 같이 이용하여 대처한다.
제1방법: 상대 스레드가 실행중이 아닌 경우에는, 그 스레드에 대응하는 VPU의 로컬기억장치를 매핑하는 영역에 억세스하면, 스레드는 상대 스레드가 실행개시할 때까지 기다리도록 한다.
제2방법: 상대 스레드가 실행중이 아닌 경우에는, 그 스레드에 대응하는 VPU의 로컬기억장치를 매핑하는 영역에 억세스하면, 스레드는 예외 발생이나 에러코드에 의해 그 뜻을 인식한다.
제3방법: 스레드의 종료시에 그 스레드를 최후로 실행하고 있던 때의 로컬기억장치의 내용을 메모리에 보존해 두고, 그 스레드에 대응지워진 로컬기억장치를 가리키는 페이지 테이블 혹은 세그먼트 테이블의 엔트리로부터는 그 메모리영역을 가리키도록 매핑을 제어한다. 이 방식에 의해 상대 스레드가 실행중이 아니더라도 상대 스레드에 대응지워진 로컬기억장치가 마치 있는 것처럼 스레드의 실행을 계속할 수 있다. 도 44 및 도 45에 구체예를 나타낸다.
①: 지금 스레드 A, B가 각각 VPU0, 1에서 실행되고 있고, 스레드 B의 EA공간에는 상대 스레드 A가 실행되고 있는 VPU0의 로컬기억장치 LS0이 매핑되어 있는 것으로 한다.
②: 스레드 A의 종료시에는 스레드 A 또는 VPU 실행환경(401)은 스레드 A가 실행되고 있는 VPU0의 로컬기억장치 LS0의 내용을 메모리(14)에 보존한다(단계 S211).
③: VPU 실행환경(401)은 스레드 B의 EA공간에 매핑되어 있는 상대처 스레드 A의 로컬기억장치의 어드레스 공간을, VPU0의 LS0으로부터 LS0의 내용이 보존된 메모리(14)상의 메모리영역으로 변경한다(단계 S212). 이에 따라, 스레드 B는 상대 스레드 A가 실행중이 아니게 된 후도 그 동작을 계속할 수 있다.
④: 스레드 A에 재차 VPU가 할당되었을 때, VPU 실행환경(401)은 메모리(14)상의 메모리영역을 스레드 A가 실행되는 VPU의 로컬기억장치로 되돌린다(단계 S213). 예컨대, 스레드 A에 재차 VPU0이 할당되었을 때는 메모리(14)상의 메모리영역의 내용은 VPU0의 로컬기억장치 LS0으로 되돌려진다.
⑤: VPU 실행환경(401)은 스레드 B의 EA공간에 매핑되어 있는 상대처 스레드 A의 로컬깅거장치의 어드레스 공간을 스레드 A가 실행되는 VPU의 로컬기억장치로 변경한다(단계 S214). 예컨대, 스레드 A에 재차 VPU0이 할당되었을 때는 스레드 B의 EA공간에 매핑되어 있는 상대처 스레드 A의 로컬기억장치의 어드레스공간은 VPU0의 로컬기억장치 LS0으로 되돌려진다.
또한, 스레드 A에 VPU2가 할당되었을 때는, 메모리(14)상의 메모리영역의 내용은 VPU2의 로컬기억장치 LS2로 복원된다. 그리고, 스레드 B의 EA공간에 매핑되어 있는 상대처 스레드 A의 로컬기억장치의 어드레스공간은 VPU2의 로컬기억장치 LS2로 변경된다.
(스레드의 상태천이)
일반적으로 스레드는 생성되고 나서 소멸될 때까지, 예컨대 도 46에 나타낸 바와 같은 상태천이를 행한다. 도 46의 예에서는 이하의 7종류의 상태를 천이한다.
1. NOT EXISTENT 상태
논리적인 상태로서, 유효한 스레드에서는 이 상태는 없다.
2. DORMANT 상태
스레드는 생성되어 있지만, 아직 실행은 개시되고 있지 않다.
3. READY 상태
스레드가, 그 실행을 개시할 준비가 되어 있는 상태.
4. WAITING 상태
스레드가, 실행을 개시(재개)하기 위한 조건이 충족되기를 기다리고 있는 상태.
5. RUNNING 상태
스레드가, 실제로 VPU 또는 MPU상에서 실행되고 있는 상태.
6. SUSPENDED 상태
VPU 실행환경이나 다른 스레드에 의해 스레드가 강제적으로 그 실행을 중단 당하고 있는 상태.
7. WAITING-SUSPENDED 상태
WAITING 상태와 SUSPENDED 상태가 겹친 상태.
이들 7개의 상태간의 천이조건과, 그 천이에 따른 스레드 콘텍스트의 취급은 이하와 같이 된다.
<NOT EXISTENT 상태로부터 DORMANT 상태로의 천이>
ㆍ스레드의 작성에 의해 천이한다.
ㆍ스레드 콘텍스트가 작성된다. 단, 콘텍스트의 내용은 초기상태이다.
<DORMANT 상태로부터 NOT EXISTENT 상태로의 천이>
ㆍ스레드의 삭제에 의해 천이한다.
ㆍ스레드가 그 스레드 콘텍스트를 보존하도록 설정되어 있는 경우, 그 천이 에 의해 보존되어 있는 콘텍스트는 파기된다.
<DORMANT 상태로부터 WAITING 상태로의 천이>
ㆍ스레드가 실행환경에 대해 스레드의 스케줄링을 요청하면, 스레드의 상태는 DORMANT 상태로부터 WAITING 상태로 천이한다.
<WAITING 상태로부터 READY 상태로의 천이>
ㆍ스레드가 생기(生起)되는 것을 기다리고 있던 이벤트(예컨대, 동기나 통신, 타이머 등)가 생기된 경우에, 스레드의 상태는 WAITING 상태로부터 READY 상태로 천이한다.
<READY 상태로부터 RUNNING 상태로의 천이>
ㆍ스레드가, 실행환경에 따라 MPU 또는 VPU에 디스패치되면, 스레드의 상태는 READY 상태로부터 RUNNING 상태로 천이한다.
ㆍ스레드 콘텍스트가 로드된다. 또, 스레드 콘텍스트가 퇴피되어 있던 경우에는 복원된다.
<RUNNING 상태로부터 READY 상태로의 천이>
ㆍ스레드가 스레드의 실행을 가로채기 당하면, 스레드의 상태는 RUNNING 상태로부터 READY 상태로 천이한다.
<RUNNING 상태로부터 WAITING 상태로의 천이>
ㆍ스레드가, 동기나 통신 등의 기구를 이용하여 이벤트를 기다리기 위해 자신의 실행을 중단한 경우, 스레드의 상태는 RUNNING 상태로부터 WAITING 상태로 천이한다.
ㆍ모든 클래스의 스레드는 스레드 콘텍스트를 보존하도록 설정할 수 있다. 스레드가 스레드 콘텍스트를 보존하도록 설정되어 있는 경우는, RUNNING 상태로부터 WAITING 상태로 천이할 때에 실행환경에 따라 그 스레드의 스레드 콘텍스트가 퇴피된다. 이 스레드 콘텍스트는 DORMANT 상태로 천이하지 않는 한 유지되어 다음에 이 스레드가 RUNNING 상태로 천이할 때에 복원된다.
<RUNNING 상태로부터 SUSPENDED 상태로의 천이>
ㆍ스레드가, 실행환경이나 다른 스레드로부터의 지시 등에 따라 강제적으로 그 실행을 중단한 경우, 스레드의 상태는 RUNNING 상태로부터 SUSPENDED 상태로 천이한다.
ㆍ모든 클래스의 스레드는 스레드 콘텍스트를 보존하도록 설정할 수 있다. 스레드가 스레드 콘텍스트를 보존하도록 설정되어 있는 경우는, RUNNING 상태로부터 SUSPENDED 상태로 천이할 때에 실행환경에 따라 스레드 콘텍스트가 퇴피된다. 이 스레드 콘텍스트는 DORMANT 상태로 천이하지 않는 한 다음에 이 스레드가 RUNNING 상태로 천이할 때에 복원된다.
<RUNNING 상태로부터 DORMANT 상태로의 천이>
ㆍ스레드는 스레드 자신에서 그 실행을 종료한 경우에 RUNNING 상태로부터 DORMANT 상태로 천이한다.
ㆍ스레드가 그 스레드 콘텍스트를 보존하도록 설정되어 있는 경우, 이 천이에 의해 콘텍스트의 내용이 파기된다.
<WAITING 상태로부터 WAITING-SUSPENDED 상태로의 천이>
ㆍ스레드가 WAITING 상태에서 이벤트 등의 생기를 기다리고 있는 한창 때에 외부로부터 강제적으로 스레드의 실행을 중단당한 경우, 스레드의 상태는 WAITING 상태로부터 WAITING-SUSPENDED 상태로 천이한다.
<WAITING-SUSPENDED 상태로부터 WAITING 상태로의 천이>
ㆍ스레드가 WAITING-SUSPENDED 상태에 있는 한창 때에 외부로부터 스레드의 실행을 재개당한 경우, 스레드의 상태는 WAITING-SUSPENDED 상태로부터 WAITING 상태로 천이한다.
<WAITING-SUSPENDED 상태로부터 SUSPENDED 상태로의 천이>
ㆍ스레드는, 스레드가 WAITING 상태에 있을 때에 기다리고 있던 이벤트가 생기한 경우에, 스레드의 상태는 WAITING-SUSPENDED 상태로부터 SUSPENDED 상태로 천이한다.
<SUSPENDED 상태로부터 READY 상태로의 천이>
ㆍ스레드가, 외부로부터 스레드의 실행을 재개당했을 때에 스레드의 상태는 SUSPENDED 상태로부터 READY 상태로 천이한다.
<READY 상태로부터 SUSPENDED 상태로의 천이>
ㆍ스레드가, 외부환경에 의해 스레드의 실행을 중단당한 경우에 스레드의 상태는 READY 상태로부터 SUSPENDED 상태로 천이한다.
(스레드의 실행기간)
스레드에 실제로 VPU가 할당되어 처리를 실행하고 있는 RUNNING 상태의 기간을, 실행기간(execution term)이라고 칭한다. 일반적으로 스레드가 생성되고 나서 소멸될 때까지의 사이에는, 스레드는 복수의 실행기간을 갖는다. 도 47은 어떤 스레드의 생성으로부터 소멸까지의 시간축에 따른 상태 변화의 예를 나타내고 있는데, 이 예에서는 그 생존기간중에 2회의 실행기간이 있는 것을 나타내고 있다. 실행기간과 실행기간 사이의 콘텍스트의 보존(save)이나 복원(restore)은 여러 가지 방법을 이용하여 실현할 수 있다. 예컨대, 많은 통상의 스레드는, 실행기간이 종료한 시점의 콘텍스트를 보존해 두어 다음의 실행기간의 처음에 그 콘텍스트를 복원하도록 동작시킨다. 한편, 어떤 종류의 주기적인 처리에 있어서는, 전체 주기에 있어서 실행기간의 개시시에는 새로운 콘텍스트를 작성하여 그 실행기간중에는 그 콘텍스트를 사용해서 실행을 진행시키고, 실행기간의 종료시에는 그 콘텍스트는 폐기하도록 동작시킨다.
(밀결합 스레드 그룹에 속하는 스레드의 실행기간)
밀결합 스레드 그룹에 속하는 스레드의 경우의 실행기간은, 예컨대 도 48과 같이 된다. 즉, 밀결합 스레드 그룹에 속하는 모든 스레드는 어떤 하나의 실행기간에 있어서, 모든 스레드가 동시에 실행되도록 VPU 실행환경(401)에 따라 스케줄링된다. 이러한 밀결합 스레드 그룹은 주로 하드 실시간 스레드에 대해 사용된다. 그 때문에, 이 동작을 실현하기 위해, VPU 실행환경(401)은 하드 실시간 클래스에서의 실행기간을 예약할 때에, 동시에 사용하는 프로세서와 그 수를 지정한다. 더욱이, VPU 실행환경(401)은 예약하는 각각의 프로세서에 대해 1대 1로 동시 실행시키는 스레드의 콘텍스트를 대응시킨다.
또한 어떤 기간에 있어서 밀결합 스레드 그룹에 속하고 있는 복수의 스레드는, 다른 실행기간에 있어서는 밀결합의 관계를 해소하여 각 스레드가 따로따로 동작할 수도 있다. 이러한 경우에는, 각 스레드는 지금 밀결합 스레드로서 동작하고 있는지 혹은 따로따로 동작하고 있는지를 의식하여 상대 스레드와의 통신이나 동기 등의 처리를 행할 필요가 있다. 각 스레드에는 가로채기 가능(preemptive)이나 가로채기 불가(non-preemptive)를 나타내는 프리엠프션에 관련된 속성이 제공된다. 가로채기 가능은, 스레드의 실행기간중에 그 스레드가 가로채기되는 것을 허용하는, 즉 실행을 정지시킬 수 있다고 하는 속성이다. 가로채기 불가는 스레드의 실행기간중에 그 스레드가 가로채기되지 않는 것을 보장한다고 하는 속성이다. 이 가로채기 불가라는 속성의 의미는 스레드의 클래스 사이에서 다르다. 하드 실시간 클래스에서는 스레드가 실행을 개시하면 실행기간이 종료할 때까지 그 스레드 자신 이외의 누구도 그 실행을 멈출 수 없다는 것을 의미한다. 소프트 실시간 클래스에서는, 그 클래스에 있어서 가로채기 가능성은 필요불가결한 것이기 때문에, 가로채기 불가의 속성은 서포트되지 않는다. 베스트에포트 클래스에서는, 스레드의 실행은 다른 베스트에포트 클래스로부터의 가로채기로부터는 보호되지만, 하드 실시간이나 소프트 실시간 클래스라는 보다 높은 레벨로부터는 가로채기된다.
(스레드의 실행모델)
스레드의 실행모델은 크게 도 49에 나타낸 바와 같은 주기 실행모델과, 도 50에 나타낸 바와 같은 비주기 실행모델의 2가지로 분류할 수 있다. 주기 실행모델에서는 스레드는 주기적으로 실행된다. 한편, 비주기 실행모델에서는 이벤트를 기점으로 하여 그 실행이 행해진다. 주기 실행모델의 실장방식에는 소프트웨어 인터럽트를 이용하는 방식과, 동기기구와 같은 이벤트 오브젝트를 이용하는 방식이 있다. 하드 실시간 클래스에서는 소프트웨어 인터럽트를 이용하여 실장한다. 즉, VPU 실행환경(401)은 주기적인 처리를 개시하는 타이밍에서 소정의 방법으로 결정되는 스레드의 엔트리 포인트로 점프하거나, 혹은 사전에 소정의 수순으로 등록된 콜백함수를 호출한다. 소프트 실시간 클래스에서는, 이벤트 오브젝트를 이용하여 실장한다. 즉, 각 주기에 있어서, 미리 등록된 이벤트 오브젝트에 대해, 예컨대 VPU 실행환경(401)이 이벤트를 통지하기 때문에, 소프트 실시간 스레드는 매주기 그 이벤트 오브젝트를 기다리고, 이벤트가 발생했다면 소정의 처리를 실행하도록 프로그램을 구성함으로써, 주기실행모델을 실현한다. 베스트에포트 클래스의 경우는, 소프트웨어 인터럽트를 이용하는 방식을 이용해도, 이벤트 오브젝트를 이용하는 방식을 이용해도, 주기 실행모델을 실장할 수 있다. 또한, 실제의 실행은 각각의 주기의 선두에서 항상 개시되는 것으로는 한정되지 않고, 제약조건의 범위내에서 상태에 따라 지연될 수도 있다.
비주기 실행모델은 이벤트 모델을 이용하면 주기 실행모델과 마찬가지로 실현할 수 있다. 즉, 소프트 실시간이나 베스트에포트 클래스에서는 비주기 실행모델은 이벤트가 통지되는 타이밍이 다를 뿐이고 실장수법상은 주기 실행모델과 같아진다. 하드 실시간 클래스의 경우는, 시간요건을 보장하기 위해 필요한 최소발생기간이나 데드라인은 시스템의 동작을 강하게 제약하기 때문에 비주기 실행은 제한된다.
(콘텍스트의 절환)
본 실시형태의 실시간 처리시스템에 있어서는, VPU 스레드의 실행기간의 종 료에 따른 콘텍스트의 절환방식은 복수의 방식에서 선택할 수 있다. VPU의 콘텍스트 절환의 코스트는 매우 크기 때문에, 그 방식을 선택할 수 있도록 함으로써 콘텍스트 절환의 효율을 향상시킬 수 있다. 지정한 콘텍스트 절환방식은 스레드의 예약된 실행기간이 종료했을 때에 이용되는 것이다. 실행기간중의 콘텍스트 절환, 즉 소위 프리엠프션시에는 어떠한 경우에 있어서도 현재의 스레드의 모든 콘텍스트를 보존하여 다음에 실행재개할 때에 복원할 필요가 있다. 본 실시형태의 실시간 처리시스템에서 제공하는 VPU 콘텍스트 절환의 방식에는, 예컨대 이하와 같은 방식이 있다.
1. 콘텍스트의 파기
어떠한 콘텍스트도 보존하지 않는다.
2. 완전한 콘텍스트의 보존
VPU의 레지스터, 로컬기억장치 및 메모리 콘트롤러내의 DMA 콘트롤러의 상태를 포함하는 VPU의 완전한 콘텍스트를 보존한다.
3. 품위 있는(graceful) 콘텍스트 보존
VPU의 메모리 콘트롤러내의 DMA 콘트롤러가 실행중인 모든 동작이 완료할 때까지 콘텍스트 절환을 지연한다. 그 후, VPU의 레지스터와 로컬기억장치의 내용을 보존한다. 이 방식에서는, 완전한 콘텍스트 보존과 마찬가지로 VPU의 콘텍스트 모두가 보존된다.
스레드의 스케줄링을 행하는 스케줄러는 MPU 스레드와 VPU 스레드 양쪽을 스케줄링하는 1개의 스케줄러로서 실장할 수도 있고, MPU 스레드용의 스케줄러와 VPU 스레드용의 스케줄러를 따로 실장할 수도 있다. MPU와 VPU에서는 콘텍스트 절환의 코스트가 다르기 때문에, 따로따로 각각에 적합한 스케줄러를 실장하는 편이 효율좋게 된다.
(하드 실시간 클래스의 스케줄링)
하드 실시간 클래스의 스레드군의 스케줄링은 태스크 그래프를 확장한 예약그래프를 이용하여 행해진다. 도 51은 태스크 그래프의 예이다. 태스크 그래프는 태스크간의 관계를 나타낸다. 태스크간의 화살표는, 태스크간의 의존관계(입출력관계)를 나타내고 있다. 도 51의 예에서는, 태스크 1과 태스크 2는 자유롭게 실행을 개시할 수 있는 것을 나타내고 있다. 이에 대해, 태스크 3은 태스크 1과 태스크 2 양쪽의 실행종료후에 비로소 실행을 개시할 수 있는 것을 나타내고 있다. 또, 태스크 4와 태스크 5는 태스크 3의 실행종료후에 실행을 개시할 수 있는 것을 나타내고 있다. 태스크 그래프에는 콘텍스트의 개념이 없다. 예컨대, 태스크 1과 태스크 4를 같은 콘텍스트를 이용하여 실행하고자 하는 경우에 그것을 기술할 수 없다. 그래서, 본 실시형태의 실시간 처리시스템에서는 이하와 같이 하여 태스크 그래프를 확장한 예약그래프를 이용한다.
먼저, 태스크 그래프를, 태스크가 아니라 실행기간동안의 관계를 나타내는 것이라고 받아들인다. 그리고, 각각의 실행기간에 콘텍스트를 관련지움으로써, 그 콘텍스트에 대응하는 스레드가 그 실행기간에 실행되는 것을 나타낸다. 복수의 실행기간에 같은 콘텍스트를 관련지우면, 그들 전체 실행기간에 있어서 그 스레드가 실행되는 것을 나타낸다. 예컨대, 도 52에서는 스레드 1의 콘텍스트가 실행기간 1과 2에 관련지워져 있고, 스레드 1은 실행기간 1과 2의 기간에서 실행되는 것을 나타낸다. 더욱이, 그래프에 이용되는 실행기간동안의 화살표에 실행환경에서 보장되는 하드 실시간의 제약조건을 나타내는 속성을 부가한다. 이렇게 하여 작성한 예약그래프를 이용하여 실시간 시스템 어플리케이션의 모델을 일절 수정하지 않고, 처리모델과 그 처리가 갖는 시간요건 등의 제약조건을 기술하는 것이 가능하게 된다. 도 53에 도 52를 베이스로 작성한 예약그래프의 예를 나타낸다. 도 53에서 콘텍스트 1, 2, 3은 각각 도 52의 스레드 1, 2, 3의 콘텍스트를 나타내고 있다.
(소프트 실시간 클래스의 스케줄링)
소프트 실시간 클래스의 스케줄링은 스레드의 실행형태를 예측가능하게 하기 위해, 고정 우선도 스케줄링을 이용하여 실행된다. 그 스케줄링 방식으로서는, 고정 우선도 FIFO 스케줄링과 고정 우선도 라운드로빈 스케줄링의 2종류의 스케줄링 알고리즘을 준비한다. 우선도가 높은 스레드의 실행을 우선하기 위해, 낮은 우선도의 스레드가 실행중이어도 보다 높은 우선도의 스레드가 실행가능하게 된 경우에는, 저우선도의 스레드의 실행을 프리엠프트하고, 즉시 고우선도의 스레드의 실행을 개시한다. 크리티컬 섹션(critical section)의 실행시에 발생하는 우선도 역전 문제를 회피하기 위해, 우선도 계승 프로토콜이나 우선도 실링(ceiling: 상한) 프로토콜 등의 동기기구를 병행하여 실시하는 것이 바람직하다.
(베스트에포트 클래스의 스케줄링)
베스트에포트 클래스의 스케줄링은, 예컨대 동적 우선도 스케줄링 등을 이용한다.
(계층형 스케줄러)
VPU 실행환경(401)내의 스케줄링 기능은 도 54에 나타낸 바와 같은 계층형 스케줄러로서 실시할 수 있다. 즉, 스레드 레벨의 스케줄링은 스레드 클래스간(inter-class) 스케줄링과, 스레드 클래스내(intra-class) 스케줄링의 2개의 계층으로 구성한다. 그 때문에, VPU 실행환경(401)내의 스케줄러는 스레드 클래스내 스케줄링부(601)와, 스레드 클래스간 스케줄링부(602)를 갖추고 있다. 스레드 클래스간 스케줄링에서는 스레드 클래스간을 걸친 스케줄링을 행한다. 스레드 클래스내 스케줄링에서는, 각각의 스케줄링 클래스마다 그 스케줄링 클래스에 속하는 스레드의 스케줄링을 행한다. 스레드 클래스내 스케줄링부(601)에는 하드 실시간(하드 RT) 클래스 스케줄링부(611), 소프트 실시간(소프트 RT) 클래스 스케줄링부(612), 베스트에포트 클래스 스케줄링부(613)가 설치되어 있다.
스레드 클래스간 스케줄링과 스레드 클래스내 스케줄링은 계층구조를 이루고 있고, 먼저 스레드 클래스간 스케줄링이 동작하여 어느 스레드 클래스를 실행할지 결정한 후, 해당하는 스레드 클래스내 스케줄링에 의해 그 스레드 클래스내의 어느 스레드를 실행할지를 결정한다. 스레드 클래스간 스케줄링은 프리엠프트 가능한 고정 우선도 스케줄링을 이용한다. 이 때, 하드 실시간 클래스가 최고 우선도를 가지고, 소프트 실시간 클래스, 베스트에포트 클래스순으로 우선도가 낮아지도록 한다. 저우선도 클래스의 스레드는 보다 우선도가 높은 클래스의 스레드가 실행가능(ready)하게 되면, 그 실행은 프리엠프트(preempte)된다. 스레드 클래스간의 동기는 VPU 실행환경(401)에 따라 제공되는 동기 프리미티브에 의해 실현한다. 이 때 특히 하드 실시간 스레드에는 차단(block)하는 일없는 프리미티브만 사용할 수 있도록 하여, 하드 실시간 스레드의 블록이 발생하지 않도록 한다. 또, 베스트에포트 스레드가 소프트 실시간 스레드를 차단한 경우에는, 그 베스트에포트 스레드는 소프트 실시간 스레드로서 취급함으로써, 스레드 클래스간의 우선도 역전의 발생을 방지하도록 한다. 더욱이, 그 베스트에포트 스레드가 다른 소프트 실시간 스레드에 의해 차단되는 바와 같은 경우에는 우선도 계승 프로토콜 등의 방식을 이용하여 차단되지 않도록 한다.
(스레드 파라미터)
본 실시형태의 실시간 처리시스템에서는 여러 가지 파라미터를 이용하여 스케줄링을 행한다. 각 클래스의 스레드에 공통인 파라미터로는, 예컨대 이하와 같은 것이 있다.
ㆍ스레드의 클래스(하드 실시간, 소프트 실시간, 베스트에포트)
ㆍ사용하는 리소스(MPU 또는 VPU의 수, 밴드폭, 물리 메모리사이즈, 입출력 디바이스)
ㆍ우선도
ㆍ가로채기 가능한지 가로채기 불가능한지
더욱이, 하드 실시간 클래스의 스레드에 관해서는, 예컨대 이하와 같은 파라미터가 있다.
ㆍ실행기간
ㆍ데드라인
ㆍ주기 혹은 최소발생기간
ㆍVPU의 콘텍스트 절환방식
도 55에 하드 실시간 클래스의 기본적인 파라미터의 예를 나타낸다. 도 55의 제일 위에 있는 예 1의 실행기간의 예약지정의 예에서는 지정한 실행기간동안 MPU를 1개, VPU를 2개 동시에 예약하고, VPU의 콘텍스트를 완전히 보존하는 것을 지정하고 있다. 이 경우, 3개의 프로세서상에서 동시에 스레드가 실행되고, 실행기간 종료후에 MPU 스레드에 더하여 VPU 스레드의 콘텍스트가 완전히 보존된다. 다음으로, 오른쪽 위에 있는 예 2에서는 VPU수와 그 실행기간에 따라 표현되는 처리가 데드라인보다 이전에 실행되는 것을 보장할 때의 데드라인의 지정방법을 나타내고 있다. 데드라인은 예약 요청을 행한 시각으로부터의 상대시각으로 지정된다. 제일 아래에 있는 예 3에서는 주기실행을 지정하고 있다. 이 예에서는, 2개의 VPU(12)를 지정한 실행기간이 주기적으로 실행되고, 또 각 주기의 실행후에 VPU 스레드의 콘텍스트가 파기되며, 모든 처리가 새로운 콘텍스트에서 처리되는 것을 나타내고 있다. 더욱이, 그 주기의 선두로부터의 상대시각을 이용하여 데드라인을 지정하고 있다.
하드 실시간 클래스에서 이용하는 다른 파라미터로서, 예컨대 이하에 나타낸 바와 같은 제약조건이 있다.
ㆍ타이밍 제약(절대 타이밍제약, 상대 타이밍제약)
ㆍ선행제약
ㆍ상호배타제약
타이밍 제약은 실행타이밍을 지연시키는 수단을 제공한다. 절대 타이밍제약은 도 56에 나타낸 바와 같이, 예컨대 주기의 개시시간과 같은 어떤 정적인 타이밍을 기준으로 하여 지연시간을 지정하는 제약조건이다. 상대 타이밍제약은 도 57에 나타낸 바와 같이, 예컨대 다른 실행기간의 개시시각이나 종료시각과 같은 동적인 타이밍이나 이벤트를 기준으로 하여 허용가능한 지연시간을 지정하는 제약조건이다. 선행제약은 상대 타이밍제약을 이용하여 다른 실행기간의 종료시간을 기준으로 하여 그 지연시간을 0이상으로 지정하는 것으로 실현할 수 있기 때문에, 선행제약은 상대 타이밍제약의 특수한 경우로 생각할 수 있다.
상호배타제약은 도 58에 나타낸 바와 같이, 각각의 실행기간이 시간적으로 겹치지 않는 것을 보장하는 제약이다. 상호배타제약을 이용함으로써, 록(lock)에 의해 발생하는 스레드 실행시간의 예측불가능성을 소멸하는 것이 가능하게 된다. 즉, 어떤 리소스를 공유하는 모든 스레드가 동시에 실행되지 않도록 하여 그 리소스에 관한 록을 없앨 수 있다.
(스레드의 동기기구)
본 실시형태의 실시간 처리시스템에서는 스레드의 동기기구로서, 예컨대 이하와 같은 수단을 이용한다.
ㆍ세머포어(semaphore)
ㆍ메세지 큐
ㆍ메세지 버퍼
ㆍ이벤트 플래그
ㆍ배리어
ㆍ뮤텍스
그 외의 동기 프리미티브도 이들과 마찬가지로 이용할 수 있다. 이러한 동기기구를 실현하는 수단으로서, 본 발명의 실시간 처리시스템에서는 다음의 3가지의 방식이 있다.
ㆍ메모리(주기억; 13) 혹은 VPU의 로컬기억장치(32)상에, 예컨대 TEST & SET와 같은 명령을 사용하여 실현한다.
ㆍ메일박스나 신호 레지스터 등의 하드웨어 기구를 이용하여 실현한다.
ㆍVPU 실행환경이 서비스로서 제공하는 기구를 이용한다.
이들 실현수단의 다른 동기기구는 각각 득실을 갖고 있기 때문에, 그것을 이용하는 스레드의 속성 등에 따라, 예컨대 도 59와 같이 적절하게 분간하여 사용하는 것이 바람직하다. 즉, MPU나 VPU가 공유하여 억세스할 수 있는 메모리(13; 주기억(MS))를 이용하여 실장한 동기기구는, 모든 클래스의 스레드에서 사용할 수 있다. 그에 대해, VPU(12)의 로컬기억장치(LS)상에 실장한 동기기구는 밀결합 스레드 그룹에 속하는 스레드만을 사용할 수 있다. 이것은, 밀결합 스레드 그룹에 속하는 스레드만이 동기 상대 스레드가 동시에 동작하고 있는 것을 보장받기 때문이다. 예컨대, 상대 스레드가 동작하고 있는 VPU의 로컬기억장치상에 실장한 동기기구를 이용하는 경우, 밀결합 스레드 그룹의 스레드이면 동기기구를 사용하는 시점에서 상대 스레드가 동작하고 있는 것이 보장되고 있기 때문에, 그 상대 스레드를 실행하고 있는 VPU의 로컬기억장치에 동기기구를 위한 정보가 반드시 존재한다.
메모리(주기억(MS))나 로컬기억장치(LS) 이외의 수단을 이용하여 실장한 동기기구로서는, 하드웨어 기구를 이용하여 실현하는 경우와, VPU 실행환경(401)의 서비스를 이용하는 경우가 있다. 밀결합 스레드 그룹에 속하는 스레드 혹은 하드 실시간 클래스의 스레드는 빠른 동기기구가 필요하기 때문에, 하드웨어 기구를 이용하여 실장한 동기기구를 이용하는 것이 바람직하다. 그에 반해, 소결합 스레드 그룹에 속하는 스레드 혹은 소프트 실시간 클래스와 베스트에포트 클래스의 스레드는 실행환경이 제공하는 기구를 이용하는 것이 바람직하다.
(동기기구의 자동선택)
본 실시형태의 실시간 처리시스템에서는 상기의 동기기구를 스레드의 속성이나 상태에 맞춰서 자동적으로 선택ㆍ절환을 행할 수 있다. 이것은, 예컨대 도 60에 나타낸 바와 같은 수순에 따라 동기처리를 행하고자 하는 스레드가 밀결합 스레드 그룹에 속하고 있는 상태 동안은(단계 S201의 YES), 메모리(14) 혹은 VPU(12)의 로컬기억장치(32) 혹은 하드웨어 기구를 이용하여 실장된 고속의 동기기구를 이용하지만(단계 S202, S203, S204, S205), 스레드의 상태가 변화하여 밀결합관계로 되지 않은 상태에서는(단계 S201의 NO), 메모리(14)상에 실장된 동기기구화 혹은 VPU 실행환경(401)의 서비스로서 제공되고 있는 동기기구를 이용하도록 동기기구를 절환한다(단계 S206, S207, S208).
이 절환수단은, VPU(12)상에서 동작하는 프로그램에 대해 라이브러리의 형식으로 제공하도록 해도 좋고, VPU(12)측의 VPU 실행환경(502)이 제공하는 서비스로서 제공할 수도 있다. 복수의 동기기구를 절환하는 방식으로서는, 미리 복수의 동 기기구를 확보해 두어 그것을 적절하게 분간하여 사용하도록 할 수도 있고, 절환을 행하는 시점에서 새로 동기기구를 확보하도록 할 수도 있다.
VPU(12)의 로컬기억장치를 이용한 동기기구는, 밀결합 스레드 그룹에 속하는 스레드 사이와 같이, 동기처리를 행하는 시점에서 동기기구를 실장하고 있는 VPU(12)의 로컬기억장치가 반드시 유효하게 되어 있을 필요가 있다. 이 제한을 완화하는 방식으로서는, 스레드가 실행중(RUNNING 상태)이 아닌 경우에는 그 스레드를 최후에 실행하고 있던 때의 로컬기억장치의 내용을 메모리에 보존해 두고, 그 스레드에 대응지워진 로컬기억장치를 가리키는 페이지 테이블 혹은 세그먼트 테이블의 엔트리로부터는 그 보존한 메모리영역을 가리키도록 매핑을 제어한다. 이 방식에 의해 상대 스레드가 실행중이 아니더라도 상대 스레드에 대응지워진 로컬기억장치가 마치 있는 것처럼 스레드의 실행을 계속할 수 있다. 실행중이 아닌 스레드가 VPU(12)를 할당받아 실행을 시작할 때에는 메모리(14)에 보존하고 있는 내용을 재차 로컬기억장치로 되돌려 대응하는 페이지 테이블 혹은 세그먼트 테이블의 매핑을 변경한다. 이와 같이, VPU(12)의 로컬기억장치의 백업 카피에 대해서도 동작가능하도록 동기기구를 실장해 둠으로써 밀결합 스레드 그룹에 속하는 스레드가 아니라도 VPU(12)의 로컬기억장치를 이용하여 실장한 고속의 동기기구를 이용할 수 있게 된다.
(예약그래프)
도 61은 도 9에 예로서 나타낸 처리흐름에 대응하는 예약그래프를 나타낸 것이다. 도 61에 있어서, 6개의 네모박스는 실행기간(execution term)을 나타내고 있다. 각 실행기간의 네모박스의 좌측 위의 번호는 예약하는 실행기간의 ID이고, 실행기간의 네모박스 가운데의 기호는 그 실행기간에 대응지워져 있는 스레드 콘텍스트의 식별자이다. 실행기간의 네모박스의 아래의 수치는 그 실행기간의 길이(코스트)를 나타내고 있다. 실행기간의 네모박스 사이를 연결하는 화살표는 여기에서는 모두 선행제약을 나타내고 있다. 즉, 화살표가 들어가는 실행기간은 반드시 화살표가 나가고 있는 실행기간이 종료한 후에 실행을 개시하는 것을 나타내고 있다. 또, 화살표에 덧붙여져 있는 번호는 그 화살표로 연결된 실행기간동안에 데이터의 주고받기에 사용하는 버퍼의 ID를 나타내고 있고, 번호와 함께 덧붙여져 있는 수치는 버퍼의 사이즈를 나타내고 있다. 도 61에 나타낸 예약 그래프에 따라 처리를 실행하기 위한 수순은 이하와 같이 된다.
1. DEMUX 프로그램(111)을 실행하는 스레드 콘텍스트를 작성하여 그 식별자를 DEMUX로 한다.
2. A-DEC 프로그램(112)을 실행하는 스레드 콘텍스트를 작성하여 그 식별자를 A-DEC로 한다.
3. V-DEC 프로그램(113)을 실행하는 스레드 콘텍스트를 작성하여 그 식별자를 V-DEC로 한다.
4. TEXT 프로그램(114)을 실행하는 스레드 콘텍스트를 작성하여 그 식별자를 TEXT로 한다.
5. PROG 프로그램(115)을 실행하는 스레드 콘텍스트를 작성하여 그 식별자를 PROG로 한다.
6. BLEND 프로그램(116)을 실행하는 스레드 콘텍스트를 작성하여 그 식별자를 BLEND로 한다.
7. 도 62에 나타낸 바와 같은 데이터구조의 예약요청을 작성하여 VPU 실행환경(401)으로 넘겨주어 예약을 행한다.
여기에서 수순 1부터 6까지의 스레드 콘텍스트의 작성은 스레드로서 실행하고자 하는 프로그램을 지정하여 VPU 실행환경(401)에 의뢰하면, VPU 실행환경(401)이 필요한 자원을 할당하여 스레드 콘텍스트를 작성하고, 그 핸들을 되돌려 오기 때문에 그것을 식별자와 관련지우고 있다.
도 62의 예약요청은 버퍼라고 쓰여진 버퍼 데이터와, TASK라고 쓰여진 실행기간 데이터로 구성된다. 버퍼 데이터는 실행기간 동안에 데이터를 주고받기 위해 이용하는 메모리(14)상의 버퍼를 선언하는 것으로, Id:에 버퍼번호를, Size:에 버퍼 사이즈를, SrcTask:에 데이터를 기입하는 실행기간의 번호를, DstTask:에 데이터를 독출하는 실행기간의 번호를 갖는다. 실행기간 데이터는 Id:에 실행기간번호를, Class:에 스레드 클래스(VPU는 VPU 스레드인 것을 나타내고, HRT는 하드 실시간 클래스인 것을 나타낸다. 그 밖에, MPU 스레드를 나타내는 MPU나 소프트 실시간 클래스를 나타내는 SRT나 베스트에포트 클래스를 나타내는 BST 등이 있다)를, ThreadContext:에 이 실행기간에 대응지우는 스레드 콘텍스트를, Cost:에 이 실행기간의 길이 혹은 코스트를, Constraint:에 이 실행기간을 기준으로 하는 각종 제약을, InputBuffer:에 이 실행기간에서 독출하는 버퍼의 식별자의 리스트를, OutputBuffer:에 이 실행기간에서 기입하는 버퍼의 식별자의 리스트를 갖는다. Constraint:에는 선행제약을 나타내는 Precedence:나, 절대 타이밍제약을 나타내는 AbsoluteTiming:이나, 상대 타이밍제약을 나타내는 RelativeTiming:이나 배타제약을 나타내는 Exclusive: 등을 지정할 수 있고, 각각 제약의 상대로 되는 실행기간의 번호의 리스트를 갖는다.
도 62의 예약요청으로 예약한 버퍼영역은 VPU 실행환경(401)이, 버퍼에 데이터를 기입하는 스레드의 실행개시시에 할당되고, 데이터를 독출하는 스레드의 실행종료시에 해방된다. 할당된 버퍼의 어드레스는, 예컨대 스레드의 기동시에 미리 결정되어 있는 어드레스 혹은 변수 혹은 레지스터 등을 이용하여 스레드에 통지할 수 있다. 본 실시형태의 실시간 처리시스템에서는 도 7에 나타낸 바와 같은 프로그램 모듈(100)이 제공되었을 때에 그 가운데에 있는 도 8에 나타낸 바와 같은 구성기술(117)을 읽어들이고, 그것에 기초하여 상기 수순에서 스레드 콘텍스트의 생성과 도 62의 예약요청의 작성ㆍ발행을 행하여 그 프로그램 모듈(100)의 실행을 행하는 기능을 제공한다. 이 기능에 의해, 도 7과 같은 프로그램 모듈(100)에 의해 기술된 전용 하드웨어의 처리를 복수의 프로세서에 의한 소프트웨어 처리에 의해 실현하는 것이 가능해진다. 실현하고자 하는 하드웨어마다 도 7과 같은 구조를 갖춘 프로그램 모듈을 작성하고, 그것을 본 실시형태의 실시간 처리시스템에 준거한 기능이 짜넣어진 기기로 실행함으로써, 당해 기기를 소망하는 하드웨어로서 동작시키는 것이 가능해진다.
도 62에 나타낸 예약요청이 주어지면, VPU 실행환경(401)은 각 실행기간을 주기내의 어느 타이밍에서 어느 VPU(12)에서 실행할지를 결정한다. 이것이 스케줄링이다. 본 실시형태의 실시간 처리시스템이 짜넣어진 전자기기의 종류에 따라서는 실제로는 이러한 예약요청이 동시에 복수 제공되는 경우도 있기 때문에, 그것들이 모순이 없도록(제공된 제약이 만족되지 않는 경우가 없도록) 처리의 타이밍이 결정된다. 예컨대, 도 63에 나타낸 바와 같이 VPU(12)가 2개 있을 때에 도 62의 예약요청만이 들어가 있었다고 하면, DEMUX, V-DEC, PROG, BLEND의 병행하여 실행할 수 없는 처리를 VPU0에서 순차 실행하고, DEMUX의 실행후에 병행하여 동작할 수 있는 A-DEC과 TEXT를 VPU1에서 실행하도록 스케줄링한다.
(소프트웨어 파이프라인)
여기에서 만약 1개의 주기내에서 DEMUX, V-DEC, PROG, BLEND를 순차 실행할 수 있을 만큼의 시간이 없는 경우에는, 복수의 주기에 걸치도록 소프트웨어 파이프라인화를 행한다. 예컨대, 도 64에 나타낸 바와 같이 최초의 주기 1에서는 DEMUX와 V-DEC을 VPU0에서 행하고, 다음의 주기 2에서 A-DEC, TEXT, PROG, BLEND의 처리를 VPU1에서 행하도록 한다. 이 주기 2에서는 A-DEC, TEXT, PROG, BLEND의 처리와 병행하여 다음의 프레임의 DEMUX와 V-DEC이 VPU0에 의해 실행된다. 즉, 도 65에 나타낸 바와 같이, VPU0이 DEMUX와 V-DEC을 실행하고 있는 동안, VPU1에서는 앞의 주기의 DEMUX와 V-DEC의 출력을 받는 A-DEC, TEXT, PROG, BLEND가 동작한다고 하는 상황에, 파이프라인처리를 행한다. 소프트웨어 파이프라인을 실현하기 위한 스케줄링 처리의 수순은 이하와 같다.
1. VPU 실행환경(401)은 프로그램 모듈(100)을 그것이 기억되어 있는 외부기억장치 또는 메모리(13)로부터 입력하고, 구성기술(117)을 읽어들인다.
2. VPU 실행환경(401)은 구성기술(117)에 기초하여 프로그램 모듈(100)내의 복수의 프로그램(111~116)을 실행하기 위한 복수의 스레드(DEMUX, V-DEC, A-DEC, TEXT, PROG, BLEND)를 제1스레드 그룹(예컨대, DEMUX, V-DEC)과 그것에 후속하여 실행되는 제2스레드 그룹(예컨대, A-DEC, TEXT, PROG, BLEND)으로 분할한다.
3. VPU 실행환경(401)은 제1스레드 그룹(DEMUX, V-DEC)과 제2스레드 그룹(A-DEC, TEXT, PROG, BLEND)이 2개의 VPU0, 1에 의해 파이프라인처리되도록 제1스레드 그룹(DEMUX, V-DEC) 및 제2스레드 그룹 각각을 VPU0, 1에 할당한다.
(버퍼량을 고려한 스케줄링)
어떤 실행기간에 실행하는 스레드와, 다른 실행기간에 실행하는 스레드 사이에서 버퍼를 이용하여 데이터를 보내는 경우, 그 버퍼는 데이터를 기입하는 측의 실행기간의 처음부터 데이터를 독출하는 측의 실행기간의 최후까지의 사이에 전유되게 된다. 예컨대, 도 66에 나타낸 바와 같이, 실행기간 A와 실행기간 B 사이에서 버퍼를 이용하여 데이터를 보내는 경우, 도 66에 나타낸 바와 같이 실행기간 A의 처음부터 실행기간 B의 최후까지의 기간, 메모리(14; 주기억)상의 버퍼는 점유하여 사용되게 된다. 그 때문에, 실행기간 A로부터 실행기간 B로 버퍼를 이용하여 데이터를 보낼 때에 소프트웨어 파이프라인화했을 때에 실행기간 A와 B가 서로 이웃하는 다른 주기에서 실행하는 바와 같은 경우, 실행기간 A와 B의 실행타이밍에 따라 필요한 버퍼량이 변화된다. 예컨대, 도 67에 나타낸 바와 같이, 각 주기내에서 실행기간 A가 B보다도 빨리 실행되도록 스케줄링한 경우, 실행기간 An(An은 주기 n에서의 A를 나타낸다)으로부터의 데이터는 다음 주기의 실행기간 Bn+1로 건네진다. 이 때, 실행기간 An+1은 An과 Bn 사이에 끼여 있기 때문에, An이 Bn에 데이터를 건네주기 위해 사용하고 있는 버퍼는 이용할 수 없고, 새로운 버퍼를 이용한다. 즉, 더블 버퍼링이 필요하게 된다. 한편, 도 68에 나타낸 바와 같이, 주기내에서 실행기간 A가 B의 종료후에 개시하도록 하면, 실행기간 An이 데이터를 쓴 버퍼를 Bn이 읽은 후, 같은 버퍼를 이용하여 돌려써서 An+1이 데이터를 쓰고 Bn+1이 읽도록 싱글 버퍼로 충족된다.
본 실시형태이 실시간 처리시스템에서는 VPU 실행환경(401)의 스케줄러가 이와 같이 버퍼 메모리영역의 사용량이 가능한 한 적어지도록 예약되는 실행기간을 스케줄링한다. 즉, 소프트웨어 파이프라인을 행하는 경우에는, 도 69의 플로우차트에 나타내고 있는 바와 같이 VPU 실행환경(401)의 스케줄러는 VPU0, 1의 2개의 VPU에 의한 소프트웨어 파이프라인을 실행하기 위해, 일련의 처리를 2개의 부분처리(VPU0에 의해 선행하여 실행되는 부분처리와, 그 부분처리에 후속하여 VPU1에 의해 실행되는 부분처리)로 분할한다(단계 S211). 그리고, VPU 실행환경(401)의 스케줄러는 2개의 부분처리 사이에서 버퍼를 매개로 입출력을 행하는 스레드끼리(예컨대, 선행하여 실행되는 부분처리내의 스레드 A와 후속하여 실행되는 부분처리내의 스레드 B)를 추출하고(단계 S212), 각 주기에 있어서 선행하여 실행되는 부분처리내의 스레드 A가 후속하는 부분처리내의 스레드 B의 실행기간 종료후에 개시되도록 스레드 A, B를 스케줄링한다(단계 S213).
(계층구조를 갖춘 예약그래프)
도 61에 나타낸 예약그래프는 계층구조를 갖추고 있지 않지만, 도 70에 나타 낸 바와 같이 계층구조를 갖춘 예약그래프를 취할 수도 있다. 도 70의 예에서는 실행기간 A는 B에 선행하고, B는 C에 선행한다. B내에서는 D가 E와 F에 선행하고 있다. 그 때문에, 계층을 해석하면 A는 D에 선행하고, E와 F는 C에 선행하게 된다.
(밀결합 스레드 그룹을 고려한 예약요청)
예컨대, 도 61에 나타낸 예약그래프에 있어서 V-DEC을 실행하는 스레드와 PROG를 실행하는 스레드가 밀결합 스레드 그룹에 속하는 경우, 그 결합속성을 나타내는 예약요청이 도 71과 같이 생성된다. 도 71의 예에 있어서는, TightlyCoupled:에 상대처의 스레드에 대응하는 실행기간의 ID가 기술되어 있다. 이에 따라, V-DEC를 실행하는 스레드와 PROG를 실행하는 스레드가 각각 다른 VPU에 의해 동시에 실행되도록 예컨대 도 72에 나타낸 바와 같이 스케줄링된다. 이 경우, V-DEC을 실행하는 스레드와 PROG를 실행하는 스레드간의 통신은 로컬기억장치를 매개로 실행할 수 있기 때문에, 버퍼를 메모리(14)상에 준비할 필요는 없다.
(구성기술에 기초한 스케줄링 알고리즘)
이하, 프로그램 모듈에 짜넣어진 구성기술에 기초하여 각 스레드의 실행기간을 예약하기 위한 처리수순에 대해 설명한다.
도 7의 프로그램 모듈(100)내의 구성기술(117)은 도 8의 예와 같이 되어 있다. 이 구성기술(117)이 주어지면, VPU 실행환경(401)은 다음의 수순을 실행한다.
1. 구성기술(117)의 모듈란에 기입되어 있는 각 프로그램을 로드하여 각각을 실행하는 스레드를 생성한다. 이 때, 본 실시형태에서는 구성기술(117)의 엔트리 각각에 대해 1개의 스레드를 생성한다. 구성기술(117)내에 같은 모듈명을 가진 복수의 엔트리가 존재하는 경우에는, 같은 모듈을 실행하는 복수의 스레드를 각각의 엔트리와 대응하도록 생성하게 된다. 또한, 도 8의 예에서는 모든 스레드는 하나의 프로세스에 속하도록 생성되는 것으로 하고 있지만, 각각의 스레드가 다른 프로세스에 속하도록 실시할 수도 있고, 어떤 그룹의 스레드는 어떤 프로세스에 속하며, 또 다른 그룹의 스레드는 다른 프로세스에 속하도록 실시할 수도 있다.
2. 구성기술(117)의 정보로부터 도 62에서 설명한 바와 같은 예약요청의 데이터구조를 작성한다.
3. 예약요청을 VPU 실행환경으로 건네주어 처리의 스케줄링을 행하여 실행을 개시한다.
이 2번째의 예약요청을 작성하는 단계는 다음과 같이 행한다.
먼저, 구성기술(117)의 출력란에 1대 1로 대응하도록 BUFFER 레코드를 작성하여 예약요청에 부가한다. 예컨대, 도 8의 구조기술(117)의 예에서는 DEMUX 모듈의 2번째의 출력은 1MB 버퍼를 이용하여 데이터를 V-DEC으로 건네주고 있기 때문에, 그것에 대응하도록 도 62의 Id가 2의 BUFFER 레코드를 작성하고 있다. Id가 2의 BUFFER 레코드에는 그 버퍼 사이즈가 Size란에 1MB로 기록되고, 그 버퍼에 데이터를 기입하는 DEMUX 모듈에 대응하는 태스크인 Id가 1의 TASK 레코드로의 참조가 SrcTask란에 기록되며, 그 버퍼의 데이터를 독출하는 V-DEC 모듈에 대응하는 태스크인 Id가 3의 TASK 레코드로의 참조가 DstTask란에 기록되어 있다.
다음으로, 구성기술(117)의 모듈란에 1대 1로 대응하도록 TASK 레코드를 작 성하여 예약요청에 부가한다. 예컨대, 도 8의 구조기술(117)의 예에서 V-DEC 모듈에 대응하는 TASK 레코드로서 도 62의 Id가 3의 TASK 레코드를 작성하고 있다. Id가 3의 태스크 레코드에는 이하와 같은 정보가 기록되어 있다.
Class란: 이 TASK 레코드에 지정되는 스레드를 어떠한 속성으로 실행시킬지를 나타내는 그래프. VPU는 VPU상에서 실행하는 스레드인 것을, HRT는 하드 실시간 클래스의 스레드인 것을 나타낸다. 이들 정보는 도 8의 예에서는 구성기술(117)의 스레드 파라미터로 기술되어 있는 정보를 기초로 설정한다.
ThreadContext란: 이 TASK 레코드에서 실행의 예약을 행하고자 하는 스레드의 스레드 콘텍스트를 지정한다. 구체적으로는, 도 8의 구성기술(117)의 모듈란에 지정된 프로그램 모듈을 로드하고, 그것을 실행하는 스레드를 VPU 실행환경(401)에 의해 생성하며, 그 스레드의 스레드 콘텍스트의 식별자(혹은 포인터 등)를 ThreadContext란에 기록한다.
Constraint란: 이 TASK 레코드에 관한 제약조건을 기록한다. 선행제약의 경우는 Precede: 후에 그 TASK가 선행하는 다른 TASK의 Id를 필요한 수 지정한다. Id가 3의 TASK 레코드의 경우, Id가 5의 PROG 모듈에 대응하는 TASK에 선행하는 것을 나타내고 있다.
InputBuffer란: 이 TASK 레코드에서 지정되는 스레드가 데이터를 독출하는 버퍼의 BUFFER 레코드의 Id를 필요한 수 지정한다.
OutputBuffer란: 이 TASK 레코드에서 지정되는 스레드가 데이터를 기입하는 버퍼의 BUFFER 레코드의 Id를 필요한 수 지정한다.
이렇게 하여 구조기술이 주어지면 그에 대한 예약요청이 작성된다.
다음으로, 그 예약요청을 VPU 실행환경(401)내의 스케줄러로 건네주면, 스케줄러는 지정된 예약요청을 실행하는데 필요한 스케줄을 작성한다. 이 스케줄링 처리의 결과 작성된 스케줄은, 예컨대 도 63에 나타낸 바와 같은 각 주기의 어느 타이밍에서 어느 VPU를 얼마만큼의 시간, 어느 스레드에 할당할지를 나타내는 것이다. 실제로는, 예컨대 도 73과 같은 예약리스트에 의해 표현되도록 실시할 수 있다.
도 73의 예약 리스트는 각 VPU에 대응지워진 예약엔트리로 구성된다. 예약엔트리에는 하나의 스레드에 대해 그것을 각 주기내의 어느 타이밍에서 VPU를 할당하여 실행을 시작할지를 개시시간란에, 어느 정도의 시간으로 VPU를 채택할지를 실행기간란에, 그 스레드의 식별자를 실행 스레드란에 기록하고 있다. 그들 예약엔트리는 실행하는 VPU별로 개시시간순으로 소트(정렬)되어 예약리스트에 연결되어 있다.
도 62 또는 도 71에 나타낸 바와 같은 예약요청으로부터 도 73에 나타낸 바와 같은 예약리스트를 작성하는 수순은, 예컨대 도 74의 플로우차트에서 나타내는 수순으로 실시할 수 있다.
기본은 예약요청중의 각 TASK 레코드를, BUFFER를 이용한 입출력관계를 고려하여 순서를 붙이고, 데이터의 흐름순으로 VPU의 실행시간을 할당하여 행하면 좋다. 이 때, 밀결합 스레드 그룹에 지정되어 있는 TASK군에는 각각의 TASK의 스레드에 동시에 VPU를 할당하도록 할 필요가 있다.
도 74에 그 수순을 나타낸다. 예약요청이 주어지면, 그중의 TASK 레코드에 지정되어 있는 모든 태스크의 집합에 대해 이하의 수순으로 스케줄링(환언하면, 스 케줄이 할당, 혹은 예약리스트의 작성)을 행한다.
단계 S301: 모든 입력태스트가 할당된 태스크에서 밀결합 지정이 없는 태스크를 선택한다. 즉, 미할당의 태스크(즉, 아직 예약엔트리를 만들어 예약리스트에 연결되어 있지 않은 태스크)중에서 그 태스크의 입력으로 되는 데이터의 소스로 되는 태스크가 모두 할당(예약엔트리가 예약리스트에 들어 있다)되거나 혹은 그 태스크는 데이터의 입력을 갖지 않는 경우에 있어서 또 그 태스크가 밀결합 지정되어 있지 않은 것이 존재하면 그것을 선택하여 단계 S302로, 그렇지 않으면 단계 S304로 나아간다.
단계 S302: 선택한 태스크를 예약할 수 있는 VPU가 존재하면(환언하면, 다른 태스크와의 사이의 제약을 만족시키는 개시시간과 실행기간을 예약할 수 있는 VPU가 존재하면), 단계 S303으로, 그렇지 않으면 스케줄링이 불가능하기 때문에 실패를 통지한다.
단계 S303: 선택한 태스크의 예약엔트리를 작성하여 예약리스트에 연결한다.
단계 S304: 모든 입력태스크가 할당된 태스크에서 밀결합 관계에 있는 태스크군을 선택한다. 즉, 미할당 태스크(즉, 아직 예약엔트리를 만들어 예약리스트에 연결되어 있지 않은 태스크)중에서 그 태스크의 입력으로 되는 데이터의 소스로 되는 태스크가 모드 할당(예약엔트리가 예약리스트에 들어 있다)되거나 혹은 그 태스크는 데이터의 입력을 갖지 않는 것의 집합에 있어서 또 그 집합에 속하는 태스크 사이가 밀결합 지정되어 있는 것이 존재하면 그 태스크 집합(태스크군이라고도 칭함)을 선택하고서 단계 S305로, 그렇지 않으면 이미 모든 태스크를 할당하고 있기 때문에 스케줄링 처리를 종료한다.
단계 S305: 선택한 태스크 집합에 포함되는 모든 태스크를 동시에(같은 개시시간에서 같은 실행기간을 갖도록) 예약할 수 있는 복수의 VPU가 존재하면 단계 S306으로, 그렇지 않으면 스케줄링이 불가능하기 때문에 실패를 통지한다.
단계 S306: 선택한 태스크 집합의 모든 태스크의 예약엔트리를 작성하여 예약리스트에 연결한다.
여기에서의 설명은 하나의 예약요청의 스케줄링의 수순에 대해 설명했지만, 상술한 바와 같이 실제는 하나의 시스템에 있어서 복수의 예약요청이 동시에 존재하는 것이 보통이다. 그러한 경우에는 복수의 예약요청을 순차적으로 상기 수순으로 스케줄링하도록 실시할 수도 있고, 보다 바람직하게는 동시에 복수의 예약요청을 상기 수순으로 스케줄링하도록 실시한다.
이상, 디지털 텔레비전 방송용 수신기의 동작을 기술한 프로그램 모듈을 예로 설명했지만, 다른 여러 가지 하드웨어의 동작을 기술한 프로그램 모듈을 준비함으로써 디지털 텔레비전 방송용 수신기 이외의 다른 임의의 하드웨어의 동작을 소프트웨어에 의해 실현할 수 있다.
또한, 도 1의 계산기 시스템에 설치된 MPU(11)와 복수의 VPU(12)는 그것들을 1칩상에 혼재(混載)한 병렬 프로세서로서 실현할 수도 있다. 이 경우도, MPU(11)에 의해 실행되는 VPU 실행환경 혹은 특정의 1개의 VPU 등에 의해 실행되는 VPU 실행환경이 복수의 VPU(12)에 대한 스케줄링을 제어할 수 있다.
또, VPU 실행환경으로서 동작하는 프로그램 또는 그 VPU 실행환경을 포함하 는 오퍼레이팅 시스템 등의 프로그램을 컴퓨터 독출가능한 기억매체에 기억시킴으로써 그 기억매체를 통해 당해 프로그램을 로컬프로세서를 각각 갖춘 복수의 프로세서를 포함하는 컴퓨터에 도입하여 실행하는 것만으로 본 실시형태와 마찬가지의 효과를 얻을 수 있다.
또, 본 발명은 상기 실시형태 그대로에 한정되는 것은 아니고, 실시단계에서는 그 요지를 이탈하지 않는 범위에서 구성요소를 변형하여 구체화할 수 있다. 또, 상기 실시형태에 개시되어 있는 복수의 구성요소의 적당한 조합에 의해 여러 가지 발명을 형성할 수 있다. 예컨대, 실시형태에 나타낸 전체 구성요소에서 몇개의 구성요소를 삭제해도 좋다. 더욱이, 다른 실시형태에 따른 구성요소를 적당히 조합하여도 좋다.
이상 설명한 바와 같이 본 발명에 의하면, 프로그램의 코드내에 각각의 처리의 시간적인 제약조건을 상세히 기술하지 않아도 실시간 처리를 실행하기 위한 스레드군을 효율좋게 스케줄링하는 것이 가능해진다.
Claims (9)
- 복수의 처리요소의 조합으로 구성되는 실시간 처리를 실행하기 위한 스레드군을 스케줄링하는 스케줄링 방법에 있어서,상기 복수의 처리요소 각각에 대응하는 수순을 기술한 복수의 프로그램과 상기 복수의 프로그램간의 입출력관계 및 상기 각 프로그램의 실행에 요하는 코스트를 나타내는 구성기술정보를 입력하는 단계와,상기 구성기술정보에 기초하여 상기 복수의 프로그램을 실행하는 복수의 스레드 각각의 실행개시 타이밍 및 실행기간을 결정함으로써, 상기 복수의 스레드 각각을 1이상의 프로세서에 할당하는 스케줄링 처리를 실행하는 단계를 구비한 것을 특징으로 하는 스케줄링 방법.
- 제1항에 있어서, 상기 구성기술정보는 상기 복수의 프로그램에서의 프로그램간의 결합속성을 나타내는 결합속성정보를 더 포함하고,상기 스케줄링 처리를 실행하는 단계가, 상기 결합속성정보에 기초하여 상기 복수의 스레드중에서 서로 협조하여 동작하는 스레드의 집합인 밀결합 스레드 그룹을 선택하는 단계와, 상기 선택된 밀결합 스레드 그룹에 속하는 스레드군이 각각 다른 프로세서에 의해 동시에 실행되도록 상기 밀결합 스레드 그룹에 속하는 스레드군 각각을 할당해야 할 당해 스레드군의 갯수만큼의 프로세서를 결정하는 단계를 포함한 것을 특징으로 하는 스케줄링 방법.
- 제2항에 있어서, 상기 밀결합 스레드 그룹에 속하는 스레드군이 할당되는 상기 프로세서 각각은 로컬 메모리를 갖추고 있고,상기 밀결합 스레드 그룹에 속하는 스레드군 각각의 실효 어드레스 공간 일부에 상기 밀결합 스레드 그룹에 속하는 다른 스레드가 실행되는 프로세서의 로컬 메모리를 매핑하는 단계를 더 구비한 것을 특징으로 하는 스케줄링 방법.
- 복수의 처리요소의 조합으로 구성되는 실시간 처리를 실행하는 정보처리시스템에 있어서,복수의 프로세서와,상기 복수의 처리요소 각각에 대응하는 수순을 기술한 복수의 프로그램과 상기 복수의 프로그램간의 입출력관계 및 상기 각 프로그램의 실행에 요하는 코스트를 나타내는 구성기술정보를 기억하는 수단 및,상기 구성기술정보에 기초하여 상기 복수의 프로그램을 실행하는 복수의 스레드 각각의 실행개시 타이밍 및 실행기간을 결정함으로써, 상기 복수의 스레드 각각을 상기 복수의 프로세서내의 1이상의 프로세서에 할당하는 스케줄링 처리를 실행하는 수단을 구비한 것을 특징으로 하는 정보처리시스템.
- 제4항에 있어서, 상기 구성기술정보는 상기 복수의 프로그램에서의 프로그램간의 결합속성을 나타내는 결합속성정보를 더 포함하고,상기 스케줄링 처리를 실행하는 수단이, 상기 결합속성정보에 기초하여 상기 복수의 스레드중에서 서로 협조하여 동작하는 스레드의 집합인 밀결합 스레드 그룹을 선택하는 수단과, 상기 선택된 밀결합 스레드 그룹에 속하는 스레드군이 각각 다른 프로세서에 의해 동시에 실행되도록 상기 복수의 프로세서중에서 상기 밀결합 스레드 그룹에 속하는 스레드군 각각을 할당해야 할 당해 스레드군의 갯수만큼의 프로세서를 결정하는 수단을 포함한 것을 특징으로 하는 정보처리시스템.
- 제5항에 있어서, 상기 복수의 프로세서는 각각 로컬 메모리를 갖추고 있고,상기 밀결합 스레드 그룹에 속하는 스레드군 각각의 실효 어드레스 공간 일부에 상기 밀결합 스레드 그룹에 속하는 다른 스레드가 실행되는 프로세서의 로컬 메모리를 매핑하는 수단을 더 구비한 것을 특징으로 하는 정보처리시스템.
- 복수의 프로세서를 포함하는 컴퓨터에 복수의 처리요소의 조합으로 구성되는 실시간 처리를 실행하기 위한 스레드군을 스케줄링하는 처리를 실행시키는 프로그램을 기록한 기록매체에 있어서,상기 복수의 처리요소 각각에 대응하는 수순을 기술한 복수의 프로그램과 상기 복수의 프로그램간의 입출력관계 및 상기 각 프로그램의 실행에 요하는 코스트를 나타내는 구성기술정보를 입력하는 처리를 상기 컴퓨터에 실행시키는 수순과,상기 구성기술정보에 기초하여 상기 복수의 프로그램을 실행하는 복수의 스레드 각각의 실행개시 타이밍 및 실행기간을 결정함으로써, 상기 복수의 스레드 각각을 1이상의 프로세서에 할당하는 스케줄링 처리를 상기 컴퓨터에 실행시키는 수순을 구비한 것을 특징으로 하는 프로그램을 기록한 기록매체.
- 제7항에 있어서, 상기 구성기술정보는 상기 복수의 프로그램에서의 프로그램간의 결합속성을 나타내는 결합속성정보를 더 포함하고,상기 스케줄링 처리를 상기 컴퓨터에 실행시키는 수순이, 상기 결합속성정보에 기초하여 상기 복수의 스레드중에서 서로 협조하여 동작하는 스레드의 집합인 밀결합 스레드 그룹을 선택하는 처리를 상기 컴퓨터에 실행시키는 수순과, 상기 선택된 밀결합 스레드 그룹에 속하는 스레드군이 각각 다른 프로세서에 의해 동시에 실행되도록 상기 밀결합 스레드 그룹에 속하는 스레드군 각각을 할당해야 할 당해 스레드군의 갯수만큼의 프로세서를 결정하는 처리를 상기 컴퓨터에 실행시키는 수순을 포함한 것을 특징으로 하는 프로그램을 기록한 기록매체.
- 제8항에 있어서, 상기 밀결합 스레드 그룹에 속하는 스레드군이 할당되는 상기 프로세서 각각은 로컬 메모리를 갖추고 있고,상기 밀결합 스레드 그룹에 속하는 스레드군 각각의 실효 어드레스 공간 일부에 상기 밀결합 스레드 그룹에 속하는 다른 스레드가 실행되는 프로세서의 로컬 메모리를 매핑하는 처리를 상기 컴퓨터에 실행시키는 수순을 더 구비한 것을 특징으로 하는 프로그램을 기록한 기록매체.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003185277A JP3889726B2 (ja) | 2003-06-27 | 2003-06-27 | スケジューリング方法および情報処理システム |
JPJP-P-2003-00185277 | 2003-06-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20050004688A KR20050004688A (ko) | 2005-01-12 |
KR100591727B1 true KR100591727B1 (ko) | 2006-06-22 |
Family
ID=33411149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020040013134A KR100591727B1 (ko) | 2003-06-27 | 2004-02-26 | 스케줄링 방법과 이 방법을 실행하기 위한 프로그램을 기록한 기록매체 및 정보처리시스템 |
Country Status (5)
Country | Link |
---|---|
US (2) | US7418705B2 (ko) |
EP (1) | EP1492005A3 (ko) |
JP (1) | JP3889726B2 (ko) |
KR (1) | KR100591727B1 (ko) |
CN (1) | CN1287283C (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101513505B1 (ko) | 2008-11-04 | 2015-04-20 | 삼성전자주식회사 | 프로세서 및 인터럽트 처리 방법 |
Families Citing this family (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7725897B2 (en) * | 2004-11-24 | 2010-05-25 | Kabushiki Kaisha Toshiba | Systems and methods for performing real-time processing using multiple processors |
JP4028444B2 (ja) * | 2003-06-27 | 2007-12-26 | 株式会社東芝 | スケジューリング方法およびリアルタイム処理システム |
JP3889726B2 (ja) | 2003-06-27 | 2007-03-07 | 株式会社東芝 | スケジューリング方法および情報処理システム |
JP4025260B2 (ja) | 2003-08-14 | 2007-12-19 | 株式会社東芝 | スケジューリング方法および情報処理システム |
JP4057989B2 (ja) * | 2003-09-26 | 2008-03-05 | 株式会社東芝 | スケジューリング方法および情報処理システム |
JP4197672B2 (ja) * | 2004-09-30 | 2008-12-17 | 株式会社東芝 | マルチプロセッサ計算機及びプログラム |
JP4197673B2 (ja) * | 2004-09-30 | 2008-12-17 | 株式会社東芝 | マルチプロセッサ計算機及びタスク実行方法 |
US7930700B1 (en) * | 2005-05-23 | 2011-04-19 | Hewlett-Packard Development Company, L.P. | Method of ordering operations |
JP2007026095A (ja) * | 2005-07-15 | 2007-02-01 | Matsushita Electric Ind Co Ltd | 並列演算装置 |
US20070050774A1 (en) * | 2005-08-24 | 2007-03-01 | Eldson John C | Time-aware systems |
US8887133B2 (en) * | 2006-04-28 | 2014-11-11 | Bmc Software, Inc. | Bi-directional communication between change management tool and implementation tools |
JP4358224B2 (ja) * | 2006-12-27 | 2009-11-04 | 株式会社東芝 | ゲストosスケジューリング方法及び仮想計算機モニタ |
WO2009021539A1 (de) * | 2007-08-16 | 2009-02-19 | Siemens Aktiengesellschaft | Kompilieren von computerprogrammen für multicore-prozessoren und deren ausführung |
KR100962531B1 (ko) * | 2007-12-11 | 2010-06-15 | 한국전자통신연구원 | 동적 로드 밸런싱을 지원하는 멀티 쓰레딩 프레임워크를 수행하는 장치 및 이를 이용한 프로세싱 방법 |
GB2454996B (en) * | 2008-01-23 | 2011-12-07 | Ibm | Method for balanced handling of initiative in a non-uniform multiprocessor computing system |
US20110067015A1 (en) * | 2008-02-15 | 2011-03-17 | Masamichi Takagi | Program parallelization apparatus, program parallelization method, and program parallelization program |
JP2010033437A (ja) * | 2008-07-30 | 2010-02-12 | Autonetworks Technologies Ltd | 制御装置、制御方法及びコンピュータプログラム |
US8286172B2 (en) * | 2008-10-02 | 2012-10-09 | Nec Laboratories America, Inc. | Systems and methods for implementing best-effort parallel computing frameworks |
JP5047139B2 (ja) * | 2008-11-27 | 2012-10-10 | 富士ゼロックス株式会社 | 画像処理装置及びプログラム |
US10534644B2 (en) * | 2009-06-25 | 2020-01-14 | Wind River Systems, Inc. | Method and system for a CPU-local storage mechanism |
JP2010231808A (ja) * | 2010-06-16 | 2010-10-14 | Autonetworks Technologies Ltd | プログラム変更方法及びコンピュータプログラム |
JP5644307B2 (ja) | 2010-09-17 | 2014-12-24 | 富士通株式会社 | 情報処理装置、情報処理装置の制御方法及び制御プログラム |
US9317329B2 (en) * | 2010-11-15 | 2016-04-19 | Qualcomm Incorporated | Arbitrating resource acquisition for applications of a multi-processor mobile communications device |
JP2012128645A (ja) | 2010-12-15 | 2012-07-05 | Toshiba Corp | メモリシステム |
US9703723B2 (en) * | 2011-08-29 | 2017-07-11 | International Business Machines Corporation | Method and apparatus for performing mapping within a data processing system having virtual machines |
KR101880452B1 (ko) * | 2012-02-06 | 2018-08-17 | 삼성전자주식회사 | 커널 수행 순서 스케줄링 방법 및 장치 |
CN104995603A (zh) * | 2013-11-14 | 2015-10-21 | 联发科技股份有限公司 | 至少部分基于共享相同数据及/或存取相同存储地址的任务分布的任务调度方法以及多核处理器***中用于分配任务的相关非暂时性计算机可读介质 |
US9898348B2 (en) * | 2014-10-22 | 2018-02-20 | International Business Machines Corporation | Resource mapping in multi-threaded central processor units |
US10019292B2 (en) * | 2015-12-02 | 2018-07-10 | Fts Computertechnik Gmbh | Method for executing a comprehensive real-time computer application by exchanging time-triggered messages among real-time software components |
US11353868B2 (en) * | 2017-04-24 | 2022-06-07 | Intel Corporation | Barriers and synchronization for machine learning at autonomous machines |
US10817310B2 (en) * | 2017-09-01 | 2020-10-27 | Ab Initio Technology Llc | Executing graph-based program specifications |
US10893000B2 (en) | 2017-11-21 | 2021-01-12 | International Business Machines Corporation | Diagonal scaling of resource allocations and application instances in a distributed computing environment |
US10721179B2 (en) | 2017-11-21 | 2020-07-21 | International Business Machines Corporation | Adaptive resource allocation operations based on historical data in a distributed computing environment |
US10733015B2 (en) | 2017-11-21 | 2020-08-04 | International Business Machines Corporation | Prioritizing applications for diagonal scaling in a distributed computing environment |
US10887250B2 (en) | 2017-11-21 | 2021-01-05 | International Business Machines Corporation | Reducing resource allocations and application instances in diagonal scaling in a distributed computing environment |
US10635501B2 (en) | 2017-11-21 | 2020-04-28 | International Business Machines Corporation | Adaptive scaling of workloads in a distributed computing environment |
US10812407B2 (en) | 2017-11-21 | 2020-10-20 | International Business Machines Corporation | Automatic diagonal scaling of workloads in a distributed computing environment |
US11095626B2 (en) * | 2018-09-26 | 2021-08-17 | Marvell Asia Pte, Ltd. | Secure in-line received network packet processing |
CN111752711A (zh) * | 2020-06-24 | 2020-10-09 | 浪潮(北京)电子信息产业有限公司 | 基于numa的线程处理方法、装置、设备及存储介质 |
CN117667345B (zh) * | 2023-12-05 | 2024-07-19 | 成都正扬博创电子技术有限公司 | 一种基于多余度飞控计算机的任务调度***及方法 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2836902B2 (ja) | 1989-05-10 | 1998-12-14 | 三菱電機株式会社 | マルチプロセッサ型動画像符号化装置及びバス制御方法 |
US5471622A (en) * | 1989-10-04 | 1995-11-28 | Paralogic, Inc. | Run-time system having nodes for identifying parallel tasks in a logic program and searching for available nodes to execute the parallel tasks |
US5339415A (en) * | 1990-06-11 | 1994-08-16 | Cray Research, Inc. | Dual level scheduling of processes to multiple parallel regions of a multi-threaded program on a tightly coupled multiprocessor computer system |
JP3312362B2 (ja) | 1994-08-26 | 2002-08-05 | 日本電信電話株式会社 | マルチプロセッサシステム |
US5590323A (en) * | 1994-05-13 | 1996-12-31 | Lucent Technologies Inc. | Optimal parallel processor architecture for real time multitasking |
JPH08180025A (ja) | 1994-12-21 | 1996-07-12 | Toshiba Corp | スケジューリング装置 |
JPH09218861A (ja) * | 1996-02-08 | 1997-08-19 | Fuji Xerox Co Ltd | スケジューラ |
US5826081A (en) * | 1996-05-06 | 1998-10-20 | Sun Microsystems, Inc. | Real time thread dispatcher for multiprocessor applications |
JPH10143380A (ja) | 1996-11-07 | 1998-05-29 | Hitachi Ltd | マルチプロセッサシステム |
JP3733678B2 (ja) | 1997-02-18 | 2006-01-11 | ブラザー工業株式会社 | 並列処理方式 |
JP3053797B2 (ja) | 1998-06-12 | 2000-06-19 | 三菱電機株式会社 | 制御装置の制御ソフトウエア実行システム |
US6205465B1 (en) * | 1998-07-22 | 2001-03-20 | Cisco Technology, Inc. | Component extensible parallel execution of multiple threads assembled from program components specified with partial inter-component sequence information |
JP3205985B2 (ja) | 1998-09-18 | 2001-09-04 | 日本電気株式会社 | 拡散層の形成方法 |
JP2000250841A (ja) * | 1999-03-02 | 2000-09-14 | Hitachi Ltd | ページ生成方法及び装置並びにページ生成プログラムを記録した記憶媒体および電子モールシステム |
JP2003006175A (ja) * | 2001-06-26 | 2003-01-10 | Hitachi Ltd | プロセス実行時のプログラム動作特性に基づくプロセススケジューリング方法及びこれを用いたプログラム及びデータ処理装置 |
JP3632635B2 (ja) * | 2001-07-18 | 2005-03-23 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
JP2004171234A (ja) | 2002-11-19 | 2004-06-17 | Toshiba Corp | マルチプロセッサシステムにおけるタスク割り付け方法、タスク割り付けプログラム及びマルチプロセッサシステム |
JP3892829B2 (ja) | 2003-06-27 | 2007-03-14 | 株式会社東芝 | 情報処理システムおよびメモリ管理方法 |
JP3889726B2 (ja) | 2003-06-27 | 2007-03-07 | 株式会社東芝 | スケジューリング方法および情報処理システム |
JP4028444B2 (ja) | 2003-06-27 | 2007-12-26 | 株式会社東芝 | スケジューリング方法およびリアルタイム処理システム |
JP3920818B2 (ja) | 2003-07-22 | 2007-05-30 | 株式会社東芝 | スケジューリング方法および情報処理システム |
JP4025260B2 (ja) | 2003-08-14 | 2007-12-19 | 株式会社東芝 | スケジューリング方法および情報処理システム |
US7117389B2 (en) * | 2003-09-18 | 2006-10-03 | International Business Machines Corporation | Multiple processor core device having shareable functional units for self-repairing capability |
JP4057989B2 (ja) | 2003-09-26 | 2008-03-05 | 株式会社東芝 | スケジューリング方法および情報処理システム |
JP4197672B2 (ja) | 2004-09-30 | 2008-12-17 | 株式会社東芝 | マルチプロセッサ計算機及びプログラム |
JP4197673B2 (ja) | 2004-09-30 | 2008-12-17 | 株式会社東芝 | マルチプロセッサ計算機及びタスク実行方法 |
-
2003
- 2003-06-27 JP JP2003185277A patent/JP3889726B2/ja not_active Expired - Fee Related
-
2004
- 2004-02-26 KR KR1020040013134A patent/KR100591727B1/ko not_active IP Right Cessation
- 2004-02-27 CN CNB2004100073013A patent/CN1287283C/zh not_active Expired - Fee Related
- 2004-03-25 US US10/808,280 patent/US7418705B2/en not_active Expired - Fee Related
- 2004-03-26 EP EP04251823A patent/EP1492005A3/en not_active Withdrawn
-
2008
- 2008-07-14 US US12/172,285 patent/US8171477B2/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101513505B1 (ko) | 2008-11-04 | 2015-04-20 | 삼성전자주식회사 | 프로세서 및 인터럽트 처리 방법 |
Also Published As
Publication number | Publication date |
---|---|
US7418705B2 (en) | 2008-08-26 |
EP1492005A2 (en) | 2004-12-29 |
JP2005018610A (ja) | 2005-01-20 |
CN1577281A (zh) | 2005-02-09 |
KR20050004688A (ko) | 2005-01-12 |
US8171477B2 (en) | 2012-05-01 |
JP3889726B2 (ja) | 2007-03-07 |
EP1492005A3 (en) | 2006-08-30 |
CN1287283C (zh) | 2006-11-29 |
US20080282249A1 (en) | 2008-11-13 |
US20040268353A1 (en) | 2004-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100591727B1 (ko) | 스케줄링 방법과 이 방법을 실행하기 위한 프로그램을 기록한 기록매체 및 정보처리시스템 | |
KR100623217B1 (ko) | 스케줄링 방법과 이 방법을 실행하기 위한 프로그램을 기록한 기록매체 및 실시간 처리시스템 | |
US8495651B2 (en) | Method and system for performing real-time operation including plural chained tasks using plural processors | |
KR100608220B1 (ko) | 정보처리시스템 및 메모리 관리방법과 이 방법을 실행하기 위한 프로그램을 기록한 기록매체 | |
JP4057989B2 (ja) | スケジューリング方法および情報処理システム | |
US7464379B2 (en) | Method and system for performing real-time operation | |
JP5367816B2 (ja) | オペレーションの保護モードスケジューリング | |
Holenderski | Multi-resource management in embedded real-time systems |
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 | ||
FPAY | Annual fee payment |
Payment date: 20130520 Year of fee payment: 8 |
|
FPAY | Annual fee payment |
Payment date: 20140516 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20150430 Year of fee payment: 10 |
|
LAPS | Lapse due to unpaid annual fee |