(57)【特許請求の範囲】
【請求項１】
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理装置において、
プログラムを実行する実行装置と、
情報を記憶する記憶装置と、
上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、
上記割込信号入力装置が出力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部と、
上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択部と、
上記タスク選択部が選択したホストタスクが上記他のプログラムである場合と、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合とで、異なる割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換部とを有し、  上記割込ベクタ書換部は、上記タスク選択部が選択したホストタスクが上記他のプログラムである場合に、上記割込ベクタ記憶部に、上記ゲストタスクの一つである割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記ゲスト並列処理プログラムを実行可能な状態とする切替プログラムを示す割込ベクタを記憶させ、上記ホストタスクの一つである割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記割込信号が上記実行装置に対して実行することを要求する上記ホストタスクの一つである割込処理プログラムを示す割込ベクタを記憶させることを特徴とする並列処理装置。
【請求項２】
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理装置において、
プログラムを実行する実行装置と、
情報を記憶する記憶装置と、
上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、
上記割込信号入力装置が出力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部と、
上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択部と、
上記タスク選択部が選択したホストタスクが上記他のプログラムである場合と、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合とで、異なる割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換部とを有し、
上記割込ベクタ書換部は、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合に、上記割込ベクタ記憶部に、上記ゲストタスクの一つである割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記割込信号が上記実行装置に対して実行することを要求する上記ゲストタスクの一つである割込処理プログラムを示す割込ベクタを記憶させ、上記ホストタスクの一つである割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記ゲスト並列処理プログラムよりも優先順位が高い他のプログラムを実行可能な状態とする切替プログラムを示す割込ベクタを記憶させることを特徴とする並列処理装置。
【請求項３】
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理装置において、
プログラムを実行する実行装置と、
情報を記憶する記憶装置と、
上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、
上記割込信号入力装置が出力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部と、
上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択部と、
上記ゲストタスクの一つであるゲスト割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記タスク選択部が選択したホストタスクが上記他のプログラムである場合は上記ゲスト並列処理プログラムを実行可能な状態とする切替プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合は上記割込信号が上記実行装置に対して実行することを要求するゲスト割込処理プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換部とを有することを特徴とする並列処理装置。
【請求項４】
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理装置において、
プログラムを実行する実行装置と、
情報を記憶する記憶装置と、
上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、
上記割込信号入力装置が出力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部と、
上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択部と、
上記ホストタスクの一つであるホスト割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記タスク選択部が選択したホストタスクが上記他のプログラムである場合は上記割込信号が上記実行装置に対して実行することを要求するホスト割込処理プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合は上記ゲスト並列処理プログラムよりも優先順位が高い他のプログラムを実行可能な状態とする切替プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換部とを有することを特徴とする並列処理装置。
【請求項５】
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理装置において、
プログラムを実行する実行装置と、
情報を記憶する記憶装置と、
上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、
上記割込信号入力装置が出力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部と、
上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択部と、
上記ゲストタスクの一つであるゲスト割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記タスク選択部が選択したホストタスクが上記他のプログラムである場合は上記ゲスト並列処理プログラムを実行可能な状態とする切替プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合は上記割込信号が上記実行装置に対して実行することを要求するゲスト割込処理プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記ホストタスクの一つであるホスト割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記タスク選択部が選択したホストタスクが上記他のプログラムである場合は上記割込信号が上記実行装置に対して実行することを要求するホスト割込処理プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合は上記ゲスト並列処理プログラムよりも優先順位が高い他のプログラムを実行可能な状態とする切替プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換部とを有することを特徴とする並列処理装置。
【請求項６】
上記割込信号入力装置は、更に、
上記実行装置が上記切替プログラムを実行した場合に、上記割込信号を上記実行装置に対して出力する
ことを特徴とする請求項１乃至請求項５のいずれかに記載の並列処理装置。
【請求項７】
上記割込信号入力装置は、
上記実行装置に対して上記割込信号を出力した後、上記実行装置が上記割込処理プログラムを実行するまでの間、上記割込信号を上記実行装置に対して出力する
ことを特徴とする請求項１乃至請求項６のいずれかに記載の並列処理装置。
【請求項８】
上記割込信号入力装置は、上記実行装置に対して上記割込信号を出力した後、割込信号の出力を停止させる割込停止命令を上記実行装置が実行するまでの間、上記割込信号を上記実行装置に対して出力し、
上記割込処理プログラムは、上記割込停止命令を含み、
上記切替プログラムは、上記割込停止命令を含まないことを特徴とする請求項１乃至請求項７のいずれかに記載の並列処理装置。
【請求項９】
プログラムを実行する実行装置と、情報を記憶する記憶装置と、上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、上記割込信号入力装置が入力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部とを有する並列処理装置が、
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理方法において、
タスク選択部が、上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択工程と、
割込ベクタ書換部が、上記タスク選択工程において上記タスク選択部が選択したホストタスクが上記他のプログラムである場合と、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合とで、異なる割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換工程とを有し、
上記タスク選択部が選択したホストタスクが上記他のプログラムである場合、上記割込ベクタ書換工程において、上記割込ベクタ書換部が、上記割込ベクタ記憶部に、上記ゲストタスクの一つである割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記ゲスト並列処理プログラムを実行可能な状態とする切替プログラムを示す割込ベクタを記憶させ、上記ホストタスクの一つである割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記割込信号が上記実行装置に対して実行することを要求する上記ホストタスクの一つである割込処理プログラムを示す割込ベクタを記憶させることを特徴とする並列処理方法。
【請求項１０】
プログラムを実行する実行装置と、情報を記憶する記憶装置と、上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、上記割込信号入力装置が入力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部とを有する並列処理装置が、
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理方法において、
タスク選択部が、上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択工程と、
割込ベクタ書換部が、上記タスク選択工程において上記タスク選択部が選択したホストタスクが上記他のプログラムである場合と、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合とで、異なる割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換工程とを有し、
上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合に、上記割込ベクタ書換工程において、上記割込ベクタ書換部が、上記割込ベクタ記憶部に、上記ゲストタスクの一つである割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記割込信号が上記実行装置に対して実行することを要求する上記ゲストタスクの一つである割込処理プログラムを示す割込ベクタを記憶させ、上記ホストタスクの一つである割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記ゲスト並列処理プログラムよりも優先順位が高い他のプログラムを実行可能な状態とする切替プログラムを示す割込ベクタを記憶させることを特徴とする並列処理方法。
【請求項１１】
プログラムを実行する実行装置と、情報を記憶する記憶装置と、上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、上記割込信号入力装置が出力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部とを有する並列処理装置が、
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理方法において、
タスク選択部が、上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択工程と、
上記ゲストタスクの一つであるゲスト割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記タスク選択工程において上記タスク選択部が選択したホストタスクが上記他のプログラムである場合は、割込ベクタ書換部が、上記ゲスト並列処理プログラムを実行可能な状態とする切替プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合は、上記割込ベクタ書換部が、上記割込信号が上記実行装置に対して実行することを要求するゲスト割込処理プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換工程とを有することを特徴とする並列処理方法。
【請求項１２】
プログラムを実行する実行装置と、情報を記憶する記憶装置と、上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、上記割込信号入力装置が出力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部とを有する並列処理装置が、
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理方法において、
タスク選択部が、上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択工程と、
上記ホストタスクの一つであるホスト割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記タスク選択工程において上記タスク選択部が選択したホストタスクが上記他のプログラムである場合は、割込ベクタ書換部が、上記割込信号が上記実行装置に対して実行することを要求するホスト割込処理プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合は、上記割込ベクタ書換部が、上記ゲスト並列処理プログラムよりも優先順位が高い他のプログラムを実行可能な状態とする切替プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換工程とことを特徴とする並列処理方法。
【請求項１３】
プログラムを実行する実行装置と、情報を記憶する記憶装置と、上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、上記割込信号入力装置が出力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部とを有する並列処理装置が、
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理方法において、
タスク選択部が、上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択工程と、
上記ゲストタスクの一つであるゲスト割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記タスク選択工程において上記タスク選択部が選択したホストタスクが上記他のプログラムである場合は、割込ベクタ書換部が、上記ゲスト並列処理プログラムを実行可能な状態とする切替プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合は、上記割込ベクタ書換部が、上記割込信号が上記実行装置に対して実行することを要求するゲスト割込処理プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記ホストタスクの一つであるホスト割込処理プログラムを実行することを上記実行装置に対して要求する割込信号についての割込ベクタとして、上記タスク選択工程において上記タスク選択部が選択したホストタスクが上記他のプログラムである場合は、上記割込ベクタ書換部が、上記割込信号が上記実行装置に対して実行することを要求するホスト割込処理プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させ、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合は、上記割込ベクタ書換部が、上記ゲスト並列処理プログラムよりも優先順位が高い他のプログラムを実行可能な状態とする切替プログラムを示す割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換工程とを有することを特徴とする並列処理方法。
【請求項１４】
上記割込信号入力装置は、更に、上記実行装置が上記切替プログラムを実行した場合に、上記割込信号を上記実行装置に対して出力することを特徴とする請求項９乃至請求項１３のいずれかに記載の並列処理方法。
【請求項１５】
上記割込信号入力装置は、上記実行装置に対して上記割込信号を出力した後、上記実行装置が上記割込処理プログラムを実行するまでの間、上記割込信号を上記実行装置に対して出力することを特徴とする請求項９乃至請求項１４のいずれかに記載の並列処理装置。
【請求項１６】
上記割込信号入力装置は、上記実行装置に対して上記割込信号を出力した後、割込信号の出力を停止させる割込停止命令を上記実行装置が実行するまでの間、上記割込信号を上記実行装置に対して出力し、
上記割込処理プログラムは、上記割込停止命令を含み、
上記切替プログラムは、上記割込停止命令を含まないことを特徴とする請求項９乃至請求項１５のいずれかに記載の並列処理方法。
【請求項１７】
コンピュータを、請求項１乃至請求項８のいずれかに記載の並列処理装置として機能させることを特徴とする並列処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
複数のプログラムを切り替えて実行することにより、並列して処理する並列処理装置に関する。特に、コンピュータを並列処理装置として機能させるプログラムを、並列処理装置が管理する複数のプログラムの一つとして実行する並列処理装置に関する。
【背景技術】
【０００２】
従来、１つのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有するコンピュータ上で、複数のマルチタスクＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）（以下、単に「ＯＳ」という）を並列して動作させる技術がある。
例えば、一方のＯＳをホストＯＳとし、他方のＯＳをゲストＯＳとして、ゲストＯＳをホストＯＳ上の１つのタスクとして動作させることにより、２つのＯＳを共存させるマルチＯＳシステムがある。
マルチＯＳシステムにおいては、ハードウェアからの割込が発生した場合、その割込を処理すべきタスクを管理しているＯＳが動作していないと、正しく割込を処理することができない。
そのため、例えば、ホストＯＳが割込を処理すべきＯＳを判断し、ゲストＯＳが処理すべき割込である場合には、割込があったことを示すフラグをセットしておき、その後、ゲストＯＳに切り替わったときに、ゲストＯＳがフラグをチェックして、ゲストＯＳの割込ハンドラを呼び出す（例えば、非特許文献１）。
【０００３】
また、ホストＯＳ、ゲストＯＳという関係を設けず、複数のＯＳをＯＳ切替プログラムの管理下において、ＯＳ切替プログラムが、ＯＳ切替機能、割込振分け機能、ＯＳ間通信機能などを実現することにより、複数のＯＳを共存させるマルチＯＳシステムもある（例えば、特許文献１）。
【特許文献１】特開２００１−２８２５５８号公報
【非特許文献１】米国特許５９９５７４５号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ホストＯＳとゲストＯＳとを設けるマルチＯＳシステムでは、各ＯＳが個別に割込マスクを設定すると、割込処理の優先順位に矛盾が生じ、優先的に処理しなければならない割込がマスクされてしまうなどの課題がある。
また、ＯＳ切替プログラムがＯＳを管理するマルチＯＳシステムで、既存のＯＳを動作させようとすると、ＯＳ切替プログラムがハードウェアをエミュレートする必要があり、処理のオーバーヘッドが発生するという課題がある。
また、ＯＳ切替プログラムがハードウェアをエミュレートしない場合には、既存のＯＳをそのまま動作させることができず、大幅な修正が必要になるという課題がある。
【０００５】
この発明は、例えば、上記のような課題を解決するためになされたものであり、ホストＯＳとゲストＯＳとを設けるマルチＯＳシステムにおいて、矛盾なく割込処理を行えるようにするとともに、既存のＯＳをわずかに修正するだけで、利用できるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
この発明にかかる並列処理装置は、
複数のプログラムをゲストタスクとして管理し、上記ゲストタスクを切り替えて実行することにより、上記複数のプログラムを並列して処理するゲスト並列処理装置としてコンピュータを機能させるゲスト並列処理プログラムと、他のプログラムとを、ホストタスクとして管理し、上記ホストタスクを切り替えて実行することにより、上記複数のプログラム及び上記他のプログラムを並列して処理する並列処理装置において、
プログラムを実行する実行装置と、
情報を記憶する記憶装置と、
上記実行装置が実行しているプログラムの実行を中断し、割込を処理する割込処理プログラムを実行することを上記実行装置に対して要求する割込信号を、上記実行装置に対して出力する割込信号入力装置と、
上記割込信号入力装置が入力する割込信号による要求に基づいて、上記実行装置が実行するプログラムを示す情報を割込ベクタとして、上記記憶装置を用いて記憶する割込ベクタ記憶部と、
上記ホストタスクのなかから、上記実行装置が実行するホストタスクを選択するタスク選択部と、
上記タスク選択部が選択したホストタスクが上記他のプログラムである場合と、上記タスク選択部が選択したホストタスクが上記ゲスト並列処理プログラムである場合とで、異なる割込ベクタを上記割込ベクタ記憶部に記憶させる割込ベクタ書換部と、
を有することを特徴とする。
【発明の効果】
【０００７】
この発明によれば、例えば、ゲスト並列処理プログラム（ゲストＯＳ）を実行中と、それ以外の場合とにおいて、異なる割込ベクタを割込ベクタ記憶部に記憶させるので、割込を処理すべきＯＳと異なるＯＳを実行中に、割込が発生した場合であっても、異なるＯＳ下で割込処理が実行されることがなく、割込の発生による処理の混乱を回避することができるという効果を奏する。
【発明を実施するための最良の形態】
【０００８】
実施の形態１．
実施の形態１を、図１〜図１６を用いて説明する。
図１は、この実施の形態における並列処理装置９００のハードウェア構成の一例を示すハードウェア構成図である。
並列処理装置９００は、実行装置９０１、記憶装置９０２、入力装置９０３、出力装置９０４、割込信号入力装置９０５、時計装置９０６を有する。
【０００９】
実行装置９０１は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などである。
実行装置９０１は、記憶装置９０２が記憶したプログラムなどを実行し、以下に説明する各機能ブロックを実現する。
なお、以下に説明する各機能ブロックは、ハードウェアやファームウェアによって実現してもよい。
【００１０】
記憶装置９０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの内部記憶装置、ハードディスク装置やＳＤ（Ｓｅｑｕｒｅｄ  Ｄｅｇｉｔａｌ）メモリなどの外部記憶装置などである。
記憶装置９０２は、実行装置９０１が実行するプログラムのほか、入力装置９０３から入力した情報、実行装置９０１が処理した情報、出力装置９０４が出力する情報などを記憶する。
【００１１】
入力装置９０３は、例えば、キーボードやマウスなどの操作入力装置、マイクなどの音声入力装置、スキャナやカメラなどの画像入力装置などである。
入力装置９０３は、各種情報を入力する。
また、入力装置９０３は、例えば、他の装置と接続するインターフェース装置であって、他の装置からの情報を入力する装置であってもよい。
【００１２】
出力装置９０４は、例えば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）装置などの画像表示装置、スピーカなどの音声出力装置、プリンタなどの画像印刷装置などである。
出力装置９０４は、各種情報を出力する。
また、出力装置９０４は、例えば、他の装置と接続するインターフェース装置であって、他の装置に対して情報を出力する装置であってもよい。
【００１３】
時計装置９０６は、例えば、発振回路とカウンタなどから構成され、現在の時刻あるいはリセット信号を受けてからの経過時間を測定する装置である。
【００１４】
割込信号入力装置９０５は、記憶装置９０２、入力装置９０３、出力装置９０４、時計装置９０６の状態が所定の状態になったことを検出し、実行装置９０１に対して、割込信号を出力する。
例えば、入力装置９０３が操作者の入力を受けた場合、出力装置９０４が画像の印刷を完了した場合、時計装置９０６が測定した時間が所定の時間に達した場合などに、割込信号を出力する。
なお、割込信号入力装置９０５は、実行装置９０１であるＣＰＵの一部であってもよい。
【００１５】
図２は、この実施の形態における並列処理装置９００において実行されるプログラム（タスク）の関係の一例を示す概念図である。
並列処理装置９００において実行されるプログラムには、ホストＯＳ１００（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、ゲストＯＳ２００、ホストＯＳ上のタスク１０６、ＯＳ切替用タスク１０７、ゲストＯＳ上のタスク２０６などがある。
【００１６】
ホストＯＳ１００は、並列処理装置９００が処理するプログラムのうちから実行するプログラムを選択し、実行装置９０１に実行させる。また、実行中のプログラムを中断し、他のプログラムを実行する場合に、実行中のプログラムをあとで再開できるよう、必要な情報（コンテキスト）を保存しておき、実行再開時に復元する。
ホストＯＳ１００は、並列処理プログラムの一例である。
【００１７】
ホストＯＳ１００は、複数のプログラムにより構成される。ホストＯＳ１００は、スケジューラ１０１、割込処理１０３、マスク設定処理１０４、ＯＳ間同期処理１０５などを行うプログラムを有し、割込ベクタ１０２、マスクテーブル１０８などを記憶装置９０２を用いて記憶している。
【００１８】
スケジューラ１０１は、ホストタスク１１０（ゲストＯＳ２００、ホストＯＳ上のタスク１０６、ＯＳ切替用タスク１０７など）のスケジューリングなどの処理を行うプログラムである。
割込処理１０３は、割込信号入力装置９０５が出力した割込信号により実行され、それぞれの割込原因に対応する処理を行うプログラムである。
割込ベクタ１０２は、割込信号入力装置９０５が出力した割込信号により実行する割込処理１０３を示す情報（例えば、割込処理１０３を記憶したメモリ（記憶装置９０２）のアドレスなど）である。
マスク設定処理１０４は、優先順位の高い処理の実行中に、優先順位の低い割込処理を実行しないように、割込処理１０３の実行を制限するための割込マスクを設定するプログラムである。
マスクテーブル１０８は、マスク設定処理１０４において設定する割込マスクについての情報である。
ＯＳ間同期処理１０５は、ホストタスク１１０からゲストタスク２１０（ゲストＯＳ上のタスク２０６）に対して通知するメッセージを処理するプログラムである。
【００１９】
ホストＯＳ上のタスク１０６は、ホストＯＳ１００が管理するプログラムであり、並列処理装置９００において、並列して処理されるプログラムである。
ホストＯＳ上のタスク１０６は、他のプログラムの一例である。
【００２０】
ＯＳ切替用タスク１０７は、実行装置９０１がゲストタスク２１０を実行しているときに、割込信号入力装置９０５が出力した割込信号に対応する割込処理がホストＯＳ１００上のものである場合に、ＯＳをゲストＯＳからホストＯＳに切り替えるためのプログラムである。
ＯＳ切替用タスク１０７は、他のプログラムの一例である。
【００２１】
ゲストＯＳ２００は、ホストＯＳ１００と同様、複数のプログラムのうちから、実行するプログラムを選択し、実行装置９０１に実行させるプログラムである。ホストＯＳ１００と異なる点は、並列処理装置９００が処理するプログラムのうち、ゲストタスク２１０を管理し、それ以外のプログラム（例えば、ホストＯＳ上のタスク１０６、ＯＳ切替用タスクなど）は管理しない点である。また、ゲストＯＳ２００自体が、ホストＯＳ１００の管理を受けるホストタスク１１０の一つである点も異なる。
ゲストＯＳ２００は、ゲスト並列処理プログラムの一例である。
【００２２】
ゲストＯＳ２００は、複数のプログラムで構成される。ゲストＯＳ２００は、スケジューラ２０１、割込処理２０３、マスク設定処理２０４、ＯＳ間同期処理２０５などを行うプログラムを有し、割込ベクタ２０２などを記憶装置９０２を用いて記憶している。
【００２３】
スケジューラ２０１は、ゲストタスク２１０のスケジューリングなどの処理を行うプログラムである。
割込処理２０３は、割込信号入力装置９０５が出力した割込信号により実行され、それぞれの割込原因に対応する処理を行うプログラムである。
割込ベクタ２０２は、割込信号入力装置９０５が出力した割込信号により実行する割込処理２０３を示す情報（例えば、割込処理２０３を記憶したメモリ（記憶装置９０２）のアドレスなど）である。
マスク設定処理２０４は、優先順位の高い処理の実行中に、優先順位の低い割込処理を実行しないように、割込処理２０３の実行を制限するための割込マスクを設定するプログラムである。
ＯＳ間同期処理２０５は、ホストタスク１１０からゲストタスク２１０に対して通知されたメッセージを処理するプログラムである。
【００２４】
ゲストＯＳ上のタスク２０６は、ゲストＯＳ２００が管理するプログラムであり、並列処理装置９００において、並列して処理されるプログラムである。
ゲストＯＳ上のタスク２０６は、複数のプログラムの一例である。
【００２５】
図３は、この実施の形態における並列処理装置９００の機能ブロックの構成の一例を示すブロック構成図である。
並列処理装置９００は、割込処理部３１０、ディスパッチ部３２０、スケジュール部３３０、優先度記憶部３９１、コンテキスト記憶部３９２などを有する。
【００２６】
割込処理部３１０は、割込信号入力装置９０５が出力した割込信号に基づいて、対応する割込処理１０３，２０３を実行装置９０１に実行させる。
割込処理部３１０は、例えば、ＣＰＵのハードウェアによって実現するが、他の方法で実現してもよい。
割込処理部３１０は、割込ベクタ記憶部３１１、割込マスク記憶部３１２、割込処理実行部３１３を有する。
【００２７】
割込ベクタ記憶部３１１は、割込ベクタ１０２または割込ベクタ２０２を記憶する。割込ベクタ記憶部３１１は、例えば、所定のアドレスを有するメモリ（記憶装置９０２）であり、割込信号の番号に対応するアドレスに、割込処理１０３，２０３を記憶したメモリ（記憶装置９０２）の開始アドレスを記憶する。
【００２８】
割込マスク記憶部３１２は、割込マスクを記憶する。割込マスク記憶部３１２は、例えば、ＣＰＵの割込マスクレジスタであり、割込処理を許可する割込信号を示す情報を、割込マスクとして記憶する。
割込マスクは、例えば、割込信号の種類と同じ数のビット（割込マスクパターン）を有し、割込信号との論理積をとることにより、割込処理を許可する割込信号だけを抽出する。
また、例えば、割込マスクは、割込レベルを示す整数値（割込マスクレベル）であり、割込信号のレベルと割込マスクの値とを比較して、割込信号のレベルのほうが低い場合に、割込処理を許可しないものであってもよい。
【００２９】
割込処理実行部３１３は、割込マスク記憶部３１２が記憶した割込マスクにより許可された割込信号を割込信号入力装置９０５が出力した場合に、実行装置９０１が実行しているプログラムの実行を中断させ、割込ベクタ記憶部３１１が記憶した割込ベクタによって示される割込処理１０３，２０３を、実行装置９０１に実行させる。
例えば、現在のＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）の値をスタックに退避し、割込信号に対応する割込ベクタの値を、ＰＣに読み込む。
【００３０】
ディスパッチ部３２０（ディスパッチャともいう）は、実行装置９０１が実行するホストタスク１１０を切り替える際（タスク切替時）、それまで実行していたホストタスク１１０を、あとで再開できるよう、ホストタスク１１０の実行に必要な情報（ＰＣの値、レジスタの値、メモリ（記憶装置９０２）が記憶したスタックや一時変数の値など。以下「コンテキスト」という）をコンテキスト記憶部３９２に記憶させておく。ディスパッチ部３２０は、中断したホストタスク１１０を再開する際、コンテキスト記憶部３９２が記憶したコンテキストを読み出して、復元し、中断前の続きが実行できるようにする。
ディスパッチ部３２０は、実行装置９０１がスケジューラ１０１を実行することにより実現する。
【００３１】
ディスパッチ部３２０は、コンテキスト書換部３２１、割込ベクタ書換部３２３、マスク設定部３２４などを有する。
コンテキスト書換部３２１は、実行を中断するホストタスク１１０のコンテキストをコンテキスト記憶部３９２に記憶させ、実行を再開するホストタスク１１０のコンテキストを、コンテキスト記憶部３９２から復元する。
【００３２】
割込ベクタ書換部３２３は、ＯＳ切替時に、割込ベクタ記憶部３１１が記憶した割込ベクタをコンテキスト記憶部３９２に記憶させ、復元する。
ここで、「ＯＳ切替時」とは、ホストタスク１１０のうち、ゲストＯＳ２００の実行を中断して、それ以外のホストタスク１１０（ホストＯＳ上のタスク１０６、ＯＳ切替用タスク１０７など）を実行する場合、あるいは逆に、それ以外のホストタスク１１０（ホストＯＳ上のタスク１０６、ＯＳ切替用タスク１０７など）の実行を中断して、ゲストＯＳ２００を実行する場合をいう。
割込処理１０３，２０３の管理は、各ＯＳが行っているので、ＯＳ切替時には、割込ベクタ記憶部３１１が記憶した割込ベクタを書き換える必要がある。そこで、割込ベクタ書換部３２３は、割込ベクタ記憶部３１１が記憶した割込ベクタを、ＯＳのコンテキストとして、保存・復元する。
【００３３】
マスク設定部３２４は、タスク切替時に、割込マスク記憶部３１２が記憶した割込マスクをコンテキスト記憶部３９２に記憶させ、復元する（マスク設定処理１０４）。
この実施の形態では、割込マスクも、タスクのコンテキストの一部として、タスク切替時に保存・復元する。
【００３４】
コンテキスト記憶部３９２は、記憶装置９０２を用いて、コンテキストおよび割込マスクをホストタスク１１０ごとに記憶する。また、コンテキスト記憶部３９２は、記憶装置９０２を用いて、割込ベクタをＯＳごとに記憶する。
【００３５】
優先度記憶部３９１は、記憶装置９０２を用いて、ホストタスク１１０の優先度を記憶する。
「優先度」とは、ホストタスク１１０を実行する優先順位を示す情報である。実行可能な状態にあるホストタスク１１０が複数ある場合に、どのホストタスク１１０を実行するかを判断する基準となり、優先度に基づいて判断した優先順位が最も高いホストタスク１１０を実行する。
【００３６】
スケジュール部３３０（スケジューラともいう）は、優先度記憶部３９１が記憶した優先度に基づいて、実行装置９０１が実行するホストタスク１１０を選択する。
スケジュール部３３０は、実行装置９０１がスケジューラ１０１を実行することにより実現する。
【００３７】
スケジュール部３３０は、実行可能判断部３３１、タスク選択部３３２、マスクテーブル生成部３３３、マスクテーブル記憶部３３４などを有する。
【００３８】
実行可能判断部３３１は、ホストタスク１１０が実行可能な状態であるか否かを判断する。
「実行可能な状態」とは、ホストタスク１１０が、そのタスクを実行するために必要な情報、リソースがすべて揃っていて、実行装置９０１が空けば、すぐにでも実行できる状態にあることをいう。
これに対して、「実行可能な状態でない」とは、ホストタスク１１０が、例えば、入力待ち、出力完了待ち、タイミング調整、他のタスクの処理結果待ち、メモリ不足などにより、実行装置９０１が利用可能であっても、すぐには実行できない状態にあることをいう。
【００３９】
タスク選択部３３２は、実行可能判断部３３１が実行可能な状態であると判断したホストタスク１１０について、優先度記憶部３９１が記憶した優先度に基づいて、優先順位を算出し、もっとも優先順位の高いホストタスク１１０を選択する。
【００４０】
マスクテーブル生成部３３３は、優先度記憶部３９１が記憶した優先度に基づいて、マスクテーブル１０８を生成し、マスクテーブル記憶部３３４に記憶させる。
マスクテーブル記憶部３３４は、マスクテーブル生成部３３３が生成したマスクテーブル１０８を記憶する。
【００４１】
割込処理１０３，２０３は、原則として、割込信号入力装置９０５が割込信号を出力したときに実行するものなので、スケジュール部３３０、ディスパッチ部３２０の管理外で実行され、優先順位という概念がない。
しかし、緊急度の高い処理を実行中に、緊急度の低い割込についての割込処理が発生することを防ぐ必要があるため、割込マスクによって、緊急度の低い割込処理の発生を防ぐ。
したがって、割込マスクによって割込処理を禁止された割込処理は、その割込マスクを設定したホストタスク１１０よりも、優先順位が低いと考えることができる。
【００４２】
図４は、この実施の形態におけるタスクの優先順位の一例を示す概念図である。
割込処理タスク１１１〜１１５は、割込信号入力装置９０５が割込信号を出力したときに実行される割込処理１０３である。割込処理タスク１１１〜１１５は、スケジュール部３３０の管理外にあり、厳密な意味での「タスク」ではないが、ここでは、割込マスクにより、通常のタスクとの間に優先順位を考えることができるので、ホストタスク１１０の一種として扱う。
【００４３】
通常処理タスク１２１〜１２５は、ホストＯＳ上のタスク１０６であり、通常の処理を行う。
通常処理タスク１２１〜１２５は、優先度記憶部３９１が記憶した優先度に基づいて、優先順位が定められており、この図では、上にいくほど優先順位が高いものとして記述している。
【００４４】
通常処理タスク１２１〜１２５には、割込処理タスク１１１〜１１５の処理結果を待つものがある。例えば、通常処理タスク１２１は、割込処理タスク１１１の処理結果を待って、実行可能な状態でなくなることがある。同様に、通常処理タスク１２２，１２３，１２５は、それぞれ、割込処理タスク１１２，１１３，１１５の処理結果を待つ。また、通常処理タスク１２４は、割込処理タスクの処理結果を待つことがないタスクである。
【００４５】
通常処理タスク１２１のほうが通常処理タスク１２２よりも優先順位が高いので、通常処理タスク１２１が実行可能な状態である間は、通常処理タスク１２２が実行可能な状態となっても、タスク選択部３３２は通常処理タスク１２１を選択し、通常処理タスク１２２を実行することはない。
すなわち、通常処理タスク１２２が処理結果を待っている割込処理タスク１１２の処理が終了して、通常処理タスク１２２が実行可能な状態となっても、通常処理タスク１２１が実行可能な状態でなくなるまで、待つことになる。
したがって、割込発生時に割込処理タスク１１２をすぐ実行する必要はなく、通常処理タスク１２１が終わるまで待つことができる。
そこで、通常処理タスク１２１を実行中は、割込処理タスク１１２の実行を許可しないよう割込マスクを設定することにより、優先順位の高い通常処理タスク１２１の実行が中断されないようにする。
すなわち、割込処理タスク１１２の優先順位は、通常処理タスク１２１と通常処理タスク１２２との間であると考えることができる。
【００４６】
このように、各タスクの優先度と、それぞれのタスクが待つ割込処理とがわかれば、各タスクを実行中に設定すべき割込マスクを算出することができる。
【００４７】
マスクテーブル生成部３３３は、このようにして、ホストタスク１１０ごとの割込マスクを生成する。
【００４８】
ゲストＯＳ２００は、ホストタスク１１０の一つとして、優先順位を有する。この例では、通常処理タスク１２２よりも優先順位が低く、通常処理タスク１２３よりも優先順位が高いものとして、ゲストＯＳ２００の優先度が設定され、優先度記憶部３９１が記憶している。
【００４９】
ＯＳ切替用タスク１０７は、ゲストＯＳ２００よりも優先順位を高く設定する。なお、ＯＳ切替用タスク１０７とゲストＯＳ２００との間の優先順位を有するホストタスク１１０がないほうが好ましい。
【００５０】
ゲストＯＳ２００が管理するゲストタスク２１０には、例えば、割込処理タスク２１１〜２１２、通常処理タスク２２１〜２２３などがある。これらのタスクも、ゲストＯＳ２００の管理内において、優先順位を有する。あるいは、ゲストＯＳ２００におけるタスク管理は、優先順位に基づくものでなくてもよい。
【００５１】
ここで、ホストタスク１１０およびゲストタスク２１０全体の優先順位を考えると、ゲストＯＳ２００自体が、ホストＯＳ１００が管理するホストタスク１１０の一つであるため、ゲストタスク２１０の全体における優先順位は、ゲストＯＳ２００より優先順位の高いＯＳ切替用タスク１０７より高くなることはなく、また、ゲストＯＳ２００より優先順位の低い割込処理タスク１１３より低くなることはない。
【００５２】
ゲストＯＳ２００が管理するゲストタスク２１０においても、通常処理タスク２２１〜２２３が割込処理タスク２１１〜２１２の処理結果を待つ場合がある。そこで、ゲストＯＳ２００も、割込処理タスク２１１〜２１２を管理し、割込マスクの設定などを行う場合がある。
【００５３】
図５は、この実施の形態におけるホストタスク１１０の優先順位と、割込の優先順位との関係の一例を示す概念図である。
通常処理タスクの優先順位は、優先度記憶部３９１が記憶した優先度により定まる。
割込処理タスクの優先順位は、それぞれの割込処理タスクの処理結果を待つ通常処理タスクの優先順位により定まる。
【００５４】
通常処理タスクの優先制御は、スケジュール部３３０が行う。
割込処理タスクの優先制御は、割込マスク記憶部３１２に割込マスクを設定することにより行う。
【００５５】
スケジューラ１０１のマスクテーブル生成部３３３は、ホストタスク１１０の起動時に、この関係にしたがって、割込マスクのレベルとタスクの優先度を設定する。
ゲストＯＳ２００は、優先度Ｔｇを有する。
ゲストＯＳ２００で処理する割込処理タスクは、割込優先度Ｉｘ＋１〜Ｉｙを有する。
ゲストＯＳ２００より高い優先度で実行するホストタスク１１０は、優先度Ｔｇ＋１以上の優先度を有する。
優先度Ｔｇ＋１以上の優先度を有するホストタスク１１０実行時には、優先度Ｉｙ以下の割込処理をマスクする。
また、ゲストＯＳ２００において、ゲストタスク２１０の処理が割込処理と競合しないようにするために割込をマスクするときは、割込優先度Ｉｙ以下の割込をマスクする。
【００５６】
ここで、ゲストタスク２１０の優先制御は、ゲストＯＳ２００が行うので、ホストＯＳ１００が関知するところではない。しかし、ゲストＯＳ２００以外のホストタスク１１０を実行中であっても、ゲストＯＳ２００で処理すべき割込信号が発生する場合はあるので、割込マスクによって制御する必要がある。
【００５７】
しかし、ゲストＯＳ２００による割込制御は、ゲストＯＳ２００が処理すべき割込に関するものに限られる。
ホストＯＳ１００が処理すべき割込のうち、ゲストＯＳ２００よりも優先順位の高い割込は、ゲストＯＳ２００の実行中は、常に許可される。これをゲストＯＳ２００から見ると、そのような割込は、ＮＭＩ（Ｎｏ  Ｍａｓｋａｂｌｅ  Ｉｎｔｅｒｕｐｔ）と同じであり、ゲストＯＳ２００の制御対象ではない。
また、ホストＯＳ１００が処理すべき割込のうち、ゲストＯＳ２００よりも優先順位の低い割込は、ゲストＯＳ２００の実行中は、常に禁止される。これをゲストＯＳ２００から見ると、そのような割込はないのと同じである。
【００５８】
したがって、ゲストＯＳ２００は、ゲストＯＳ２００が処理すべき割込だけを制御すればよく、ホストＯＳ１００が処理すべき割込を考慮する必要はない。
【００５９】
図６は、この実施の形態において、マスクテーブル生成部３３３が生成し、マスクテーブル記憶部３３４が記憶するマスクテーブル１０８の内容の一例を示す図である。
マスクテーブル１０８は、タスク優先度６１１、割込マスクレベル６１２を有するテーブルである。
タスク優先度６１１は、各タスクの優先度である。優先度記憶部３９１が記憶したタスク優先度が同じであれば、割込マスクレベルも同じになるので、ホストタスク１１０ごとではなく、タスク優先度ごとに、割込マスクレベルを記憶する。なお、ホストタスク１１０ごとに記憶することとしてもよい。
割込マスクレベル６１２は、タスク優先度６１１を有するホストタスク１１０を実行する際、割込マスク記憶部３１２に設定する割込マスクである。
例えば、タスク優先度Ｔｍのホストタスク１１０を実行する際には、割込マスクＭｎを割込マスク記憶部３１２に設定する。割込マスクＭｎとは、図５における割込優先度Ｉｎ以下の割込をすべてマスクする割込マスクを示す。
また、タスク優先度Ｔｇのホストタスク１１０（ゲストＯＳ２００）を実行する際には、割込優先度Ｉｘ以下の割込をマスクし、割込優先度Ｉｘ＋１以上の割込を許可する割込マスクＭｙを割込マスク記憶部３１２に設定する。
【００６０】
図７は、この実施の形態における割込ベクタ記憶部３１１が記憶する割込ベクタの一例を示す図である。
割込ベクタ記憶部３１１が記憶している割込ベクタは、ＯＳ切替時に、割込ベクタ書換部３２３が書き換えることにより、割込ベクタ１０２または割込ベクタ２０２を記憶している。
実行装置９０１が、ホストタスク１１０のうち、ゲストＯＳ２００（あるいは、その管理下にあるゲストタスク２１０）を実行している場合、割込ベクタ記憶部３１１は割込ベクタ２０２を記憶している。
また、実行装置９０１が、ゲストＯＳ２００以外のホストタスク１１０を実行している場合、割込ベクタ記憶部３１１は割込ベクタ１０２を記憶している。
【００６１】
割込ベクタは、割込信号に対応して実行する割込処理を示す情報である。この例では、６種類の割込６２１〜６３２に対応する割込ベクタを記憶している。
割込６２１〜６３２のうち、割込６２１〜６２４は、ホストＯＳ１００上で処理すべき割込であるものとする。また、割込６３１〜６３２は、ゲストＯＳ２００上で処理すべき割込であるものとする。
また、割込６２１〜６３２は、図中、上に記載したもののほうが優先順位が高く、下にいくほど、優先順位が下がるものとする。
【００６２】
実行装置９０１がゲストＯＳ２００以外のホストタスク１１０を実行している際の割込ベクタ１０２のうち、ホストＯＳ１００が処理すべき割込６２１〜６２４に対応する割込ベクタ６４１〜６４４は、それぞれの割込を処理する割込処理プログラム６６１〜６６４を示す。
これに対し、ゲストＯＳ２００が処理すべき割込６３１〜６３２はゲストＯＳ２００が実行中でないと処理できないため、割込ベクタ６４９は、割込を処理する割込処理プログラム６７１〜６７２ではなく、切替プログラム６６９を示す。
【００６３】
実行装置９０１がゲストＯＳ２００を実行している際の割込ベクタ２０２のうち、ゲストＯＳ２００が処理すべき割込６３１〜６３２に対応する割込ベクタ６５１〜６５２は、それぞれの割込を処理する割込処理プログラム６７１〜６７２を示す。
これに対し、ホストＯＳ１００が処理すべき割込６２１〜６２２に対応する割込ベクタ６５９は、割込を処理する割込処理プログラム６６１〜６６４ではなく、切替プログラム６７９を示す。
なお、実行装置９０１がゲストＯＳ２００を実行している際は、割込マスクにより、優先順位の低い割込６２３〜６２４は発生しない。そこでこの例では、割込６２３〜６２４に対応する割込ベクタは空欄にしている。しかし、割込６２３〜６２４に対応する割込ベクタも、割込ベクタ６５９としておいてもよい。
【００６４】
次に、動作について説明する。
【００６５】
図８は、この実施の形態において、ホストタスク１１０起動時におけるスケジュール部３３０のタスク起動処理の流れの一例を示すフローチャート図である。
【００６６】
ホストＯＳ１００は、ホストＯＳ上のタスク１０６およびゲストＯＳ２００をホストタスク１１０として生成（起動）する際、優先度およびタスク実行時にかけておく割込マスクを設定する。
あらかじめ、マスクテーブル生成部３３３が、マスクテーブル１０８を生成し、マスクテーブル記憶部３３４が記憶している。
【００６７】
ホストＯＳ１００がタスク起動要求を受けると、タスク起動処理を開始する。
【００６８】
Ｓ１１において、スケジュール部３３０が、優先度記憶部３９１が記憶した優先度に基づいて、起動するホストタスク１１０の優先度を算出する。
あるいは、タスク起動時にホストタスク１１０の優先度を指定することとし、スケジュール部３３０が、優先度記憶部３９１に優先度を記憶することとしてもよい。その場合、必要に応じて、マスクテーブル生成部３３３が、マスクテーブル１０８を再生成してもよい。
【００６９】
Ｓ１２において、スケジュール部３３０が、Ｓ１１で算出した優先度に基づいて、マスクテーブル記憶部３３４が記憶したマスクテーブル１０８から、割込マスクを算出する。
【００７０】
Ｓ１３において、コンテキスト記憶部３９２が、起動するホストタスク１１０のコンテキストを記憶するための記憶領域を確保する。
【００７１】
Ｓ１４において、コンテキスト記憶部３９２が、Ｓ１２で算出した割込マスクを、Ｓ１３で確保した記憶領域に記憶する。
【００７２】
Ｓ１５において、実行可能判断部３３１が、起動するホストタスク１１０を、実行可能タスクリストに登録する。また、それ以外の通常のタスク起動時に行う処理を行う。
【００７３】
実際に、タスク選択部３３２がホストタスク１１０を選択し、実行装置９０１がホストタスク１１０を実行する場合、ディスパッチ部３２０がコンテキストを復元する。コンテキスト記憶部３９２が記憶しているタスクのコンテキストには、Ｓ１４で記憶した割込マスクが含まれているので、マスク設定部３２４が割込マスク記憶部３１２に記憶させる。
したがって、ホストタスク１１０が実行されている間、ホストタスク１１０よりも優先順位の低い割込処理を禁止する割込マスクを、割込マスク記憶部３１２に設定することとなる。
【００７４】
ここで、ゲストＯＳ２００（図５の優先度Ｔｇ）よりも優先順位が高い（例えば、優先度Ｔｚ）ホストタスク１１０を実行している間は、ゲストＯＳ２００が処理すべき割込処理（割込優先度Ｉｘ＋１〜Ｉｙ）を禁止する割込マスクＭｚを割込マスク記憶部３１２に設定するので、ゲストＯＳ２００が処理すべき割込が入ることがない。
したがって、ゲストＯＳ２００よりも優先順位が高いホストタスク１１０の実行が、ゲストＯＳが処理すべき割込処理による影響を受けることはない。
【００７５】
また、ゲストＯＳ２００の中で割込マスクを変更する場合は、割込優先度がＩｙより高い割込は常に許可し、割込優先度がＩｘ＋１より低い割込は常に禁止することとして、割込マスクＭｘ〜Ｍｙを用いることとする。
これにより、ゲストＯＳ２００が割込マスクを変更しても、ゲストＯＳ２００より優先順位が高い割込処理が禁止されることはない。
【００７６】
図９は、この実施の形態におけるスケジュール部３３０のスケジュール処理の流れの一例を示すフローチャート図である。
スケジュール部３３０は、実行可能な状態にあるホストタスク１１０のなかから、もっとも優先順位の高いホストタスク１１０を選択する。
【００７７】
Ｓ２１（実行可能判断工程）において、実行可能判断部３３１が、実行可能タスクリストから実行可能な状態にあるホストタスク１１０を判別する。
実行可能タスクリストには、起動されているホストタスク１１０が登録されており、それぞれのホストタスク１１０が実行可能な状態にあるか否かを記憶している。実行可能タスクリストは、実行可能判断部３３１が記憶装置９０２を用いて記憶している。
【００７８】
Ｓ２２において、タスク選択部３３２が、Ｓ２１で実行可能判断部３３１が実行可能な状態にあると判断したホストタスク１１０について、優先度記憶部３９１が記憶した優先度に基づいて、優先順位を算出する。
【００７９】
Ｓ２３（タスク選択工程）において、タスク選択部３３２が、Ｓ２２で算出した優先順位が最も高いホストタスク１１０を選択する。
【００８０】
Ｓ２４において、ディスパッチ部３２０が、タスク切替処理を行う。すなわち、実行中のホストタスク１１０のコンテキストをコンテキスト記憶部３９２に保存し、Ｓ２３でタスク選択部３３２が選択したタスクのコンテキストをコンテキスト記憶部３９２から復元する。
【００８１】
Ｓ２５において、実行装置９０１が、Ｓ２３でタスク選択部３３２が選択したホストタスク１１０を実行する。
【００８２】
その後、実行中のホストタスク１１０が、終了・休眠（実行可能な状態でない）などにより中断した場合、Ｓ２１へ戻る。
【００８３】
図１０は、この実施の形態におけるディスパッチ部３２０のタスク切替処理の流れの一例を示すフローチャート図である。
これは、スケジュール処理におけるタスク切替処理（Ｓ２４）の内容を詳しく説明したものである。
【００８４】
Ｓ３１において、コンテキスト記憶部３９２が、実行中のホストタスク１１０のコンテキストを記憶する（コンテキストのセーブ）。このコンテキストには、ホストタスク１１０実行時に設定していた割込マスクも含む。
【００８５】
Ｓ３２において、割込ベクタ書換部３２３が、ＯＳ切替が発生するか否かを判断する。
Ｓ３３において、ＯＳ切替がある場合には、Ｓ３４へ進む。ＯＳ切替がない場合には、Ｓ３７へ進む。
【００８６】
Ｓ３４において、割込ベクタを書き換えている途中に割込が発生しないよう、ディスパッチ部３２０が、割込を禁止する。
なお、ここでの「割込禁止」とは、割込マスクによる禁止ではなく、すべての割込を禁止する。例えば、実行装置９０１が割込禁止命令を実行する。
【００８７】
Ｓ３５において、割込ベクタ書換部３２３が、割込ベクタ記憶部３１１が記憶した割込ベクタを読み出し、ＯＳのコンテキストとして、コンテキスト記憶部３９２が記憶する（割込ベクタのセーブ）。
【００８８】
Ｓ３６（割込ベクタ書換工程）において、割込ベクタ書換部３２３が、コンテキスト記憶部３９２が記憶した切替先のＯＳのコンテキストを読み出し、割込ベクタ記憶部３１１が記憶する（割込ベクタのリストア）。
【００８９】
Ｓ３７において、コンテキスト書換部３２１が、コンテキスト記憶部３９２が記憶した切替先のホストタスク１１０のコンテキストを読み出し、復元する。また、マスク設定部３２４が、割込マスクを復元する（コンテキストのリストア）。
【００９０】
Ｓ３８において、ディスパッチ部３２０が、割込禁止を解除する。例えば、実行装置９０１が割込禁止解除命令を実行する。
【００９１】
なお、割込ベクタをＯＳのコンテキストではなく、タスクのコンテキストとして、コンテキスト記憶部３９２がタスクごとに記憶（ゲストＯＳ２００以外のホストタスク１１０の割込ベクタは、すべて同じ）しておくこととすれば、タスク切替時に、ＯＳ切替があるかどうかを判断する必要はない。
【００９２】
図１１は、この実施の形態において、割込信号入力時における割込処理部３１０の割込処理の流れの一例を示すフローチャート図である。
【００９３】
Ｓ４１において、割込処理実行部３１３が、割込信号入力装置９０５が出力した割込信号を検出する。
【００９４】
Ｓ４２において、割込処理実行部３１３が、割込マスク記憶部３１２が記憶した割込マスクに基づいて、その割込信号に対応する割込処理が許可されているか禁止されているかを判断する。
【００９５】
Ｓ４３において、許可されている場合には、Ｓ４４へ進む。禁止されている場合には、処理を終了する。
【００９６】
Ｓ４４において、同じ割込が重複して発生しないよう、割込処理実行部３１３が、割込を禁止する（割込のブロック）。
【００９７】
Ｓ４５において、実行装置９０１が、割込ベクタ記憶部３１１が記憶した割込ベクタが示すプログラムを実行する。
【００９８】
次に、Ｓ４５で実行されるプログラムの処理内容について、説明する。
【００９９】
図１２は、この実施の形態において、割込信号入力時に実行される割込処理プログラム６６１〜６６４の割込処理の流れの一例を示すフローチャート図である。
【０１００】
割込処理プログラム６６１〜６６４は、ホストＯＳ１００が処理すべき割込を処理するプログラムであり、ホストＯＳ１００の管理下にあるものである。
【０１０１】
Ｓ５１において、割込信号入力装置９０５が、割込信号の出力を停止する。例えば、実行装置９０１が割込停止命令を実行し、割込信号入力装置９０５に対して割込処理の開始を通知する（割込のアクノリッジ）。これを受けた割込信号入力装置９０５は、割込信号の出力を停止する。
【０１０２】
割込がマスクされていたり、禁止されていたりして、割込処理を開始できない場合、すぐに割込信号の出力を止めてしまうと、割込処理ができず、支障を来たす。そこで、割込信号入力装置９０５は、割込処理が開始したことを確認するまで、割込信号を出力し続ける（割込信号のアサート）。
そのため、割込信号入力装置９０５に対して、割込処理が開始したことを通知し、割込信号を停止させる必要がある。
【０１０３】
Ｓ５２において、実行装置９０１が、割込禁止を解除する。割込信号入力装置９０５が割込信号の出力を停止したので、同じ割込が重複して発生する心配がなくなり、もっと優先順位の高い割込が発生した場合に、その割込の処理ができるようにするためである。
なお、割込マスクはそのままなので、割込禁止を解除しても、優先順位の低い割込は発生しない。
【０１０４】
Ｓ５３において、実行装置９０１が、それぞれの割込に対応する処理を行う。
【０１０５】
Ｓ５４において、割込処理の結果を待っていた通常処理タスクを起床する（タスクのウェイクアップ）。
割込処理の結果を待っていた通常処理タスクとは、その割込処理の結果がないと、実行可能な状態とならないホストタスク１１０である。実行可能判断部３３１が、そのホストタスク１１０を実行可能な状態にないものとして、実行可能タスクリストに登録しているので、これを実行可能な状態であるという内容に書き換える。
【０１０６】
割込処理終了後、実行可能判断部３３１が、割込処理の結果を待っていた通常処理タスクを実行可能と判断する（Ｓ２１）ので、実行可能なホストタスク１１０のなかに、もっと優先順位の高いホストタスク１１０がなければ、タスク選択部３３２が、そのタスクを選択し（Ｓ２３）、タスクが切り替わる（Ｓ２４）。
【０１０７】
なお、ゲストＯＳ２００の管理下にある割込処理プログラム６７１〜６７２の処理の流れも、これと同様であるので、ここでは説明を省略する。ただし、ゲストＯＳ２００の管理下にある割込処理プログラム６７１〜６７２が起床する通常処理タスクは、ゲストＯＳ２００の管理下にあるゲストタスク２１０なので、実行可能などうかの判断等はすべてゲストＯＳ２００が行い、実行可能判断部３３１等は関与しない。
【０１０８】
図１３は、この実施の形態において、割込信号入力時に実行される切替プログラム６６９のＯＳ切替処理の流れの一例を示すフローチャート図である。
切替プログラム６６９は、実行装置９０１がゲストＯＳ２００以外のホストタスク１１０を実行中に、ゲストＯＳ２００で処理すべき割込が発生した場合に実行される。
【０１０９】
Ｓ６１において、切替プログラム６６９がゲストＯＳ２００を起床する。
すなわち、実行可能判断部３３１が、ゲストＯＳ２００を実行可能な状態にあるものとして、実行可能タスクリストに登録する。
【０１１０】
ゲストＯＳ２００よりも優先順位の高いホストタスク１１０を実行中は、ゲストＯＳ２００で処理すべき割込は、割込マスクにより禁止されているため、発生しない。
したがって、切替プログラム６６９が実行されるのは、ゲストＯＳ２００よりも優先順位の低いホストタスク１１０を実行している場合（またはホストＯＳ１００がアイドル状態である場合）である。
【０１１１】
したがって、割込処理終了後、ゲストＯＳ２００が、実行可能なホストタスク１１０のなかで、もっとも優先順位の高いホストタスク１１０となり、タスクが切り替わる（Ｓ２４）。
【０１１２】
タスク切替処理において、ＯＳ切替がある（Ｓ３３）ので、割込ベクタをゲストＯＳ２００のものに書き換える（Ｓ３６）。また、ゲストＯＳ２００実行時のコンテキストが復元される（Ｓ３７）。
その後、割込禁止が解除される（Ｓ３８）。
【０１１３】
この時点で、割込信号入力装置９０５は、割込信号の出力を停止していない（Ｓ５１に相当する処理をしていない）ので、再び割込が発生する。
【０１１４】
割込信号自体は同じであるが、割込ベクタが書き換わっているので、実行されるプログラムは、切替プログラム６６９ではなく、割込処理プログラム６７１〜６７２である。また、ゲストＯＳ２００実行時のコンテキストが復元されているので、支障なく、割込の処理が行われる。
【０１１５】
また、ゲストＯＳ２００内で、割込マスクを書き換えている場合には、割込マスクが復元されて（Ｓ３７）から、割込禁止が解除される（Ｓ３８）ので、発生した割込が、ゲストＯＳ２００がマスクしたい割込である場合には、割込処理は開始されない。
【０１１６】
したがって、いずれの場合も、ゲストＯＳ２００が期待する通りの動作が保証される。
【０１１７】
図１４は、この実施の形態において、割込信号入力時における切替プログラム６７９のＯＳ切替処理の流れの一例を示すフローチャート図である。
切替プログラム６７９は、実行装置９０１がゲストＯＳ２００を実行中に、ホストＯＳ１００が処理すべき割込が発生した場合に実行される。
【０１１８】
Ｓ７１において、切替プログラム６７９がＯＳ切替用タスク１０７を起床する。
すなわち、実行可能判断部３３１が、ＯＳ切替用タスク１０７を実行可能な状態にあるものとして、実行可能タスクリストに登録する。
ここで、切替プログラム６７９は、ゲストＯＳ２００の管理下にあるので、ゲストタスク２１０を起床することはできるが、ホストタスク１１０であるＯＳ切替用タスク１０７を直接、起床することはできない。
しかし、ゲストＯＳ２００自体が、ホストＯＳ１００の管理下にあるホストタスク１１０の一つであるため、ゲストＯＳ２００からＯＳ切替用タスク１０７を起床することができる。
【０１１９】
ゲストＯＳ２００を実行中は、ホストＯＳ１００で処理すべき割込のうち、ゲストＯＳ２００よりも優先順位の低い割込は、割込マスクにより禁止されているため、発生しない。
したがって、切替プログラム６７９が実行されるのは、ホストＯＳ１００で処理すべき割込のうち、ゲストＯＳ２００よりも優先順位の高い割込が発生した場合に限られる。
【０１２０】
また、ゲストＯＳ２００を実行中であるので、ゲストＯＳ２００よりも優先順位の高いホストタスク１１０のなかに、実行可能な状態にあるものは存在しない。
【０１２１】
ＯＳ切替用タスク１０７は、ゲストＯＳ２００よりも優先順位を高く設定してあるので、割込処理終了後、ＯＳ切替用タスク１０７が、実行可能なホストタスク１１０のなかで、もっとも優先順位の高いホストタスク１１０となり、タスクが切り替わる（Ｓ２４）。
【０１２２】
タスク切替処理において、ＯＳ切替がある（Ｓ３３）ので、割込ベクタをホストＯＳ１００のものに書き換える（Ｓ３６）。
その後、割込禁止が解除される。（Ｓ３８）。
【０１２３】
この時点で、割込信号入力装置９０５は、割込信号の出力を停止していない（Ｓ５１に相当する処理をしていない）ので、再び割込が発生する。
【０１２４】
割込信号自体は同じであるが、割込ベクタが書き換わっているので、実行されるプログラムは、切替プログラム６７９ではなく、割込処理プログラム６６１〜６６２である。したがって、支障なく、割込の処理が行われる。
【０１２５】
また、ゲストＯＳ２００内で、割込マスクを書き換えていても、ホストＯＳ１００が処理すべき割込のうち、ゲストＯＳ２００よりも優先順位の高い割込は制御対象ではなく、優先順位の高い割込を許可する範囲内でしか、割込マスクを書き換えないので、支障なく、優先順位の高い割込の処理が行われる。
逆に、ゲストＯＳ２００内では、ホストＯＳ１００が処理すべき割込のうち、ゲストＯＳ２００よりも優先順位の低い割込も制御対象ではなく、優先順位の低い割込を禁止する範囲内でしか、割込マスクを書き換えないので、優先順位の低い割込が発生することはない。
【０１２６】
したがって、どの割込信号が発生した場合でも、常に、正常に割込処理をすることができる。
【０１２７】
図１５は、この実施の形態におけるＯＳ切替用タスク１０７のＯＳ切替処理の流れの一例を示すフローチャート図である。
ＯＳ切替用タスク１０７は、ＯＳ切替を発生させるためのダミーであり、特に処理すべき内容はない。
【０１２８】
ＯＳ切替用タスク１０７は、ゲストＯＳ２００の起動と同時に起動される。
【０１２９】
Ｓ７６において、ＯＳ切替用タスク１０７は、休眠処理をする（タスクのスリープ）。
休眠処理とは、なんらかの事象が発生を待つため、実行可能な状態でないタスクが、実行可能でなくなったことをＯＳに通知し、実行装置９０１が他のタスクを実行できるようにすることである。
休眠処理は、ホストタスクが実行可能な状態にないことを通知する処理の一例である。
【０１３０】
ＯＳ切替用タスク１０７は、もともと処理すべき内容がないタスクであるため、起動後すぐに休眠する。
その後、切替プログラム６７９により起床させられる。ＯＳ切替用タスク１０７が起床したことでＯＳ切替が発生し、すでに目的を達したので、ＯＳ切替用タスク１０７が処理すべき内容はない。
そこで、Ｓ７６に戻り、ＯＳ切替用タスク１０７は、再び休眠する。
【０１３１】
図１６は、この実施の形態におけるゲストＯＳ２００のスケジュール処理の流れの一例を示すフローチャート図である。
なお、ゲストＯＳ２００は、既存のＯＳをわずかな修正で利用するものであるため、多くの部分が既存のＯＳと同一である。
したがって、ゲストＯＳ２００は、もととなる既存のＯＳと同様のブロック構成を有するものであって、様々な構成があり得る。
ここでは一例として、ゲストＯＳ２００が、図３で説明したホストＯＳ１００と同様のブロック構成を有するものとして説明する。
【０１３２】
Ｓ８１において、ゲストＯＳ２００のスケジュール部が、ゲストタスク２１０が実行可能な状態であるかを判断する。
Ｓ８２において、実行可能なゲストタスク２１０がある場合には、Ｓ８３へ進む。実行可能なゲストタスク２１０がない場合には、Ｓ８６へ進む。
【０１３３】
Ｓ８３において、ゲストＯＳ２００のスケジュール部が、実行可能なゲストタスク２１０のなかから、実行するゲストタスク２１０を選択する。選択の方法は、ホストＯＳ１００と同様、優先順位によるものであってもよいし、実行時間が平等となるように選択してもよい。
【０１３４】
Ｓ８４において、ゲストＯＳ２００のディスパッチ部が、それまで実行していたゲストタスク２１０のコンテキストを保存し、選択したゲストタスク２１０のコンテキストを復元する。
【０１３５】
Ｓ８５において、実行装置９０１が、選択したゲストタスク２１０を実行する。
【０１３６】
その後、実行したゲストタスク２１０が、終了・休眠などにより中断した場合、Ｓ８１へ戻る。
【０１３７】
Ｓ８６において、ゲストＯＳ２００は、実行可能なゲストタスク２１０がないので、休眠処理をする。
すなわち、いずれかのゲストタスク２１０が実行可能な状態となるまで、ゲストＯＳ２００自体が実行可能な状態でないものとして、ホストＯＳ１００に通知し、実行装置９０１が他のホストタスク１１０を実行できるようにする。
【０１３８】
この処理により、ゲストＯＳ２００よりも優先順位の低いホストタスク１１０も、実行の機会を得られるようになる。
【０１３９】
この実施の形態における並列処理装置によれば、ゲストＯＳ２００の実行中と、それ以外の場合とにおいて、異なる割込ベクタを割込ベクタ記憶部３１１に記憶させるので、割込を処理すべきＯＳと異なるＯＳを実行中に、割込が発生した場合であっても、異なるＯＳ下で割込処理が実行されることがなく、割込の発生による処理の混乱を回避することができるという効果を奏する。
【０１４０】
この実施の形態における並列処理装置によれば、割込を処理すべきＯＳと異なるＯＳを実行中に、割込が発生した場合、ＯＳ切替処理を行い、その後再び割込が発生するので、割込を処理すべきＯＳが適切に割込を処理することができるという効果を奏する。
【０１４１】
この実施の形態における並列処理装置によれば、ゲストＯＳ２００を実行中でない場合に、ゲストＯＳ２００で処理すべき割込が発生した場合に、ゲストＯＳ２００を起床させ、ＯＳを切り替えるので、適切なＯＳのもとで、割込処理を実行することができるという効果を奏する。
【０１４２】
この実施の形態における並列処理装置によれば、ゲストＯＳ２００を実行中に、ホストＯＳ１００で処理すべき割込が発生した場合に、ゲストＯＳ２００の実行を中断し、ＯＳを切り替えるので、適切なＯＳのもとで、割込処理を実行することができるという効果を奏する。
【０１４３】
この実施の形態における並列処理装置によれば、簡単なＯＳ切替用タスク１０７を起動しておくだけで、ＯＳ切替処理ができるので、既存のＯＳをホストＯＳ１００、ゲストＯＳ２００として利用する際に加えるべき変更が少なく、既存のＯＳを有効に利用することができ、開発コストを抑えることができるという効果を奏する。
【０１４４】
この実施の形態における並列処理装置によれば、割込処理を開始するまで、割込信号入力装置９０５が割込信号を出力するので、ＯＳ切替処理後、再び割込が発生し、割込を処理すべき割込処理プログラムを支障なく実行できるという効果を奏する。
【０１４５】
この実施の形態における並列処理装置によれば、割込を処理すべきＯＳと異なるＯＳを実行中に割込が発生した場合に実行される切替プログラム６６９，６７９が、割込停止命令を含まないので、ＯＳ切替後、再び割込が発生し、割込を処理すべき割込処理プログラムを支障なく実行できるという効果を奏する。
【０１４６】
この実施の形態における並列処理装置によれば、ホストタスク１１０の優先順位に基づいて、実行するホストタスク１１０を選択するので、優先順位の高いタスクが実行可能であれば、優先順位の低いタスクが実行されることはなく、優先順位の低いタスクが待っている割込処理の実行を延期することができるという効果を奏する。
【０１４７】
この実施の形態における並列処理装置によれば、割込処理の結果を待っているタスクの優先順位に基づいて、割込処理に優先順位を設け、割込処理の優先順位に基づいて、割込のマスク制御を行うので、優先順位の高い処理の実行中は、優先順位の低い割込が発生せず、割込の衝突を回避することができるという効果を奏する。
【０１４８】
この実施の形態における並列処理装置によれば、ゲストＯＳ２００が行う割込制御が、ホストＯＳ１００が処理すべき割込に影響を与えることがないので、既存のＯＳをゲストＯＳ２００として利用する際に加えるべき変更が少なく、既存のＯＳを有効に利用することができ、開発コストを抑えることができるという効果を奏する。
【０１４９】
この実施の形態における並列処理装置によれば、ホストＯＳ１００が処理すべき割込を、ゲストＯＳ２００が意識する必要がないので、既存のＯＳをゲストＯＳ２００として利用する際に加えるべき変更が少なく、既存のＯＳを有効に利用することができ、開発コストを抑えることができるという効果を奏する。
【０１５０】
この実施の形態における並列処理装置によれば、ゲストＯＳ２００が制御する割込の範囲を限定するので、ゲストＯＳ２００による割込制御と、ホストＯＳ１００による割込制御とが矛盾することなく、並存できるという効果を奏する。
【０１５１】
この実施の形態における並列処理装置によれば、割込マスクにより、ゲストＯＳ２００よりも優先順位の高いホストタスク１１０の実行中は、ゲストＯＳ２００で処理すべき割込が発生しないので、ホストＯＳ１００の処理に、ゲストＯＳ２００で処理すべき割込の影響が出ないという効果を奏する。
【０１５２】
この実施の形態における並列処理装置によれば、割込マスクにより、ゲストＯＳ２００の実行中は、ゲストＯＳ２００よりも優先順位の低い割込が発生せず、ゲストＯＳ２００の処理に、ホストＯＳ１００で処理すべき優先順位の低い割込の影響が出ないという効果を奏する。
【０１５３】
この実施の形態における並列処理装置によれば、ゲストＯＳ２００上に実行可能なゲストタスク２１０がない場合に、ゲストＯＳ２００自体が休眠状態となるので、ゲストＯＳ２００よりも優先順位の低いタスクにも、実行の機会が与えられるという効果を奏する。
【０１５４】
この実施の形態における並列処理装置によれば、ゲストＯＳ２００上に実行可能なゲストタスク２１０がない場合に、ゲストＯＳ２００が実行可能な状態でないことをホストＯＳ１００に通知する処理を実行するので、ゲストＯＳ２００が休眠状態であることを、ホストＯＳ１００が判別できるという効果を奏する。
【０１５５】
この実施の形態における並列処理装置によれば、ゲストＯＳ２００が休眠中に、ゲストＯＳ２００が処理すべき割込が発生した場合に、ゲストＯＳ２００を起床するので、割込を適切に処理できるという効果を奏する。
【０１５６】
この実施の形態における並列処理方法によれば、ゲストＯＳ２００の実行中と、それ以外の場合とにおいて、異なる割込ベクタを割込ベクタ記憶部３１１に記憶させるので、割込を処理すべきＯＳと異なるＯＳを実行中に、割込が発生した場合であっても、異なるＯＳ下で割込処理が実行されることがなく、割込の発生による処理の混乱を回避することができるという効果を奏する。
【０１５７】
この実施の形態における並列処理プログラムによれば、ゲストＯＳ２００の実行中と、それ以外の場合とにおいて、異なる割込ベクタを割込ベクタ記憶部３１１に記憶させるので、割込を処理すべきＯＳと異なるＯＳを実行中に、割込が発生した場合であっても、異なるＯＳ下で割込処理が実行されることがなく、割込の発生による処理の混乱を回避することができる並列処理装置９００として、コンピュータを機能させることができるという効果を奏する。
【０１５８】
以上のように、ゲストＯＳ２００のスケジュール部が、実行可能なゲストタスク２１０がない場合（アイドル時）に、ホストＯＳ１００上の休眠処理（スリープ）を行い、ゲストＯＳ２００で処理すべき割込が入ったら、ゲストＯＳ２００を、ホストＯＳ１００が起床させる処理（ウェイクアップ）を行うので、ゲストＯＳの優先順位を一番下以外にすることが可能となる。
【０１５９】
また、ゲストＯＳ２００の中で割込マスクを行う場合は、マスクレベルをゲストＯＳ２００で扱う割込の優先順位以下としているため、優先順位の高いホストタスク１１０の処理が割込マスクにより遅延されることがない。
また、ゲストＯＳ２００より高い優先順位のホストタスク１１０の実行中は、優先順位の低い割込処理をマスクするため、優先順位の高いホストタスク１１０の処理が優先順位の低い割込処理の影響を受けない。
【０１６０】
これにより、ホストＯＳ１００としてリアルタイムＯＳを用い、ゲストＯＳ２００として非リアルタイムＯＳを用いた場合であっても、割込の整合性を保つことができ、リアルタイムＯＳのリアルタイム性を確保することができる。
また、非リアルタイムＯＳの割込処理が、時間制約を考慮していない場合であっても、割込の整合性が保たれているので、リアルタイムＯＳのリアルタイム性を確保することができる。
【０１６１】
また、ゲストＯＳ２００が管理するゲストタスク２１０がすべて実行不可能な状態である場合に、ゲストＯＳ２００が休眠処理（スリープ）を行うので、ゲストＯＳ２００よりも優先順位が低いホストタスク１１０にも実行の機会が与えられる。したがって、ゲストＯＳ２００を一番低い優先順位とする必要がない。
これにより、ホストタスク１１０によって実行装置９０１を占有されて、ゲストタスク２１０が処理すべき割込に対する処理が実行できないことによって、例えば、タイマー割込による時間管理において、時間が不正になったり、バッファを持った入出力デバイスのバッファがオーバーフローしたりアンダーフローしたりするといった障害が発生することを回避することができる。
【０１６２】
実施の形態２．
実施の形態２を、図１７〜図２１を用いて説明する。
この実施の形態における並列処理装置９００のハードウェア構成は、実施の形態１で説明したものと同様なので、ここでは説明を省略する。
【０１６３】
図１７は、この実施の形態における並列処理装置９００の機能ブロックの構成の一例を示すブロック構成図である。
なお、実施の形態１で説明した機能ブロックと共通するブロックについては、共通の符号を付し、説明を省略する。
【０１６４】
並列処理装置９００は、タスク間メッセージ処理部３４１、ＯＳ間同期用データ記憶部３９３などを有する。
【０１６５】
タスク間メッセージ処理部３４１は、ホストタスク１１０が他のタスク（ホストタスク１１０またはゲストタスク２１０）に対して通知するメッセージを処理する。
例えば、あるホストタスク１１０が他のタスクに対して通知すべきメッセージを生成した場合、タスク間メッセージ処理部３４１が、そのメッセージを取得する。
タスク間メッセージ処理部３４１は、そのメッセージの通知先であるホストタスク１１０が、そのメッセージを待っていることにより、休眠している場合、実行可能判断部３３１が記憶した実行可能タスクリストを書き換えて実行可能な状態とすることにより、そのメッセージを待っていたホストタスク１１０を起床する。
タスク間メッセージ処理部３４１は、実行装置９０１がＯＳ間同期処理１０５を実行することにより実現する。
【０１６６】
メッセージの通知先タスクがホストタスク１１０ではなく、ゲストタスク２１０である場合、ゲストタスク２１０はゲストＯＳ２００の管理下にあり、実行可能判断部３３１が実行可能か否かを把握していない。したがって、タスク間メッセージ処理部３４１は、直接、通知先のゲストタスク２１０を起床することはできない。
【０１６７】
そこで、ＯＳ間同期用データを用いて、通知先のゲストタスク２１０を間接的に起床する。
【０１６８】
ＯＳ間同期用データ記憶部３９３は、記憶装置９０２を用いて、ＯＳ間同期用データを記憶する。
ＯＳ間同期用データ記憶部３９３は、通知先記憶部の一例である。
ＯＳ間同期用データは、異なるＯＳの管理下にあるタスクを起床するために用いられるデータである。
【０１６９】
図１８は、この実施の形態におけるＯＳ間同期用データ記憶部３９３が記憶したＯＳ間同期用データ４００のデータ構造の一例を示す図である。
ＯＳ間同期用データ４００は、ゲストＯＳ上の同期用データ４０１、フラグ４０２を有する。ＯＳ間同期用データ４００は、起動しているゲストタスク２１０ごとに、あるいは、メッセージの通知を待っているゲストタスク２１０ごとに、存在する。したがって、あるゲストタスク２１０に対してメッセージを通知する場合は、通知先のゲストタスク２１０に対応するＯＳ間同期用データ４００を用いる。
【０１７０】
ゲストＯＳ上の同期用データ４０１は、ゲストＯＳ２００内において、ゲストタスク２１０同士がやり取りするメッセージである。
【０１７１】
フラグ４０２は、ゲストタスク２１０がホストタスク１１０からのメッセージを待っているか否かを示す。
ゲストタスク２１０がホストタスク１１０からのメッセージを待つため、休眠状態になった場合に、フラグ４０２をセットする。
ホストタスク１１０からメッセージが通知され、ゲストタスク２１０が実行可能になった場合に、フラグ４０２をクリアする。
【０１７２】
ゲストタスク２１０同士でメッセージをやり取りする場合は、ゲストＯＳ２００が、そのメッセージの通知先を把握し、ゲストタスク２１０を起床することができるので、フラグ４０２は必要ない。
しかし、ホストタスク１１０からゲストタスク２１０に対してメッセージが通知された場合、通知先のゲストタスク２１０をゲストＯＳ２００が把握するために、フラグ４０２を利用する。
【０１７３】
なお、既存のＯＳを修正してゲストＯＳ２００として利用する場合には、既存のＯＳがタスク間通信に使用しているデータ構造を修正して、ＯＳ間同期用データ４００として利用する。この場合、フラグ４０２を追加する修正をするだけでよいので、わずかな修正で済ませることができ、既存のＯＳを最大限利用できるので、開発コストを抑えることができる。
【０１７４】
次に、動作について説明する。
【０１７５】
図１９は、この実施の形態におけるゲストＯＳ２００のスケジュール処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明したゲストＯＳ２００のスケジュール処理の工程と共通する工程については、共通の符号を付し、説明を省略する。
【０１７６】
Ｔ２１において、ゲストＯＳ２００のスケジュール部が、Ｓ８５で実行していたゲストタスク２１０が実行を中断した理由を判別する。
Ｔ２２において、ゲストタスク２１０が中断した理由が、ホストタスク１１０からのメッセージ待ちである場合には、Ｔ２３へ進む。ホストタスク１１０からのメッセージ待ちでない場合には、Ｓ８１へ戻る。
【０１７７】
Ｔ２３において、ゲストＯＳ２００のスケジュール部（ＯＳ間同期処理部）が、ＯＳ間同期用データ記憶部３９３が記憶したＯＳ間同期用データ４００から、メッセージ待ちのゲストタスク２１０についてのフラグ４０２を取得する。
例えば、ゲストタスク２１０が使用するＯＳ間同期用データ４００の識別子をゲストタスク２１０が指定し、ＯＳ間同期処理部が、指定された識別子によって識別されるＯＳ間同期用データ４００を、ＯＳ間同期用データ記憶部３９３から読み出して、フラグ４０２を取得する。
【０１７８】
Ｔ２４において、ゲストＯＳ２００のスケジュール部（ＯＳ間同期処理部）が、Ｔ２３で取得したフラグ４０２を、ホストタスク１１０からのメッセージ待ちのため休眠状態であることを示す内容に書き換えて、ＯＳ間同期用データ記憶部３９３に記憶させる。
【０１７９】
Ｔ２５において、ゲストＯＳ２００のスケジュール部が、Ｓ８５で実行を中断したメッセージ待ちのゲストタスク２１０を、実行可能な状態でない（休眠状態）として記憶する（ゲストＯＳ上のタスクのスリープ）。
その後、Ｓ８１へ戻る。
【０１８０】
これにより、ホストＯＳ１００は、フラグ４０２を見ることによって、そのゲストタスク２１０がホストタスク１１０からのメッセージ待ちであるか否かを判別できる。
【０１８１】
図２０は、この実施の形態におけるスケジュール部３３０のスケジュール処理の流れの一例を示すフローチャート図である。
なお、実施の形態１で説明したスケジュール部３３０のスケジュール処理の工程と共通する工程については、共通する符号を付し、ここでは説明を省略する。
【０１８２】
Ｔ１１において、タスク間メッセージ処理部３４１が、Ｓ２５で実行していたホストタスク１１０が通知したメッセージの通知先を判別する。
Ｔ１２において、Ｓ２５で実行していたホストタスク１１０が他のタスクに対してメッセージを通知していない場合には、Ｓ２１に戻る。Ｓ２５で実行していたホストタスク１１０が他のホストタスク１１０に対してメッセージを通知する場合には、Ｔ１３へ進む。Ｓ２５で実行していたホストタスク１１０がゲストタスク２１０に対してメッセージを通知する場合には、Ｔ１５へ進む。
【０１８３】
Ｔ１３において、実行可能判断部３３１が、メッセージの通知先であるホストタスク１１０が、そのメッセージを待つために休眠しているか否かを判断する。そのメッセージを待っていた場合には、Ｔ１４へ進む。そのメッセージを待つために休眠しているのではない場合には、Ｓ２１に戻る。
【０１８４】
Ｔ１４において、実行可能判断部３３１が、メッセージの通知先でるホストタスク１１０が実行可能な状態になったものとして、実行可能タスクリストに登録する。
その後、Ｓ２１に戻る。
【０１８５】
Ｔ１５において、タスク間メッセージ処理部３４１が、ＯＳ間同期用データ記憶部３９３が記憶したＯＳ間同期用データから、通知先のゲストタスク２１０についてのフラグ４０２を取得する。
例えば、Ｔ２３においてゲストタスク２１０が指定したＯＳ間同期用データ４００の識別子と同じ識別子を、ホストタスク１１０が指定し、タスク間メッセージ処理部３４１が、指定された識別子によって識別されるＯＳ間同期用データ４００を、ＯＳ間同期用データ記憶部３９３から読み出して、フラグ４０２を取得する。
【０１８６】
Ｔ１６において、タスク間メッセージ処理部３４１が、Ｔ１５で取得したフラグ４０２から、通知先のゲストタスク２１０が、ホストタスク１１０からのメッセージを待つために休眠しているか否かを判断する。ホストタスク１１０からのメッセージを待っていた場合には、Ｔ１７へ進む。ホストタスク１１０からのメッセージを待つために休眠しているのではない場合には、Ｓ２１に戻る。
【０１８７】
Ｔ１７において、タスク間メッセージ処理部３４１が、Ｔ１５で取得したフラグ４０２を、起床要求を示す内容に書き換えて、ＯＳ間同期用データ記憶部３９３に記憶させる。
【０１８８】
Ｔ１８において、割込信号入力装置９０５が割込信号を出力し、Ｓ２１に戻る。
ここで割込信号入力装置９０５が出力する割込信号は、異なるＯＳのタスク間でのメッセージのやり取りが発生したことを示す信号である。
例えば、ＧＰＩＯ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ：汎用入出力装置）（出力装置９０４）の出力線を、割込信号入力装置９０５に結線し、ＧＰＩＯに対する出力を行うことで、割込信号を出力する。
あるいは、他の用途に使用していないＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラを使って、最小単位のデータをメモリ（記憶装置９０２）間で転送することにより、その完了を通知する割込信号を出力してもよい。
もしくは、ハードウェアを使用せず、例えば、ＳＷＩ（Ｓｏｆｔｗｅｒｅ  Ｉｎｔｅｒｕｐｔ）命令を実行することで、割込信号を出力してもよい。
【０１８９】
この割込信号は、ゲストＯＳ２００で処理すべき割込を発生させるものである。したがって、この割込処理の優先順位は、ゲストＯＳ２００より高く、ゲストＯＳ２００より優先順位の高いホストタスク１１０より低い。
したがって、ゲストＯＳ２００より優先順位の高いホストタスク１１０の実行中は、割込マスクにより、この割込についての処理は行わない。これにより、無駄なＯＳ切替等は発生しない。
【０１９０】
図２１は、この実施の形態において、Ｔ１８で入力した割込信号による割込を処理する割込処理プログラムのＯＳ間通信割込処理の流れの一例を示すフローチャート図である。
ＯＳ間通信割込処理を行う割込処理プログラムは、ゲストＯＳ２００の管理下にある割込処理プログラムである。
したがって、この割込信号入力後、実施の形態１で説明したタスク切替処理、割込ベクタ書換処理などが発生する。その後、ＯＳ間通信割込処理が開始する。
【０１９１】
Ｔ３１において、ゲストＯＳ２００のスケジュール部（ＯＳ間同期処理部）が、ＯＳ間同期用データ記憶部３９３が記憶したＯＳ間同期用データ４００を読み出し、起床要求を示すフラグ４０２が設定されているものを探し、メッセージの通知先であるゲストタスク２１０を判別する。
【０１９２】
Ｔ３２において、ゲストＯＳ２００のスケジュール部（ＯＳ間同期処理部）が、Ｔ３１で読み出したフラグ４０２をクリアして、ＯＳ間同期用データ記憶部３９３に記憶させる。
【０１９３】
Ｔ３３において、ゲストＯＳ２００のスケジュール部が、メッセージの通知先であるゲストタスクを起床する。
【０１９４】
これにより、ホストタスク１１０がメッセージを通知した通知先であるゲストタスク２１０を起床させることができる。
【０１９５】
また、割込処理によって、通知先のゲストタスク２１０を起床させるので、ゲストＯＳ２００が他のゲストタスク２１０の実行中に、実行を中断していた場合であっても、ゲストＯＳ２００の実行再開時に、通知先のゲストタスク２１０のほうが、実行を中断していたゲストタスク２１０よりも優先順位が高い場合に、実行を中断していたゲストタスク２１０の実行を再開するのではなく、通知先のゲストタスク２１０の実行を、すぐに開始できる。
スケジュール部３３０のスケジュール処理において、Ｔ１８で割込を発生させず、Ｔ１７でＯＳ間同期用データ記憶部３９３を書き換えるのみとして、ゲストＯＳ２００が実行を再開した場合、実行を中断していたゲストタスク２１０の実行を再開する。割込が発生しないので、通知先のゲストタスク２１０のほうが優先順位が高い場合であっても、実行を中断していたゲストタスク２１０の処理が一段落するまでは、通知先のゲストタスク２１０が起床されない。
Ｔ１８で割込信号を発生させることにより、そのような処理の遅延が生じないようにすることができる。
【０１９６】
この実施の形態における並列処理装置によれば、ホストタスク１１０がゲストタスク２１０に対して通知するメッセージを生成した場合に、割込信号入力装置９０５が割込信号を出力するので、メッセージの通知を待っていたゲストタスク２１０の処理が遅延することがないという効果を奏する。
【０１９７】
この実施の形態における並列処理装置によれば、既存のＯＳがタスク間通信のために有しているデータ構造をわずかに修正するだけで、ＯＳ間同期用データ４００として利用できるので、既存のＯＳをゲストＯＳ２００として利用する際に必要な修正点が少なく、開発コストを抑えることができるという効果を奏する。
【０１９８】
この実施の形態における並列処理装置によれば、割込信号により起動されたゲストＯＳ２００の割込処理プログラムにおいて、ＯＳ間同期用データ４００に基づいて、メッセージの通知先であるゲストタスク２１０を判別する処理を行うので、メッセージの通知を待っていたゲストタスク２１０を起床することができるという効果を奏する。
【０１９９】
なお、ゲストタスク２１０がホストタスク１１０に対してメッセージを通知した場合には、ゲストＯＳ２００がホストＯＳ１００の管理下にあるホストタスク１１０の一つなので、ゲストＯＳ２００からホストＯＳ１００に対して、通知先のホストタスク１１０の起床を要求することができる。
【０２００】
以上のように、ホストＯＳ１００上のタスクから割込を入れ、ゲストＯＳ２００上の割込処理の中でゲストタスク２１０を起床するので、ホストタスク１１０からゲストタスク２１０を起床することができる。
【０２０１】
これにより、ゲストＯＳ２００側で、データの到着をポーリングする必要がないので、ポーリング処理によるオーバーヘッドがなく、また、次のポーリングのタイミングまで処理が遅延することもない。
【０２０２】
実施の形態３．
実施の形態３を、図２２〜図２６を用いて説明する。
この実施の形態における並列処理装置９００のハードウェア構成は、実施の形態１で説明したものと同様であるので、ここでは説明を省略する。
【０２０３】
図２２は、この実施の形態における並列処理装置９００において実行されるプログラム（タスク）の関係の一例を示す概念図である。
なお、実施の形態１で説明したプログラムまたはデータと共通するプログラムまたはデータについては、同一の符号を付し、ここでは説明を省略する。
【０２０４】
ホストＯＳ１００は、ゲストＯＳ優先度情報１５１を保有する。
ゲストＯＳ優先度情報１５１は、ゲストＯＳ２００の優先度をどのように変化させるかについての情報である。
【０２０５】
ホストＯＳ１００が管理するホストタスク１１０の一つとして、優先度制御タスク１０９がある。
優先度制御タスク１０９は、ゲストＯＳの優先度を変化させる処理を行うプログラムである。
【０２０６】
図２３は、この実施の形態における並列処理装置９００の機能ブロックの構成の一例を示すブロック構成図である。
なお、実行の形態１で説明したブロックと共通する機能ブロックについては、同一の符号を付し、ここでは説明を省略する。
【０２０７】
並列処理装置９００は、ゲストＯＳ優先度情報記憶部３９４、優先度書換部３５１などを有する。
【０２０８】
ゲストＯＳ優先度情報記憶部３９４は、ゲストＯＳ優先度情報１５１を記憶装置を用いて記憶する。
【０２０９】
優先度書換部３５１は、ゲストＯＳ優先度情報記憶部３９４が記憶したゲストＯＳ優先度情報に基づいて、優先度記憶部３９１が記憶したゲストＯＳ２００の優先度を書き換える。このとき、時計装置９０６が測定した経過時間によって、ゲストＯＳ２００の優先度を変化させる。
優先度書換部３５１は、実行装置９０１が優先度制御タスク１０９を実行することにより実現する。
【０２１０】
図２４は、この実施の形態におけるゲストＯＳ優先度情報記憶部３９４が記憶したゲストＯＳ優先度情報１５１のデータ構造の一例を示す図である。
【０２１１】
ゲストＯＳ優先度情報１５１は、例えば、優先実行期間の優先度５０１、優先実行期間の時間５０２、非優先実行期間の時間５０３を示すデータである。
【０２１２】
優先実行期間の優先度５０１は、ゲストＯＳ２００を高い優先度で実行する場合の優先度を示す。
優先実行期間の時間５０２は、ゲストＯＳ２００を高い優先度で実行する期間の時間を示す。
非優先実行期間の時間５０３は、ゲストＯＳ２００を最低の優先度で実行する期間の時間を示す。
【０２１３】
図２５は、この実施の形態におけるタスクの優先順位の一例を示す概念図である。
優先度書換部３５１がゲストＯＳ２００の優先度を書き換えることにより、ホストタスク１１０間の優先順位は、左側の状態と右側の状態との間を行き来する。
【０２１４】
ゲストＯＳ２００を高い優先度で実行する期間（優先実行期間）は、左側の状態となる。
この状態では、ゲストＯＳ２００が休眠状態とならない限り、ゲストＯＳ２００よりも優先順位の低い通常処理タスク１２３〜１２５を、タスク選択部３３２が選択することはなく、通常処理タスク１２３〜１２５が実行されることはない。
また、ゲストＯＳ２００よりも優先順位の低い割込処理タスク１１３，１１５を実行させる割込は、割込マスクによりマスクされるので、ゲストＯＳ２００が休眠状態とならない限り、割込処理タスク１１３，１１５を実行させる割込は発生せず、割込処理タスク１１３，１１５が実行されることもない。
【０２１５】
ゲストＯＳ２００が多数のゲストタスク２１０を管理している場合、そのゲストタスク２１０がすべて実行不可能な状態となることは稀であり、したがって、ゲストＯＳ２００が休眠状態になることも稀である。
いくら優先順位が低いタスクであっても、ある程度は定期的に実行する機会が与えられなければ、処理に支障を来たす可能性がある。
【０２１６】
そこで、この実施の形態では、ゲストＯＳ２００の優先順位を強制的に下げることにより、優先順位の低いタスクにも実行の機会を与えるものとする。
【０２１７】
優先度書換部３５１が時計装置９０６を用いて優先実行期間を開始してからの経過時間を測定する。優先度書換部３５１は、優先実行期間の時間５０２が経過した場合に、優先度記憶部３９１が記憶したゲストＯＳ２００の優先度を、最低の優先度に書き換える。
【０２１８】
ゲストＯＳ２００を低い優先度で実行する期間（非優先実行期間）は、右側の状態となる。
この状態では、他のホストタスク１１０がすべて実行不可能な状態とならない限り、ゲストＯＳ２００が実行されることはない。
その代わり、通常処理タスク１２３〜１２５や割込処理タスク１１３，１１５のような優先順位が低いタスクにも、実行の機会が与えられる。
【０２１９】
なお、優先度制御タスク１０９は、実行装置９０１がゲストＯＳ２００を実行している際であっても実行する必要があるので、ゲストＯＳ２００よりも高い優先順位を有する。
【０２２０】
図２６は、この実施の形態における優先度書換部３５１のゲストＯＳ優先度制御処理の流れの一例を示すフローチャート図である。
【０２２１】
Ｔ６１において、優先度書換部３５１が、ゲストＯＳ優先度情報記憶部３９４が記憶したゲストＯＳ優先度情報５００から、優先実行期間の優先度５０１を取得する。
【０２２２】
Ｔ６２において、優先度記憶部３９１が、Ｔ６１で優先度書換部３５１が取得した優先実行期間の優先度５０１を、ゲストＯＳの優先度として記憶する（優先実行期間の開始）。
【０２２３】
Ｔ６３において、優先度書換部３５１が、ゲストＯＳ優先度情報記憶部３９４が記憶したゲストＯＳ優先度情報５００から、優先実行期間の時間５０２を取得する。
【０２２４】
Ｔ６４において、優先度書換部３５１が、Ｔ６３で取得した優先実行期間の時間５０２を、時計装置９０６に設定する。
ここで、時計装置９０６は、設定した時間が経過すると、割込信号入力装置９０５にそのことを通知し、割込信号を発生させるものとする。
【０２２５】
Ｔ６５において、優先度書換部３５１は、時計装置９０６からの割込があるまで、優先度制御タスク１０９を休眠状態とする。
【０２２６】
その後、時計装置９０６に設定した優先実行期間の時間５０２が経過すると、時計装置９０６からの割込により、優先度制御タスク１０９が起床し、Ｔ６６以下の処理が再開される。
【０２２７】
Ｔ６６において、優先度記憶部３９１が、最低の優先度を、ゲストＯＳ２００の優先度として記憶する（優先実行期間の終了、非優先実行期間の開始）。
【０２２８】
Ｔ６７において、優先度書換部３５１が、ゲストＯＳ優先度情報記憶部３９４が記憶したゲストＯＳ優先度情報５００から、非優先実行期間の時間５０３を取得する。
【０２２９】
Ｔ６８において、優先度書換部３５１が、Ｔ６７で取得した非優先実行期間の時間５０３を、時計装置９０６に設定する。
【０２３０】
Ｔ６９において、優先度書換部３５１は、時計装置９０６からの割込があるまで、優先度制御タスク１０９を休眠状態とする。
【０２３１】
その後、時計装置９０６に設定した非優先実行期間の時間５０３が経過すると、時計装置９０６からの割込により、優先度制御タスク１０９が起床し、処理が再開されてＴ６１に戻る。
【０２３２】
これにより、ゲストＯＳ２００は、高い優先順位で実行される期間と、低い優先順位で実行される期間とを交互に繰り返すこととなる。
【０２３３】
なお、この例では、非優先実行期間におけるゲストＯＳ２００の優先順位を、最低の優先順位としているが、必ずしも最低の優先順位でなくてもよい。
しかし、非優先実行期間におけるゲストＯＳ２００の優先順位を最低の優先順位とすれば、ゲストＯＳ２００が休眠状態とならなくても、他のすべてのホストタスク１１０に実行の機会を与えることができる。
【０２３４】
既存のＯＳは、他のＯＳのタスクとして動作することを想定していないので、管理するタスクがすべて休眠状態となっても、ＯＳ自体は休眠状態とならない（Ｓ８６に相当する処理がない）。
したがって、非優先実行期間におけるゲストＯＳ２００の優先順位を最低の優先順位とすることとすれば、既存のＯＳをゲストＯＳ２００として利用する場合、休眠処理（Ｓ８６）を加える修正をしなくてもよいので、開発コストを抑えることができる。
【０２３５】
また、この例では、ゲストＯＳ２００の優先度が２種類あり、２つの優先度の期間を繰り返す構成としているが、優先度の数は２種類に限らず、もっと多くてもよい。
【０２３６】
また、この例では、ゲストＯＳ２００が実行されたか否かにかかわらず、所定の時間が経過した場合に、優先度を書き換えることとしているが、ゲストＯＳ２００が実行された時間だけを測定して、所定の時間実行した場合に、優先度を書き換えることとしてもよい。
【０２３７】
また、ホストタスク１１０が、ゲストＯＳ優先度情報記憶部３９４が記憶したゲストＯＳ優先度情報５００を書き換えることにより、例えば、ゲストタスク２１０が処理すべき処理量と、ゲストＯＳ２００以外のホストタスク１１０が処理すべき処理量とによって、ゲストＯＳ２００の優先実行期間の時間や、優先度を変化させることができる。これにより、処理の負荷に応じたＯＳの切替が可能となる。
【０２３８】
この実施の形態における並列処理装置によれば、優先度書換部３５１がゲストＯＳ２００の優先度を定期的に変化させるので、優先実行期間においてゲストＯＳ２００よりも低い優先順位をもつホストタスク１１０にも、定期的に実行の機会が与えられるという効果を奏する。
【０２３９】
この実施の形態における並列処理装置によれば、非優先実行期間におけるゲストＯＳ２００の優先順位を最低順位とするので、既存のＯＳをゲストＯＳ２００として利用する場合に必要な修正が少なく、開発コストを抑えることができるという効果を奏する。
【０２４０】
以上説明した並列処理装置が用いるタスクの起動方法は、
ホストＯＳの１つのタスクとしてゲストＯＳが動作するマルチＯＳの構成において、タスクの優先度と割込処理の優先度をもとに、タスク起動時にタスク優先度と割込マスクの設定値に関して、割込処理がより高い優先度のタスクの処理を阻害しないよう定めたことを特徴とする。
【０２４１】
以上説明した並列処理装置によるマルチＯＳシステムにおける割込マスク設定処理は、
ゲストＯＳで処理する割込をマスクするとき、ゲストＯＳで扱う最も高い優先度の割込レベルで割込マスクをすることにより、ゲストＯＳの割込マスクがゲストＯＳよりも高い優先度の割込処理を阻害しないようにしたことを特徴とする。
【０２４２】
以上説明した並列処理装置によるマルチＯＳシステムは、
ゲストＯＳにおいて実行すべき処理が存在しない場合、ホストＯＳのスリープ（ｓｌｅｅｐ）を呼び出して、ＣＰＵを手放すことを特徴とする。
【０２４３】
以上説明した並列処理装置によるマルチＯＳシステムは、
ゲストＯＳがスリープ状態で、ゲストＯＳで処理したい割込が発生した時、ホストＯＳ側でゲストＯＳをウェイクアップ（ｗａｋｅｕｐ）させることを特徴とする。
【０２４４】
以上説明した並列処理装置によるマルチＯＳシステムは、
ゲストＯＳ上でスリープしているタスクをホストＯＳからウェイクアップするとき、ホストＯＳ側からゲストＯＳ側で処理する割込を発生させ、ゲストＯＳ側が割込処理の中でゲストＯＳ上のタスクをウェイクアップさせることを特徴とする。
【０２４５】
以上説明した並列処理装置によるマルチＯＳシステムは、
ホストＯＳの１つのタスクとしてゲストＯＳが動作するマルチＯＳの構成において、ゲストＯＳの優先度を時間の経過とともに上下させることを特徴とする。
【図面の簡単な説明】
【０２４６】
【図１】実施の形態１における並列処理装置９００のハードウェア構成の一例を示すハードウェア構成図。
【図２】実施の形態１における並列処理装置９００において実行されるプログラム（タスク）の関係の一例を示す概念図。
【図３】実施の形態１における並列処理装置９００の機能ブロックの構成の一例を示すブロック構成図。
【図４】実施の形態１におけるタスクの優先順位の一例を示す概念図。
【図５】実施の形態１におけるホストタスク１１０の優先順位と、割込の優先順位との関係の一例を示す概念図。
【図６】実施の形態１において、マスクテーブル生成部３３３が生成し、マスクテーブル記憶部３３４が記憶するマスクテーブル１０８の内容の一例を示す図。
【図７】実施の形態１における割込ベクタ記憶部３１１が記憶する割込ベクタの一例を示す図。
【図８】実施の形態１において、ホストタスク１１０起動時におけるスケジュール部３３０のタスク起動処理の流れの一例を示すフローチャート図。
【図９】実施の形態１におけるスケジュール部３３０のスケジュール処理の流れの一例を示すフローチャート図。
【図１０】実施の形態１におけるディスパッチ部３２０のタスク切替処理の流れの一例を示すフローチャート図。
【図１１】実施の形態１において、割込信号入力時における割込処理部３１０の割込処理の流れの一例を示すフローチャート図。
【図１２】実施の形態１において、割込信号入力時に実行される割込処理プログラム６６１〜６６４の割込処理の流れの一例を示すフローチャート図。
【図１３】実施の形態１において、割込信号入力時に実行される切替プログラム６６９のＯＳ切替処理の流れの一例を示すフローチャート図。
【図１４】実施の形態１において、割込信号入力時における切替プログラム６７９のＯＳ切替処理の流れの一例を示すフローチャート図。
【図１５】実施の形態１におけるＯＳ切替用タスク１０７のＯＳ切替処理の流れの一例を示すフローチャート図。
【図１６】実施の形態１におけるゲストＯＳ２００のスケジュール処理の流れの一例を示すフローチャート図。
【図１７】実施の形態２における並列処理装置９００の機能ブロックの構成の一例を示すブロック構成図。
【図１８】実施の形態２におけるＯＳ間同期用データ記憶部３９３が記憶したＯＳ間同期用データ４００のデータ構造の一例を示す図。
【図１９】実施の形態２におけるゲストＯＳ２００のスケジュール処理の流れの一例を示すフローチャート図。
【図２０】実施の形態２におけるスケジュール部３３０のスケジュール処理の流れの一例を示すフローチャート図。
【図２１】実施の形態２において、Ｔ１８で入力した割込信号による割込を処理する割込処理プログラムのＯＳ間通信割込処理の流れの一例を示すフローチャート図。
【図２２】実施の形態３における並列処理装置９００において実行されるプログラム（タスク）の関係の一例を示す概念図。
【図２３】実施の形態３における並列処理装置９００の機能ブロックの構成の一例を示すブロック構成図。
【図２４】実施の形態３におけるゲストＯＳ優先度情報記憶部３９４が記憶したゲストＯＳ優先度情報１５１のデータ構造の一例を示す図。
【図２５】実施の形態３におけるタスクの優先順位の一例を示す概念図。
【図２６】実施の形態３における優先度書換部３５１のゲストＯＳ優先度制御処理の流れの一例を示すフローチャート図。
【符号の説明】
【０２４７】
１００  ホストＯＳ、１０１，２０１  スケジューラ、１０２，２０２  割込ベクタ、１０３，２０３  割込処理、１０４，２０４  マスク設定処理、１０５，２０５  ＯＳ間同期処理、１０６  ホストＯＳ上のタスク、１０７  ＯＳ切替用タスク、１０８  マスクテーブル、１０９  優先度制御タスク、１１０  ホストタスク、１１１〜１１５，２１１〜２１２  割込処理タスク、１２１〜１２５，２２１〜２２３  通常処理タスク、１５１  ゲストＯＳ優先度情報、２００  ゲストＯＳ、２０６  ゲストＯＳ上のタスク、２１０  ゲストタスク、３１０  割込処理部、３１１  割込ベクタ記憶部、３１２  割込マスク記憶部、３１３  割込処理実行部、３２０  ディスパッチ部、３２１  コンテキスト書換部、３２３  割込ベクタ書換部、３２４  マスク設定部、３３０  スケジュール部、３３１  実行可能判断部、３３２  タスク選択部、３３３  マスクテーブル生成部、３３４  マスクテーブル記憶部、３４１  タスク間メッセージ処理部、３５１  優先度書換部、３９１  優先度記憶部、３９２  コンテキスト記憶部、３９３  ＯＳ間同期用データ記憶部、３９４  ゲストＯＳ優先度情報記憶部、４００  ＯＳ間同期用データ、４０１  ゲストＯＳ上の同期用データ、４０２  フラグ、５０１  優先実行期間の優先度、５０２  優先実行期間の時間、５０３  非優先実行期間の時間、６１１  タスク優先度、６１２  割込マスクレベル、６２１〜６３２  割込、６４１〜６５９  割込ベクタ、６６１〜６６４，６７１〜６７２  割込処理プログラム、６６９，６７９  切替プログラム、９００  並列処理装置、９０１  実行装置、９０２  記憶装置、９０３  入力装置、９０４  出力装置、９０５  割込信号入力装置、９０６  時計装置。
【図１】
0004523910.tif 000002
【図２】
0004523910.tif 000003
【図３】
0004523910.tif 000004
【図４】
0004523910.tif 000005
【図５】
0004523910.tif 000006
【図６】
0004523910.tif 000007
【図７】
0004523910.tif 000008
【図８】
0004523910.tif 000009
【図９】
0004523910.tif 000010
【図１０】
0004523910.tif 000011
【図１１】
0004523910.tif 000012
【図１２】
0004523910.tif 000013
【図１３】
0004523910.tif 000014
【図１４】
0004523910.tif 000015
【図１５】
0004523910.tif 000016
【図１６】
0004523910.tif 000017
【図１７】
0004523910.tif 000018
【図１８】
0004523910.tif 000019
【図１９】
0004523910.tif 000020
【図２０】
0004523910.tif 000021
【図２１】
0004523910.tif 000022
【図２２】
0004523910.tif 000023
【図２３】
0004523910.tif 000024
【図２４】
0004523910.tif 000025
【図２５】
0004523910.tif 000026
【図２６】
0004523910.tif 000027