JP4144609B2 - 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム - Google Patents

情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム Download PDF

Info

Publication number
JP4144609B2
JP4144609B2 JP2005170420A JP2005170420A JP4144609B2 JP 4144609 B2 JP4144609 B2 JP 4144609B2 JP 2005170420 A JP2005170420 A JP 2005170420A JP 2005170420 A JP2005170420 A JP 2005170420A JP 4144609 B2 JP4144609 B2 JP 4144609B2
Authority
JP
Japan
Prior art keywords
memory area
queue
thread
information
release
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
JP2005170420A
Other languages
English (en)
Other versions
JP2006127463A (ja
Inventor
敦之 戸川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
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 Sony Corp filed Critical Sony Corp
Priority to JP2005170420A priority Critical patent/JP4144609B2/ja
Priority to TW094129106A priority patent/TWI268446B/zh
Priority to US11/217,494 priority patent/US7770177B2/en
Priority to MYPI20054190A priority patent/MY141494A/en
Priority to EP05785980A priority patent/EP1684179A4/en
Priority to RU2006118342/09A priority patent/RU2397535C2/ru
Priority to KR1020067010326A priority patent/KR101150661B1/ko
Priority to PCT/JP2005/017645 priority patent/WO2006035727A1/ja
Priority to CN2005800014770A priority patent/CN1906598B/zh
Priority to BRPI0506379-5A priority patent/BRPI0506379A/pt
Publication of JP2006127463A publication Critical patent/JP2006127463A/ja
Application granted granted Critical
Publication of JP4144609B2 publication Critical patent/JP4144609B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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)
  • Debugging And Monitoring (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)

Description

本発明は、情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラムに関する。さらに詳細には、複数のスレッドが並行にメモリ領域を参照し更新する構成において、適切なメモリ領域の割り当ておよびメモリ管理処理を実現する情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラムに関する。
単一のあるいは複数のオペレーティングシステム(OS)上で、複数のデータ処理プログラムを実行する場合、システムで共通のハードウェア、すなわちCPUやメモリ等を時系列に順次切り替えて利用した処理が行なわれる。
複数OSの各々の実行プロセス(タスク)のスケジューリングは、例えばパーティション管理ソフトウェアによって実行される。1つのシステムにOS(α)とOS(β)の2つのオペレーティングシステムが並存する場合、OS(α)の処理をパーティションAとし、OS(β)の処理をパーティションBとすると、パーティション管理ソフトウェアは、パーティションAとパーティションBの実行スケジュールを決定し、決定したスケジュールに基づいて、ハードウェア資源を割り当てて各OSにおける処理を実行する。
マルチOS型のシステムにおけるタスク管理を開示した従来技術として、例えば、特許文献1がある。特許文献1には、複数のOSの各々において実行されるタスク管理において、緊急性の高い処理を優先的に処理させるためのタスクスケジューリング手法を開示している。
単一のあるいは複数のオペレーティングシステム(OS)上で、複数のプログラムを実行する場合、プログラム実行単位として規定されるスレッドが並列に複数存在し、個々のスレッドが共通リソースとしてのメモリを利用する。このような状態において、例えばあるスレッドがある特定のメモリ領域をアクセスしている間に、他のスレッドに対してそのメモリ領域の開放を行なうとアクセスエラーなどの原因となる。従来は、割り込み禁止時間の設定などにより、このようなエラーの発生を防止する構成を採用していたが、割り込み禁止時間の設定による処理遅延などの副次的問題が発生する。
特開2003−345612号公報
本発明は、上述の問題点に鑑みてなされたものであり、複数のスレッドが並行にメモリ領域を参照し更新する構成において、アクセスエラー等を発生させない適切なメモリ領域の割り当ておよびメモリ管理処理を実現する情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラムを提供することを目的とする。
本発明の第1の側面は、
情報処理装置であり、
データ処理単位としてのスレッド情報を管理するスレッド管理部と、
メモリ領域の管理を実行するメモリ領域管理部とを有し、
前記スレッド管理部は、各データ処理プログラムからのオペレーティングシステムの機能呼出時刻としての進入時刻情報をスレッド毎に記録したスレッドリストをスレッド管理情報として保持し、
前記メモリ領域管理部は、開放要求があり未開放のメモリ領域についての領域単位毎の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として保持し、メモリ領域の割り当て処理に際して、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻と、前記スレッドリストの各要素中の最古進入時刻との比較を実行し、開放要求時刻が前記最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当てを実行する構成であることを特徴とする情報処理装置にある。
さらに、本発明の情報処理装置の一実施態様において、前記スレッド管理部は、複数プロセッサ各々に対応するスレッドリストを生成し、各スレッドリストのヘッダ部に、スレッドリストに含まれるスレッド情報に設定さたれ進入時刻情報中の最古の進入時刻を記録し、該記録情報を他プロセッサから参照可能な設定として管理する構成を有することを特徴とする。
さらに、本発明の情報処理装置の一実施態様において、前記メモリ領域管理部は、前記スレッド管理部の管理するプロセッサ対応のスレッドリストのヘッダ部に設定された最古進入時刻情報をすべて参照し、全てのプロセッサ対応のスレッドリストのヘッダ部に設定された最古進入時刻情報中、最も古い最古進入時刻を選択し、該選択最古進入時刻と、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻との比較を実行し、開放要求時刻が前記選択最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当てを実行する構成であることを特徴とする。
さらに、本発明の情報処理装置の一実施態様において、前記スレッド管理部は、前記スレッドリストのヘッダおよびリスト構成要素に他のリスト構成要素の識別情報を記録し、ヘッダから順次各構成要素を取得可能な構成を持つリストとしてスレッドリストを構築し、スレッドの進入、退出に際して、ヘッダまたはリスト構成要素に設定された識別情報の更新処理を実行する構成であることを特徴とする。
さらに、本発明の情報処理装置の一実施態様において、前記メモリ領域管理部は、前記リリースキューのヘッダおよびキュー要素に他のキュー要素の識別情報を記録し、ヘッダから順次各キュー要素を取得可能な構成を持つリストとしてリリースキューを構築し、新たなキューの設定、またはキューの削除処理に際して、ヘッダまたはキュー要素に設定された識別情報の更新処理を実行する構成であることを特徴とする。
さらに、本発明の情報処理装置の一実施態様において、前記メモリ領域管理部は、プロセッサに対応して設定される有限サイズのメモリ領域としてのヒープ単位でのメモリ管理処理を実行する構成であり、開放要求があり未開放のヒープについてヒープ単位の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として保持し、メモリ領域の割り当て処理に際して、前記リリースキューに含まれるヒープ単位の各キュー要素に記録されたメモリ領域の割り当てを実行する構成であることを特徴とする。
さらに、本発明の情報処理装置の一実施態様において、前記メモリ領域管理部は、メモリ領域を参照するポインタとしてweakポインタを含む構成において、前記リリースキューに含まれるキュー要素に対応するメモリ領域を参照するweakポインタを構成要素とするweakポインタチェーンの検証を実行し、該weakポインタチェーンにweakポインタが存在しない場合、当該キュー要素をリリースキューから破棄し、該キュー要素対応のメモリ領域の開放を実行する構成であることを特徴とする。
さらに、本発明の情報処理装置の一実施態様において、前記メモリ領域管理部は、メモリ領域を参照するポインタとしてweakポインタを含む構成において、前記リリースキューに含まれるキュー要素に対応するメモリ領域を参照するweakポインタと該weakポインタの参照領域を含むメモリ領域を構成要素とするweakポインタチェーンに含まれるメモリ領域のリタイア済みフラグを検証し、該リタイア済みフラグがリタイア済みであることを示す場合、当該キュー要素をリリースキューから破棄し、該キュー要素対応のメモリ領域の開放を実行する構成であることを特徴とする。
さらに、本発明の第2の側面は、
メモリ領域管理方法であり、
各データ処理プログラムからのオペレーティングシステムの機能呼出時刻としての進入時刻情報をスレッド毎に記録したスレッド情報からなるスレッドリストを生成、更新するスレッド管理ステップと、
メモリ開放要求があり未開放のメモリ領域についての領域単位毎の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として生成、更新するメモリ領域管理ステップと、
メモリ領域の割り当て処理に際して、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻と、前記スレッドリストの各要素中の最古進入時刻との比較を実行し、開放要求時刻が前記最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当て処理を実行するメモリ領域割り当てステップと、
を有することを特徴とするメモリ領域管理方法にある。
さらに、本発明のメモリ領域管理方法の一実施態様において、前記スレッド管理ステップは、複数プロセッサ各々に対応するスレッドリストを生成し、各スレッドリストのヘッダ部に、スレッドリストに含まれるスレッド情報に設定さたれ進入時刻情報中の最古の進入時刻を記録し、該記録情報を他プロセッサから参照可能な設定として管理することを特徴とする。
さらに、本発明のメモリ領域管理方法の一実施態様において、前記メモリ領域割り当てステップは、プロセッサ対応のスレッドリストのヘッダ部に設定された最古進入時刻情報をすべて参照し、全てのプロセッサ対応のスレッドリストのヘッダ部に設定された最古進入時刻情報中、最も古い最古進入時刻を選択し、該選択最古進入時刻と、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻との比較を実行し、開放要求時刻が前記選択最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当てを実行することを特徴とする。
さらに、本発明のメモリ領域管理方法の一実施態様において、前記スレッド管理ステップは、前記スレッドリストのヘッダおよびリスト構成要素に他のリスト構成要素の識別情報を記録し、ヘッダから順次各構成要素を取得可能な構成を持つリストとしてスレッドリストを構築し、スレッドの進入、退出に際して、ヘッダまたはリスト構成要素に設定された識別情報の更新処理を実行するステップを含むことを特徴とする。
さらに、本発明のメモリ領域管理方法の一実施態様において、前記メモリ領域管理ステップは、前記リリースキューのヘッダおよびキュー要素に他のキュー要素の識別情報を記録し、ヘッダから順次各キュー要素を取得可能な構成を持つリストとしてリリースキューを構築し、新たなキューの設定、またはキューの削除処理に際して、ヘッダまたはキュー要素に設定された識別情報の更新処理を実行するステップを含むことを特徴とする。
さらに、本発明のメモリ領域管理方法の一実施態様において、前記メモリ領域管理ステップは、プロセッサに対応して設定される有限サイズのメモリ領域としてのヒープ単位でのメモリ管理処理を実行し、開放要求があり未開放のヒープについてヒープ単位の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として保持し、前記メモリ領域割り当てステップは、前記リリースキューに含まれるヒープ単位の各キュー要素に記録されたメモリ領域の割り当てを実行することを特徴とする。
さらに、本発明のメモリ領域管理方法の一実施態様において、前記メモリ領域管理ステップは、メモリ領域を参照するポインタとしてweakポインタを含む構成において、前記リリースキューに含まれるキュー要素に対応するメモリ領域を参照するweakポインタを構成要素とするweakポインタチェーンの検証を実行し、該weakポインタチェーンにweakポインタが存在しない場合、当該キュー要素をリリースキューから破棄し、該キュー要素対応のメモリ領域の開放を実行するステップを含むことを特徴とする。
さらに、本発明のメモリ領域管理方法の一実施態様において、前記メモリ領域管理ステップは、メモリ領域を参照するポインタとしてweakポインタを含む構成において、前記リリースキューに含まれるキュー要素に対応するメモリ領域を参照するweakポインタと該weakポインタの参照領域を含むメモリ領域を構成要素とするweakポインタチェーンに含まれるメモリ領域のリタイア済みフラグを検証し、該リタイア済みフラグがリタイア済みであることを示す場合、当該キュー要素をリリースキューから破棄し、該キュー要素対応のメモリ領域の開放を実行するステップを含むことを特徴とする。
さらに、本発明の第3の側面は、
メモリ領域管理処理を実行するコンピュータ・プログラムであり、
各データ処理プログラムからのオペレーティングシステムの機能呼出時刻としての進入時刻情報をスレッド毎に記録したスレッド情報からなるスレッドリストを生成、更新するスレッド管理ステップと、
メモリ開放要求があり未開放のメモリ領域についての領域単位毎の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として生成、更新するメモリ領域管理ステップと、
メモリ領域の割り当て処理に際して、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻と、前記スレッドリストの各要素中の最古進入時刻との比較を実行し、開放要求時刻が前記最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当て処理を実行するメモリ領域割り当てステップと、
を有することを特徴とするコンピュータ・プログラムにある。
なお、本発明のコンピュータ・プログラムは、例えば、様々なプログラム・コードを実行可能な汎用コンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体、例えば、CDやFD、MOなどの記憶媒体、あるいは、ネットワークなどの通信媒体によって提供可能なコンピュータ・プログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、コンピュータ・システム上でプログラムに応じた処理が実現される。
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づく、より詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
本発明の構成によれば、データ処理単位としてのスレッド毎の進入時刻情報を記録したスレッド情報からなるスレッドリストをスレッド管理情報として保持し、メモリ開放要求があり未開放のメモリ領域についての領域単位毎の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として保持し、メモリ領域の割り当て処理に際して、リリースキューに含まれる各キュー要素に設定された開放要求時刻と、スレッドリストの最古進入時刻との比較を実行し、開放要求時刻が最古進入時刻以前に設定されたキュー要素のみに対応するメモリ領域の割り当て処理を実行する構成としたので、全てのスレッドにおいてアクセス対象となっていないメモリ領域のみを確実に選択して割り当て処理を実行することが可能となり、各スレッドにおけるアクセスエラーの発生などのない安全なメモリ領域の割り当て処理が可能となる。
以下、図面を参照しながら、本発明の情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラムの詳細について説明する。
まず、図1を参照して、本発明の情報処理装置のハードウェア構成例について説明する。プロセッサモジュール101は、複数のプロセッサ(Processing Unit)から構成されたモジュールであり、ROM(Read Only Memory)104、HDD123等に記憶されているプログラムに従って、オペレーティングシステム(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,IEEE1394等の接続部を持つ。接続ポート125は、インタフェース113、外部バス112、ブリッジ105、およびホストバス111を介してプロセッサモジュール101等に接続されている。通信部126は、ネットワークに接続され、プロセッサモジュール101や、HDD123等から提供されるデータの送信、外部からのデータ受信を実行する。
次に、プロセッサモジュールの構成例について、図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に示すようにオブジェクトとして設定されるメモリ領域x351、メモリ領域y352、メモリ領域z353は、オブジェクトへのポインタ情報として設定されるID表350を介してプログラムの実行するスレッドからアクセス可能となる。
あるスレッドにおいてアクセス中のメモリ領域に対して、他のスレッドがアクセスしようとした場合のアクセスを回避するため、OSのカーネルは、ID表にロックをかけて他のスレッドからのアクセスを防止する。従って、他のスレッドは、ロックが解除するまで、メモリアクセスが実行できず、処理が待たされることになる。
図5は、2段階のID表を有する構成を示している。ID表a371は、オブジェクトとしてのメモリ領域x361とメモリ領域z362等をアクセスするために適用され、さらに、メモリ領域z362は、第2のID表b372を有し、第2のID表b372を適用することで、メモリ領域a363とメモリ領域b364がアクセスされる。このような構成においても、OSのカーネルは、ID表にロックをかけて他のスレッドからのアクセスを防止する。従って、他のスレッドは、ロックが解除するまで、メモリアクセスが実行できず、処理が待たされることになる。
例えば、個々のメモリ領域、例えば図5におけるメモリ領域a363やメモリ領域b364が利用されていない場合であっても、メモリ領域x361が利用中の場合は、カーネルの実行するメモリ管理処理は、ID表a371にロックをかける処理を実行することになり、結果として利用可能なメモリ領域までも有効に利用できないという状態に設定されてしまう。
本発明では、このようなメモリの非効率的な利用構成を排除し、各スレッドに対する効率的なメモリ割り当てを可能とする。この処理は、図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は、各ヒープ毎にメモリ領域の開放、割り当て処理を実行するものであり、リリースキューに追加するキューのヒープIDとして、開放要求対象となるヒープ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])を0とする設定を実行する。
ステップS407において、変数[time]を全プロセッサに対応するスレッドリストに設定された最古進入時刻中の最小値、すなわち最も古い時刻に設定する。
ステップS408において、リリースキューについて、それぞれヘッダからたどれる各要素に設定された開放要求時刻(release_time)について、ステップS407において設定した[time]=全プロセッサに対応するスレッドリストに設定された最古進入時刻中の最小値と比較し、開放要求時刻(release_time)が[time]より小さいもののみを選択して、リリースキューから削除してこれらのキューに対応するメモリ領域を開放してメモリ要求スレッドに対して割り当てる。
全てのプロセッサの最古進入時刻中の最小値より前に開放要求があったメモリ領域については、全てのスレッドにおいてアクセス対象となっていないことが保証されるので、これらを選択して開放、割り当て処理を実行することで、安全なメモリ領域の割り当てが可能となる。
ステップS409では、ステップS408において、リリースキューから削除したキューを除く残存キューの末尾の後続キュー情報(successor)をリリースキューヘッダ(release_queue_head[hid])に設定する。ステップS410において、リリースキューヘッダ(release_queue_head[hid])の値が、末尾のキューの後続キュー情報(successor)と等しい状態に設定されている場合は、ステップS408において、リリースキューから削除したキューを除く残存キューの先頭のキューに対するポインタをリリースキューヘッダ(release_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を参照して説明したリリースキューに設定された解放要求時刻と、スレッドリストの最古進入時刻との比較を実行することで、確実なメモリアクセスが可能となる。
ポインタオブジェクトの1つとして、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ポインタのオブジェクトポインタ、すなわち、オブジェクトメンバ変数が0でないこと(条件1)、さらに、weakポインタチェーンによって関連付けられたヒープに設定された参照カウンタ(rf)の値が1以上であること(条件2)、これらの2条件を満足するか否かを判定する。
これらの2条件を満足する場合は、ステップS502に進み、オブジェクトの値、すなわち、weakポインタに設定された参照メモリ領域を参照するために必要なアドレスに相当するオブジェクトメンバ変数としてのオブジェクトポインタを返す。一方、この2条件を満足しない場合には、ステップS503に進み[0]を返す。
weakポインタのオブジェクトポインタ、すなわち、オブジェクトメンバ変数が0である場合、あるいは、weakポインタチェーンによって関連付けられたヒープに設定された参照カウンタ(rf)の値が0である場合には、ステップS503において[0]が返されることになる。参照カウンタ(rf)の値が0である場合は、weakポインタ以外のポインタによる参照がない場合に相当するが、weakポインタによる参照の有無は判別されない。この状況で、weakポインタからのポインタ値を取得してしまうと、weakポインタのオブジェクトポインタが0に設定され、その後、その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のいずれもが満足されない場合は、ステップS621に進み、ヒープ(メモリ領域)に対応して設定されるweakポインタチェーンに含まれる全てのweakポインタのオブジェクトメンバ変数としてのオブジェクトポインタの値を[0]に設定し、ステップ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)、インターネットといったネットワークを介して、コンピュータに有線で転送し、コンピュータでは、そのようにして転送されてくるプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
以上、説明したように、本発明の構成によれば、データ処理単位としてのスレッド毎の進入時刻情報を記録したスレッド情報からなるスレッドリストをスレッド管理情報として保持し、メモリ開放要求があり未開放のメモリ領域についての領域単位毎の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として保持し、メモリ領域の割り当て処理に際して、リリースキューに含まれる各キュー要素に設定された開放要求時刻と、スレッドリストの最古進入時刻との比較を実行し、開放要求時刻が最古進入時刻以前に設定されたキュー要素のみに対応するメモリ領域の割り当て処理を実行する構成としたので、全てのスレッドにおいてアクセス対象となっていないメモリ領域のみを確実に選択して割り当て処理を実行することが可能となり、各スレッドにおけるアクセスエラーの発生などのない安全なメモリ領域の割り当て処理が可能となる。
本発明の情報処理装置の構成例を示す図である。 プロセッサモジュールの構成例を示す図である。 本発明の情報処理装置におけるソフトウェア構成を説明する図である。 一般的なメモリ領域のアクセス処理例について説明する図である。 一般的なメモリ領域のアクセス処理例について説明する図である。 本発明の情報処理装置におけるスレッド管理部の管理する情報について説明する図である。 本発明の情報処理装置におけるスレッド管理部の管理する情報の詳細について説明する図である 本発明の情報処理装置におけるメモリ領域管理部の管理する情報の詳細について説明する図である 本発明の情報処理装置におけるスレッド管理部の実行するスレッド情報進入処理のシーケンスを説明するフロー図である。 本発明の情報処理装置におけるスレッド管理部の実行するスレッド情報進入処理の詳細を説明する図である。 本発明の情報処理装置におけるスレッド管理部の実行するスレッド情報退出処理のシーケンスを説明するフロー図である。 本発明の情報処理装置におけるスレッド管理部の実行するスレッド情報退出処理の詳細を説明する図である。 本発明の情報処理装置におけるメモリ領域管理部の実行するメモリ領域開放要求登録処理のシーケンスを説明するフロー図である。 本発明の情報処理装置におけるメモリ領域管理部の実行するメモリ領域割り当て処理の詳細を説明するフロー図である。 weakポインタの構成およびweakポインタチェーンの構成について説明する図である。 weakポインタからのポインタ値取得処理シーケンスについて説明するフローチャートを示す図である。 weakポインタを有する構成におけるリリースキューの更新(フラッシュ)処理シーケンスについて説明するフローチャートを示す図である。
符号の説明
101 プロセッサモジュール
102 グラフィックエンジン
103 メインメモリ(DRAM)
104 ROM
105 ブリッジ
106 コントローラ
107 メモリカード
111 ホストバス
112 外部バス
113 インタフェース
121 入力部
122 出力部
123 HDD
124 ドライブ
125 接続ポート
126 通信部
127 リムーバブル記録媒体
128 外部接続機器
200 プロセッサモジュール
201 メインプロセッサグループ
202〜20n サブプロセッサグループ
310 オペレーティングシステム(OS)
311 カーネル
312 スレッド管理部
313 メモリ領域管理部
314 その他カーネルモジュール
320 アプリケーション・プログラム
350 ID表
351〜353 メモリ領域
361〜364 メモリ領域
371,372 ID表
400 プロセッサ毎に設定される変数
401 ヘッダ
402 最古進入時刻
410 スレッド毎に設定される変数
411 先行スレッド識別情報
412 進入時刻
451 リリースキューヘッダ
460 キュー要素
461 ヒーブID
462 開放要求時刻
463 後続キュー情報
464 メモリ領域情報
500 プロセッサ対応データ
501 ヘッダ情報
502 最古進入時刻
510 スレッド情報
511 先行スレッド識別情報
512 進入時刻
521 スレッド情報
540 プロセッサ対応データ
541 ヘッダ情報
550 スレッド情報
551 先行スレッド識別情報
560 スレッド情報
570 スレッド情報
572 進入時刻
580 スレッド情報

Claims (17)

  1. 情報処理装置であり、
    データ処理単位としてのスレッド情報を管理するスレッド管理部と、
    メモリ領域の管理を実行するメモリ領域管理部とを有し、
    前記スレッド管理部は、各データ処理プログラムからのオペレーティングシステムの機能呼出時刻としての進入時刻情報をスレッド毎に記録したスレッドリストをスレッド管理情報として保持し、
    前記メモリ領域管理部は、開放要求があり未開放のメモリ領域についての領域単位毎の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として保持し、メモリ領域の割り当て処理に際して、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻と、前記スレッドリストの各要素中の最古進入時刻との比較を実行し、開放要求時刻が前記最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当てを実行する構成であることを特徴とする情報処理装置。
  2. 前記スレッド管理部は、
    複数プロセッサ各々に対応するスレッドリストを生成し、各スレッドリストのヘッダ部に、スレッドリストに含まれるスレッド情報に設定さたれ進入時刻情報中の最古の進入時刻を記録し、該記録情報を他プロセッサから参照可能な設定として管理する構成を有することを特徴とする請求項1に記載の情報処理装置。
  3. 前記メモリ領域管理部は、
    前記スレッド管理部の管理するプロセッサ対応のスレッドリストのヘッダ部に設定された最古進入時刻情報をすべて参照し、全てのプロセッサ対応のスレッドリストのヘッダ部に設定された最古進入時刻情報中、最も古い最古進入時刻を選択し、該選択最古進入時刻と、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻との比較を実行し、開放要求時刻が前記選択最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当てを実行する構成であることを特徴とする請求項2に記載の情報処理装置。
  4. 前記スレッド管理部は、
    前記スレッドリストのヘッダおよびリスト構成要素に他のリスト構成要素の識別情報を記録し、ヘッダから順次各構成要素を取得可能な構成を持つリストとしてスレッドリストを構築し、スレッドの進入、退出に際して、ヘッダまたはリスト構成要素に設定された識別情報の更新処理を実行する構成であることを特徴とする請求項1に記載の情報処理装置。
  5. 前記メモリ領域管理部は、
    前記リリースキューのヘッダおよびキュー要素に他のキュー要素の識別情報を記録し、ヘッダから順次各キュー要素を取得可能な構成を持つリストとしてリリースキューを構築し、新たなキューの設定、またはキューの削除処理に際して、ヘッダまたはキュー要素に設定された識別情報の更新処理を実行する構成であることを特徴とする請求項1に記載の情報処理装置。
  6. 前記メモリ領域管理部は、
    プロセッサに対応して設定される有限サイズのメモリ領域としてのヒープ単位でのメモリ管理処理を実行する構成であり、開放要求があり未開放のヒープについてヒープ単位の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として保持し、メモリ領域の割り当て処理に際して、前記リリースキューに含まれるヒープ単位の各キュー要素に記録されたメモリ領域の割り当てを実行する構成であることを特徴とする請求項1に記載の情報処理装置。
  7. 前記メモリ領域管理部は、
    メモリ領域を参照するポインタとしてweakポインタを含む構成において、
    前記リリースキューに含まれるキュー要素に対応するメモリ領域を参照するweakポインタを構成要素とするweakポインタチェーンの検証を実行し、該weakポインタチェーンにweakポインタが存在しない場合、当該キュー要素をリリースキューから破棄し、該キュー要素対応のメモリ領域の開放を実行する構成であることを特徴とする請求項1に記載の情報処理装置。
  8. 前記メモリ領域管理部は、
    メモリ領域を参照するポインタとしてweakポインタを含む構成において、
    前記リリースキューに含まれるキュー要素に対応するメモリ領域を参照するweakポインタと該weakポインタの参照領域を含むメモリ領域を構成要素とするweakポインタチェーンに含まれるメモリ領域のリタイア済みフラグを検証し、該リタイア済みフラグがリタイア済みであることを示す場合、当該キュー要素をリリースキューから破棄し、該キュー要素対応のメモリ領域の開放を実行する構成であることを特徴とする請求項1に記載の情報処理装置。
  9. メモリ領域管理方法であり、
    各データ処理プログラムからのオペレーティングシステムの機能呼出時刻としての進入時刻情報をスレッド毎に記録したスレッド情報からなるスレッドリストを生成、更新するスレッド管理ステップと、
    メモリ開放要求があり未開放のメモリ領域についての領域単位毎の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として生成、更新するメモリ領域管理ステップと、
    メモリ領域の割り当て処理に際して、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻と、前記スレッドリストの各要素中の最古進入時刻との比較を実行し、開放要求時刻が前記最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当て処理を実行するメモリ領域割り当てステップと、
    を有することを特徴とするメモリ領域管理方法。
  10. 前記スレッド管理ステップは、
    複数プロセッサ各々に対応するスレッドリストを生成し、各スレッドリストのヘッダ部に、スレッドリストに含まれるスレッド情報に設定さたれ進入時刻情報中の最古の進入時刻を記録し、該記録情報を他プロセッサから参照可能な設定として管理することを特徴とする請求項9に記載のメモリ領域管理方法。
  11. 前記メモリ領域割り当てステップは、
    プロセッサ対応のスレッドリストのヘッダ部に設定された最古進入時刻情報をすべて参照し、全てのプロセッサ対応のスレッドリストのヘッダ部に設定された最古進入時刻情報中、最も古い最古進入時刻を選択し、該選択最古進入時刻と、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻との比較を実行し、開放要求時刻が前記選択最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当てを実行することを特徴とする請求項10に記載のメモリ領域管理方法。
  12. 前記スレッド管理ステップは、
    前記スレッドリストのヘッダおよびリスト構成要素に他のリスト構成要素の識別情報を記録し、ヘッダから順次各構成要素を取得可能な構成を持つリストとしてスレッドリストを構築し、スレッドの進入、退出に際して、ヘッダまたはリスト構成要素に設定された識別情報の更新処理を実行するステップを含むことを特徴とする請求項9に記載のメモリ領域管理方法。
  13. 前記メモリ領域管理ステップは、
    前記リリースキューのヘッダおよびキュー要素に他のキュー要素の識別情報を記録し、ヘッダから順次各キュー要素を取得可能な構成を持つリストとしてリリースキューを構築し、新たなキューの設定、またはキューの削除処理に際して、ヘッダまたはキュー要素に設定された識別情報の更新処理を実行するステップを含むことを特徴とする請求項9に記載のメモリ領域管理方法。
  14. 前記メモリ領域管理ステップは、
    プロセッサに対応して設定される有限サイズのメモリ領域としてのヒープ単位でのメモリ管理処理を実行し、開放要求があり未開放のヒープについてヒープ単位の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として保持し、
    前記メモリ領域割り当てステップは、
    前記リリースキューに含まれるヒープ単位の各キュー要素に記録されたメモリ領域の割り当てを実行することを特徴とする請求項9に記載のメモリ領域管理方法。
  15. 前記メモリ領域管理ステップは、
    メモリ領域を参照するポインタとしてweakポインタを含む構成において、
    前記リリースキューに含まれるキュー要素に対応するメモリ領域を参照するweakポインタを構成要素とするweakポインタチェーンの検証を実行し、該weakポインタチェーンにweakポインタが存在しない場合、当該キュー要素をリリースキューから破棄し、該キュー要素対応のメモリ領域の開放を実行するステップを含むことを特徴とする請求項9に記載のメモリ領域管理方法。
  16. 前記メモリ領域管理ステップは、
    メモリ領域を参照するポインタとしてweakポインタを含む構成において、
    前記リリースキューに含まれるキュー要素に対応するメモリ領域を参照するweakポインタと該weakポインタの参照領域を含むメモリ領域を構成要素とするweakポインタチェーンに含まれるメモリ領域のリタイア済みフラグを検証し、該リタイア済みフラグがリタイア済みであることを示す場合、当該キュー要素をリリースキューから破棄し、該キュー要素対応のメモリ領域の開放を実行するステップを含むことを特徴とする請求項9に記載のメモリ領域管理方法。
  17. メモリ領域管理処理を実行するコンピュータ・プログラムであり、
    各データ処理プログラムからのオペレーティングシステムの機能呼出時刻としての進入時刻情報をスレッド毎に記録したスレッド情報からなるスレッドリストを生成、更新するスレッド管理ステップと、
    メモリ開放要求があり未開放のメモリ領域についての領域単位毎の開放要求時刻を記録した待ち行列としてのリリースキューをメモリ領域管理情報として生成、更新するメモリ領域管理ステップと、
    メモリ領域の割り当て処理に際して、前記リリースキューに含まれる各キュー要素に設定された開放要求時刻と、前記スレッドリストの各要素中の最古進入時刻との比較を実行し、開放要求時刻が前記最古進入時刻以前に設定されたキュー要素に対応するメモリ領域の割り当て処理を実行するメモリ領域割り当てステップと、
    を有することを特徴とするコンピュータ・プログラム。
JP2005170420A 2004-09-29 2005-06-10 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム Expired - Fee Related JP4144609B2 (ja)

Priority Applications (10)

Application Number Priority Date Filing Date Title
JP2005170420A JP4144609B2 (ja) 2004-09-29 2005-06-10 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム
TW094129106A TWI268446B (en) 2004-09-29 2005-08-25 Information processing device, memory area management method, and computer program
US11/217,494 US7770177B2 (en) 2004-09-29 2005-09-02 System for memory reclamation based on thread entry and release request times
MYPI20054190A MY141494A (en) 2004-09-29 2005-09-06 Information processing apparatus, memory area management method, and computer program
RU2006118342/09A RU2397535C2 (ru) 2004-09-29 2005-09-26 Устройство обработки информации, способ управления областью памяти и компьютерная программа
KR1020067010326A KR101150661B1 (ko) 2004-09-29 2005-09-26 정보 처리 장치 및 메모리 영역 관리 방법
EP05785980A EP1684179A4 (en) 2004-09-29 2005-09-26 INFORMATION PROCESSING DEVICE, MEMORY AREA MANAGEMENT METHOD, AND COMPUTER PROGRAM
PCT/JP2005/017645 WO2006035727A1 (ja) 2004-09-29 2005-09-26 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム
CN2005800014770A CN1906598B (zh) 2004-09-29 2005-09-26 信息处理设备及存储区管理方法
BRPI0506379-5A BRPI0506379A (pt) 2004-09-29 2005-09-26 aparelho de processamento de informação, método de gerenciamento de área de memória, e, programa de computador para efetuar um processo de gerenciamento de área de memória

Applications Claiming Priority (2)

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

Publications (2)

Publication Number Publication Date
JP2006127463A JP2006127463A (ja) 2006-05-18
JP4144609B2 true JP4144609B2 (ja) 2008-09-03

Family

ID=36100684

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005170420A Expired - Fee Related JP4144609B2 (ja) 2004-09-29 2005-06-10 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム

Country Status (10)

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

Families Citing this family (12)

* 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
CN117348976A (zh) * 2017-07-10 2024-01-05 微软技术许可有限责任公司 用于流处理的数据处理单元
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
JP6682599B2 (ja) * 2018-10-19 2020-04-15 イーソル株式会社 オペレーティングシステム及びメモリ割り当て方法
JP6932755B2 (ja) * 2018-10-19 2021-09-08 イーソル株式会社 オペレーティングシステム及びメモリ割り当て方法

Family Cites Families (29)

* 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
US6058460A (en) 1996-06-28 2000-05-02 Sun Microsystems, Inc. Memory allocation in a multithreaded environment
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
US20050235284A1 (en) * 2004-04-14 2005-10-20 International Business Machines Corporation Systems and methods for tracking processing unit usage
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

Also Published As

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

Similar Documents

Publication Publication Date Title
JP4144609B2 (ja) 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム
US9658905B2 (en) Information processing apparatus and method for carrying out multi-thread processing
US10353749B2 (en) Lock-free dual queue with condition synchronization and time-outs
US8245207B1 (en) Technique for dynamically restricting thread concurrency without rewriting thread code
US7246182B2 (en) Non-blocking concurrent queues with direct node access by threads
US8166482B2 (en) Scheduling method, scheduling apparatus and multiprocessor system
JP4322232B2 (ja) 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
WO2019218708A1 (zh) 一种任务处理方法及处理装置、计算机系统
JP4345630B2 (ja) 情報処理装置、割り込み処理制御方法、並びにコンピュータ・プログラム
EP1691287A1 (en) Information processing device, process control method, and computer program
US10331500B2 (en) Managing fairness for lock and unlock operations using operation prioritization
JP2006127461A (ja) 情報処理装置、通信処理方法、並びにコンピュータ・プログラム
US10248420B2 (en) Managing lock and unlock operations using active spinning
US6920635B1 (en) Method and apparatus for concurrent propagation of data between software modules
CN108958903B (zh) 嵌入式多核中央处理器任务调度方法与装置
JP5553685B2 (ja) 情報処理装置および情報処理方法
JP2006031203A (ja) 車載情報端末
JPH09244931A (ja) リアルタイムファイルシステム
US9418175B2 (en) Enumeration of a concurrent data structure
CN108958905B (zh) 嵌入式多核中央处理器的轻量级操作系统
WO2007049543A1 (ja) 演算装置
JP2006099333A (ja) 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
JP2011248469A (ja) 情報処理装置および情報処理方法
Wawrzoniak et al. Imaginary Machines: A Serverless Model for Cloud Applications
JPS60110046A (ja) 資源管理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080430

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080527

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080609

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110627

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120627

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130627

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees