JP5330384B2 - 情報処理装置、情報処理方法及び情報処理プログラム - Google Patents

情報処理装置、情報処理方法及び情報処理プログラム Download PDF

Info

Publication number
JP5330384B2
JP5330384B2 JP2010517676A JP2010517676A JP5330384B2 JP 5330384 B2 JP5330384 B2 JP 5330384B2 JP 2010517676 A JP2010517676 A JP 2010517676A JP 2010517676 A JP2010517676 A JP 2010517676A JP 5330384 B2 JP5330384 B2 JP 5330384B2
Authority
JP
Japan
Prior art keywords
thread
context
detection
information processing
execution state
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
JP2010517676A
Other languages
English (en)
Other versions
JPWO2009157127A1 (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2010517676A priority Critical patent/JP5330384B2/ja
Publication of JPWO2009157127A1 publication Critical patent/JPWO2009157127A1/ja
Application granted granted Critical
Publication of JP5330384B2 publication Critical patent/JP5330384B2/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/461Saving or restoring of program or task context

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、マルチスレッド実行制御技術に関する。
1つのプロセッサにより複数の処理を切り替えながら、見かけ上並行して実行する、マルチスレッドと呼ばれる実行制御方法が知られている。ここでいうマルチスレッドは、マルチタスク、マルチプロセス等、様々に称されることがある。
マルチスレッド制御では、実行するスレッドの切り替え要因が発生した場合に、それまで実行していたスレッドのコンテキスト、つまり、プロセッサ内のレジスタ値をメモリに退避させ、次に実行するスレッドのメモリに退避されていたコンテキストをプロセッサに復元する処理(以下、「コンテキストの退避・設定処理」という)が一般的に行われる。
これにより、スレッドの切り替えによって実行が中断されたスレッドについて、後に実行を再開する場合に、中断された時点の処理から再開できるようになる。
このように、マルチスレッド制御でのスレッドの切り替えに際しては、このコンテキストの退避・設定処理が一般的に行われることになるが、プロセッサとメモリとの間でコンテキストの書き込みと読み出しとのためのデータ転送が行われることになるため、スレッドの切り替えに時間がかかり、プログラムの処理効率が低下するという問題がある。
スレッドの切り替えをより効率的に行う方法には、種々の方法が知られており、例えば特許文献1がある。特許文献1は、扱うレジスタサイズが異なる複数のプログラム(スレッド)を切り替えながら並列して実行する場合に、スレッドが扱うレジスタサイズに応じたサイズ分のデータ(コンテキスト)の退避・設定処理を行うことで、スレッドの切り替えにかかる時間を短縮するものである。
日本国特許公開2007-207074号公報
しかしながら、特許文献1の方法を用いても、各スレッドの実行に必要のないデータの読み書きにより生じる時間が短縮できるに過ぎず、依然としてスレッドの切り替えに時間がかかるという課題は解決できていない。
そこで、本発明は係る問題に鑑みてなされたものであり、従来とは異なる方法で、より高速にスレッドの切り替えを行うことが可能な情報処理装置、情報処理方法及び情報処理プログラムを提供することを目的とする。
上記課題を解決するために、本発明に係る情報処理装置は、それぞれがイベントの取得に対応して処理を行う複数のスレッドを、切り換えながらプロセッサにより実行する情報処理装置であって、実行状態である第1のスレッドの状態を非実行状態に遷移させ、前記複数のスレッドの中から次に実行する第2のスレッドを選択して実行状態に遷移させるスケジューリング手段と、非実行状態に遷移させられる前記第1のスレッドにおける、次に実行状態になった際の処理の開始位置が、イベントの取得に対応した既定の処理部分であることを検出する第1検出手段と、実行状態に遷移させられる前記第2のスレッドにおける処理の開始位置が、前記既定の処理部分であることを検出する第2検出手段と、前記第2のスレッドが実行状態に遷移させられる際に、前記第1検出手段及び前記第2検出手段の検出結果に応じて、前記第2のスレッドの実行用のコンテキストを、前記プロセッサに設定するか否かを切り替えて動作する設定手段とを備えることを特徴とする。
また、上記課題を解決するために本発明に係る情報処理装置において用いられる情報処理方法は、それぞれがイベントの取得に対応して処理を行う複数のスレッドを、切り換えながらプロセッサにより実行する情報処理装置において用いられる情報処理方法であって、スケジューリング手段が、実行状態である第1のスレッドの状態を非実行状態に遷移させ、前記複数のスレッドの中から次に実行する第2のスレッドを選択して実行状態に遷移させるステップと、第1検出手段が、非実行状態に遷移させられる前記第1のスレッドにおける、次に実行状態になった際の処理の開始位置が、イベントの取得に対応した既定の処理部分であることを検出するステップと、第2検出手段が、実行状態に遷移させられる前記第2のスレッドにおける処理の開始位置が、前記既定の処理部分であることを検出するステップと、設定手段が、前記第2のスレッドが実行状態に遷移させられる際に、前記第1検出手段及び前記第2検出手段の検出結果に応じて、前記第2のスレッドの実行用のコンテキストを、前記プロセッサに設定するか否かを切り替えて動作するステップとを備えることを特徴とする。
また、上記課題を解決するために本発明に係る情報処理装置に実行させるための情報処理プログラムは、それぞれがイベントの取得に対応して処理を行う複数のスレッドを、切り換えながらプロセッサにより実行する情報処理装置にスレッドの実行制御処理を実行させるための情報処理プログラムであって、前記スレッドの実行制御処理は、実行状態である第1のスレッドの状態を非実行状態に遷移させ、前記複数のスレッドの中から次に実行する第2のスレッドを選択して実行状態に遷移させるスケジューリングステップと、非実行状態に遷移させられる前記第1のスレッドにおける、次に実行状態になった際の処理の開始位置が、イベントの取得に対応した既定の処理部分であることを検出する第1検出ステップと、実行状態に遷移させられる前記第2のスレッドにおける処理の開始位置が、前記既定の処理部分であることを検出する第2検出ステップと、前記第2のスレッドが実行状態に遷移させられる際に、前記第1検出ステップ及び前記第2検出ステップの検出結果に応じて、前記第2のスレッドの実行用のコンテキストを、前記プロセッサに設定するか否かを切り替えて動作する設定ステップとを備えることを特徴とする。
上述の構成を備える本発明に係る情報処理装置は、第1のスレッドに代えて、第2のスレッドを実行状態に遷移させる際に、第1検出手段及び第2検出手段の検出結果に応じて、第2のスレッドの実行用のコンテキストをプロセッサに設定するか否かを切り替えるため、必ずコンテキストをプロセッサに設定する従来の場合と比較し、より高速にスレッドの切り替えを行うことができる。
また、前記情報処理装置は、更に、スレッドに対応付けてコンテキストを記憶するためのコンテキスト記憶手段と、前記第1検出手段が検出しなかった場合に、前記プロセッサに設定されているコンテキストを、前記第1のスレッドと対応付けられたコンテキストとして前記コンテキスト記憶手段に記憶させるコンテキスト対応付け手段を備え、前記設定手段は、前記第1検出手段が検出し、かつ前記第2検出手段が検出した場合に、前記第2のスレッドに対応付けられたコンテキストを、前記プロセッサに設定せず、前記第2検出手段が検出しなかった場合に、前記第2のスレッドに対応付けられたコンテキストを、前記プロセッサに設定することとしてもよい。
ここで、対応付けとは、スレッドと、コンテキスト記憶手段に記憶されているコンテキストとを関係付ける情報をいう。
これにより、第1検出手段が検出し、かつ第2検出手段が検出した場合に、設定手段は、第2のスレッドを実行状態に遷移させる際に、第2のスレッドに対応付けられたコンテキストをプロセッサに設定しないので、本発明に係る情報処理装置は、より高速にスレッドの切り替えを行うことができる。
第1検出手段が検出し、かつ第2検出手段が検出した場合には、実行状態に遷移させられる第2のスレッドにおける処理の開始位置と、それまで実行状態だった第1のスレッドにおける次に実行状態になった際の処理の開始位置とが共に既定の処理部分となるため、第2のスレッドに対応付けられたコンテキストをプロセッサに設定せずに第2のスレッドを実行させても、正常に動作させることができる。
また、前記コンテキスト対応付け手段は、更に前記第1検出手段が検出した場合に、前記コンテキスト記憶手段に記憶されている、前記第1のスレッドと対応付けられたコンテキストと当該第1のスレッドとの対応付けを削除することとしてもよい。
これにより、第1検出手段が検出した場合に、コンテキスト対応付け手段は、第1のスレッドとそのコンテキストとの対応付けを削除するので、管理すべきコンテキストの数を減らし、全体としてコンテキストの記憶に必要なメモリ容量を減らし得る。
また、前記情報処理装置は、前記コンテキスト記憶手段においてコンテキストが対応付けられていないスレッド用の前記既定の処理部分を処理の開始位置とするための初期コンテキストを記憶する初期コンテキスト記憶手段を備え、前記第2検出手段は、前記コンテキスト記憶手段において、前記第2のスレッドとコンテキストとが対応付けられていない場合に、当該第2のスレッドにおける処理の開始位置が、前記既定の処理部分であると検出し、前記コンテキスト対応付け手段は、更に前記第2検出手段が検出した場合において、前記第1検出手段が検出したときは、前記第1のスレッドに対応付けられたコンテキストの対応付け先を、前記第2のスレッドに変更し、前記第1検出手段が検出しなかったときは、前記初期コンテキストを前記第2のスレッドと対応付けられたコンテキストとして、前記コンテキスト記憶手段に記憶させ、前記設定手段は、前記第1検出手段が検出せず、かつ前記第2検出手段が検出した場合に、前記コンテキスト対応付け手段により前記第2のスレッドと対応付けて前記コンテキスト記憶手段に記憶されている初期コンテキストを前記プロセッサに設定することとしてもよい。
これにより、第2検出手段が検出した場合、つまり、第2のスレッドにコンテキストが対応付けられていない場合において、第1検出手段が検出したときは、第1のスレッドと対応付けられていたコンテキストが、第2のスレッドと対応付けられるので、その第2のスレッドの実行がなされてからまた非実行状態になる際、コンテキストの退避をせざるを得ないときに、そのための領域が既に確保されているようにすることができる。
また、第2のスレッドにコンテキストが対応付けられていない場合において、第1検出手段も検出しなかったときは、既定の処理部分を処理の開始位置とするための初期コンテキストが第2のスレッドに対応付けられ、設定手段がその初期コンテキストをプロセッサに設定するので、第2のスレッドを正常に実行させることができる。
また、前記情報処理装置は、更に前記第1検出手段が検出し、かつ前記第2検出手段が検出した場合に、前記コンテキスト記憶手段に記憶されている、前記第2のスレッドと対応付けられているコンテキストの対応付け先を前記第1のスレッドに、前記第1のスレッドと対応付けられているコンテキストの対応付け先を前記第2のスレッドにそれぞれ変更するコンテキスト対応付け手段を備えることとしてもよい。
これにより、第1検出手段が検出し、かつ第2検出手段が検出した場合には、実行状態に遷移させられる第2のスレッドにおける処理の開始位置と、それまで実行状態だった第1のスレッドにおける次に実行状態になった際の処理の開始位置とが共に既定の処理部分となるため、コンテキスト対応付け手段が、第2のスレッドに対応付けられているコンテキストを第1のスレッドに対応付けることにより、プロセッサに設定されているコンテキストを退避させることなく、第1のスレッドのコンテキストを正しく保持できる。
また、コンテキスト対応付け手段が、第1のスレッドに対応付けられているコンテキストを第2のスレッドに対応付けるので、その第2のスレッドの実行がなされてからまた非実行状態になる際、コンテキストの退避をせざるを得ないときに、そのための領域が既に確保されているようにすることができる。
また後に、第1のスレッドが実行状態になる際に、それに対応付けられたコンテキストをそのままプロセッサに設定し得るようになる。
また、前記イベントは、メッセージであり、前記非実行状態は、メッセージの受信を待つメッセージ待ち状態を含み、前記複数のスレッドには、次に実行状態になった際の処理の開始位置が、前記既定の処理部分となる場合には、前記メッセージ待ち状態に遷移することを示すフラグを設定するよう構成されたスレッドを含み、前記第1検出手段及び前記第2検出手段は、検出対象のスレッドにおいて、前記フラグが設定されていることを検出することにより、当該処理対象のスレッドにおける処理の開始位置が、前記既定の処理部分であることを検出することとしてもよい。
これにより、次に実行状態になった際の処理の開始位置が、前記既定の処理部分となる場合には、前記メッセージ待ち状態に遷移することを示すフラグを設定するよう各スレッドを構成するだけで、本発明に係る情報処理装置は、より高速にスレッドの切り替えを行うという効果が得られるようにできる。
本発明の実施の形態1に係る情報処理装置1000の機能ブロック図である。 記憶部1010に記憶されている構造体群を示す図である。 スケジューラ構造体D00のデータ構成を示す図である。 スレッド構造体D10Aのデータ構成を示す図である。 スレッドの状態遷移を説明するための図である。 セマフォ構造体D20のデータ構成を示す図である。 コンテキスト構造体D30Aのデータ構成を示す図である。 各スレッドの処理を示すフローチャート(左側)と、情報処理装置1000の実行制御部1050の動作を示すフローチャート(右側)である。 情報処理装置1000のスケジュール部1020の動作を示すフローチャートである。 情報処理装置1000の遷移検出部1030の動作を示すフローチャートである。 情報処理装置1000の起床検出部1040の動作を示すフローチャートである。 情報処理装置1000のコンテキスト対応交換部1071の動作を示すフローチャートである。 情報処理装置1000のディスパッチ部1060の動作を示すフローチャートである。 本発明の実施の形態2に係る情報処理装置2000の機能ブロック図である。 スケジューラ構造体D40のデータ構成を示す図である。 コンテキスト構造体D50Aのデータ構成を示す図である。 情報処理装置2000の実行制御部2020の動作を示すフローチャートである。 情報処理装置2000のコンテキスト未対応検出部2010の動作を示すフローチャートである。 情報処理装置2000のコンテキスト対応移動部2031の動作を示すフローチャートである。 情報処理装置2000のコンテキスト対応開放・復元部2032の動作を示すフローチャートである。 情報処理装置2000のコンテキスト保管・対応割付部2033の動作を示すフローチャートである。 情報処理装置2000のコンテキスト保管・対応割付部2033の動作を示すフローチャートである。
以下、本発明の実施の形態について、図面を参照しながら説明する。
≪実施の形態1≫
<概要>
実施の形態1に係る情報処理装置は、CPU(Central Processing Unit)等のプロセッサにプログラムを実行させることにより、マルチスレッドOS(OperatingSystem)としての機能を実現する従来の情報処理装置を改良したものである。
以下では、マルチスレッド制御の対象となる各スレッドには、いわゆるイベントドリブン型の処理プログラムとして動作する複数のスレッドがあり、メッセージによって、各種イベントの発生が伝えられる場合を例に説明する。
このメッセージの例としては、ユーザによりマウスボタンがクリックされたことを示す通知や、スレッド間で連携を取るために使用される通知等が挙げられ、また、各スレッドの切り替え要因には、タイムスライスを使いきった場合、共有資源の割り当てを待つ場合や、上述のメッセージの受信を待つ場合等が挙げられる。なお、以下では、あるスレッドから他のスレッドに切り替えを行う場合に、このあるスレッドのことを「前スレッド」、他のスレッドのことを「現スレッド」と表現する。
イベントドリブン型の各スレッドは、実行状態の間、メッセージループと呼ばれるループ処理を繰り返し実行する。メッセージループは、メッセージキューにメッセージを受信しているか否かの判定処理をプログラムのメインルーチンにおいて含んで形成され、メッセージを受信している場合には、既定のサブルーチンを呼び出してそのメッセージに応じた処理を行った後にこの判定処理を再び行い、メッセージを受信していない場合には、メッセージを待つ状態(以下、「メッセージ待ち状態」という)に遷移する旨のフラグを設定する処理を行って、OSにスレッドの切り替え処理を行わせるものである。
このフラグが設定された状態で、OSによるスレッドの切り替え処理がなされると、そのフラグを設定したスレッド(前スレッド)はメッセージ待ち状態となってメッセージループの実行を中断し、他のスレッド(現スレッド)が実行状態となってこの現スレッドもまたメッセージループを実行する。メッセージ待ち状態となった前スレッドが次に実行状態になったときには、上記判定処理から実行を再開することになる。
なお、上述のサブルーチン処理内でも、スレッドの切り替えは起こり得るが、その場合の前スレッドは、メッセージ待ち状態とは異なる状態(後述する実行可能状態又は一般待ち状態)になる。
このように、イベントドリブン型の各スレッドがそれぞれメッセージループを実行しているので、もし、前スレッドがメッセージ待ち状態になる場合において、現スレッドが前回実行状態から非実行状態になる直前にメッセージを待っていることからメッセージ待ち状態へと遷移していたとすると、前スレッドが次に実行状態になったときの実行の再開位置と、現スレッドがこれから実行を再開する位置とは共に上記判定処理ということになる。
即ち、CPUのレジスタに設定されている値(前スレッドのコンテキスト)が指し示すデータの内容と、現スレッドのコンテキストが指し示すデータの内容とは一致することになり、コンテキストの退避・設定処理を行うことなく、現スレッドの処理を再開できることになる。
そこで、この情報処理装置は、スレッドを切り替える際に、前スレッドがメッセージ待ち状態に遷移することを検出し、かつ現スレッドが前回実行状態だった際にメッセージ待ち状態に遷移したことを検出した場合に、コンテキストの退避・設定処理を行わないことで、より高速にスレッドの切り替えを行い、効率的な処理を実現する。
<構成>
図1は、本発明の実施の形態1に係る情報処理装置1000の機能ブロック図である。
情報処理装置1000は、CPU及びメモリを含み、機能面において、同図に示すとおり、記憶部1010、スケジュール部1020、遷移検出部1030、起床検出部1040、実行制御部1050、ディスパッチ部1060、対応付け部1070を備える。
ここで、記憶部1010は、メモリ等の記憶媒体により実現され、オペレーティングシステムを構成するサブルーチン群(以下、「ステップ群」という)及びデータ群(スケジューラ構造体、各スレッド構造体、各コンテキスト構造体等の構造体群)を記憶する機能を有する。このステップ群を上述のCPUが実行することにより、スケジュール部1020、遷移検出部1030、起床検出部1040、実行制御部1050、ディスパッチ部1060、対応付け部1070の各機能が実現される。
ステップ群、構造体群の内容の詳細は後述するが、スケジューラ構造体は、前スレッドと現スレッドを特定するための情報を含み、各スレッド構造体は、それぞれのスレッドの実行制御用の情報であり、そのスレッドの状態、実行の優先度や対応付けられたコンテキストを指すポインタ等を含むものである。また、各コンテキスト構造体は、それぞれのスレッドに対応付けられたコンテキストの内容を示す情報である。
なお、ここでの構造体とは、一定のデータ構造を有するデータそのものを指しており、スケジューラ構造体と、スレッド構造体と、コンテキスト構造体とは、それぞれ異なるデータ構造を有する。また、各スレッド構造体は、同一のデータ構造を有するが、データ自体は異なり、各コンテキスト構造体についても同様である。
スケジュール部1020は、実行制御部1050の指示に従い、記憶部1010に記憶されている各スレッド構造体に含まれる各スレッドの状態と実行の優先度とに基づいて、次に実行するスレッドを決定し、決定したスレッドを実行状態に遷移させる機能を有する。スケジュール部1020は、決定したスレッドに関する情報を、記憶部1010のスケジューラ構造体に反映させる。
遷移検出部1030は、実行制御部1050の指示に従い、前スレッドの実行制御用の情報である、記憶部1010のスレッド構造体(以下、「前スレッド構造体」という)を参照することにより、そのスレッドがメッセージ待ち状態に遷移することを検出する機能を有する。
起床検出部1040は、実行制御部1050の指示に従い、現スレッドの実行制御用の情報である、記憶部1010のスレッド構造体(以下、「現スレッド構造体」という)を参照することにより、そのスレッドが前回実行状態であった際に、メッセージ待ち状態に遷移していたことを検出する機能を有する。
実行制御部1050は、装置全体の制御、および装置内の各ブロックへの指示を行う機能を有する。特に、スケジュール部1020による決定がなされると、遷移検出部1030と起床検出部1040とに検出を指示し、その検出結果に応じて、ディスパッチ部1060と対応付け部1070とのいずれかにスレッド切り替えのための処理を指示する機能を有する。
ディスパッチ部1060は、実行制御部1050からの指示に応じて、CPUのレジスタに設定されている値を、前スレッドのコンテキスト構造体として記憶部1010に記憶し、記憶部1010に記憶されている現スレッドのコンテキスト構造体の内容をCPUのレジスタに設定する機能を有する。
対応付け部1070は、コンテキスト対応交換部1071を含み、このコンテキスト対応交換部1071は、実行制御部1050からの指示に応じて、前スレッドとコンテキストとの対応付けと、現スレッドとコンテキストとの対応付けとを交換する機能を有する。より詳細には、前スレッド構造体に含まれる、そのスレッドと対応付けられたコンテキストを指すポインタと、現スレッド構造体に含まれる、そのスレッドと対応付けられたコンテキストを指すポインタとを交換する。
<データ>
情報処理装置1000がマルチスレッド制御に用いるデータについて説明する。なお、以下では、3つのイベントドリブン型のスレッドの並列実行を想定した場合を例に説明する。また、以下の例では、1つのセマフォを使って待ち合わせ処理を行う場合を想定して説明する。
図2は、記憶部1010に記憶されている構造体群を示す図である。
同図に示すように、記憶部1010には、スケジューラ構造体D00、スレッド構造体D10A〜D10C、セマフォ構造体D20、コンテキスト構造体D30A〜D30Cが記憶されている。
<スレッド構造体>
まず、スレッド構造体D10A〜D10Cについて説明する。
スレッド構造体D10A〜D10Cは、それぞれ1つのスレッドの実行制御用の情報であり、スレッド生成時に生成される。スレッド構造体D10A〜D10Cは、同一のデータ構成を有するため、以下では、スレッド構造体D10Aを例に説明する。
図4は、スレッド構造体D10Aのデータ構成を示す図である。
同図に示すように、スレッド構造体D10Aは、スレッド状態D11、スレッド優先度D12、メッセージ待ち状態遷移検出フラグD13、コンテキスト構造体へのポインタD14、メッセージキューD15、メッセージハンドラD16から構成される。
ここで、スレッド状態D11は、スレッドの状態を示す情報であり、終了状態T0、実行状態T1、実行可能状態T2、一般待ち状態T3、メッセージ待ち状態T4のいずれかを示すものである。スレッドの状態がどのように遷移するかについては後述する。
スレッド優先度D12は、スレッドの実行の優先度を示す情報であり、優先度は例えば、スレッド生成時に、生成元のプログラムにより指定を受けて決定される。
メッセージ待ち状態遷移検出フラグD13は、前スレッドがメッセージ待ち状態T4に遷移するか否か、及び現スレッドがメッセージ待ち状態T4に遷移していたか否かを示す情報である。スレッドが実行状態T1からメッセージ待ち状態T4に遷移する旨を示すためにそのスレッドにより「真」に設定される。スレッドの切り替えが発生する際に、このフラグを用いて、コンテキストの退避・設定処理の要否が判断される。
コンテキスト構造体へのポインタD14は、スレッドに対応付けられたコンテキスト構造体を特定するためのポインタであり、スレッドに対応するコンテキストが生成された際に設定され、後述するように、コンテキストの退避・設定処理を行うことなくスレッドの切り替えがなされた場合に更新される。同図中の「コンテキスト構造体D30」の記載は、コンテキスト構造体D30A〜D30Cのいずれかのコンテキスト構造体を指すことを示している。
メッセージキューD15は、スレッドが受信したメッセージの集合である。このメッセージは、OSや他のスレッドにより追加され、このメッセージを処理することにより、即ち、イベント(メッセージ)に対応したサブルーチン(メッセージハンドラ)を実行することにより、メッセージキューD15が空になる場合もある。
メッセージハンドラD16は、メッセージを受信していたときに実行するサブルーチン(メッセージハンドラ)の記憶部1010上のアドレスを記憶しておくためのポインタである。
ここで、情報処理装置1000のマルチスレッド制御によるスレッドの状態遷移について簡単に説明する。
図5は、スレッドの状態遷移を説明するための図である。
同図に示す終了状態T0とは、スレッドの動作が終了した状態をいい、スレッドが生成された直後もこの状態となる。スレッドが生成された場合に、そのスレッドを開始させる処理を行うことで、スレッドは実行可能状態T2に遷移する。
実行可能状態T2とは、CPUが割り当てられるのを待っている状態であり、そのスレッドにCPUが割り当てられると、スレッドは、実行状態T1に遷移する。
また、実行状態T1とは、スレッドにCPUが割り当てられ、実行される状態をいう。実行可能状態T2にある他のスレッドより実行状態T1のスレッドの優先度が低くなった場合等に、実行状態T1のスレッドは、実行可能状態T2に遷移し、また、他のスレッドの資源開放待ち(セマフォ待ち)等が発生した場合に、一般待ち状態T3に遷移し、メッセージ待ちが発生した場合に、メッセージ待ち状態T4に遷移する。
また、一般待ち状態T3とは、セマフォ待ち等の、メッセージ待ち状態T4における要因以外の要因による待ちの状態をいい、例えばセマフォ待ちが解除することにより、実行可能状態T2に遷移する。
また、メッセージ待ち状態T4とは、上述のメッセージキューD15にメッセージがなく、メッセージの受信を待っている状態をいい、メッセージが送信された(つまり受信した)場合に、実行可能状態T2に遷移する。
<スケジューラ構造体>
次に、スケジューラ構造体D00について説明する。
図3は、スケジューラ構造体D00のデータ構成を示す図である。
同図に示すように、スケジューラ構造体D00は、スレッド構造体の配列D01、現スレッド構造体へのポインタD02、前スレッド構造体へのポインタD03から構成される。
ここで、スレッド構造体の配列D01は、上述のスレッド構造体D10A〜D10Cを要素とした配列である。
また、現スレッド構造体へのポインタD02は、スケジュール部1020により、次に実行すると決定されたスレッド(現スレッド)の制御用情報である現スレッド構造体(以下、スレッドとその制御用情報であるスレッド構造体との関係を表現する場合に、単に、「スレッドに対応するスレッド構造体」、「スレッド構造体に対応するスレッド」と表現する)を特定するためのポインタである。
また、前スレッド構造体へのポインタD03は、スケジュール部1020による決定がなされる前に現スレッドだったスレッド(前スレッド)に対応する前スレッド構造体を特定するためのポインタである。
<セマフォ構造体>
次に、セマフォ構造体D20について説明する。
図6は、セマフォ構造体D20のデータ構成を示す図である。
同図に示すように、セマフォ構造体D20は、資源数D21、一般待ち状態のスレッドキューD22から構成される。
ここで、資源数D21は、セマフォが管理している資源数を示す情報であり、一般待ち状態のスレッドキューD22は、他のスレッドの資源開放待ちのために、一般待ち状態T3に遷移したスレッドの集合である。
<コンテキスト構造体>
次に、コンテキスト構造体D30A〜D30Cについて説明する。
コンテキスト構造体D30A〜D30Cは、それぞれのスレッドに対応付けられたコンテキストの内容を示す情報であり、スレッドを開始する際に生成される。コンテキスト構造体D30A〜D30Cは、同一のデータ構成を有するため、以下では、コンテキスト構造体D30Aを例に説明する。
図7は、コンテキスト構造体D30Aのデータ構成を示す図である。
同図に示すように、コンテキスト構造体D30Aは、一般待ち状態コンテキストD33、スタックD34から構成される。
ここで、一般待ち状態コンテキストD33は、スレッドが、実行状態T1から一般待ち状態T3に遷移した際の、CPUから退避したコンテキストを示す情報であり、スタックD34は、コンテキスト毎のスタック情報である。
<メッセージループステップ>
図8は、各スレッドの処理を示すフローチャート(左側)と、情報処理装置1000の実行制御部1050の動作を示すフローチャート(右側)である。
以下説明するメッセージループステップS100は、イベントドリブン型の各スレッドが実行するメッセージループの処理内容を示している。即ち、情報処理装置1000によるマルチスレッド制御の対象となるスレッドは、共通の処理構造を有している。なお、メッセージループステップS100は、記憶部1010に記憶されており、情報処理装置1000が備えるCPUにより実行されることになる。
スレッドは、自スレッドに対応するスレッド構造体(現スレッド構造体)のメッセージキューD15にメッセージが有るか判定し(部分ステップS101)、有る場合には(部分ステップS101:YES)、このメッセージキューD15から取り出したメッセージを引数にして、メッセージハンドラD16に設定されているサブルーチン(メッセージハンドラ)を呼び出し(部分ステップS106)、その処理の後に、部分ステップS101の処理に戻る。なお、このサブルーチン(メッセージハンドラ)の処理内容については、スレッド毎に異なるものでも同一のものでもよい。
部分ステップS101において、メッセージキューD15にメッセージがない場合には(部分ステップS101:NO)、現スレッド構造体のメッセージ待ち状態遷移検出フラグD13を「真」に、スレッド状態D11を「T4」に更新する(部分ステップS102、S103)。
続いて、スレッドは、サブルーチンであるスケジュールステップS000と、ディスパッチ要求ステップS110とを順に呼び出し(部分ステップS104、S105)、これらの処理の後に、部分ステップS101の処理に戻る。
スケジュールステップS000及びディスパッチ要求ステップS110の内容については後述するが、部分ステップS104、S105の処理を通じて、OSにより、次に実行するスレッドが決定され、スレッドの切り替えが行われる。
このように、スレッドは、メッセージキューD15にメッセージが有る間は(部分ステップS101:YES)、サブルーチン(メッセージハンドラ)を実行し、メッセージキューD15にメッセージがなくなると(部分ステップS101:NO)、メッセージ待ち状態T4に遷移する旨のフラグ(メッセージ待ち状態遷移検出フラグD13)を設定し、OSによって、メッセージ待ち状態T4に遷移させられ、次にそのスレッドが実行状態T1になった場合には、部分ステップS101から処理を再開することになる。
上述したように、各スレッドの処理構造は同一であるため、メッセージ待ち状態T4になったスレッドとメッセージ待ち状態T4であったスレッドとの間で切り替えが行われる場合には、両スレッドのコンテキストが指し示すデータの内容が一致することになる。
<動作>
次に、上記構成を備える情報処理装置1000の動作を説明する。
<スケジュールステップ>
まず、メッセージループステップの部分ステップS104で呼び出しているスケジュールステップS000について説明する。
図9は、情報処理装置1000のスケジュール部1020の動作を示すフローチャートである。
スケジュール部1020は、スケジューラ構造体D00における前スレッド構造体へのポインタD03に現スレッド構造体へのポインタD02を代入する(部分ステップS001)。
次に、各スレッド構造体のうち、スレッド状態D11が実行状態T1と実行可能状態T2であるスレッド構造体の中から、スレッド優先度D12が一番高いスレッド構造体を検索する(部分ステップS002)。
次に、検索されたスレッド構造体のスレッド状態D11が実行状態T1か判定し(部分ステップS003)、実行状態T1でない場合には(部分ステップS003:NO)、検索されたスレッド(現スレッドとなるスレッド)の状態を遷移させるために、以下の処理を行う。即ち、検索されたスレッドに対応するスレッド構造体のスレッド状態D11を実行状態T1に更新し、現スレッド構造体へのポインタD02に検索されたスレッドに対応するスレッド構造体を設定する(部分ステップS004)。
次に、前スレッド構造体のスレッド状態D11が実行状態T1か判定し(部分ステップS005)、実行状態T1である場合には(部分ステップS005:YES)、前スレッドの状態を遷移させるために、前スレッド構造体のスレッド状態D11を実行可能状態T2に更新し(部分ステップS006)、スケジュールステップの処理を終了する(部分ステップS007)。また、部分ステップS005において、実行状態T1でない場合には(部分ステップS005:NO)、特に処理を行うことなくスケジュールステップの処理を終了し(部分ステップS007)。
また、部分ステップS003において、実行状態T1である場合には(部分ステップS003:YES)、検索されたスレッドは元々実行状態T1であって遷移させる必要はないため、特に処理を行うことなく、スケジュールステップの処理を終了する(部分ステップS007)。
<ディスパッチ要求ステップ>
次に、メッセージループステップの部分ステップS105で呼び出しているディスパッチ要求ステップS110について、図8の右側に示すフローチャートに従って説明する。
まず、実行制御部1050は、現スレッド構造体と前スレッド構造体が同一か判定する(部分ステップS111)。つまり、現スレッド構造体へのポインタD02と前スレッド構造体へのポインタD03とが同一かどうか判定する。
部分ステップS111において、同一である場合には(部分ステップS111:YES)、スレッドの切り替えを行う必要がないので、ディスパッチ要求ステップの処理を終了し(部分ステップS117)、同一でない場合には(部分ステップS111:NO)、スレッドを切り替えるための処理を以下のとおり行う。
即ち、実行制御部1050は、メッセージ待ち状態遷移検出ステップS010の戻り値が「真」であるか判定する(部分ステップS112)。メッセージ待ち状態遷移検出ステップS010の内容については後述するが、前スレッド構造体のメッセージ待ち状態遷移検出フラグD13の値が戻り値となるため、部分ステップS112は、前スレッド構造体に対応するスレッドがメッセージ待ち状態T4に遷移するかを判定することに相当する。
部分ステップS112において、戻り値が「真」の場合には(部分ステップS112:YES)、実行制御部1050は、メッセージ待ち状態からの起床検出ステップS020の戻り値が「真」であるか判定する(部分ステップS113)。メッセージ待ち状態からの起床検出ステップS020の内容については後述するが、現スレッド構造体のメッセージ待ち状態遷移検出フラグD13の値が戻り値となるため、部分ステップS113は、現スレッド構造体に対応するスレッドが、前回実行状態T1であった際に、メッセージ待ち状態T4に遷移したかを判定することに相当する。
部分ステップS113における戻り値が「真」の場合には(部分ステップS113:YES)、前スレッド構造体に対応するスレッドのコンテキストが指し示すデータの内容と現スレッド構造体に対応するスレッドのコンテキストが指し示すデータの内容とが一致することになるため、実行制御部1050は、コンテキスト対応付け交換ステップS030を呼び出し(部分ステップS114)、その処理の後、ディスパッチ要求ステップの処理を終了する(部分ステップS117)。コンテキスト対応付け交換ステップS030の内容については後述するが、前スレッドに対応付けられたコンテキストと現スレッドに対応付けられたコンテキストとの対応付け(ポインタ)を交換する処理を行う。
また、部分ステップS113における戻り値が「偽」の場合には(部分ステップS113:NO)、前スレッド構造体に対応するスレッドのコンテキストが指し示すデータの内容と現スレッド構造体に対応するスレッドのコンテキストが指し示すデータの内容とは一致しないため、実行制御部1050は、ディスパッチステップS040を呼び出し(部分ステップS116)、その処理の後、ディスパッチ要求ステップの処理を終了する(部分ステップS117)。ディスパッチステップS040の内容については後述するが、コンテキストの退避・設定処理が行われる。
また、部分ステップS112における戻り値が「偽」の場合には(部分ステップS112:NO)、実行制御部1050は、現スレッド構造体のメッセージ待ち状態遷移検出フラグD13を「偽」に更新し(部分ステップS115)、部分ステップS116に進む。
このように、ディスパッチ要求ステップS110では、部分ステップS112、S113の判定処理を行うことで、サブルーチンであるディスパッチステップS040とコンテキスト対応付け交換ステップS030とのいずれかに処理を振り分けている。
上述のように、ディスパッチステップS040では、コンテキストの退避・設定処理が行われ、コンテキスト対応付け交換ステップS030では、前スレッドに対応付けられたコンテキストと現スレッドに対応付けられたコンテキストとの対応付け(ポインタ)を交換する処理が行われる。
コンテキストの退避・設定処理よりも、コンテキストの対応付けの交換処理のほうが一般的には高速に処理できるので、スレッドの切り替えを行う際に、コンテキスト対応付け交換ステップS030が呼び出される回数が多くなるほど、毎回ディスパッチステップS040が呼び出される場合と比較し、全体としてのプログラムの処理効率を向上させることができる。
<メッセージ待ち状態遷移検出ステップ>
次に、ディスパッチ要求ステップの部分ステップS112におけるメッセージ待ち状態遷移検出ステップS010について説明する。
図10は、情報処理装置1000の遷移検出部1030の動作を示すフローチャートである。
遷移検出部1030は、前スレッド構造体のメッセージ待ち状態遷移検出フラグD13の値を返却し(部分ステップS011)、メッセージ待ち状態遷移検出ステップの処理を終了する(部分ステップS012)。
<メッセージ待ち状態からの起床検出ステップ>
続いて、ディスパッチ要求ステップの部分ステップS113におけるメッセージ待ち状態からの起床検出ステップS020について説明する。
図11は、情報処理装置1000の起床検出部1040の動作を示すフローチャートである。
起床検出部1040は、現スレッド構造体のメッセージ待ち状態遷移検出フラグD13の値を返却し(部分ステップS021)、そのメッセージ待ち状態遷移検出フラグD13の値を「偽」に設定し(部分ステップS022)、メッセージ待ち状態からの起床検出ステップの処理を終了する(部分ステップS023)。
<コンテキスト対応付け交換ステップ>
次に、ディスパッチ要求ステップの部分ステップS114で呼び出しているコンテキスト対応付け交換ステップS030について説明する。
図12は、情報処理装置1000のコンテキスト対応交換部1071の動作を示すフローチャートである。
コンテキスト対応交換部1071は、現スレッド構造体のコンテキスト構造体へのポインタD14の値と、前スレッド構造体のコンテキスト構造体へのポインタD14の値とを交換し(部分ステップS031)、コンテキスト対応付け交換ステップの処理を終了する(部分ステップS032)。
このように、現スレッド構造体と前スレッド構造体との間で、コンテキスト構造体へのポインタD14を交換することにより、コンテキストの退避処理を行うことなく、前スレッドのコンテキストを正しく保持でき、また、現スレッドにもコンテキストを対応付けた状態を保つことができ、この現スレッドのコンテキストを退避する必要が生じても、従来どおり退避することができる。
<ディスパッチステップ>
次に、ディスパッチ要求ステップの部分ステップS116で呼び出しているディスパッチステップS040について説明する。
図13は、情報処理装置1000のディスパッチ部1060の動作を示すフローチャートである。
まず、ディスパッチ部1060は、CPUのレジスタに設定されている値を、前スレッド構造体のコンテキスト構造体へのポインタD14が指すコンテキスト構造体D30の一般待ち状態コンテキストD33として記憶する。ただし、プログラムカウンタ(以下、「PC」ともいう)の値はS043に補正して記憶する(部分ステップS041)。プログラムカウンタの値の補正は、前スレッド構造体に対応するスレッドが、次に実行状態T1になった場合に、部分ステップS043から処理を再開することを示している。
次に、ディスパッチ部1060は、現スレッド構造体のコンテキスト構造体へのポインタD14が指すコンテキスト構造体D30の一般待ち状態コンテキストD33の値をCPUのレジスタに設定し(部分ステップS042)、ディスパッチステップの処理を終了する(部分ステップS043)。
<具体例>
スレッド構造体D10Aに対応するスレッドとスレッド構造体D10Bに対応するスレッドとの間で切り替えが発生する場合を例に、情報処理装置1000の動作を具体的に説明する。
以下では、現スレッド構造体へのポインタD02は「D10A」であり、スレッド構造体D10Aのスレッド状態D11は「T1」、メッセージキューD15は空、コンテキスト構造体へのポインタD14は「D30A」であるものとする。
また、スレッド構造体D10Bのスレッド状態D11は「T2」、メッセージ待ち状態遷移検出フラグD13は「真」、コンテキスト構造体へのポインタD14は「D30B」であるものとし、スレッド構造体D10Aに対応するスレッドが図8の左側に示すメッセージループステップS100内の部分ステップS101の処理をこれから実行するものとして説明する。
スレッド構造体D10Aに対応するスレッドは、スレッド構造体D10AのメッセージキューD15にメッセージがないので(同図左側の部分ステップS101:NO)、メッセージ待ち状態遷移検出フラグD13を「真」に、スレッド状態D11を「T4」に更新する(部分ステップS102、S103)。
続いて、スレッド構造体D10Aに対応するスレッドは、サブルーチンであるスケジュールステップS000を呼び出す(部分ステップS104)。
スケジュールステップS000の呼び出しを受けて、情報処理装置1000の実行制御部1050は、スケジュール部1020に処理を指示する。
この指示を受けて、スケジュール部1020は、スケジューラ構造体D00における前スレッド構造体へのポインタD03に現スレッド構造体へのポインタD02(D10A)を代入する(図9の部分ステップS001)。
次に、スケジュール部1020は、各スレッド構造体のうち、スレッド状態D11が実行状態T1と実行可能状態T2であるスレッド構造体の中から、スレッド優先度D12が一番高いスレッド構造体(この例では、スレッド構造体D10Bであるものとする)を検索し(部分ステップS002)、スレッド構造体D10Bのスレッド状態D11(T2)は実行状態T1でないので(部分ステップS003:NO)、このスレッド状態D11を「T1」に更新し、現スレッド構造体へのポインタD02に「D10B」を設定する(部分ステップS004)。
次に、前スレッド構造体(D10A)のスレッド状態D11が「T1」でないので(部分ステップS005:NO)、スケジュールステップの処理を終了する(部分ステップS007)。
再び、メッセージループステップの処理に戻り、スレッド構造体D10Aに対応するスレッドは、ディスパッチ要求ステップS110を呼び出す(部分ステップS105)。
ディスパッチ要求ステップS110の呼び出しを受けて、実行制御部1050は、現スレッド構造体へのポインタD02(D10B)と前スレッド構造体へのポインタD03(D10A)が同一でなく(図8右側の部分ステップS111:NO)、メッセージ待ち状態遷移検出ステップS010の戻り値は「真」であり(部分ステップS112:YES)、メッセージ待ち状態からの起床検出ステップS020の戻り値も「真」であるので(部分ステップS113:YES)、コンテキスト対応付け交換ステップS030を呼び出す(部分ステップS114)。
実行制御部1050からの指示を受けて、コンテキスト対応交換部1071は、現スレッド構造体のコンテキスト構造体へのポインタD14の値(D30B)と、前スレッド構造体のコンテキスト構造体へのポインタD14の値(D30A)とを交換し(図12の部分ステップS031)、コンテキスト対応付け交換ステップの処理を終了する(部分ステップS032)。
再びディスパッチ要求ステップの処理に戻り、実行制御部1050は、ディスパッチ要求ステップの処理を終了する(図8右側の部分ステップS117)。
上述した例では、ディスパッチ要求ステップS110内で、コンテキスト対応付け交換ステップS030が呼ばれて、スレッドの切り替えがなされているので、ディスパッチステップS040が呼ばれる場合と比較し、高速にスレッドの切り替えがなされているといえる。
≪実施の形態2≫
<概要>
実施の形態1に係る情報処理装置1000では、各スレッドについて、1つのコンテキストが必ず対応付けられていたが、以下説明する実施の形態2に係る情報処理装置は、前スレッドがメッセージ待ち状態T4に遷移する場合に、前スレッドとコンテキストとの対応付け(ポインタ)を削除する点で、情報処理装置1000とは異なる。
本実施の形態に係る情報処理装置は、現スレッドとコンテキストとの対応付けがなされていないことを検出することで、現スレッドが前回実行状態T1であった際に、メッセージ待ち状態T4に遷移していたことを検出し、このコンテキストとの対応付けが削除された現スレッドに、メッセージループの判定処理から実行するよう設定されたコンテキストとの対応付けを改めて行う。このようにすることで、メッセージ待ち状態T4で処理を中断しているスレッドには、コンテキストを対応付けておく必要はないため、このようなスレッドが多くなるほど、全体としてメモリの使用量を減らすことができる。
なお、上記説明では、コンテキストとの対応付けが削除された現スレッドについて説明したが、生成直後でコンテキストの対応付けがなされていないスレッドが現スレッドとなる場合にも、メッセージループの判定処理から実行することになるため、同様の取り扱いをすることができる。
以下、情報処理装置1000と異なる部分を中心に説明する。
<構成>
図14は、本発明の実施の形態2に係る情報処理装置2000の機能ブロック図である。
情報処理装置2000は、機能面において、同図に示すとおり、記憶部1010、スケジュール部1020、遷移検出部1030、コンテキスト未対応検出部2010、実行制御部2020、対応付け部2030を備える。
コンテキスト未対応検出部2010、実行制御部2020、対応付け部2030が実施の形態1に係る情報処理装置1000とは異なるので、以下、これらについて説明する。
ここで、コンテキスト未対応検出部2010は、実行制御部2020の指示に従い、記憶部1010の現スレッド構造体を参照することにより、そのスレッドにコンテキストが対応付けされていないことを検出する機能を有する。
実行制御部2020は、実行制御部1050と同様に、各検出部の検出結果に応じて、ディスパッチ部1060と対応付け部2030とのいずれかにスレッド切り替えのための処理を指示する機能を有するが、以下の点で、実行制御部1050とは異なる。
即ち、実行制御部1050は、各検出部のうち、いずれかの検出部が検出しない場合には、ディスパッチ部1060にスレッド切り替えのための処理を指示していたが、実行制御部2020は、遷移検出部1030とコンテキスト未対応検出部2010とのいずれもが検出しない場合にのみ、ディスパッチ部1060に処理を指示する点で異なる。
つまり、実行制御部2020は、遷移検出部1030とコンテキスト未対応検出部2010とのいずれかが検出した場合には、対応付け部2030にスレッド切り替えのための処理を指示する。
対応付け部2030は、コンテキスト対応交換部1071に代えて、コンテキスト対応移動部2031、コンテキスト対応開放・復元部2032、コンテキスト保管・対応割付部2033を含む点で、対応付け部1070とは異なる。
ここで、コンテキスト対応移動部2031は、遷移検出部1030とコンテキスト未対応検出部2010とのいずれもが検出した場合に、実行制御部2020からの指示に応じて、前スレッドに対応付けられていたコンテキストを現スレッドに対応付け、そのコンテキストと前スレッドとの対応付けを削除する機能を有する。
コンテキスト対応開放・復元部2032は、遷移検出部1030が検出し、かつコンテキスト未対応検出部2010が検出しなかった場合に、実行制御部2020からの指示に応じて、前スレッドとそのコンテキストとの対応付けを削除し、現スレッドに対応付けられているコンテキストをCPUのレジスタに設定する機能を有する。
コンテキスト保管・対応割付部2033は、遷移検出部1030が検出せず、かつコンテキスト未対応検出部2010が検出した場合に、実行制御部2020からの指示に応じて、CPUのレジスタに設定されている値を前スレッドのコンテキスト構造体として記憶部1010に記憶し、スレッドとの対応付けがなされていないコンテキスト構造体を現スレッドに対応付け、対応付けたそのコンテキスト構造体の内容をCPUのレジスタに設定する機能を有する。この現スレッドに対応付けられるコンテキスト構造体が示すコンテキストの内容については、後述する。
<データ>
情報処理装置2000がマルチスレッド制御に用いるデータについて説明する。
情報処理装置2000の記憶部1010には、実施の形態1のスケジューラ構造体D00とコンテキスト構造体D30A〜D30Cとに代えて、スケジューラ構造体D40とコンテキスト構造体D50A〜D50Cが記憶されている。
以下、スケジューラ構造体D40、コンテキスト構造体D50A〜D50Cについて、スケジューラ構造体D00とコンテキスト構造体D30A〜D30Cと異なる点を中心に説明する。なお、以下では、スレッド構造体D10A〜D10Cのコンテキスト構造体へのポインタD14は、コンテキスト構造体D50(D50A〜D50Cのいずれかのコンテキスト構造体)を指すものとして説明する。
<スケジューラ構造体>
まず、スケジューラ構造体D40について説明する。
図15は、スケジューラ構造体D40のデータ構成を示す図である。
同図に示すように、スケジューラ構造体D40は、コンテキストプールD04を含む点で、スケジューラ構造体D00とは異なる。
ここで、コンテキストプールD04は、スレッドへの対応付けがなされていないコンテキスト構造体を特定するための情報であり、上述のコンテキスト対応開放・復元部2032により、前スレッドとそのコンテキストとの対応付けが削除された場合にこの情報が記憶され、この情報により特定されるコンテキスト構造体が、コンテキスト保管・対応割付部2033により現スレッドに対応付けられると、この情報は削除される。
<コンテキスト構造体>
次に、コンテキスト構造体D50A〜D50Cについて説明する。
コンテキスト構造体D50A〜D50Cは、同一のデータ構成を有するため、以下では、コンテキスト構造体D50Aを例に説明する。
図16は、コンテキスト構造体D50Aのデータ構成を示す図である。
同図に示すように、コンテキスト構造体D50Aは、メッセージ待ち状態コンテキストD31及びメッセージ待ち状態コンテキスト保管フラグD32を含む点で、コンテキスト構造体D30Aとは異なる。
ここで、メッセージ待ち状態コンテキストD31は、上述のコンテキスト保管・対応割付部2033により、現スレッドに対応付けられるコンテキストを示す情報であり、このコンテキストは、前回実行状態T1であった際に、メッセージ待ち状態T4に遷移したスレッドが処理を再開できるように設定され、新たに生成されたスレッドが現スレッドとなる場合にも対応付けられる。
メッセージ待ち状態コンテキスト保管フラグD32は、メッセージ待ち状態コンテキストD31が有効なコンテキストであることを示す情報である。
また、イベントドリブン型の各スレッドが実行するメッセージループの処理内容は実施の形態1と同様であるが(図8左側に示すメッセージループステップS100)、部分ステップS105において、呼び出すサブルーチンは、ディスパッチ要求改良ステップS130であるものとして以下、説明する。
<動作>
次に、上記構成を備える情報処理装置2000の動作を説明する。
<ディスパッチ要求改良ステップ>
まず、ディスパッチ要求改良ステップS130について説明する。
図17は、情報処理装置2000の実行制御部2020の動作を示すフローチャートである。
部分ステップS131、S132はそれぞれ、図8に示すディスパッチ要求ステップS110の部分ステップS111、S112と同様に処理する。
部分ステップS132において、メッセージ待ち状態遷移検出ステップS010の戻り値が「真」である場合には(部分ステップS132:YES)、実行制御部2020は、コンテキスト未対応検出ステップS050の戻り値が「真」であるか判定する(部分ステップS133)。コンテキスト未対応検出ステップS050の内容については後述するが、現スレッド構造体のコンテキスト構造体へのポインタD14がNULLならば「真」が戻り値となるため、部分ステップS133は、現スレッド構造体のコンテキスト構造体へのポインタD14がNULLであるかを判定することに相当する。
部分ステップS133において、戻り値が「真」の場合には(部分ステップS133:YES)、前スレッド構造体に対応するスレッドのコンテキストが指し示すデータの内容と現スレッド構造体に対応するスレッドのコンテキストが指し示すデータの内容とが一致することになるため、実行制御部2020は、コンテキスト対応移動ステップS060を呼び出し(部分ステップS134)、その処理の後、ディスパッチ要求改良ステップの処理を終了する(部分ステップS139)。コンテキスト対応移動ステップS060の内容については後述するが、前スレッドに対応付けられたコンテキストを現スレッドに対応付け(ポインタの設定)、前スレッドとそのコンテキストとの対応付け(ポインタ)を削除する処理を行う。
また、部分ステップS133において、戻り値が「偽」の場合には(部分ステップS133:NO)、実行制御部2020は、コンテキスト対応開放・復元ステップS070を呼び出し(部分ステップS135)、その処理の後、ディスパッチ要求改良ステップの処理を終了する(部分ステップS139)。コンテキスト対応開放・復元ステップS070の内容については後述するが、コンテキストの設定処理と、前スレッドとそのコンテキストとの対応付け(ポインタ)を削除する処理を行う。
また、部分ステップS132において、メッセージ待ち状態遷移検出ステップS010の戻り値が「偽」である場合には(部分ステップS132:NO)、実行制御部2020は、部分ステップS133と同様の処理を行う(部分ステップS136)。
部分ステップS136において、戻り値が「真」の場合には(部分ステップS136:YES)、実行制御部2020は、コンテキスト保管・対応割付ステップS080を呼び出し(部分ステップS137)、その処理の後、ディスパッチ要求改良ステップの処理を終了する(部分ステップS139)。コンテキスト保管・対応割付ステップS080の内容については後述するが、コンテキストの退避処理と、スレッドとの対応付けがなされていないコンテキスト(メッセージ待ち状態コンテキストD31)を現スレッドに対応付けた上で、コンテキストの設定処理を行う。
部分ステップS136において、戻り値が「偽」の場合には(部分ステップS136:NO)、ディスパッチステップS040を呼び出し(部分ステップS138)、その処理の後、ディスパッチ要求改良ステップの処理を終了する(部分ステップS139)。
上述のように、ディスパッチステップS040及びコンテキスト保管・対応割付ステップS080では、コンテキストの退避・設定処理が行われるが、コンテキスト対応移動ステップS060では、コンテキストの退避・設定処理は行われず、ポインタの設定、削除処理のみが行われ、また、コンテキスト対応開放・復元ステップS070では、コンテキストの設定処理は行われるものの、コンテキストの退避処理は行われず、ポインタを削除する処理が行われる。
従って、スレッドの切り替えを行う際に、コンテキスト対応移動ステップS060とコンテキスト対応開放・復元ステップS070とが呼び出される回数が多くなるほど、毎回ディスパッチステップS040が呼び出される場合と比較し、全体としてのプログラムの処理効率を向上させることができる。
<コンテキスト未対応検出ステップ>
次に、ディスパッチ要求改良ステップの部分ステップS133、S136におけるコンテキスト未対応検出ステップS050について説明する。
図18は、情報処理装置2000のコンテキスト未対応検出部2010の動作を示すフローチャートである。
コンテキスト未対応検出部2010は、現スレッド構造体のメッセージ待ち状態遷移検出フラグD13に「偽」を設定し(部分ステップS051)、現スレッド構造体のコンテキスト構造体へのポインタD14がNULLなら「真」を、NULLでなければ「偽」を返し(部分ステップS052)、コンテキスト未対応検出ステップの処理を終了する(部分ステップS053)。
<コンテキスト対応移動ステップ>
次に、ディスパッチ要求改良ステップの部分ステップS134で呼び出しているコンテキスト対応移動ステップS060について説明する。
図19は、情報処理装置2000のコンテキスト対応移動部2031の動作を示すフローチャートである。
コンテキスト対応移動部2031は、前スレッド構造体のコンテキスト構造体へのポインタD14が指すコンテキスト構造体D50のメッセージ待ち状態コンテキスト保管フラグD32が「真」であるか判定し(部分ステップS061)、「偽」の場合には(部分ステップS061:NO)、このメッセージ待ち状態コンテキスト保管フラグD32を「真」に設定する(部分ステップS062)。
続いて、コンテキスト対応移動部2031は、CPUのレジスタの値を、前スレッド構造体のコンテキスト構造体へのポインタD14が指すコンテキスト構造体D50のメッセージ待ち状態コンテキストD31に保存する。この際、PCの値は、「S066」として保存する(部分ステップS063)。
部分ステップS063を処理し、又は部分ステップS061において、メッセージ待ち状態コンテキスト保管フラグD32が「真」の場合に(部分ステップS061:YES)、コンテキスト対応移動部2031は、現スレッド構造体のコンテキスト構造体へのポインタD14に、前スレッド構造体のコンテキスト構造体へのポインタD14を設定し(部分ステップS064)、この前スレッド構造体のコンテキスト構造体へのポインタD14に「NULL」を設定し(部分ステップS065)、コンテキスト対応移動ステップの処理を終了する(部分ステップS066)。
<コンテキスト対応開放・復元ステップ>
次に、ディスパッチ要求改良ステップの部分ステップS135で呼び出しているコンテキスト対応開放・復元ステップS070について説明する。
図20は、情報処理装置2000のコンテキスト対応開放・復元部2032の動作を示すフローチャートである。
部分ステップS071〜S073については、図19に示すコンテキスト対応移動ステップS060の部分ステップS061〜S063と同様に処理する。ただし、部分ステップS073においては、PCの値は、「S076」として保存する。
次に、コンテキスト対応開放・復元部2032は、前スレッド構造体のコンテキスト構造体へのポインタD14が指すコンテキスト構造体D50をコンテキストプールD04にストックし、この前スレッド構造体のコンテキスト構造体へのポインタD14を「NULL」に初期化する(部分ステップS074)。
続いて、コンテキスト対応開放・復元部2032は、現スレッド構造体のコンテキスト構造体へのポインタD14が指すコンテキスト構造体D50の一般待ち状態コンテキストD33の値をCPUのレジスタに設定し(部分ステップS075)、コンテキスト対応開放・復元ステップの処理を終了する(部分ステップS076)。
<コンテキスト保管・対応割付ステップ>
次に、ディスパッチ要求改良ステップの部分ステップS137で呼び出しているコンテキスト保管・対応割付ステップS080について説明する。
図21及び図22は、情報処理装置2000のコンテキスト保管・対応割付部2033の動作を示すフローチャートである。
コンテキスト保管・対応割付部2033は、CPUのレジスタの値を、前スレッド構造体のコンテキスト構造体へのポインタD14が指すコンテキスト構造体D50の一般待ち状態コンテキストD33に保存する。この際、PCの値は、「S084」として保存する(部分ステップS081)。
続いて、コンテキスト保管・対応割付部2033は、コンテキスト対応割付ステップS120を呼び出す(部分ステップS082)。コンテキスト対応割付ステップS120の内容については後述する。
次に、コンテキスト保管・対応割付部2033は、現スレッド構造体のコンテキスト構造体へのポインタD14が指すコンテキスト構造体D50のメッセージ待ち状態コンテキストD31の値をCPUのレジスタに設定し(部分ステップS083)、コンテキスト保管・対応割付ステップの処理を終了する(部分ステップS084)。
<コンテキスト対応割付ステップ>
続いて、コンテキスト保管・対応割付ステップの部分ステップS082で呼び出しているコンテキスト対応割付ステップS120について、図22に示すフローチャートに従って説明する。
コンテキスト保管・対応割付部2033は、コンテキストプールD04にコンテキスト構造体D50がストックされているか判定し(部分ステップS121)、ストックされていない場合には(部分ステップS121:NO)、コンテキスト構造体D50を生成し、メッセージ待ち状態コンテキストD31のPCを「S100」に、スタックポインタ(以下、「SP」ともいう)を、生成したコンテキスト構造体D50のスタックD34に初期化する(部分ステップS122)。
続いて、コンテキスト保管・対応割付部2033は、生成したコンテキスト構造体D50のメッセージ待ち状態コンテキスト保管フラグD32を「偽」に初期化し(部分ステップS123)、現スレッド構造体のコンテキスト構造体へのポインタD14に生成したコンテキスト構造体のアドレスを設定し(部分ステップS124)、コンテキスト対応割付ステップの処理を終了する(部分ステップS126)。
また、部分ステップS121において、コンテキストプールD04にコンテキスト構造体D50がストックされている場合には(部分ステップS121:YES)、コンテキストプールD04から取り出したコンテキスト構造体D50のアドレスを、現スレッド構造体のコンテキスト構造体へのポインタD14に設定し(部分ステップS125)、コンテキスト対応割付ステップの処理を終了する(部分ステップS126)。
<具体例>
スレッド構造体D10A、スレッド構造体D10B、スレッド構造体D10Cに対応するそれぞれのスレッドとの間で切り替えが発生する場合を例に、情報処理装置2000の動作を具体的に説明する。
以下では、現スレッド構造体へのポインタD02は「D10C」であり、スレッド構造体D10Aのスレッド状態D11は「T2」、スレッド優先度D12は「最低」、メッセージキューD15は「MES」(1つのメッセージがある)、コンテキスト構造体へのポインタD14は「D50A」であるものとする。
また、スレッド構造体D10Bのスレッド状態D11は「T2」、スレッド優先度D12は「中」、メッセージキューD15は「MES」、コンテキスト構造体へのポインタD14は「NULL」であるものとする。
また、スレッド構造体D10Cのスレッド状態D11は「T1」、スレッド優先度D12は「高」、メッセージキューD15は空、コンテキスト構造体へのポインタD14は「D50B」であるものとし、コンテキスト構造体D50Bのメッセージ待ち状態コンテキスト保管フラグD32は「真」であるものとする。
また、スレッド構造体D10Cに対応するスレッドが図8の左側に示すメッセージループステップS100内の部分ステップS101の処理をこれから実行するものとして説明する。
<1回目の切り替え>
スレッド構造体D10Cに対応するスレッドは、スレッド構造体D10CのメッセージキューD15にメッセージがないので(同図左側の部分ステップS101:NO)、実施の形態1の具体例で説明したのと同様に、部分ステップS102〜S105を実行する。この例では、部分ステップS104の処理により、現スレッド構造体へのポインタD02が「D10B」に更新される。
ディスパッチ要求改良ステップS130の呼び出しを受けて、実行制御部2020は、現スレッド構造体へのポインタD02(D10B)と前スレッド構造体へのポインタD03(D10A)が同一でなく(図17の部分ステップS131:NO)、メッセージ待ち状態遷移検出ステップS010の戻り値は「真」であり(部分ステップS132:YES)、コンテキスト未対応検出ステップS050の戻り値が「真」であるので(部分ステップS133:YES)、実行制御部2020は、コンテキスト対応移動ステップS060を呼び出す(部分ステップS134)。
実行制御部2020からの指示を受けて、コンテキスト対応移動部2031は、前スレッド構造体(D10C)のコンテキスト構造体へのポインタD14が指すコンテキスト構造体(D50B)のメッセージ待ち状態コンテキスト保管フラグD32が「真」であるので(部分ステップS061:YES)、現スレッド構造体(D10B)のコンテキスト構造体へのポインタD14を「D50B」に、前スレッド構造体(D10C)のコンテキスト構造体へのポインタD14を「NULL」に設定し(部分ステップS064、S065)、コンテキスト対応移動ステップの処理を終了する(部分ステップS066)。
再びディスパッチ要求改良ステップの処理に戻り、実行制御部2020は、ディスパッチ要求改良ステップの処理を終了する(図17の部分ステップS139)。
<2回目の切り替え>
スレッド構造体D10Bに対応するスレッドは、スレッド構造体D10BのメッセージキューD15にメッセージがあるので(図8左側の部分ステップS101:YES)、取り出したメッセージを引数にしてメッセージハンドラの処理を行う(部分ステップS106)。なお、この例では、メッセージハンドラ内でのスレッドの切り替えはなされなかったものとする。
再び、部分ステップS101の処理に戻り、スレッド構造体D10Bに対応するスレッドは、スレッド構造体D10BのメッセージキューD15にメッセージがないので(部分ステップS101:NO)、上記1回目の切り替えの際と同様に、部分ステップS102〜S105を実行する。この例では、部分ステップS104の処理により、現スレッド構造体へのポインタD02が「D10A」に更新される。
ディスパッチ要求改良ステップS130の呼び出しを受けて、実行制御部2020は、現スレッド構造体(D10A)と前スレッド構造体(D10B)が同一でなく(図17の部分ステップS131:NO)、メッセージ待ち状態遷移検出ステップS010の戻り値は「真」であり(部分ステップS132:YES)、コンテキスト未対応検出ステップS050の戻り値が「偽」であるので(部分ステップS133:NO)、実行制御部2020は、コンテキスト対応開放・復元ステップS070を呼び出す(部分ステップS135)。
実行制御部2020からの指示を受けて、コンテキスト対応開放・復元部2032は、前スレッド構造体(D10B)のコンテキスト構造体へのポインタD14が指すコンテキスト構造体(D50B)のメッセージ待ち状態コンテキスト保管フラグD32が「真」であるので(部分ステップS071:YES)、前スレッド構造体(D10B)のコンテキスト構造体へのポインタD14が指すコンテキスト構造体(D50B)をコンテキストプールD04にストックし、この前スレッド構造体のコンテキスト構造体へのポインタD14を「NULL」に初期化する(部分ステップS074)。
続いて、コンテキスト対応開放・復元部2032は、現スレッド構造体(D10A)のコンテキスト構造体へのポインタD14が指すコンテキスト構造体(D50A)の一般待ち状態コンテキストD33の値をCPUのレジスタに設定し(部分ステップS075)、コンテキスト対応開放・復元ステップの処理を終了する(部分ステップS076)。
再びディスパッチ要求改良ステップの処理に戻り、実行制御部2020は、ディスパッチ要求改良ステップの処理を終了する(図17の部分ステップS139)。
上述した例では、ディスパッチ要求改良ステップS130内で、コンテキスト対応移動ステップS060とコンテキスト対応開放・復元ステップS070とが呼ばれて、スレッドの切り替えがなされているので、ディスパッチステップS040が呼ばれる場合と比較し、高速にスレッドの切り替えがなされているといえる。
<補足>
以上、本発明に係る情報処理装置について実施の形態に基づいて説明したが、以下のように変形することも可能であり、本発明は上述の実施の形態で示した通りの情報処理装置に限られないことは勿論である。
(1)各実施の形態では、1つのプロセッサを用いて複数のスレッドを切り替えながら並行して実行させる例を説明したが、複数のプロセッサを用いて複数のスレッドを切り替えながら並列して実行させるようにしてもよい。この場合、各プロセッサに対してスレッドの割り当てる際に、各実施の形態で説明したように割り当てを行えばよい。
(2)各実施の形態では、メインループステップに対応するプログラミングコードを各スレッドが共用し、それぞれのスレッドがそのコードを実行するものとして説明したが、各スレッド用に同一の処理構造を有するコードを用意し、それぞれが自スレッド用のコードを実行するようにしてもよい。その場合、これから実行しようとしている現スレッドは、自スレッド用のコードが記憶されているメモリ上の位置を本発明に係る情報処理装置に与える必要が有るが、例えば、そのスレッドに対応するスレッド構造体に、自スレッド用のコードが記憶されているメモリ上のベースアドレス値を含ませることにより実現可能である。
(3)本発明におけるスケジューリング手段は各実施の形態におけるスケジュール部1020に相当し、本発明における第1検出手段は各実施の形態における遷移検出部1030に相当し、本発明における第2検出手段は実施の形態1における起床検出部1040、実施の形態2におけるコンテキスト未対応検出部2010に相当し、本発明におけるコンテキスト記憶手段及び初期コンテキスト記憶手段は各実施の形態における記憶部1010に相当し、本発明におけるコンテキスト対応付け手段及び設定手段は、各実施の形態における実行制御部と対応付け部とディスパッチ部1060とに相当する。
本発明に係る情報処理装置は、マルチスレッド実行制御に利用される。
1000、2000 情報処理装置
1010 記憶部
1020 スケジュール部
1030 遷移検出部
1040 起床検出部
1050、2020 実行制御部
1060 ディスパッチ部
1070、2030 対応付け部
1071 コンテキスト対応交換部
2010 コンテキスト未対応検出部
2031 コンテキスト対応移動部
2032 コンテキスト対応開放・復元部
2033 コンテキスト保管・対応割付部

Claims (7)

  1. それぞれがイベントの取得に対応して処理を行う複数のスレッドを、切り換えながらプロセッサにより実行する情報処理装置であって、
    実行状態である第1のスレッドの状態を非実行状態に遷移させ、前記複数のスレッドの中から次に実行する第2のスレッドを選択して実行状態に遷移させるスケジューリング手段と、
    非実行状態に遷移させられる前記第1のスレッドにおける、次に実行状態になった際の処理の開始位置が、イベントの取得に対応した既定の処理部分であることを検出する第1検出手段と、
    実行状態に遷移させられる前記第2のスレッドにおける処理の開始位置が、前記既定の処理部分であることを検出する第2検出手段と、
    前記第2のスレッドが実行状態に遷移させられる際に、前記第1検出手段及び前記第2検出手段の検出結果に応じて、前記第2のスレッドの実行用のコンテキストを、前記プロセッサに設定するか否かを切り替えて動作する設定手段とを備え、
    前記情報処理装置は、更に、
    スレッドに対応付けてコンテキストを記憶するためのコンテキスト記憶手段と、
    前記第1検出手段が検出しなかった場合に、前記プロセッサに設定されているコンテキストを、前記第1のスレッドと対応付けられたコンテキストとして前記コンテキスト記憶手段に記憶させるコンテキスト対応付け手段とを備え、
    前記設定手段は、前記第1検出手段が検出し、かつ前記第2検出手段が検出した場合に、前記第2のスレッドに対応付けられたコンテキストを、前記プロセッサに設定せず、前記第2検出手段が検出しなかった場合に、前記第2のスレッドに対応付けられたコンテキストを、前記プロセッサに設定する
    ことを特徴とする情報処理装置。
  2. 前記コンテキスト対応付け手段は、更に
    前記第1検出手段が検出した場合に、前記コンテキスト記憶手段に記憶されている、前記第1のスレッドと対応付けられたコンテキストと当該第1のスレッドとの対応付けを削除する
    ことを特徴とする請求項1記載の情報処理装置。
  3. 前記情報処理装置は、
    前記コンテキスト記憶手段においてコンテキストが対応付けられていないスレッド用の前記既定の処理部分を処理の開始位置とするための初期コンテキストを記憶する初期コンテキスト記憶手段を備え、
    前記第2検出手段は、前記コンテキスト記憶手段において、前記第2のスレッドとコンテキストとが対応付けられていない場合に、当該第2のスレッドにおける処理の開始位置が、前記既定の処理部分であると検出し、
    前記コンテキスト対応付け手段は、更に
    前記第2検出手段が検出した場合において、前記第1検出手段が検出したときは、前記第1のスレッドに対応付けられたコンテキストの対応付け先を、前記第2のスレッドに変更し、前記第1検出手段が検出しなかったときは、前記初期コンテキストを前記第2のスレッドと対応付けられたコンテキストとして、前記コンテキスト記憶手段に記憶させ、
    前記設定手段は、前記第1検出手段が検出せず、かつ前記第2検出手段が検出した場合に、前記コンテキスト対応付け手段により前記第2のスレッドと対応付けて前記コンテキスト記憶手段に記憶されている初期コンテキストを前記プロセッサに設定する
    ことを特徴とする請求項2記載の情報処理装置。
  4. 前記コンテキスト対応付け手段は、更に
    前記第1検出手段が検出し、かつ前記第2検出手段が検出した場合に、前記コンテキスト記憶手段に記憶されている、前記第2のスレッドと対応付けられているコンテキストの対応付け先を前記第1のスレッドに、前記第1のスレッドと対応付けられているコンテキストの対応付け先を前記第2のスレッドにそれぞれ変更する
    ことを特徴とする請求項1記載の情報処理装置。
  5. 前記イベントは、メッセージであり、
    前記非実行状態は、メッセージの受信を待つメッセージ待ち状態を含み、
    前記複数のスレッドには、次に実行状態になった際の処理の開始位置が、前記既定の処理部分となる場合には、前記メッセージ待ち状態に遷移することを示すフラグを設定するよう構成されたスレッドを含み、
    前記第1検出手段及び前記第2検出手段は、検出対象のスレッドにおいて、前記フラグが設定されていることを検出することにより、当該検出対象のスレッドにおける処理の開始位置が、前記既定の処理部分であることを検出する
    ことを特徴とする請求項4記載の情報処理装置。
  6. それぞれがイベントの取得に対応して処理を行う複数のスレッドを、切り換えながらプロセッサにより実行する情報処理装置において用いられる情報処理方法であって、
    実行状態である第1のスレッドの状態を非実行状態に遷移させ、前記複数のスレッドの中から次に実行する第2のスレッドを選択して実行状態に遷移させるスケジューリングステップと、
    非実行状態に遷移させられる前記第1のスレッドにおける、次に実行状態になった際の処理の開始位置が、イベントの取得に対応した既定の処理部分であることを検出する第1検出ステップと、
    実行状態に遷移させられる前記第2のスレッドにおける処理の開始位置が、前記既定の処理部分であることを検出する第2検出ステップと、
    前記第2のスレッドが実行状態に遷移させられる際に、前記第1検出ステップ及び前記第2検出ステップの検出結果に応じて、前記第2のスレッドの実行用のコンテキストを、前記プロセッサに設定するか否かを切り替えて動作する設定ステップとを含み、
    前記情報処理方法は、更に、
    記第1検出ステップによる検出がなされなった場合に、前記プロセッサに設定されているコンテキストを、前記第1のスレッドと対応付けられたコンテキストとして、スレッドに対応付けてコンテキストを記憶するためのコンテキスト記憶手段に記憶させるコンテキスト対応付けステップを含み、
    前記設定ステップは、前記第1検出ステップによる検出がなされ、かつ前記第2検出ステップによる検出がなされた場合に、前記第2のスレッドに対応付けられたコンテキストを、前記プロセッサに設定せず、前記第2検出ステップによる検出がなされなかった場合に、前記第2のスレッドに対応付けられたコンテキストを、前記プロセッサに設定する
    ことを特徴とする情報処理方法。
  7. それぞれがイベントの取得に対応して処理を行う複数のスレッドを、切り換えながらプロセッサにより実行する情報処理装置にスレッドの実行制御処理を実行させるための情報処理プログラムであって、
    前記スレッドの実行制御処理は、
    実行状態である第1のスレッドの状態を非実行状態に遷移させ、前記複数のスレッドの中から次に実行する第2のスレッドを選択して実行状態に遷移させるスケジューリングステップと、
    非実行状態に遷移させられる前記第1のスレッドにおける、次に実行状態になった際の処理の開始位置が、イベントの取得に対応した既定の処理部分であることを検出する第1検出ステップと、
    実行状態に遷移させられる前記第2のスレッドにおける処理の開始位置が、前記既定の処理部分であることを検出する第2検出ステップと、
    前記第2のスレッドが実行状態に遷移させられる際に、前記第1検出ステップ及び前記第2検出ステップの検出結果に応じて、前記第2のスレッドの実行用のコンテキストを、前記プロセッサに設定するか否かを切り替えて動作する設定ステップとを含み、
    前記スレッドの実行制御処理は、更に、
    記第1検出ステップによる検出がなされなった場合に、前記プロセッサに設定されているコンテキストを、前記第1のスレッドと対応付けられたコンテキストとして、スレッドに対応付けてコンテキストを記憶するためのコンテキスト記憶手段に記憶させるコンテキスト対応付けステップを含み、
    前記設定ステップは、前記第1検出ステップによる検出がなされ、かつ前記第2検出ステップによる検出がなされた場合に、前記第2のスレッドに対応付けられたコンテキストを、前記プロセッサに設定せず、前記第2検出ステップによる検出がなされなかった場合に、前記第2のスレッドに対応付けられたコンテキストを、前記プロセッサに設定する
    ことを特徴とする情報処理プログラム。
JP2010517676A 2008-06-25 2009-05-13 情報処理装置、情報処理方法及び情報処理プログラム Expired - Fee Related JP5330384B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010517676A JP5330384B2 (ja) 2008-06-25 2009-05-13 情報処理装置、情報処理方法及び情報処理プログラム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2008165443 2008-06-25
JP2008165443 2008-06-25
PCT/JP2009/002080 WO2009157127A1 (ja) 2008-06-25 2009-05-13 情報処理装置、情報処理方法及び情報処理プログラム
JP2010517676A JP5330384B2 (ja) 2008-06-25 2009-05-13 情報処理装置、情報処理方法及び情報処理プログラム

Publications (2)

Publication Number Publication Date
JPWO2009157127A1 JPWO2009157127A1 (ja) 2011-12-08
JP5330384B2 true JP5330384B2 (ja) 2013-10-30

Family

ID=41444200

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010517676A Expired - Fee Related JP5330384B2 (ja) 2008-06-25 2009-05-13 情報処理装置、情報処理方法及び情報処理プログラム

Country Status (4)

Country Link
US (1) US8392932B2 (ja)
JP (1) JP5330384B2 (ja)
CN (1) CN102047224B (ja)
WO (1) WO2009157127A1 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8549523B2 (en) * 2009-11-23 2013-10-01 International Business Machines Corporation Performing runtime analysis and control of folding identified threads by assuming context of another thread and executing in lieu of another thread folding tool
US8832663B2 (en) 2009-11-23 2014-09-09 International Business Machines Corporation Thread serialization and disablement tool
US20120180057A1 (en) * 2011-01-10 2012-07-12 International Business Machines Corporation Activity Recording System for a Concurrent Software Environment
CN103339606B (zh) * 2011-01-10 2017-04-26 国际商业机器公司 用于并发软件环境的活动记录系统
US9652282B2 (en) * 2011-11-08 2017-05-16 Nvidia Corporation Software-assisted instruction level execution preemption
US10795722B2 (en) * 2011-11-09 2020-10-06 Nvidia Corporation Compute task state encapsulation
TWI439925B (zh) * 2011-12-01 2014-06-01 Inst Information Industry 內嵌式系統及其執行緒與緩衝區管理方法
US9471458B2 (en) 2012-01-05 2016-10-18 International Business Machines Corporation Synchronization activity recording system for a concurrent software environment
US9928109B2 (en) 2012-05-09 2018-03-27 Nvidia Corporation Method and system for processing nested stream events
US10318302B2 (en) 2016-06-03 2019-06-11 Synopsys, Inc. Thread switching in microprocessor without full save and restore of register file
US10628320B2 (en) 2016-06-03 2020-04-21 Synopsys, Inc. Modulization of cache structure utilizing independent tag array and data array in microprocessor
US10558463B2 (en) * 2016-06-03 2020-02-11 Synopsys, Inc. Communication between threads of multi-thread processor
US10613859B2 (en) 2016-08-18 2020-04-07 Synopsys, Inc. Triple-pass execution using a retire queue having a functional unit to independently execute long latency instructions and dependent instructions
US10552158B2 (en) 2016-08-18 2020-02-04 Synopsys, Inc. Reorder buffer scoreboard having multiple valid bits to indicate a location of data
CN110971920B (zh) * 2018-09-30 2021-11-26 武汉斗鱼网络科技有限公司 一种消息的降级方法及相关装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07191863A (ja) * 1993-12-25 1995-07-28 Nec Corp マルチタスク実行管理方式
JPH11212808A (ja) * 1997-11-21 1999-08-06 Omron Corp プログラム制御装置とメモリ割当装置および方法
JP2004522234A (ja) * 2000-11-24 2004-07-22 キャサロン プロダクションズ, インコーポレイテッド 仮想スレッドを介したコンピューター多重タスク
JP2005222142A (ja) * 2004-02-03 2005-08-18 Nec Corp アレイ型プロセッサ
JP2005284904A (ja) * 2004-03-30 2005-10-13 Kyocera Corp 携帯電話端末装置及びプログラム管理方法並びにそのコンピュータプログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07141209A (ja) 1993-11-16 1995-06-02 Fujitsu Ltd データ処理装置
EP1247195A4 (en) * 1999-12-22 2005-01-05 Ubicom Inc SYSTEM AND METHOD FOR MULTITHREADING WORKING ON COMMAND LEVEL IN AN EMBEDDED PROCESSOR WITH ZERO-TIME CONTEXT SWITCHING
JP4243571B2 (ja) * 2003-08-05 2009-03-25 パナソニック株式会社 放送受信装置
US7730479B2 (en) 2004-03-30 2010-06-01 Kyocera Corporation Cell-phone terminal, program management method and computer program of same
JP4476193B2 (ja) * 2005-07-29 2010-06-09 株式会社ソニー・コンピュータエンタテインメント 情報処理方法および情報処理装置
US20070113055A1 (en) * 2005-11-15 2007-05-17 Dale Jason N Apparatus and method for improving single thread performance through speculative processing
JP2007207074A (ja) 2006-02-03 2007-08-16 Ricoh Co Ltd オペレーションシステム、スレッド制御機構、及び情報処理装置
US8001549B2 (en) * 2006-04-27 2011-08-16 Panasonic Corporation Multithreaded computer system and multithread execution control method
JP2008102847A (ja) 2006-10-20 2008-05-01 Nec Corp マルチスレッドプログラム処理方法及び装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07191863A (ja) * 1993-12-25 1995-07-28 Nec Corp マルチタスク実行管理方式
JPH11212808A (ja) * 1997-11-21 1999-08-06 Omron Corp プログラム制御装置とメモリ割当装置および方法
JP2004522234A (ja) * 2000-11-24 2004-07-22 キャサロン プロダクションズ, インコーポレイテッド 仮想スレッドを介したコンピューター多重タスク
JP2005222142A (ja) * 2004-02-03 2005-08-18 Nec Corp アレイ型プロセッサ
JP2005284904A (ja) * 2004-03-30 2005-10-13 Kyocera Corp 携帯電話端末装置及びプログラム管理方法並びにそのコンピュータプログラム

Also Published As

Publication number Publication date
US20110067034A1 (en) 2011-03-17
JPWO2009157127A1 (ja) 2011-12-08
US8392932B2 (en) 2013-03-05
WO2009157127A1 (ja) 2009-12-30
CN102047224B (zh) 2013-10-02
CN102047224A (zh) 2011-05-04

Similar Documents

Publication Publication Date Title
JP5330384B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
US9798595B2 (en) Transparent user mode scheduling on traditional threading systems
KR101651246B1 (ko) 멀티-코어 아키텍처들을 위한 사용자-레벨 인터럽트 메커니즘
US8270299B2 (en) Communicator-based token/buffer management for eager protocol support in collective communication operations
US8112559B2 (en) Increasing available FIFO space to prevent messaging queue deadlocks in a DMA environment
US9880875B2 (en) Apparatus and method for hardware-based task scheduling
US20080104296A1 (en) Interrupt handling using simultaneous multi-threading
CN101452399B (zh) 任务二级调度模块及方法
US8321874B2 (en) Intelligent context migration for user mode scheduling
JPWO2009133669A1 (ja) 仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラム
WO2013165450A1 (en) Process scheduling using scheduling graph to minimize managed elements
US7590990B2 (en) Computer system
CN110673927B (zh) 一种虚拟机的调度方法和装置
JP2009059310A (ja) プログラム制御装置
KR100617228B1 (ko) 실시간 운영체계 커널의 이벤트 전달 체계 구현방법
US20190065238A1 (en) Auto-Adaptive Serverless Function Management
CN112379992A (zh) 基于角色的多智能体任务协同消息传递及异常处理方法
CN113574515B (zh) 用于分布式系统中的异步存储管理的系统和方法
JP3953449B2 (ja) タスク管理プログラムおよびタスク制御装置
WO2024124737A1 (zh) 异构计算中进程切换管理方法及计算装置
JP2007328413A (ja) 負荷分散方法
KR101639912B1 (ko) 철강 공정 미들웨어의 이벤트 관리 시스템
JPWO2007108133A1 (ja) マルチプロセッシング方法及びマルチプロセッサシステム
CN109245922B (zh) 虚拟化系统中成员设备重启控制方法和装置
US20230315652A1 (en) Efficient queue access for user-space packet processing

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120125

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130521

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130610

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: 20130702

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130725

R150 Certificate of patent or registration of utility model

Ref document number: 5330384

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees