KR101150661B1 - 정보 처리 장치 및 메모리 영역 관리 방법 - Google Patents

정보 처리 장치 및 메모리 영역 관리 방법 Download PDF

Info

Publication number
KR101150661B1
KR101150661B1 KR1020067010326A KR20067010326A KR101150661B1 KR 101150661 B1 KR101150661 B1 KR 101150661B1 KR 1020067010326 A KR1020067010326 A KR 1020067010326A KR 20067010326 A KR20067010326 A KR 20067010326A KR 101150661 B1 KR101150661 B1 KR 101150661B1
Authority
KR
South Korea
Prior art keywords
thread
queue
memory area
information
release
Prior art date
Application number
KR1020067010326A
Other languages
English (en)
Other versions
KR20070050002A (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 KR20070050002A publication Critical patent/KR20070050002A/ko
Application granted granted Critical
Publication of KR101150661B1 publication Critical patent/KR101150661B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Debugging And Monitoring (AREA)
  • Advance Control (AREA)

Abstract

복수 쓰레드가 메모리 영역을 병렬로 액세스하는 상황에서 에러가 없는 효율적인 메모리 영역 할당을 실현한다. 쓰레드마다의 진입 시각 정보를 기록한 쓰레드 정보로 이루어지는 쓰레드 리스트를 쓰레드 관리 정보로서 보유하고, 메모리 개방 요구가 있고 미개방의 메모리 영역에 대한 영역 단위마다의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 보유하고, 메모리 영역의 할당에 있어서, 릴리스 큐의 각 큐로 설정된 개방 요구 시각과, 쓰레드 리스트의 최고 진입 시각과의 비교를 실행하고, 개방 요구 시각이 최고 진입 시각 이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당 처리를 실행한다. 본 구성에 의해, 액세스 대상으로 되어 있지 않은 메모리 영역만을 확실하게 선택하여 할당하는 것이 가능하게 된다.
쓰레드, 큐 요소, 오퍼레이팅 시스템, 히프

Description

정보 처리 장치 및 메모리 영역 관리 방법{INFORMATION PROCESSING DEVICE AND MEMORY AREA MANAGEMENT METHOD}
본 발명은, 정보 처리 장치, 메모리 영역 관리 방법, 및 컴퓨터 프로그램에 관한 것이다. 더 상세하게는, 복수의 쓰레드가 평행하게 메모리 영역을 참조하여 갱신하는 구성에서, 적절한 메모리 영역의 할당 및 메모리 관리 처리를 실현하는 정보 처리 장치, 메모리 영역 관리 방법, 및 컴퓨터 프로그램에 관한 것이다.
단일의 혹은 복수의 오퍼레이팅 시스템(OS) 상에서, 복수의 데이터 처리 프로그램을 실행하는 경우, 시스템에서 공통의 하드웨어, 즉 CPU나 메모리 등을 시계열로 순차적으로 절환하여 이용한 처리가 행해진다.
복수 OS 각각의 실행 프로세스(태스크)의 스케줄링은, 예를 들면 파티션 관리 소프트웨어에 의해 실행된다. 1개의 시스템에 OS(α)와 OS(β)의 2개의 오퍼레이팅 시스템이 병존하는 경우, OS(α)의 처리를 파티션 A로 하고, OS(β)의 처리를 파티션 B라고 하면, 파티션 관리 소프트웨어는, 파티션 A와 파티션 B의 실행 스케줄을 결정하고, 결정한 스케줄에 기초하여, 하드웨어 자원을 할당하여 각 OS에서의 처리를 실행한다.
멀티 OS형의 시스템에서의 태스크 관리를 개시한 종래 기술로서, 예를 들면, 특허 문헌1이 있다. 특허 문헌1에는, 복수의 OS의 각각에서 실행되는 태스크 관리에서, 긴급성이 높은 처리를 우선적으로 처리시키기 위한 태스크 스케줄링 방법을 개시하고 있다.
단일의 혹은 복수의 오퍼레이팅 시스템(OS) 상에서, 복수의 프로그램을 실행하는 경우, 프로그램 실행 단위로서 규정되는 쓰레드가 병렬로 복수 존재하고, 개개의 쓰레드가 공통 리소스로서의 메모리를 이용한다. 이러한 상태에서, 예를 들면 임의의 쓰레드가 임의의 특정한 메모리 영역을 액세스하고 있는 사이에, 다른 쓰레드에 대하여 그 메모리 영역의 개방을 행하면 액세스 에러 등의 원인으로 된다. 종래에는, 인터럽트 금지 시간의 설정 등에 의해, 이러한 에러의 발생을 방지하는 구성을 채용하고 있었지만, 인터럽트 금지 시간의 설정에 의한 처리 지연 등의 부차적 문제가 발생한다.
특허 문헌1:일본 특개2003-345612호 공보
<발명의 개시>
<발명이 해결하고자 하는 과제>
본 발명은, 전술한 문제점을 감안하여 이루어진 것으로, 복수의 쓰레드가 평행하게 메모리 영역을 참조하여 갱신하는 구성에서, 액세스 에러 등을 발생시키지 않는 적절한 메모리 영역의 할당 및 메모리 관리 처리를 실현하는 정보 처리 장치, 메모리 영역 관리 방법, 및 컴퓨터 프로그램을 제공하는 것을 목적으로 한다.
본 발명의 제1 측면은,
정보 처리 장치로서,
데이터 처리 단위로서의 쓰레드 정보를 관리하는 쓰레드 관리부와,
메모리 영역의 관리를 실행하는 메모리 영역 관리부를 갖고,
상기 쓰레드 관리부는, 각 데이터 처리 프로그램으로부터의 오퍼레이팅 시스템의 기능 호출 시각으로서의 진입 시각 정보를 쓰레드마다 기록한 쓰레드 리스트를 쓰레드 관리 정보로서 보유하고,
상기 메모리 영역 관리부는, 개방 요구가 있고 미개방의 메모리 영역에 대한 영역 단위마다의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 보유하고, 메모리 영역의 할당 처리에 있어서, 상기 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과, 상기 쓰레드 리스트의 각 요소 중 최고(最古) 진입 시각과의 비교를 실행하고, 개방 요구 시각이 상기 최고 진입 시각 이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당을 실행하는 구성인 것을 특징으로 하는 정보 처리 장치에 있다.
또한, 본 발명의 정보 처리 장치의 일 실시 양태에서, 상기 쓰레드 관리부는, 복수 프로세서 각각에 대응하는 쓰레드 리스트를 생성하고, 각 쓰레드 리스트의 헤더부에, 쓰레드 리스트에 포함되는 쓰레드 정보로 설정된 진입 시각 정보 중 최고의 진입 시각을 기록하고, 그 기록 정보를 다른 프로세서로부터 참조 가능한 설정으로서 관리하는 구성을 갖는 것을 특징으로 한다.
또한, 본 발명의 정보 처리 장치의 일 실시 양태에서, 상기 메모리 영역 관리부는, 상기 쓰레드 관리부가 관리하는 프로세서에 대응하는 쓰레드 리스트의 헤더부에 설정된 최고 진입 시각 정보를 모두 참조하여, 모든 프로세서에 대응하는 쓰레드 리스트의 헤더부에 설정된 최고 진입 시각 정보 중, 가장 오래된 최고 진입 시각을 선택하고, 그 선택 최고 진입 시각과, 상기 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과의 비교를 실행하고, 개방 요구 시각이 상기 선택 최고 진입 시각 이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당을 실행하는 구성인 것을 특징으로 한다.
또한, 본 발명의 정보 처리 장치의 일 실시 양태에서, 상기 쓰레드 관리부는, 상기 쓰레드 리스트의 헤더 및 리스트 구성 요소에 다른 리스트 구성 요소의 식별 정보를 기록하고, 헤더로부터 순차적으로 각 구성 요소를 취득 가능한 구성을 갖는 리스트로서 쓰레드 리스트를 구축하고, 쓰레드의 진입, 후퇴에 있어서, 헤더 또는 리스트 구성 요소로 설정된 식별 정보의 갱신 처리를 실행하는 구성인 것을 특징으로 한다.
또한, 본 발명의 정보 처리 장치의 일 실시 양태에서, 상기 메모리 영역 관리부는, 상기 릴리스 큐의 헤더 및 큐 요소에 다른 큐 요소의 식별 정보를 기록하고, 헤더로부터 순차적으로 각 큐 요소를 취득 가능한 구성을 갖는 리스트로서 릴리스 큐를 구축하고, 새로운 큐의 설정, 또는 큐의 삭제 처리에 있어서, 헤더 또는 큐 요소로 설정된 식별 정보의 갱신 처리를 실행하는 구성인 것을 특징으로 한다.
또한, 본 발명의 정보 처리 장치의 일 실시 양태에서, 상기 메모리 영역 관리부는, 프로세서에 대응하여 설정되는 유한 사이즈의 메모리 영역으로서의 히프 단위에서의 메모리 관리 처리를 실행하는 구성으로서, 개방 요구가 있고 미개방의 히프에 대해 히프 단위의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 유지하고, 메모리 영역의 할당 처리에 있어서, 상기 릴리스 큐에 포함되는 히프 단위의 각 큐 요소에 기록된 메모리 영역의 할당을 실행하는 구성인 것을 특징으로 한다.
또한, 본 발명의 정보 처리 장치의 일 실시 양태에서, 상기 메모리 영역 관리부는, 메모리 영역을 참조하는 포인터로서 weak 포인터를 포함하는 구성에서, 상기 릴리스 큐에 포함되는 큐 요소에 대응하는 메모리 영역을 참조하는 weak 포인터를 구성 요소로 하는 weak 포인터 체인의 검증을 실행하고, 그 weak 포인터 체인에 weak 포인터가 존재하지 않은 경우, 해당 큐 요소를 릴리스 큐로부터 파기하고, 해당 큐 요소에 대응하는 메모리 영역의 개방을 실행하는 구성인 것을 특징으로 한다.
또한, 본 발명의 정보 처리 장치의 일 실시 양태에서, 상기 메모리 영역 관리부는, 메모리 영역을 참조하는 포인터로서 weak 포인터를 포함하는 구성에서, 상기 릴리스 큐에 포함되는 큐 요소에 대응하는 메모리 영역을 참조하는 weak 포인터와 그 weak 포인터의 참조 영역을 포함하는 메모리 영역을 구성 요소로 하는 weak 포인터 체인에 포함되는 메모리 영역의 리타이어 완료 플래그를 검증하고, 그 리타이어 완료 플래그가 리타이어 완료인 것을 나타내는 경우, 해당 큐 요소를 릴리스 큐로부터 파기하고, 해당 큐 요소에 대응하는 메모리 영역의 개방을 실행하는 구성인 것을 특징으로 한다.
또한, 본 발명의 제2 측면은,
메모리 영역 관리 방법으로서,
각 데이터 처리 프로그램으로부터의 오퍼레이팅 시스템의 기능 호출 시각으 로서의 진입 시각 정보를 쓰레드마다 기록한 쓰레드 정보로 이루어지는 쓰레드 리스트를 생성, 갱신하는 쓰레드 관리 스텝과,
메모리 개방 요구가 있고 미개방의 메모리 영역에 대한 영역 단위마다의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 생성, 갱신하는 메모리 영역 관리 스텝과,
메모리 영역의 할당 처리에 있어서, 상기 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과, 상기 쓰레드 리스트의 각 요소 중 최고 진입 시각과의 비교를 실행하고, 개방 요구 시각이 상기 최고 진입 시각 이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당 처리를 실행하는 메모리 영역 할당 스텝
을 갖는 것을 특징으로 하는 메모리 영역 관리 방법에 있다.
또한, 본 발명의 메모리 영역 관리 방법의 일 실시 양태에서, 상기 쓰레드 관리 스텝은, 복수 프로세서 각각에 대응하는 쓰레드 리스트를 생성하고, 각 쓰레드 리스트의 헤더부에, 쓰레드 리스트에 포함되는 쓰레드 정보로 설정된 진입 시각 정보 중 최고의 진입 시각을 기록하고, 그 기록 정보를 다른 프로세서로부터 참조 가능한 설정으로서 관리하는 것을 특징으로 한다.
또한, 본 발명의 메모리 영역 관리 방법의 일 실시 양태에서, 상기 메모리 영역 할당 스텝은, 프로세서에 대응하는 쓰레드 리스트의 헤더부에 설정된 최고 진입 시각 정보를 모두 참조하여, 모든 프로세서에 대응하는 쓰레드 리스트의 헤더부에 설정된 최고 진입 시각 정보 중, 가장 오래된 최고 진입 시각을 선택하고, 그 선택 최고 진입 시각과, 상기 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과의 비교를 실행하고, 개방 요구 시각이 상기 선택 최고 진입 시각 이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당을 실행하는 것을 특징으로 한다.
또한, 본 발명의 메모리 영역 관리 방법의 일 실시 양태에서, 상기 쓰레드 관리 스텝은, 상기 쓰레드 리스트의 헤더 및 리스트 구성 요소에 다른 리스트 구성 요소의 식별 정보를 기록하고, 헤더로부터 순차적으로 각 구성 요소를 취득 가능한 구성을 갖는 리스트로서 쓰레드 리스트를 구축하고, 쓰레드의 진입, 후퇴에 있어서, 헤더 또는 리스트 구성 요소로 설정된 식별 정보의 갱신 처리를 실행하는 스텝을 포함하는 것을 특징으로 한다.
또한, 본 발명의 메모리 영역 관리 방법의 일 실시 양태에서, 상기 메모리 영역 관리 스텝은, 상기 릴리스 큐의 헤더 및 큐 요소에 다른 큐 요소의 식별 정보를 기록하고, 헤더로부터 순차적으로 각 큐 요소를 취득 가능한 구성을 갖는 리스트로서 릴리스 큐를 구축하고, 새로운 큐의 설정, 또는 큐의 삭제 처리에 있어서, 헤더 또는 큐 요소로 설정된 식별 정보의 갱신 처리를 실행하는 스텝을 포함하는 것을 특징으로 한다.
또한, 본 발명의 메모리 영역 관리 방법의 일 실시 양태에서, 상기 메모리 영역 관리 스텝은, 프로세서에 대응하여 설정되는 유한 사이즈의 메모리 영역으로서의 히프 단위에서의 메모리 관리 처리를 실행하고, 개방 요구가 있고 미개방의 히프에 대해 히프 단위의 개방 요구 시각을 기록한 대기 행렬로서 릴리스 큐를 메모리 영역 관리 정보로서 유지하고, 상기 메모리 영역 할당 스텝은, 상기 릴리스 큐에 포함되는 히프 단위의 각 큐 요소에 기록된 메모리 영역의 할당을 실행하는 것을 특징으로 한다.
또한, 본 발명의 메모리 영역 관리 방법의 일 실시 양태에서, 상기 메모리 영역 관리 스텝은, 메모리 영역을 참조하는 포인터로서 weak 포인터를 포함하는 구성에서, 상기 릴리스 큐에 포함되는 큐 요소에 대응하는 메모리 영역을 참조하는 weak 포인터를 구성 요소로 하는 weak 포인터 체인의 검증을 실행하고, 그 week 포인터 체인에 weak 포인터가 존재하지 않은 경우, 해당 큐 요소를 릴리스 큐로부터 파기하고, 해당 큐 요소에 대응하는 메모리 영역의 개방을 실행하는 스텝을 포함하는 것을 특징으로 한다.
또한, 본 발명의 메모리 영역 관리 방법의 일 실시 양태에서, 상기 메모리 영역 관리 스텝은, 메모리 영역을 참조하는 포인터로서 weak 포인터를 포함하는 구성에서, 상기 릴리스 큐에 포함되는 큐 요소에 대응하는 메모리 영역을 참조하는 weak 포인터와 그 weak 포인터의 참조 영역을 포함하는 메모리 영역을 구성 요소로 하는 weak 포인터 체인에 포함되는 메모리 영역의 리타이어 완료 플래그를 검증하고, 그 리타이어 완료 플래그가 리타이어 완료인 것을 나타내는 경우, 해당 큐 요소를 릴리스 큐로부터 파기하고, 해당 큐 요소에 대응하는 메모리 영역의 개방을 실행하는 스텝을 포함하는 것을 특징으로 한다.
또한, 본 발명의 제3 측면은,
메모리 영역 관리 처리를 실행하는 컴퓨터 프로그램으로서,
각 데이터 처리 프로그램으로부터의 오퍼레이팅 시스템의 기능 호출 시각으로서의 진입 시각 정보를 쓰레드마다 기록한 쓰레드 정보로 이루어지는 쓰레드 리 스트를 생성, 갱신하는 쓰레드 관리 스텝과,
메모리 개방 요구가 있고 미개방의 메모리 영역에 대한 영역 단위마다의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 생성, 갱신하는 메모리 영역 관리 스텝과,
메모리 영역의 할당 처리에 있어서, 상기 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과, 상기 쓰레드 리스트의 각 요소 중 최고 진입 시각과의 비교를 실행하고, 개방 요구 시각이 상기 최고 진입 시각 이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당 처리를 실행하는 메모리 영역 할당 스텝
을 갖는 것을 특징으로 하는 컴퓨터 프로그램에 있다.
또한, 본 발명의 컴퓨터 프로그램은, 예를 들면, 여러 가지 프로그램 코드를 실행 가능한 범용 컴퓨터 시스템에 대하여, 컴퓨터 판독 가능한 형식으로 제공하는 기억 매체, 통신 매체, 예를 들면, CD나 FD, MO 등의 기억 매체, 혹은, 네트워크 등의 통신 매체에 의해 제공 가능한 컴퓨터 프로그램이다. 이러한 프로그램을 컴퓨터 판독 가능한 형식으로 제공함으로써, 컴퓨터 시스템 상에서 프로그램에 따른 처리가 실현된다.
본 발명의 또 다른 목적, 특징이나 이점은, 후술하는 본 발명의 실시예나 첨부하는 도면에 기초하는, 보다 상세한 설명에 의해 명백해질 것이다. 또한, 본 명세서에서 시스템이란, 복수의 장치의 논리적 집합 구성으로서, 각 구성의 장치가 동일 케이싱 내에 있다고는 한정하지 않는다.
<발명의 효과>
본 발명의 구성에 따르면, 데이터 처리 단위로서의 쓰레드마다의 진입 시각 정보를 기록한 쓰레드 정보로 이루어지는 쓰레드 리스트를 쓰레드 관리 정보로서 보유하고, 메모리 개방 요구가 있고 미개방의 메모리 영역에 대한 영역 단위마다의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 보유하고, 메모리 영역의 할당 처리에 있어서, 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과, 쓰레드 리스트의 최고 진입 시각과의 비교를 실행하고, 개방 요구 시각이 최고 진입 시각 이전에 설정된 큐 요소에만 대응하는 메모리 영역의 할당 처리를 실행하는 구성으로 했으므로, 모든 쓰레드에서 액세스 대상으로 되어 있지 않은 메모리 영역만을 확실하게 선택하여 할당 처리를 실행하는 것이 가능해져, 각 쓰레드에서의 액세스 에러의 발생 등이 없는 안전한 메모리 영역의 할당 처리가 가능하게 된다.
도 1은 본 발명의 정보 처리 장치의 구성예를 도시하는 도면.
도 2는 프로세서 모듈의 구성예를 도시하는 도면.
도 3은 본 발명의 정보 처리 장치에서의 소프트웨어 구성을 설명하는 도면.
도 4는 일반적인 메모리 영역의 액세스 처리예에 대해 설명하는 도면.
도 5는 일반적인 메모리 영역의 액세스 처리예에 대해 설명하는 도면.
도 6은 본 발명의 정보 처리 장치에서의 쓰레드 관리부가 관리하는 정보에 대해 설명하는 도면.
도 7은 본 발명의 정보 처리 장치에서의 쓰레드 관리부가 관리하는 정보의 상세 내용에 대해 설명하는 도면.
도 8은 본 발명의 정보 처리 장치에서의 메모리 영역 관리부가 관리하는 정보의 상세 내용에 대해 설명하는 도면.
도 9는 본 발명의 정보 처리 장치에서의 쓰레드 관리부가 실행하는 쓰레드 정보 진입 처리의 시퀀스를 설명하는 플로우도.
도 10은 본 발명의 정보 처리 장치에서의 쓰레드 관리부가 실행하는 쓰레드 정보 진입 처리의 상세 내용을 설명하는 도면.
도 11은 본 발명의 정보 처리 장치에서의 쓰레드 관리부가 실행하는 쓰레드 정보 후퇴 처리의 시퀀스를 설명하는 플로우도.
도 12는 본 발명의 정보 처리 장치에서의 쓰레드 관리부가 실행하는 쓰레드 정보 후퇴 처리의 상세 내용을 설명하는 도면.
도 13은 본 발명의 정보 처리 장치에서의 메모리 영역 관리부가 실행하는 메모리 영역 개방 요구 등록 처리의 시퀀스를 설명하는 플로우도.
도 14는 본 발명의 정보 처리 장치에서의 메모리 영역 관리부가 실행하는 메모리 영역 할당 처리의 상세 내용을 설명하는 플로우도.
도 15는 weak 포인터의 구성 및 weak 포인터 체인의 구성에 대해 설명하는 도면.
도 16은 weak 포인터로부터의 포인터 값 취득 처리 시퀀스에 대해 설명하는 플로우차트를 도시하는 도면.
도 17은 weak 포인터를 갖는 구성에서의 릴리스 큐의 갱신(플래시) 처리 시 퀀스에 대해 설명하는 플로우차트를 도시하는 도면.
<발명을 실시하기 위한 최량의 형태>
이하, 도면을 참조하면서, 본 발명의 정보 처리 장치, 메모리 영역 관리 방법, 및 컴퓨터 프로그램의 상세에 대해 설명한다.
우선, 도 1을 참조하여, 본 발명의 정보 처리 장치의 하드웨어 구성예에 대해 설명한다. 프로세서 모듈(101)은, 복수의 프로세서(Processing Unit)로 구성된 모듈로서, ROM(Read Only Memory)(104), HDD(123) 등에 기억되어 있는 프로그램에 따라, 오퍼레이팅 시스템(OS:Operating System), OS 대응의 어플리케이션 프로그램 등, 각종 프로그램에 따른 데이터 처리를 실행한다. 프로세서 모듈(101)의 상세에 대해서는, 또한, 후단에서, 도 2를 참조하여 설명한다.
그래픽 엔진(102)은, 프로세서 모듈(101)로부터 입력되는 지시에 따라, 출력부(122)를 구성하는 표시 디바이스에 화면 출력하기 위한 데이터 생성, 예를 들면 3D 그래픽 묘화 처리를 실행한다. 메인 메모리(DRAM)(103)에는, 프로세서 모듈(101)에서 실행하는 프로그램이나 실행에서 적절하게 변화하는 파라미터 등을 저장한다. 이들은 CPU 버스 등으로 구성되는 호스트 버스(111)에 의해 서로 접속되어 있다.
호스트 버스(111)는, 브릿지(105)를 통하여, PCI(Peripheral Component Interconnect/Interface) 버스 등의 외부 버스(112)에 접속되어 있다. 브릿지(105)는, 호스트 버스(111), 외부 버스(112) 사이, 및 컨트롤러(106), 메모리 카드(107), 그 밖의 디바이스와의 데이터 입출력 제어를 실행한다.
입력부(121)는, 키보드, 포인팅 디바이스 등의 유저에 의해 조작되는 입력 디바이스로부터의 입력 정보를 입력한다. 출력부(122)는, 액정 표시 장치나 CRT(Cathode Ray Tube) 등의 화상 출력부와 스피커 등으로 이루어지는 음성 출력부로 구성된다.
HDD(Hard Disk Drive)(123)는, 하드디스크를 내장하고, 하드디스크를 구동하여, 프로세서 모듈(101)에 의해 실행하는 프로그램이나 정보를 기록 또는 재생시킨다.
드라이브(124)는, 장착되어 있는 자기 디스크, 광 디스크, 광 자기 디스크, 또는 반도체 메모리 등의 리무버블 기록 매체(127)에 기록되어 있는 데이터 또는 프로그램을 판독하고, 그 데이터 또는 프로그램을, 인터페이스(113), 외부 버스(112), 브릿지(105), 및 호스트 버스(111)를 통하여 접속되어 있는 메인 메모리(DRAM)(103)에 공급한다.
접속 포트(125)는, 외부 접속 기기(128)를 접속하는 포트로서, USB, lEEE 1394 등의 접속부를 갖는다. 접속 포트(125)는, 인터페이스(113), 외부 버스(112), 브릿지(105), 및 호스트 버스(111)를 통하여 프로세서 모듈(101) 등에 접속되어 있다. 통신부(126)는, 네트워크에 접속되며, 프로세서 모듈(101)이나, HDD(123) 등으로부터 제공되는 데이터의 송신, 외부로부터의 데이터 수신을 실행한다.
다음으로, 프로세서 모듈의 구성예에 대해, 도 2를 참조하여 설명한다. 도 2에 도시하는 바와 같이, 프로세서 모듈(200)은, 복수의 메인 프로세서로 이루어지 는 메인 프로세서 그룹(201), 복수의 서브 프로세서로 이루어지는 복수의 서브 프로세서 그룹(202~20n)에 의해 구성되어 있다. 각각에 메모리 컨트롤러, 2차 캐쉬가 설치되어 있다. 각 프로세서 그룹(201~20n)의 각각은 예를 들면 8개의 프로세서 유닛을 갖고, 크로스바 아키텍처, 혹은 버킷 교환식 네트워크 등에 의해 접속되어 있다. 메인 프로세서 그룹(201)의 메인 프로세서의 지시 하에, 복수의 서브 프로세서 그룹(202~20n)의 1 이상의 서브 프로세서가 선택되고, 소정의 프로그램이 실행된다.
각 프로세서 그룹에 설치된 메모리 플로우 컨트롤러는, 도 1에 도시하는 메인 메모리(103)와의 데이터 입출력 제어를 실행하고, 2차 캐쉬는, 각 프로세서 그룹에서의 처리용 데이터의 기억 영역으로서 이용된다.
전술한 바와 같이, 단일의 혹은 복수의 오페레이팅 시스템(OS) 상에서, 복수의 프로그램을 실행하는 경우, 프로그램 실행 단위로서 규정되는 쓰레드가 병렬로 복수 존재하고, 개개의 쓰레드가 공통 리소스로서의 메모리, 예를 들면 도 1에 도시하는 메인 메모리(DRAM)를 이용한다. 이러한 상태에서는, 예를 들면 임의의 쓰레드가 임의의 특정한 메모리 영역을 액세스하고 있는 사이에, 다른 쓰레드가 그 메모리 영역의 개방 처리를 행하면 액세스 에러 등이 발생한다. 종래에는, 인터럽트 금지 시간의 설정 등에 의해, 이러한 에러의 발생을 방지하고 있었지만, 인터럽트 금지 시간의 설정에 의한 처리 지연 등의 부차적 문제가 발생한다.
본 발명에서는, 쓰레드에 대응한 적절한 메모리 관리를 실행함으로써, 효율적인 데이터 처리를 실현한다. 도 3 이하를 참조하여, 쓰레드 대응의 적절한 메모 리 할당, 개방 처리를 포함하는 메모리 관리 처리의 상세 내용에 대해 설명한다.
도 3은, 본 발명의 정보 처리 장치에서의 소프트웨어 스택을 도시하는 도면이다. 오퍼레이팅 시스템(OS)(310)과, 오퍼레이팅 시스템(OS)(310) 상에서 실행되는 어플리케이션 프로그램(320)에 의해 구성된다. 오퍼레이팅 시스템(OS)(310)은, 멀티 태스크 제어, 파일 시스템 관리, 메모리 관리, 입출력 제어 처리 등을 실행하는 커넬(311)을 갖는다.
커넬(311)은, 쓰레드가 관리 처리를 실행하는 쓰레드 관리부(시스템콜 디스패처)(312)와, 메모리 영역이 관리 처리를 실행하는 메모리 영역 관리부(히프 관리 모듈)(313)와, 그 밖의 커넬 모듈(314)을 갖는다.
오브젝트 지향형의 메모리 관리 처리에서는, 리소스를 오브젝트로서 취급하고, 히프라고 불리는 유한 사이즈의 메모리 영역에 기초하여 메모리 관리를 행한다. 오브젝트의 히프에의 할당 관리를 행하는 것이 메모리 영역 관리부(히프 관리 모듈)(313)이다. 메모리 영역 관리부(히프 관리 모듈)(313)는 유한한 히프를 적절하게 개방하면서, 메모리 영역(히프)을 요구하는 각 쓰레드에 대하여 효율적인 히프 할당을 행한다.
일반적인 쓰레드에 대한 메모리 할당 처리에 대해, 도 4, 도 5를 참조하여 설명한다. 도 4에 도시하는 바와 같이, 오브젝트로서 설정되는 메모리 영역 x(351), 메모리 영역 y(352), 메모리 영역 z(353)는, 오브젝트에의 포인터 정보로서 설정되는 ID표(350)를 통하여 프로그램이 실행하는 쓰레드로부터 액세스 가능하게 된다.
임의의 쓰레드에서 액세스 중 메모리 영역에 대하여, 다른 쓰레드가 액세스하려고 한 경우의 액세스를 회피하기 위해, OS의 커넬은, ID표에 로크를 걸어 다른 쓰레드로부터의 액세스를 방지한다. 따라서, 다른 쓰레드는, 로크를 해제할 때까지, 메모리 액세스를 실행할 수 없어, 처리가 대기되게 된다.
도 5는, 2단계의 ID표를 갖는 구성을 도시하고 있다. ID표a(371)는, 오브젝트로서의 메모리 영역 x(361)와 메모리 영역 z(362) 등을 액세스하기 위해 적용되고, 또한, 메모리 영역 z(362)는, 제2 ID표b(372)를 갖고, 제2 ID표b(372)를 적용함으로써, 메모리 영역 a(363)와 메모리 영역 b(364)가 액세스 된다. 이러한 구성에서도, OS의 커넬은, ID표에 로크를 걸어 다른 쓰레드로부터의 액세스를 방지한다. 따라서, 다른 쓰레드는, 로크가 해제될 때까지, 메모리 액세스를 실행할 수 없어, 처리가 대기되게 된다.
예를 들면, 개개의 메모리 영역, 예를 들면 도 5에서의 메모리 영역 a(363)나 메모리 영역 b(364)가 이용되어 있지 않은 경우에도, 메모리 영역 x(361)가 이용 중인 경우에는, 커넬이 실행하는 메모리 관리 처리는, ID표a(371)에 로크를 거는 처리를 실행하게 되어, 결과적으로 이용 가능한 메모리 영역까지도 유효하게 이용할 수 없다고 하는 상태로 설정되게 된다.
본 발명에서는, 이러한 메모리의 비효율적인 이용 구성을 배제하고, 각 쓰레드에 대한 효율적인 메모리 할당을 가능하게 한다. 이 처리는, 도 3에 도시하는 커넬(311)의 쓰레드 관리부(시스템콜 디스패처)(312)와, 메모리 영역 관리부(히프 관리 모듈)(313)에 의해 실행된다. 이하, 구체적인 처리에 대해 도면을 참조하여 설명한다.
우선, 도 6, 도 7을 참조하여, 쓰레드 관리부(시스템콜 디스패처)(312)에서의 처리에 대해 설명한다.
쓰레드 관리부(시스템콜 디스패처)(312)는, 정보 처리 장치에 구비된 쓰레드를 실행하는 프로세서마다 쓰레드의 관리를 실행한다. 쓰레드 관리부(시스템콜 디스패처)(312)는, 프로세서마다 쓰레드 관리 정보를 보유한다.
쓰레드 관리 정보에 대해, 도 6 및 도 7을 참조하여 설명한다. 도 6은, 각 프로세서마다의 쓰레드 관리 정보를 구성하는 쓰레드 리스트를 도시하고 있다. 도면에서는 프로세서1, 프로세서2에만 대응하는 쓰레드 리스트를 나타내고 있지만, 쓰레드 관리부(시스템콜 디스패처)(312)는, 쓰레드의 실행 프로세서에 대응하는 관리 정보로서의 쓰레드 리스트를 생성하여 유지한다.
도 6의 (a)는, 프로세서1의 쓰레드 관리 정보로서의 쓰레드 리스트로서, 프로세서1에서 하이퍼바이저 내를 주행 중인 개개의 쓰레드의 진입 시각 정보의 연결 데이터, 및 가장 오래된 진입 시각 정보로 이루어지는 리스트에 의해 구성된다. 도 6의 (b)는, 프로세서2의 쓰레드 관리 정보로서의 쓰레드 리스트로서, 프로세서2에서 하이퍼버이저 내를 주행 중인 개개의 쓰레드의 진입 시각 정보의 연결 데이터, 및 가장 오래된 진입 시각 정보로 이루어지는 리스트에 의해 구성된다. 쓰레드의 진입 시각 정보란, 여러 가지 데이터 처리 프로그램으로서의 어플리케이션 프로그램으로부터의 오퍼레이팅 시스템의 기능 호출 시각에 상당한다. 어느 쪽의 리스트에서도, 가장 오래된 진입 시각 정보에 대해서는, 다른 프로세서로부터도 참조 가능한 정보로 된다. 쓰레드는 전술한 바와 같이 논리 파티션 대응의 데이터 처리 실행 단위로서, 쓰레드를 실행하기 위해서는 프로세서, 메모리 영역 등 여러 가지 리소스의 확보가 필요하게 된다.
쓰레드를 실행 예정인 프로세서가 결정되면, 그 프로세서를 적용한 쓰레드에서 이용 가능한 메모리 영역의 할당을 행하는 것이 필요하게 된다. 쓰레드 관리부(시스템콜 디스패처)(312)는, 각 쓰레드를 프로세서마다 구분하고, 메모리 영역의 할당을 대기하는 쓰레드 정보로서의 쓰레드 리스트를 생성하여 쓰레드의 관리를 실행한다.
하이퍼바이저는, 논리 파티션과 하드웨어 사이에 위치하는 특권층으로서, 논리 파티션의 관리 처리를 실행한다. 쓰레드는, 논리 파티션이 실행하는 처리로서, 도 1, 도 2를 참조하여 설명한 프로세서 모듈에서 실행되는 각 쓰레드는, 논리 파티션에 의해 실행된다. 각 논리 파티션에는, 시스템 내의 하드웨어 자원(리소스:계산기 자원으로서의 메인 프로세서, 서브 프로세서, 메모리, 디바이스 등이 할당되고, 각 논리 파티션은 할당된 리소스를 적용한 처리를 실행한다.
쓰레드 관리부(시스템콜 디스패처)(312)는, 논리 파티션과 하드웨어 사이에 위치하는 특권층으로서의 하이퍼바이저에 의해 식별된 쓰레드에 관한 진입 시각 정보를 기록하고, 유지한다.
도 7을 참조하여, 쓰레드 관리부(시스템 콜디스 퍼처)(312)가 보유하는 쓰레드 리스트 정보의 상세 내용에 대해 설명한다. 도 6을 참조하여 설명한 바와 같이, 각 프로세서마다의 쓰레드 관리 정보로서의 쓰레드 리스트는, 개개의 쓰레드의 진입 시각 정보의 연결 데이터, 및 가장 오래된 진입 시각 정보로 이루어진다. 이들의 관리 정보는, 도 7에 도시하는 프로세서마다 설정되는 변수(400)와, 쓰레드마다 설정되는 변수(410)의 조합에 기초하여 구성된다. 또한, 전술한 바와 같이 쓰레드의 진입 시각 정보란, 여러 가지 데이터 처리 프로그램으로서의 어플리케이션 프로그램으로부터의 오퍼레이팅 시스템의 기능 호출 시각에 상당한다.
프로세서마다 설정되는 변수(400)는, 헤더(head)(401)와, 최고 진입 시각(oldest_time)(402)에 의해 구성된다. 헤더(head)(401)는, 리스트의 선두 요소에의 포인터 정보를 포함하는 정보이다. 최고 진입 시각(oldest_time)(402)은, 리스트에 설정된 요소 중 최고의 진입 시각 정보가 기록된다. 리스트는, 쓰레드의 진입, 후퇴 처리에 의해, 적절하게 갱신되고, 갱신 처리에서 리스트를 구성하는 요소 중 최고의 진입 시각이 변경된 경우에는, 최고 진입 시각(oldest_time)(402)이 더불어 갱신된다. 또한, 액세스 처리의 효율을 고려하여, 헤더(head)(401)와, 최고 진입 시각(oldest_time)(402)은, 별개의 캐쉬 라인에 배치하고, 또한, 헤더(head)(401)가 배치되는 캐쉬 라인에는, 다른 프로세서로부터 참조할 필요가 없는 변수만을 모은다. 최고 진입 시각(oldest_time)(402)이 배치되는 캐쉬 라인은 다른 프로세서로부터 참조 가능한 캐쉬 라인으로서 설정된다.
쓰레드마다 설정되는 변수(410)는, 도면에 도시하는 바와 같이, 선행 쓰레드 식별 정보(predecessor)(411)와, 진입 시각(time)(412)에 의해 구성된다. 선행 쓰레드 식별 정보(predecessor)(411)는 선행하는 쓰레드 대응 정보의 식별자(예를 들면 포인터)이다. 도면에 도시하는 바와 같이, 리스트에는, 최신의 진입 시각을 갖 는 쓰레드로부터 오래된 진입 시각을 갖는 쓰레드의 순으로 쓰레드 정보가 배열되어 있어, 각각의 쓰레드 정보는, 선행하는 쓰레드 정보의 선행 쓰레드 식별 정보(predecessor)(411)에 의해 특정하고, 취득하는 것이 가능하게 된다. 리스트의 선두의 쓰레드 정보에 대해서는, 가장 오래된 진입 시각 정보 중 헤더(head)(401)에 기초하여, 특정하고 취득하는 것이 가능하다. 또한, 말미의 쓰레드 정보에는 선행하는 쓰레드가 존재하지 않으므로 [선행 쓰레드 식별 정보(predecessor)= NULL]가 설정된다. 진입 시각(time)(412)은, 각 쓰레드의 진입 시각을 나타내고 있다.
다음으로 도 8을 참조하여, 메모리 영역 관리부(히프 관리 모듈)(313)가 관리하는 정보에 대해 설명한다. 전술한 바와 같이, 오브젝트 지향형의 메모리 관리 처리에서는, 리소스를 오브젝트로서 취급하고, 히프라고 불리는 유한 사이즈의 메모리 영역에 기초하여 메모리 관리를 행한다. 오브젝트의 히프에의 할당 관리를 행하는 것이 메모리 영역 관리부(히프 관리 모듈)(313)이다. 메모리 영역 관리부(히프 관리 모듈)(313)는 유한한 히프를 적절하게 개방하면서, 메모리 영역(히프)을 요구하는 각 쓰레드에 대하여 효율적인 히프 할당을 행한다.
메모리 영역 관리부(히프 관리 모듈)(313)는, 프로세서에 대응하여 설정되는 히프 관리 정보를 보유한다. 즉, 프로세서 수에 대응하는 히프 관리 정보를 갖는다. 히프 관리 정보에는, 도 8에 도시하는 릴리스 큐가 포함된다. 릴리스 큐는, 해방이 요구되었지만, 아직 해방되어 있지 않은 메모리 영역(히프)의 정보에 의해 구성되는 큐 정보이다.
도 8을 참조하여 메모리 영역 관리부(히프 관리 모듈)(313)가 보유하는 릴리스 큐의 구성에 대해 설명한다. 도 8에 도시하는 릴리스 큐는, 1개의 프로세서에 대응하여 설정되는 히프 관리 정보로서 설정되는 릴리스 큐이다. 복수의 프로세서에 대해, 도 8에 도시하는 릴리스 큐가 개별적으로 설정된다.
릴리스 큐는, 헤더 정보(release_queue_head)(451)와, 큐 요소(460)의 연결 리스트로서 설정된다. 큐 요소(460)에는, 히프 식별자(heap_id)(461), 개방 요구 시각(release_time)(462), 후속 큐 정보(successor)(463), 메모리 영역 정보(464)가 포함된다.
히프 식별자(heap_id)(461)는, 프로세서에 대응하여 설정되는 메모리 영역으로서의 히프 식별 정보이다. 개방 요구 시각(release_time)(462)은, 히프의 개방이 요구된 시간을 나타낸다. 쓰레드로부터 히프의 이용 요구가 있었던 시간이다. 후속 큐 정보(successor)(463)는, 릴리스 큐의 후속 큐에의 포인터이다. 메모리 영역 정보(464)는, 히프 ID(heap_id)(461)에 대응하는 프로세서가 이용 가능한 메모리 영역에 대한 액세스 정보이다.
헤더 정보(release_queue_head)(451)는, 히프 식별자(heap_id)를 포함하고, 선두 큐의 포인터 정보를 포함하는 정보로서 설정된다. 도면에 도시하는 바와 같이, 헤더 정보(release_queue_head)(451)로부터, 각 큐 요소의 후속 큐 정보(successor)(463)를 찾아감으로써, 모든 큐 요소를 취득할 수 있다.
각 쓰레드는, 리소스 배분에 의해, 이용 가능한 프로세서가 할당되고, 프로세서에 대응하는 히프 영역이 특정되고, 쓰레드가 실행 대기의 상태로 되어, 이 시 점에서, 할당 프로세서에 대응하는 릴리스 큐에 큐 요소가 설정되게 된다.
본 발명에서는, 커넬(311)의 쓰레드 관리부(시스템콜 디스패처)(312)와, 메모리 영역 관리부(히프 관리 모듈)(313)와의 제어에 의해, 쓰레드에 대한 효율적인 메모리 할당을 실행한다. 이하, 도 9 이하의 도면을 참조하여, 커넬(311)의 쓰레드 관리부(시스템콜 디스패처)(312)와, 메모리 영역 관리부(히프 관리 모듈)(313)가 실행하는 처리에 대해 설명한다.
우선, 도 9~도 12를 참조하여, 쓰레드 관리부(시스템콜 디스패처)(312)의 처리에 대해 설명한다. 쓰레드 관리부(시스템콜 디스패처)(312)는, 도 6, 도 7을 참조하여 설명한 쓰레드 리스트에 대한 쓰레드 정보의 진입 처리와, 쓰레드 정보의 후퇴 처리를 실행한다.
쓰레드 정보의 진입 처리는, 어플리케이션 프로그램이 OS의 기능을 호출한 직후에 행해지는 처리이다. 즉 어플리케이션 프로그램이 OS의 기능을 호출함으로써 프로세서를 적용한 데이터 처리로서의 쓰레드가 발생한다. 이 쓰레드는 메모리 영역의 개방 대기 상태로 설정되고, 이 쓰레드에 대응하는 쓰레드 정보가 쓰레드 관리부(시스템콜 디스패처)(312)의 관리 정보로서 새로 설정된다.
쓰레드 정보의 후퇴 처리는, OS에 의한 시스템 콜 처리가 완료되어, 어플리케이션 프로그램으로 제어가 되돌아가기 직전에 행해지는 처리이다. 즉, OS에 의한 메모리 할당 처리가 종료하여, 어플리케이션 프로그램으로 제어가 되돌아감으로써 쓰레드는, OS에 의해 할당된 프로세서, 메모리 영역 등을 이용한 쓰레드의 실행이 가능하게 된다. OS에 의한 시스템 콜 처리가 완료되어, 어플리케이션 프로그램 으로 제어가 되돌아갈 때에는, 쓰레드에는 메모리 영역(히프)이 할당 완료로 되므로, 메모리 영역의 대기 상태에 있는 쓰레드 정보를 관리하는 쓰레드 관리부(시스템콜 디스패처)(312)는 그 쓰레드 정보를 쓰레드 리스트로부터 삭제한다. 이 처리가 후퇴 처리이다.
우선, 도 9의 플로우차트 및 도 10을 참조하여, 쓰레드의 진입 처리 시퀀스에 대해 설명한다. 쓰레드의 진입 처리는, 도 10에 도시하는 바와 같이 새로운 쓰레드 정보(510)를 쓰레드 리스트에 추가하는 처리로서 실행된다. 도 10의 (a)에 도시하는 새로운 쓰레드 정보(510)의 추가 위치는, 프로세서 대응 데이터(500)에 포함되는 헤더 정보(501)에 의해 포인트되는 위치이다. 이 추가 처리에 의해, 도 10의 (b)에 도시하는 설정의 쓰레드 리스트가 구축된다. 새로운 쓰레드 정보(510)를 추가할 때에는, 이미 존재하는 쓰레드 리스트 중 각종 정보를 갱신할 필요가 발생한다. 이 갱신 처리의 수순을 나타내는 것이 도 9의 플로우차트이다.
도 9에 도시하는 플로우차트의 각 스텝의 처리에 대해 설명한다. 또한, 도 9에 도시하는 일련의 처리는, 인터럽트 금지 상태에서 실행한다. 스텝 S101에서, 변수 [p]를 진입 처리를 실행하는 프로세서의 식별자로서 설정한다. 전술한 바와 같이, 쓰레드 관리부(시스템콜 디스패처)(312)는 쓰레드 리스트를 프로세서마다 설정하여 관리하고 있고, 쓰레드 진입 처리를 실행하는 쓰레드 리스트의 특정을 위해 변수 [p]를 진입 처리를 실행하는 프로세서의 식별자로서 설정한다. 스텝 S102에서는, 변수 [thread]를 진입 처리를 실행하는 현행 쓰레드의 식별자로서 설정한다. 즉, 변수 [thread]는, 도 10에 도시하는 쓰레드(510)의 식별자로서 설정된다.
스텝 S103에서는,
변수 [old_head]=선행 쓰레드 식별 정보(predecessor_thread_id[thread])=head[p]로서 설정한다.
이 처리는, 도 10의 (a)에 도시하는 헤더(501)에 설정되어 있는 값 [head[p]]를 새로운 쓰레드 정보(510)의 선행 쓰레드 정보(511)로 하고, 또한, 이것을 변수 [old_head]로 설정하는 것을 의미한다.
스텝 S104에서는,
변수 [head[p]]=thread
로 한다. 이 처리는, 도 10의 (a)에 도시하는 헤더(501)의 설정치를 진입하는 쓰레드 정보(510)의 식별자로서 설정하는 처리에 상당한다.
스텝 S105에서는,
변수 time[thread]=현재 시각의 설정을 행한다. 이 처리는, 도 10의 (a)에 도시하는 진입 쓰레드 정보(510)의 진입 시각 정보(512)에 현재 시각을 설정하는 처리에 상당한다.
스텝 S106에서는, 스텝 S103에서 설정한 변수 [old_head]가 NULL인지의 여부를 판정한다. 스텝 S103에서 설정한 변수 [old_head]는, 진입 처리 이전에 도 10의 (a)의 헤더(501)에 설정되어 있던 정보이다. 진입 처리 이전에 도 10의 (a)의 헤더(501)에 [NULL]이 설정되어 있던 경우에는, 쓰레드 리스트에 전혀 쓰레드 정보가 존재하지 않았던 상태이고, 도 10에 도시하는 진입 쓰레드 정보(510)가 쓰레드 리스트에 설정되는 유일한 쓰레드 정보로 되는 것을 의미한다. 이 경우에는, 도 10의 (a)에 도시하는 프로세서 대응 데이터(500)에 포함되는 최고 진입 시각(502)을 스텝 S105에서, 진입 쓰레드의 진입 시각 정보(512)로서 설정한 시각 정보, 즉 time[thread]로 설정한다.
한편, 변수 [old_head]가 NULL이 아닌 경우에는, 진입 쓰레드 정보(510)보다 오래된 진입 시각을 갖는 쓰레드 정보가 쓰레드 리스트에 존재하고 있는 것을 의미하므로, 도 10의 (a)에 도시하는 프로세서 대응 데이터(500)에 포함되는 최고 진입 시각(502)을 갱신하는 처리를 실행하지 않고 처리를 종료한다.
이 진입 처리의 결과로서, 도 10의 (b)에 도시하는 바와 같이 진입 쓰레드 정보(510)가, 프로세서 대응 데이터(500)의 헤더(501)에 의해 취득 가능한 위치에 설정된 쓰레드 리스트가 생성된다.
다음으로, 도 11, 도 12를 참조하여, 쓰레드 관리부(시스템콜 디스패처)(312)가 실행하는 쓰레드의 후퇴 처리의 상세 내용에 대해 설명한다. 쓰레드의 후퇴 처리는, 전술한 바와 같이 OS에 의한 시스템 콜 처리가 완료되어, 어플리케이션 프로그램으로 제어가 되돌아가기 직전에 행해진다. 즉, OS에 의한 메모리 할당 처리가 종료하여, 어플리케이션 프로그램으로 제어가 되돌아감으로써 쓰레드는, OS에 의해 할당된 프로세서, 메모리 영역 등을 이용한 쓰레드의 실행이 가능하게 된다. OS에 의한 시스템 콜 처리가 완료되어, 어플리케이션 프로그램으로 제어가 되돌아갈 때에는, 쓰레드에는 메모리 영역(히프)이 할당 완료로 되므로, 메모리 영역의 대기 상태에 있는 쓰레드 정보를 관리하는 쓰레드 관리부(시스템콜 디스패처)(312)는 그 쓰레드 정보를 쓰레드 리스트로부터 삭제한다. 이 처리가 후퇴 처 리이다.
도 11을 참조하여 후퇴 처리의 처리 시퀀스를 설명한다. 또한, 도 11에 도시하는 일련의 처리는, 인터럽트 금지 상태에서 실행한다. 도 11의 스텝 S201, S202는, 후퇴 처리를 실행하는 프로세서와 쓰레드 정보의 특정 처리로서, 스텝 S201에서, 변수 [p]를 후퇴 처리를 실행하는 프로세서의 식별자로서 설정한다. 스텝 S202에서, 변수 [thread]를 후퇴 처리를 실행하는 현행 쓰레드의 식별자로서 설정한다.
스텝 S203은, 후퇴 처리의 대상으로 되는 쓰레드의 위치를 판별하는 처리이다. 즉, 후퇴 처리의 대상으로 되는 쓰레드 정보가 쓰레드 리스트의 어떤 위치에 있는가에 따라, 스텝 S211~S213의 처리를 실행할지, 스텝 S221~S224의 처리를 실행할지가 결정된다. 구체적으로는, 후퇴 처리의 대상으로 되는 쓰레드 정보가 도 12의 (a) 또는 도 12의 (b) 중 어느 위치에 있는가에 따라 처리가 서로 다르다.
도 12의 (a)는, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)가, 쓰레드 리스트 중 선두 위치에 있는 경우로서, 프로세서 대응 데이터(540)의 헤더(541)가 지정하는 위치에 존재하는 경우이다. 이 경우에는, 프로세서 대응 데이터(540)의 헤더(541)의 헤더 정보 [head[p]]는, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)의 식별 정보 [thread]로서 설정되어 있고, 스텝 S203의 판정은 Yes로 되어, 스텝 S211~S213의 처리를 실행한다.
도 12의 (b)는, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)가, 쓰레드 리스트 중 선두 위치 이외에 있는 경우이다. 이 경우에는, 프로세서 대응 데이 터(540)의 헤더(541)의 헤더 정보 [head[p]]는, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)의 식별 정보 [thread]로서 설정되어 있지 않고, 스텝 S203의 판정은 No로 되어, 스텝 S221~S224의 처리를 실행한다.
우선, 도 12의 (a)에 도시하는 바와 같이, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)가, 쓰레드 리스트 중 선두 위치에 있는 경우의 처리에 대해 설명한다. 스텝 S211에서, 프로세서 대응 데이터(540)의 헤더(541)의 헤더 정보 [head[p]]를, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)에 설정된 선행 쓰레드 식별 정보[predecessor[thread]](551)를 설정한다. 이것은, 도 12의 (a)에서, 프로세서 대응 데이터(540)의 헤더(541)에 쓰레드 정보(560)를 지시하는 정보를 설정하는 것에 상당한다. 또한, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)의 선행 쓰레드가 없는 경우에는, 선행 쓰레드 식별 정보 [predecessor[thread]](551)에는 [NULL]이 설정되어 있으므로, 헤더(541)의 헤더 정보 [head[p]]에도 [NULL]이 설정되게 된다.
다음으로, 스텝 S212에서, 프로세서 대응 데이터(540)의 헤더(541)의 헤더 정보 [head[p]]가 NULL로서 설정되어 있는지의 여부를 판정한다. NULL로서 설정되어 있는 경우에는, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)의 후퇴에 의해, 쓰레드 리스트에는, 전혀 쓰레드 정보가 존재하지 않은 상태로 설정된 것을 의미하고, 이 경우에는, 프로세서 대응 데이터(540)의 최고 진입 시각 [oldest_time]=0으로 설정하여 처리를 종료한다.
스텝 S212에서, 프로세서 대응 데이터(540)의 헤더(541)의 헤더 정보 [head[p]]가 NULL로서 설정되어 있지 않은 경우에는, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)의 후퇴 후에도, 쓰레드 리스트에 쓰레드 정보가 존재하고 있고, 이 경우에는, 프로세서 대응 데이터(540)의 최고 진입 시각[oldest_time]의 재기입은 실행하지 않고 처리를 종료한다.
다음으로, 도 12의 (b)에 도시하는 바와 같이, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)가, 쓰레드 리스트 중 선두 위치 이외에 있는 경우의 처리에 대해 설명한다. 스텝 S221에서, 변수 [succ]를 리스트 내에서, 후퇴 처리 쓰레드의 직전에 있는 쓰레드로 한다. 또한, 여기서는 리스트의 선두 방향을 앞으로 한다. 즉, 직전에 있는 쓰레드란 도 12의 (b)에 도시하는 쓰레드 정보(570)에 상당한다.
스텝 S222에서는, 후퇴 처리 쓰레드의 직전에 있는 쓰레드의 선행 쓰레드 식별 정보 [predecessor[succ]]를 후퇴 처리 쓰레드의 선행 쓰레드 식별 정보 [predecessor[thread]]로 갱신하는 처리를 실행한다. 이 처리는, 도 12의 (b)에서, 쓰레드 정보(570)의 선행 쓰레드 식별 정보에 쓰레드 정보(580)를 지시하는 정보를 설정하는 것에 상당한다. 또한, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)의 선행 쓰레드가 없는 경우에는, 선행 쓰레드 식별 정보 [predecessor[thread]](551)에는 [NULL]이 설정되어 있으므로, 쓰레드 정보(570)의 선행 쓰레드 식별 정보에도 [NULL]이 설정되게 된다.
다음으로, 스텝 S223에서, 후퇴 처리 쓰레드의 선행 쓰레드 식별 정보 [predecessor[thread]]가 NULL로서 설정되어 있는지의 여부를 판정한다. NULL로서 설정되어 있는 경우에는, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)의 후퇴가 최고의 진입 시각을 갖는 쓰레드의 후퇴로 되는 것을 의미하고, 이 경우에는, 프로세서 대응 데이터(540)의 최고 진입 시각[oldest_time]=time[succ]로 하는 설정을 실행하여 처리를 종료한다. 즉, 이 처리는, 도 12의 (b)의 쓰레드 정보(580)가 존재하지 않은 경우로서, 쓰레드 정보(570)의 진입 시각(572)이 프로세서 대응 데이터(540)의 최고 진입 시각 [oldest_time]으로서 설정된다.
스텝 S223에서, 후퇴 처리 쓰레드의 선행 쓰레드 식별 정보 [predecessor[thread]]가 NULL로서 설정되어 있지 않은 경우에는, 후퇴 처리의 대상으로 되는 쓰레드 정보(550)보다 오래된 진입 시각을 갖는 쓰레드, 즉, 도 12의 (b)에 도시하는 쓰레드 정보(580)가 존재하는 것을 의미하고, 이 경우에는, 프로세서 대응 데이터(540)의 최고 진입 시각 [oldest_time]의 재기입은 실행하지 않고 처리를 종료한다.
다음으로 도 13 이하를 참조하여, 메모리 영역 관리부(히프 관리 모듈)(313)가 실행하는 처리에 대해 설명한다. 메모리 영역 관리부(히프 관리 모듈)(313)는, 프로세서에 대응하여 설정되는 히프 관리 정보로서, 도 8에 도시하는 릴리스 큐를 보유한다. 릴리스 큐는, 해방이 요구되었지만, 아직 해방되어 있지 않은 메모리 영역(히프)의 정보에 의해 구성되는 큐 정보이다.
메모리 영역 관리부(히프 관리 모듈)(313)는, 메모리 영역(히프)의 해방 요구 등록 처리, 및 할당 처리를 실행한다. 메모리 영역(히프)의 해방 요구 등록 처리는, 도 8을 참조하여 설명한 릴리스 큐에 새로운 큐를 추가하는 처리로서, 메모리 영역(히프)의 할당 처리는, 쓰레드에 대한 메모리 영역의 할당 처리로서, 필요 에 따라 릴리스 큐로부터 큐를 삭제하는 처리로서 실행된다.
우선, 도 13의 플로우차트를 참조하여 메모리 영역(히프)의 해방 요구 등록 처리 시퀀스에 대해 설명한다. 스텝 S301에서, 새로운 릴리스 큐로서 설정하는 큐 요소의 히프 ID[hid]를 개방 요구가 있었던 메모리 영역의 히프 식별자로서 설정한다. 전술한 바와 같이, 메모리 영역(히프)의 관리 정보로서의 릴리스 큐는 프로세서 대응의 히프마다의 관리 정보로서 설정되어 있고, 메모리 영역 관리부(히프 관리 모듈)(313)는, 각 히프마다 메모리 영역의 개방, 할당 처리를 실행하는 것으로서, 릴리스 큐에 추가하는 큐의 히프 lD로서, 개방 요구 대상으로 되는 히프 ID를 설정한다.
스텝 S302에서는, 새로운 큐 요소의 후속 큐 정보(successor)에 릴리스 큐 헤더(release_queue_head[hid])를 설정한다. 스텝 S303에서, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 개방 영역의 후속 큐 정보(successor)와 동일한 상태로 설정되어 있는 경우에는, 릴리스 큐 헤더(release_queue_head[hid])에 새로운 큐 요소의 포인터 정보를 대입하여, 메모리 영역 정보 등의 각종 정보를 큐로 설정하여 처리를 종료한다.
스텝 S303에서, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 개방 영역의 후속 큐 정보(successor)와 동일한 상태로 설정되어 있지 않은 경우에는, 스텝 S302로 되돌아가, 재차 스텝 S302, S303의 처리를 반복하여 실행하여, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 개방 영역의 후속 큐 정보(successor)와 동일한 상태로 설정되어 있는 것을 확인하여, 메모리 영역 정보 등의 각종 정보 를 큐로 설정하여 처리를 종료한다.
스텝 S303에서, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 개방 영역의 후속 큐 정보(successor)와 동일한 상태로 설정되어 있지 않은 경우란, 다른 프로세서에 의한 다른 큐 설정 처리 등이 동시기에 행해지고, 개방 영역의 후속 큐 정보(successor)의 재기입이 실행되어 있는 경우 등에 발생할 수 있다.
스텝 S303에서, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 개방 영역의 후속 큐 정보(successor)와 동일한 상태로 설정되어 있는 것의 확인에 기초하여, 릴리스 큐에 새로운 큐 설정을 행함으로써, 프로세서에 대응하는 메모리 영역을 확실하게 확보(예약)할 수 있다.
다음으로, 도 14를 참조하여, 메모리 영역 관리부(히프 관리 모듈)(313)가 실행하는 메모 영역(히프)의 할당 처리 시퀀스에 대해 설명한다. 스텝 S401에서, 변수 [hid]를 메모리 영역 할당을 실행하는 프로세서 식별자와 동등하게 설정한다. 메모리 영역의 할당 처리는 프로세서마다 실행되는 것으로서, 우선, 메모리 영역의 할당 처리의 대상으로 되는 프로세서를 특정한다.
스텝 S402에서는, 할당 요구가 이루어진 메모리 영역 사이즈와 동일 사이즈의 미사용 영역이 메모리에 존재하는지의 여부를 판정한다. 즉 메모리 영역 관리부(히프 관리 모듈)(313)는, 쓰레드가 요구하는 메모리 영역 사이즈와 동일 사이즈의 미사용 영역이 메모리에 존재하는지 여부의 확인을 실행하여, 존재하는 경우에는, 스텝 S405로 진행하여, 미사용 영역을 스텝 S401에서 설정한 식별자를 갖는 프로세서를 적용하는 쓰레드의 데이터 처리용의 메모리 영역으로서 할당한다.
스텝 S402에서, 할당 요구가 이루어진 메모리 영역 사이즈와 동일 사이즈의 미사용 영역이 메모리에 존재하지 않는다고 판정한 경우에는, 스텝 S403으로 진행하여, 할당 요구가 이루어진 메모리 영역 사이즈가, 미리 정해진 임계치보다 작은지 여부를 판정한다. 작은 경우에는, 스텝 S404로 진행하여, 할당 요구가 이루어진 메모리 영역 사이즈를 만족하는 미사용 영역이 히프 영역에 존재하는지의 여부를 판정하고, 존재하는 경우에는, 스텝 S405에서, 미사용 히프 영역으로서 설정되어 있는 메모리 영역의 할당 처리를 행한다. 이 처리는, 요구 메모리 사이즈가 미리 정한 임계치보다 작게 미사용 히프 영역의 할당만으로 요구가 만족되는 경우에 실행된다.
스텝 S403에서, 할당 요구가 이루어진 메모리 영역 사이즈가, 미리 정해진 임계치보다 작지 않은 경우, 및, 할당 요구가 이루어진 메모리 영역 사이즈가, 미리 정해진 임계치보다 작지만, 스텝 S404에서, 할당 요구가 이루어진 메모리 영역 사이즈를 만족하는 미사용 영역이 히프 영역에 존재하지 않은 경우에는, 스텝 S406 이하의 처리를 실행하여 메모리 영역의 할당 처리가 실행된다. 스텝 S406의 처리는, 릴리스 큐 및 쓰레드 리스트를 참조한 처리로서 실행된다.
스텝 S406에서, 변수 [head]를 릴리스 큐 헤더(release_queue_head[hid])로서 설정하고, 또한, 릴리스 큐 헤더(release_queue_head[hid])를 O으로 하는 설정을 실행한다.
스텝 S407에서, 변수 [time]을 모든 프로세서에 대응하는 쓰레드 리스트에 설정된 최고 진입 시각 중 최소치, 즉 가장 오래된 시각으로 설정한다.
스텝 S408에서, 릴리스 큐에 대해, 각각 헤더로부터 찾아갈 수 있는 각 요소로 설정된 개방 요구 시각(release_time)에 대해, 스텝 S407에서 설정한 [time]=모든 프로세서에 대응하는 쓰레드 리스트에 설정된 최고 진입 시각 중 최소치와 비교하고, 개방 요구 시각(release_time)이 [time]보다 작은 것만을 선택하여, 릴리스 큐로부터 삭제하여 이들의 큐에 대응하는 메모리 영역을 개방하여 메모리 요구 쓰레드에 대하여 할당한다.
모든 프로세서의 최고 진입 시각 중 최소치보다 전에 개방 요구가 있었던 메모리 영역에 대해서는, 모든 쓰레드에서 액세스 대상으로 되어 있지 않은 것이 보증되므로, 이들을 선택하여 개방, 할당 처리를 실행함으로써, 안전한 메모리 영역의 할당이 가능하게 된다.
스텝 S409에서는, 스텝 S408에서, 릴리스 큐로부터 삭제한 큐를 제외한 잔존 큐의 말미의 후속 큐 정보(successor)를 릴리스 큐 헤더(release_queue_head[hid])로 설정한다. 스텝 S410에서, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 말미의 큐의 후속 큐 정보(successor)와 동일한 상태로 설정되어 있는 경우에는, 스텝 S408에서, 릴리스 큐로부터 삭제한 큐를 제외한 잔존 큐의 선두의 큐에 대한 포인터를 릴리스 큐 헤더(rclease_queue_head[hid])로 설정하여 처리를 종료한다.
스텝 S410에서, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 말미의 큐의 후속 큐 정보(successor)와 동일한 상태로 설정되어 있지 않은 경우에는, 스텝 S409로 되돌아가, 스텝 S409, S410의 처리를 반복하여 실행하여, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 말미의 큐의 후속 큐 정보(successor)와 동 일한 상태로 설정되어 있는 것을 확인하여, 메모리 영역 정보 등의 각종 정보를 큐로 설정하여 처리를 종료한다.
스텝 S410에서, 릴리스 큐 헤더(release_queue_head[hid])의 값이, 말미의 큐의 후속 큐 정보(successor)와 동일한 상태로 설정되어 있지 않은 경우란, 다른 프로세서에 의한 다른 큐 설정, 삭제 처리 등이 동시기에 행해져, 후속 큐 정보(successor)의 재기입이 실행되어 있는 경우 등에 발생할 수 있다.
이와 같이, 메모리 영역 관리부(히프 관리 모듈)(313)는, 릴리스 큐의 각 요소로 설정된 개방 요구 시각(release_time)이, 모든 프로세서에 대응하는 쓰레드 리스트에 설정된 최고 진입 시각 중 최소치보다 작은 시각 정보를 갖는 것만을 선택하여, 이들을 릴리스 큐로부터 삭제하여 이들의 큐에 대응하는 메모리 영역을 개방하여 메모리 요구 쓰레드에 대하여 할당하는 구성으로 하였으므로, 모든 쓰레드에서 액세스 대상으로 되어 있지 않은 메모리 영역만을 확실하게 선택하여 할당 처리를 실행하는 것이 가능해져, 각 쓰레드에서의 액세스 에러의 발생 등이 없는 안전한 메모리 영역의 할당이 가능하게 된다.
다음으로, Weak 포인터의 적용을 서포트하는 메모리 관리 처리 구성에 대해 설명한다. 우선, 도 8을 참조하여 메모리 영역 관리부(히프 관리 모듈)(313)가 보유하는 릴리스 큐의 구성에 대해 설명하였다. 릴리스 큐는, 도 8을 참조하여 설명한 바와 같이, 헤더 정보(release_queue_head)(451)와, 큐 요소(460)의 연결 리스트로서 설정된다. 큐 요소(460)에는, 히프 식별자(heap_id)(461), 개방 요구 시각(release time)(462), 후속 큐 정보(successor)(463), 메모리 영역 정보(464)가 포함된다.
히프 식별자(heap_id)(461)는, 프로세서에 대응하여 설정되는 메모리 영역으로서의 히프 식별 정보이다. 개방 요구 시각(release_time)(462)은, 히프의 개방이 요구된 시간을 나타낸다. 쓰레드로부터 히프의 이용 요구가 있었던 시간이다. 후속 큐 정보(successor)(463)는, 릴리스 큐의 후속 큐에의 포인터이다. 메모리 영역 정보(464)는, 히프 ID(heap_id)(461)에 대응하는 프로세서가 이용 가능한 메모리 영역에 대한 액세스 정보이다.
헤더 정보(release_queue_head)(451)는, 히프 식별자(heap_id)를 포함하고, 선두 큐의 포인터 정보를 포함하는 정보로서 설정된다. 도면에 도시하는 바와 같이, 헤더 정보(release_queue_head)(451)로부터, 각 큐 요소의 후속 큐 정보(successor)(463)를 찾아감으로써, 모든 큐 요소를 취득할 수 있다.
각 쓰레드는, 리소스 배분에 의해, 이용 가능한 프로세서가 할당되고, 프로세서에 대응하는 히프 영역이 특정되고, 쓰레드가 실행 대기의 상태로 되어, 이 시점에서, 할당 프로세서에 대응하는 릴리스 큐에 큐 요소가 설정되게 된다.
도 8을 참조하여 설명한 릴리스 큐를 메모리 영역 관리 정보로서 보유하고, 메모리 영역의 할당 처리에 있어서, 릴리스 큐에 포함되는 각 큐의 요소로 설정된 해방 요구 시각과, 쓰레드 리스트의 최고 진입 시각과의 비교를 실행하여, 개방 요구 시각이 최고 진입 시각 이전에 설정된 큐 요소에만 대응하는 메모리 영역의 할당 처리를 실행하는 구성으로 함으로써, 모든 쓰레드에서 액세스 대상으로 되어 있지 않은 메모리 영역만을 확실하게 선택하여 할당 처리를 실행하는 것이 가능해져, 각 쓰레드에서의 액세스 에러의 발생이 없는 안전한 메모리 영역의 할당 처리가 실현된다.
메모리 영역이 액세스 대상으로 되어 있는지 여부의 판정 처리를 위해, 각 히프(메모리 영역)에 대응하여 설정되는 참조 카운터(rf:Reference Counter)의 값을 적용하는 것이 가능하다. 참조 카운터가 1 이상이면, 그 히프(메모리 영역)가 참조되어 있다. 즉 참조하여 있는 쓰레드가 존재하는 것을 확인할 수 있다.
히프(메모리 영역)에 대한 액세스를 행하는 경우, 히프(메모리 영역)에 대한 어드레스 정보를 보유한 포인터 오브젝트로부터, 메모리 어드레스를 취득하여 취득 어드레스를 레지스터에 설정하고, 레지스터 설정 어드레스에 따라서 액세스를 실행한다. 이 처리 기간에, 다른 쓰레드로부터의 메모리 액세스가 발생하면, 액세스 앞의 메모리 정보가 예정되어 있던 것으로 변경되는 경우가 있지만, 앞의 도 8을 참조하여 설명한 릴리스 큐로 설정된 해방 요구 시각과, 쓰레드 리스트의 최고 진입 시각과의 비교를 실행함으로써, 확실한 메모리 액세스가 가능하게 된다.
포인터 오브젝트의 하나로서, weak 포인터가 있다. weak 포인터는, 히프(메모리 영역)에 대응하여 설정되는 전술한 참조 카운터(rf)의 값을 증가시키지 않는 특수한 포인터이다. 즉, 히프(메모리 영역)를 참조하는 포인터라 하더라도, 통상적인 포인터와 서로 다른 weak 포인터인 경우는, 히프(메모리 영역)에 대응하는 참조 카운터(rf)의 값에 반영되지 않고, 참조 카운터(rf)의 값에 기초하여, 참조의 유무를 판별할 수 없다. 단, weak 포인터의 히프 참조가 해제되었을 때에, weak 포인터가 보유하고 있었던 히프(메모리 영역)에 대응하는 어드레스 정보는 0(NULL) 으로 갱신된다. 즉, weak 포인터는, 히프의 참조 카운터에 대한 영향을 미치지 않고 자기가 보유하는 포인터 정보를 0(NULL)으로 갱신한다.
이러한 성질을 갖는 weak 포인터를 적용한 경우, 메모리를 참조할 때에 weak 포인터가 보유하고 있는 포인터 정보를 취득하여 레지스터에 저장하면, weak 포인터의 보유 정보는 바로 0(NULL)으로 교체되게 되고, 그 후에는, 그 weak 포인터의 포인터 정보를 적용한 메모리 액세스를 할 수 없게 되고, 또한, weak 포인터의 포인터 정보가 소실되므로, 앞서 설명한 도 8의 릴리스 큐의 구성 변경이 스무쓰하게 실행되지 않는다고 하는 문제가 발생한다. 이 문제를 해결하는 구성예에 대해 이하, 설명한다.
weak 포인터를 적용한 경우에도 확실한 메모리 액세스, 릴리스 큐 갱신을 가능하게 하는 구성에 대해, 도 15 이하를 참조하여 설명한다. 도 15는, weak 포인터 및 weak 포인터에 의해 참조되는 참조 메모리 영역을 갖는 히프(메모리 영역)(600)를 나타내고 있다. 도 8의 릴리스 큐에서의 각 큐 요소(460)의 메모리 영역 정보(464)가, 도 15의 히프(메모리 영역)(600)의 구성을 취한다.
각 weak 포인터 a~n은, 모두 동일한 참조 메모리 영역을 참조하는 weak 포인터이다. weak 포인터 a~n은, 도면에 도시한 바와 같이, 포인터 식별자로서의 포인터 ID를 포함하는 포인터 헤더 이외에, 이하의 멤버 변수를 설정한 구성을 갖는다.
(a) 석세서(Successor)
(b) 프레데세서(Predecessor)
(c) 오브젝트 포인터(Object Pointer)
오브젝트 포인터는, 참조하는 메모리 영역 정보로서의 오브젝트 멤버 변수이다. 이 일군의 weak 포인터 a~n은, 모두 동일한 참조 메모리 영역을 참조하는 weak 포인터로서, 동일한 오브젝트 포인터가 설정된다.
석세서(Successor), 프레데세서(Predecessor)는, 동일한 참조 메모리 영역을 갖는 weak 포인터와, weak 포인터에 의해 참조되는 참조 메모리 영역을 갖는 히프(메모리 영역)와의 체인을 구성하기 위한 포인터 변수이다. 석세서(Successor)는, 후속 오브젝트로서 weak 포인터 또는 히프의 식별 정보로서, 프레데세서(Predecessor)는, 선행 오브젝트로서 weak 포인터 또는 히프의 식별 정보가 설정된다.
석세서(Successor), 프레데세서(Predecessor)는, 동일 참조 메모리 영역을 갖는 weak 포인터와, weak 포인터에 의해 참조되는 참조 메모리 영역을 갖는 히프(메모리 영역)에 설정되고, 이들의 일군의 weak 포인터 및 히프를 서로 연결하는 쌍방향의 링크, 즉 체인(회로)이 구축된다. 이 체인(회로)을 weak 포인터 체인이라고 부른다.
또한, 히프(메모리 영역)에는, 리타이어 완료 플래그, 참조 카운터의 각 정보가 설정된다. 참조 카운터는 전술한 바와 같이, 메모리 영역의 참조 상황에 따른 값을 갖는다. 단, weak 포인터에 대한 참조 정보는 반영되지 않고, weak 포인터 이외의 참조 정보가 반영된다. 리타이어 완료 플래그는, weak 포인터를 포함하는 포인터에 의한 참조가 전혀 없는 경우, 즉 리타이어 완료인지 여부를 판별하는 플래그로서, 예를 들면 리타이어 완료인 경우 [1], 리아티어 완료가 아닌 경우 [0] 으로 설정된다. 또한, 새로 메모리 할당이 행해지는 초기화 공정에서, 리타이어 완료 플래그가 [0]으로 설정된다.
다음으로, 이러한 weak 포인터 체인을 구성 가능하게 한 설정에서, weak 포인터로부터의 포인터 값, 즉 참조 메모리 영역을 참조하기 위해 필요한 어드레스에 상당하는 오브젝트 멤버 변수로서의 오브젝트 포인터를 취득하는 처리 수순에 대해 도 16에 도시하는 플로우차트를 참조하여 설명한다.
weak 포인터로부터의 포인터 값의 취득에 있어서는, 우선 스텝 S501에서, weak 포인터의 오브젝트 포인터, 즉, 오브젝트 멤버 변수가 O이 아닐 것(조건 1), 또한, weak 포인터 체인에 의해 관련지어진 히프에 설정된 참조 카운터(rf)의 값이 1 이상일 것(조건 2), 이들의 2 조건을 만족하는지의 여부를 판정한다.
이들의 2 조건을 만족하는 경우에는, 스텝 S502로 진행하여, 오브젝트의 값, 즉, weak 포인터에 설정된 참조 메모리 영역을 참조하기 위해 필요한 어드레스에 상당하는 오브젝트 멤버 변수로서의 오브젝트 포인터를 되돌려준다. 한편, 이 2 조건을 만족하지 않은 경우에는, 스텝 S503으로 진행하여 [0]을 되돌려준다.
weak 포인터의 오브젝트 포인터, 즉, 오브젝트 멤버 변수가 O인 경우, 혹은, weak 포인터 체인에 의해 관련지어진 히프에 설정된 참조 카운터(rf)의 값이 0인 경우에는, 스텝 S503에서 [0]이 되돌려지게 된다. 참조 카운터(rf)의 값이 O인 경우에는, weak 포인터 이외의 포인터에 의한 참조가 없는 경우에 상당하지만, weak 포인터에 의한 참조의 유무는 판별되지 않는다. 이 상황에서, weak 포인터로부터의 포인터 값을 취득하게 되면, weak 포인터의 오브젝트 포인터가 O으로 설정되고, 그 후, 그 weak 포인터의 포인터 정보를 적용한 메모리 액세스를 할 수 없게 되고, 또한, weak 포인터의 포인터 정보의 소실에 의해 릴리스 큐의 구성 변경이 스무쓰하게 실행되지 않는다고 하는 문제가 발생한다. 이 문제의 발생을 방지하기 위해, 이러한 상황에서는, 포인터 값의 취득을 행하지 않는 구성으로 하고 있다.
다음으로, 도 17을 참조하여, 릴리스 큐의 플래시 처리에 대해 설명한다. 릴리스 큐는, 도 8을 참조하여 설명한 릴리스 큐에 상당하고, 메모리 영역 관리부(히프 관리 모듈)(313)가 관리하는 정보이다. 전술한 바와 같이, 오브젝트 지향형의 메모리 관리 처리에서는, 리소스를 오브젝트로서 취급하고, 히프라고 불리는 유한 사이즈의 메모리 영역에 기초하여 메모리 관리를 행한다. 오브젝트의 히프에의 할당 관리를 행하는 것이 메모리 영역 관리부(히프 관리 모듈)(313)이다. 메모리 영역 관리부(히프 관리 모듈)(313)는 유한한 히프를 적절하게 개방하면서, 메모리 영역(히프)을 요구하는 각 쓰레드에 대하여 효율적인 히프 할당을 행한다.
메모리 영역 관리부(히프 관리 모듈)(313)는, 프로세서에 대응하여 설정되는 히프 관리 정보를 보유한다. 즉, 프로세서 수에 대응하는 히프 관리 정보를 갖는다. 히프 관리 정보에는, 도 8에 도시하는 릴리스 큐가 포함된다. 릴리스 큐는, 해방을 요구받았지만, 아직 해방되어 있지 않은 메모리 영역(히프)의 정보에 의해 구성되는 큐 정보이다.
weak 포인터를 포함하는 구성에서는, 릴리스 큐의 플래시, 즉 갱신 처리에 있어서, 특별한 처리를 실행한다. 이 릴리스 큐 플래시 처리 수순에 대해 도 17에 도시하는 플로우차트를 참조하여 설명한다. 도 17에 도시하는 처리는, 릴리스 큐 에 포함되는 모든 오브젝트(릴리스 큐 요소)에 대해 순차적으로 실행되는 처리이다.
우선, 스텝 S601에서, 릴리스 큐를 비우게 한다. 즉, 도 8의 릴리스 큐 헤더(451)의 선두 큐의 포인터 정보를 비우게 하여, 큐를 분리한다.
다음으로, 스텝 S602에서, 처리 대상의 릴리스 큐로 설정되어 있던 오브젝트(릴리스 큐 요소)의 릴리스 시각, 즉 개방 요구 시각(release_time)에 대해, 프로세서에 대응하는 쓰레드 리스트에 설정된 최고 진입 시각과 비교한다. 릴리스 시각이 최고 진입 시각보다 작은 경우, 스텝 S603으로 진행한다.
스텝 S603에서는,
(조건 a) 처리 대상의 오브젝트(릴리스 큐 요소)의 히프 ID에 의해 특정되는 히프(메모리 영역)에 설정된 리타이어 완료 플래그가 리타이어 완료를 나타내고 있다. 또는,
(조건 b) 히프(메모리 영역)에 대응하여 설정되는 weak 포인터 체인에 1개도 weak 포인터가 존재하지 않는다. 즉, weak 포인터 체인이 비어 있음.
이들 조건 a 또는 b 중 어느 것이 만족되는지를 판정한다.
이들 조건 a 또는 b 중 어느 것이 만족되는 경우에는, 스텝 S604로 진행하여, 오브젝트를 파기, 즉, 릴리스 큐로 설정된 그 오브젝트(릴리스 큐 요소)에 대응하는 메모리 영역을 개방하여, 릴리스 큐로부터 그 오브젝트(릴리스 큐 요소)를 삭제한다.
이들 조건 a 또는 b 중 어느 것도 만족되지 않는 경우에는, 스텝 S62로 진행 하여, 히프(메모리 영역)에 대응하여 설정되는 weak 포인터 체인에 포함되는 모든 weak 포인터의 오브젝트 멤버 변수로서의 오브젝트 포인터의 값을 [O]으로 설정하고, 스텝 S622에서, 리타이어 완료 플래그를 [1]로 설정하고, 또한, 스텝 S623에서, 릴리스 큐로 설정된 그 오브젝트(릴리스 큐 요소)의 릴리스 시각, 즉 개방 요구 시각(release_time)에 현재 시각을 대입하여, 스텝 S624에서, 그 오브젝트(릴리스 큐 요소)를 재차, 릴리스 큐로 설정한다.
또한, 스텝 S602의 판정 처리에서, 처리 대상의 릴리스 큐로 설정된 오브젝트(릴리스 큐 요소)의 릴리스 시각, 즉 개방 요구 시각(release_time)이, 프로세서에 대응하는 쓰레드 리스트에 설정된 최고 진입 시각보다 작지 않다고 판정된 경우에는, 스텝 S611로 진행하여, 오브젝트(릴리스 큐 요소)의 히프 ID에 의해 특정되는 히프(메모리 영역)에 설정된 참조 플래그(rf)가 0인지의 여부를 판정하고, 0인 경우에는, 스텝 S624로 진행하여, 그 오브젝트(릴리스 큐 요소)를 재차, 릴리스 큐로 설정한다.
이 플로우에 나타내는 처리는, 도 3에 도시하는 오퍼레이팅 시스템(310)의 메모리 영역 관리부(313)에서 실행된다. 즉, 메모리 영역 관리부(313)는, 메모리 영역을 참조하는 포인터로서 weak 포인터를 포함하는 구성에서, 릴리스 큐에 포함되는 큐 요소에 대응하는 메모리 영역을 참조하는 weak 포인터와 weak 포인터의 참조 영역을 포함하는 메모리 영역을 구성 요소로 하는 weak 포인터 체인의 검증에 의해 weak 포인터 체인에 weak 포인터가 존재하지 않는 것이 확인된 경우, 혹은, weak 포인터 체인에 포함되는 메모리 영역의 리타이어 완료 플래그가 리타이어 완료인 것을 나타내는 경우, 해당 큐 요소를 릴리스 큐로부터 파기하고, 이 큐 요소에 대응하는 메모리 영역의 개방을 실행한다.
또한, 도 17의 플로우에 나타내는 처리는, 릴리스 큐로 설정된 각 오브젝트(릴리스 큐 요소)에 대해 실행된다. 이 플래시 처리에 의해, weak 포인터를 적용한 구성에서도, 릴리스 큐의 갱신이 확실하게 실행되고, 릴리스 큐로 설정된 해방 요구 시각과, 쓰레드 리스트의 최고 진입 시각과의 비교가 확실하게 실행되어, 에러가 없는 메모리 액세스가 실현된다.
이상, 특정한 실시예를 참조하면서, 본 발명에 대해 상해하여 왔다. 그러나, 본 발명의 요지를 일탈하지 않은 범위에서 당업자가 상기 실시예의 수정이나 대용을 이룰 수 있는 것은 자명하다. 즉, 예시라고 하는 형태로 본 발명을 개시하여 온 것으로서, 한정적으로 해석되어서는 안 된다. 본 발명의 요지를 판단하기 위해서는, 특허청구의 범위의 란을 참작하여야 한다.
또한, 명세서 중에서 설명한 일련의 처리는 하드웨어, 또는 소프트웨어, 혹은 양자의 복합 구성에 의해 실행하는 것이 가능하다. 소프트웨어에 의한 처리를 실행하는 경우에는, 처리 시퀀스를 기록한 프로그램을, 전용의 하드웨어에 삽입된 컴퓨터 내의 메모리에 인스톨하여 실행시키거나, 혹은, 각종 처리가 실행 가능한 범용 컴퓨터에 프로그램을 인스톨하여 실행시키는 것이 가능하다.
예를 들면, 프로그램은 기록 매체로서의 하드디스크나 ROM(Read Only Memory)에 미리 기록해 둘 수 있다. 혹은, 프로그램은 플렉시블 디스크, CD- ROM(Compact Disc Read Only Memory), MO(Magneto optical) 디스크, DVD(Digital Versatile Disc), 자기 디스크, 반도체 메모리 등의 리무버블 기록 매체에, 일시적 혹은 영속적으로 저장(기록)해 둘 수 있다. 이러한 리무버블 기록 매체는, 소위 패키지 소프트웨어로서 제공할 수 있다.
또한, 프로그램은, 전술한 바와 같은 리무버블 기록 매체로부터 컴퓨터에 인스톨하는 것 외에, 다운로드 사이트로부터, 컴퓨터에 무선 전송하거나, LAN(Local Area Network), 인터넷 등의 네트워크를 통하여, 컴퓨터에 유선으로 전송하고, 컴퓨터에서는, 그와 같이 하여 전송되어 오는 프로그램을 수신하여, 내장하는 하드디스크 등의 기록 매체에 인스톨할 수 있다.
또한, 명세서에 기재된 각종의 처리는, 기재에 따라서 시계열로 실행될 뿐만 아니라, 처리를 실행하는 장치의 처리 능력 혹은 필요에 따라 병렬적으로 혹은 개별로 실행되어도 된다. 또한, 본 명세서에서 시스템이란, 복수의 장치의 논리적 집합 구성으로서, 각 구성의 장치가 동일 케이싱 내에 있는 것이라고는 할 수 없다.
이상, 설명한 바와 같이, 본 발명의 구성에 따르면, 데이터 처리 단위로서의 쓰레드마다의 진입 시각 정보를 기록한 쓰레드 정보로 이루어지는 쓰레드 리스트를 쓰레드 관리 정보로서 보유하고, 메모리 개방 요구가 있고 미개방의 메모리 영역에 대한 영역 단위마다의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 보유하고, 메모리 영역의 할당 처리에서, 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과, 쓰레드 리스트의 최고 진입 시각과의 비교를 실행하고, 개방 요구 시각이 최고 진입 시각 이전에 설정된 큐 요소에만 대응하는 메모리 영역의 할당 처리를 실행하는 구성으로 했으므로, 모든 쓰레드에서 액세스 대상으로 되어 있지 않은 메모리 영역만을 확실하게 선택하여 할당 처리를 실행하는 것이 가능해져, 각 쓰레드에서의 액세스 에러의 발생 등의 없는 안전한 메모리 영역의 할당 처리가 가능하게 된다.

Claims (17)

  1. 정보 처리 장치로서,
    데이터 처리 단위로서의 쓰레드 정보를 관리하는 쓰레드 관리부와,
    메모리 영역의 관리를 실행하는 메모리 영역 관리부를 갖고,
    상기 쓰레드 관리부는, 각 데이터 처리 프로그램으로부터의 오퍼레이팅 시스템의 기능 호출 시각으로서의 진입 시각 정보를 쓰레드마다 기록한 쓰레드 리스트를 쓰레드 관리 정보로서 보유하고,
    상기 메모리 영역 관리부는, 개방 요구가 있고 미개방의 메모리 영역에 대한 영역 단위마다의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 보유하고, 메모리 영역의 할당 처리에 있어서, 상기 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과, 상기 쓰레드 리스트의 각 요소 중 최고(最古) 진입 시각과의 비교를 실행하고, 개방 요구 시각이 상기 최고 진입 시각이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당을 실행하는 구성인 것을 특징으로 하는 정보 처리 장치.
  2. 제1항에 있어서,
    상기 쓰레드 관리부는,
    복수 프로세서 각각에 대응하는 쓰레드 리스트를 생성하고, 각 쓰레드 리스트의 헤더부에, 쓰레드 리스트에 포함되는 쓰레드 정보로 설정된 진입 시각 정보 중 최고의 진입 시각을 기록하고, 그 기록 정보를 다른 프로세서로부터 참조 가능한 설정으로서 관리하는 구성을 갖는 것을 특징으로 하는 정보 처리 장치.
  3. 제2항에 있어서,
    상기 메모리 영역 관리부는,
    상기 쓰레드 관리부가 관리하는 프로세서에 대응하는 쓰레드 리스트의 헤더부에 설정된 최고 진입 시각 정보를 모두 참조하여, 모든 프로세서에 대응하는 쓰레드 리스트의 헤더부에 설정된 최고 진입 시각 정보 중, 가장 오래된 최고 진입 시각을 선택하고, 그 선택 최고 진입 시각과, 상기 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과의 비교를 실행하고, 개방 요구 시각이 상기 선택 최고 진입 시각 이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당을 실행하는 구성인 것을 특징으로 하는 정보 처리 장치.
  4. 제1항에 있어서,
    상기 쓰레드 관리부는,
    상기 쓰레드 리스트의 헤더 및 리스트 구성 요소에 다른 리스트 구성 요소의 식별 정보를 기록하고, 헤더로부터 순차적으로 각 구성 요소를 취득 가능한 구성을 갖는 리스트로서 쓰레드 리스트를 구축하고, 쓰레드의 진입, 후퇴에 있어서, 헤더 또는 리스트 구성 요소로 설정된 식별 정보의 갱신 처리를 실행하는 구성인 것을 특징으로 하는 정보 처리 장치.
  5. 제1항에 있어서,
    상기 메모리 영역 관리부는,
    상기 릴리스 큐의 헤더 및 큐 요소에 다른 큐 요소의 식별 정보를 기록하고, 헤더로부터 순차적으로 각 큐 요소를 취득 가능한 구성을 갖는 리스트로서 릴리스 큐를 구축하고, 새로운 큐의 설정, 또는 큐의 삭제 처리에 있어서, 헤더 또는 큐 요소로 설정된 식별 정보의 갱신 처리를 실행하는 구성인 것을 특징으로 하는 정보 처리 장치.
  6. 제1항에 있어서.
    상기 메모리 영역 관리부는,
    프로세서에 대응하여 설정되는 유한 사이즈의 메모리 영역으로서의 히프 단위에서의 메모리 관리 처리를 실행하는 구성으로서, 개방 요구가 있고 미개방의 히프에 대해 히프 단위의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 보유하고, 메모리 영역의 할당 처리에 있어서, 상기 릴리스 큐에 포함되는 히프 단위의 각 큐 요소에 기록된 메모리 영역의 할당을 실행하는 구성인 것을 특징으로 하는 정보 처리 장치.
  7. 제1항에 있어서,
    상기 메모리 영역 관리부는,
    메모리 영역을 참조하는 포인터로서 weak 포인터를 포함하는 구성에서,
    상기 릴리스 큐에 포함되는 큐 요소에 대응하는 메모리 영역을 참조하는 weak 포인터를 구성 요소로 하는 weak 포인터 체인의 검증을 실행하고, 그 weak 포인터 체인에 weak 포인터가 존재하지 않은 경우, 해당 큐 요소를 릴리스 규로부터 파기하고, 해당 큐 요소에 대응하는 메모리 영역의 개방을 실행하는 구성인 것을 특징으로 하는 정보 처리 장치.
  8. 제1항에 있어서,
    상기 메모리 영역 관리부는,
    메모리 영역을 참조하는 포인터로서 weak 포인터를 포함하는 구성에서,
    상기 릴리스 큐에 포함되는 큐 요소에 대응하는 메모리 영역을 참조하는 weak 포인터와 그 weak 포인터의 참조 영역을 포함하는 메모리 영역을 구성 요소로 하는 weak 포인터 체인에 포함되는 메모리 영역의 리타이어 완료 플래그를 검증하고, 그 리타이어 완료 플래그가 리타이어 완료인 것을 나타내는 경우, 해당 큐 요소를 릴리스 큐로부터 파기하고, 해당 큐 요소에 대응하는 메모리 영역의 개방을 실행하는 구성인 것을 특징으로 하는 정보 처리 장치.
  9. 메모리 영역 관리 방법으로서,
    각 데이터 처리 프로그램으로부터의 오퍼레이팅 시스템의 기능 호출 시각으로서의 진입 시각 정보를 쓰레드마다 기록한 쓰레드 정보로 이루어지는 쓰레드 리스트를 생성, 갱신하는 쓰레드 관리 스텝과,
    메모리 개방 요구가 있고 미개방의 메모리 영역에 대한 영역 단위마다의 개방 요구 시각을 기록한 대기 행렬로서의 릴리스 큐를 메모리 영역 관리 정보로서 생성, 갱신하는 메모리 영역 관리 스텝과,
    메모리 영역의 할당 처리에 있어서, 상기 릴리스 큐에 포함되는 각 큐 요소로 설정된 개방 요구 시각과, 상기 쓰레드 리스트의 각 요소 중 최고(最古) 진입 시각과의 비교를 실행하고, 개방 요구 시각이 상기 최고 진입 시각 이전에 설정된 큐 요소에 대응하는 메모리 영역의 할당 처리를 실행하는 메모리 영역 할당 스텝
    을 갖는 것을 특징으로 하는 메모리 영역 관리 방법.
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
KR1020067010326A 2004-09-29 2005-09-26 정보 처리 장치 및 메모리 영역 관리 방법 KR101150661B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
JPJP-P-2004-00283528 2004-09-29
JP2004283528 2004-09-29
JP2005170420A JP4144609B2 (ja) 2004-09-29 2005-06-10 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム
JPJP-P-2005-00170420 2005-06-10
PCT/JP2005/017645 WO2006035727A1 (ja) 2004-09-29 2005-09-26 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
KR20070050002A KR20070050002A (ko) 2007-05-14
KR101150661B1 true KR101150661B1 (ko) 2012-05-25

Family

ID=36100684

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067010326A KR101150661B1 (ko) 2004-09-29 2005-09-26 정보 처리 장치 및 메모리 영역 관리 방법

Country Status (10)

Country Link
US (1) US7770177B2 (ko)
EP (1) EP1684179A4 (ko)
JP (1) JP4144609B2 (ko)
KR (1) KR101150661B1 (ko)
CN (1) CN1906598B (ko)
BR (1) BRPI0506379A (ko)
MY (1) MY141494A (ko)
RU (1) RU2397535C2 (ko)
TW (1) TWI268446B (ko)
WO (1) WO2006035727A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7596668B2 (en) * 2007-02-20 2009-09-29 International Business Machines Corporation Method, system and program product for associating threads within non-related processes based on memory paging behaviors
JP4569846B2 (ja) * 2008-04-02 2010-10-27 日本電気株式会社 I/oノード制御方式及び方法
US8321651B2 (en) * 2008-04-02 2012-11-27 Qualcomm Incorporated System and method for memory allocation in embedded or wireless communication systems
US8806179B2 (en) * 2009-12-15 2014-08-12 International Business Machines Corporation Non-quiescing key setting facility
JP6163844B2 (ja) * 2013-04-12 2017-07-19 富士通株式会社 制御方法、制御装置、制御プログラム、および記録媒体
US9165337B2 (en) * 2013-05-31 2015-10-20 Qualcomm Incorporated Command instruction management
JP6369286B2 (ja) * 2014-10-23 2018-08-08 富士通株式会社 プロセス間通信プログラム、解放要求方法、および並列演算装置
US10521368B2 (en) * 2015-12-24 2019-12-31 Arm Limited Arbitration of requests requiring a variable number of resources
EP3756092A4 (en) * 2018-05-04 2021-04-14 Samsung Electronics Co., Ltd. APPARATUS AND METHOD FOR MANAGING A SHARED RESOURCE IN A MULTI-CORE PROCESSOR
JP6932755B2 (ja) * 2018-10-19 2021-09-08 イーソル株式会社 オペレーティングシステム及びメモリ割り当て方法
JP6682599B2 (ja) * 2018-10-19 2020-04-15 イーソル株式会社 オペレーティングシステム及びメモリ割り当て方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058460A (en) * 1996-06-28 2000-05-02 Sun Microsystems, Inc. Memory allocation in a multithreaded environment
US20050235284A1 (en) 2004-04-14 2005-10-20 International Business Machines Corporation Systems and methods for tracking processing unit usage

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4435780A (en) * 1981-06-16 1984-03-06 International Business Machines Corporation Separate stack areas for plural processes
US5386536A (en) 1991-03-28 1995-01-31 Courts; Howard R. Apparatus and method for managing memory allocation
US5398334A (en) * 1992-04-06 1995-03-14 General Electric Company System for automatic garbage collection using strong and weak encapsulated pointers
FI91456C (fi) 1992-07-29 1994-06-27 Nokia Telecommunications Oy Menetelmä tietokoneessa varattujen resurssien hallitsemiseksi
CA2136154C (en) 1994-11-18 1999-08-24 Jay William Benayon User control of multiple memory heaps
US5928323A (en) * 1996-05-30 1999-07-27 Sun Microsystems, Inc. Apparatus and method for dynamically generating information with server-side software objects
US6938257B1 (en) * 1997-07-17 2005-08-30 International Business Machines Corporation Apparatus and method to provide persistence for application interfaces
JPH1173364A (ja) 1997-08-29 1999-03-16 Nec Corp メモリバッファの管理方式
US6145061A (en) * 1998-01-07 2000-11-07 Tandem Computers Incorporated Method of management of a circular queue for asynchronous access
JPH11203193A (ja) 1998-01-14 1999-07-30 Hitachi Ltd 共有メモリ管理装置及び方法
GB9813592D0 (en) * 1998-06-25 1998-08-19 Philips Electronics Nv Dynamic memory space allocation
US6209066B1 (en) * 1998-06-30 2001-03-27 Sun Microsystems, Inc. Method and apparatus for memory allocation in a multi-threaded virtual machine
US7159222B1 (en) * 1998-09-09 2007-01-02 Microsoft Corporation Highly componentized system architecture with object mutation
US6505229B1 (en) * 1998-09-25 2003-01-07 Intelect Communications, Inc. Method for allowing multiple processing threads and tasks to execute on one or more processor units for embedded real-time processor systems
KR100594187B1 (ko) * 1998-12-26 2006-10-25 삼성전자주식회사 쓰레드 호 처리 구조를 채용한 유닉스 시스템 환경하의 지능망교환시스템에서 타이머 구동 방법
DE19951716A1 (de) * 1999-10-27 2001-05-03 Heidenhain Gmbh Dr Johannes Verfahren zur dynamischen Speicherverwaltung
US6772107B1 (en) * 1999-11-08 2004-08-03 J.D. Edwards World Source Company System and method for simulating activity on a computer network
US7111294B2 (en) * 2001-01-16 2006-09-19 Microsoft Corporation Thread-specific heaps
US7210146B2 (en) * 2001-06-18 2007-04-24 Microsoft Corporation Sleep queue management
JP2003345612A (ja) 2002-05-28 2003-12-05 Sony Corp 演算処理システム、コンピュータ・システム上でのタスク制御方法、並びにコンピュータ・プログラム
US7069396B2 (en) 2002-06-27 2006-06-27 Hewlett-Packard Development Company, L.P. Deferred memory allocation for application threads
US7640549B2 (en) * 2002-07-22 2009-12-29 Agilent Technologies, Inc. System and method for efficiently exchanging data among processes
US7181742B2 (en) * 2002-11-19 2007-02-20 Intel Corporation Allocation of packets and threads
US7426720B1 (en) * 2003-12-22 2008-09-16 Sun Microsystems, Inc. System and method for dynamic preloading of classes through memory space cloning of a master runtime system process
US7426731B2 (en) * 2004-03-22 2008-09-16 Hewlett-Packard Development Company, L.P. Determining processor usage by a thread
US7487503B2 (en) * 2004-08-12 2009-02-03 International Business Machines Corporation Scheduling threads in a multiprocessor computer
US7752620B2 (en) * 2005-06-06 2010-07-06 International Business Machines Corporation Administration of locks for critical sections of computer programs in a computer that supports a multiplicity of logical partitions

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058460A (en) * 1996-06-28 2000-05-02 Sun Microsystems, Inc. Memory allocation in a multithreaded environment
US20050235284A1 (en) 2004-04-14 2005-10-20 International Business Machines Corporation Systems and methods for tracking processing unit usage

Also Published As

Publication number Publication date
KR20070050002A (ko) 2007-05-14
TW200620107A (en) 2006-06-16
CN1906598B (zh) 2010-05-26
EP1684179A1 (en) 2006-07-26
RU2397535C2 (ru) 2010-08-20
US20060070072A1 (en) 2006-03-30
TWI268446B (en) 2006-12-11
US7770177B2 (en) 2010-08-03
JP4144609B2 (ja) 2008-09-03
JP2006127463A (ja) 2006-05-18
MY141494A (en) 2010-04-30
BRPI0506379A (pt) 2006-12-26
CN1906598A (zh) 2007-01-31
RU2006118342A (ru) 2007-12-20
WO2006035727A1 (ja) 2006-04-06
EP1684179A4 (en) 2009-01-21

Similar Documents

Publication Publication Date Title
KR101150661B1 (ko) 정보 처리 장치 및 메모리 영역 관리 방법
EP1837762B1 (en) Scheduling method, scheduling device, and multiprocessor system
US8307053B1 (en) Partitioned packet processing in a multiprocessor environment
US9658905B2 (en) Information processing apparatus and method for carrying out multi-thread processing
JP4322232B2 (ja) 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US8584125B2 (en) Apparatuses, methods, and computer-readable media for interrupt control
WO2019218708A1 (zh) 一种任务处理方法及处理装置、计算机系统
EP0969380A2 (en) Method for efficient non-virtual main memory management
US20090100249A1 (en) Method and apparatus for allocating architectural register resources among threads in a multi-threaded microprocessor core
EP1691287A1 (en) Information processing device, process control method, and computer program
US7840773B1 (en) Providing memory management within a system management mode
US7661115B2 (en) Method, apparatus and program storage device for preserving locked pages in memory when in user mode
JPH0533410B2 (ko)
US5825649A (en) Kernel substitution method in multi-processor system and multi-processor system having kernel substitution function
CN115605846A (zh) 用于在多核处理器中管理可共享资源的设备和方法
US7793023B2 (en) Exclusion control
US8010963B2 (en) Method, apparatus and program storage device for providing light weight system calls to improve user mode performance
JP5553685B2 (ja) 情報処理装置および情報処理方法
US9619277B2 (en) Computer with plurality of processors sharing process queue, and process dispatch processing method
WO2007049543A1 (ja) 演算装置
JP2011248469A (ja) 情報処理装置および情報処理方法
JPH08297585A (ja) オペレーティングシステムによるデータ転送方法
JPS63292456A (ja) 複数媒体収納型デ−タ記録装置の媒体割り当て制御方式
JP2011257973A (ja) メモリ管理方法及びメモリ管理装置
JP2004152060A (ja) 計算機システム、および、そのディスクサブシステム

Legal Events

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