(57)【要約】【課題】  命令群が階層的に組み合わされたプログラムの処理速度を向上させることができるプロセッサを提供する。【解決手段】  複数の命令群をひとまとまりとし、ひとまとまりの命令群が階層的に組み合わされたプログラムの各命令を記憶したＩ−ＲＡＭ３１と、次に読み出す命令を記憶したＩ−ＲＡＭ３１のアドレス値を記憶したプログラムカウンタ１１と、プログラムの各階層に対応して記憶領域が設けられたスタック領域３３と、Ｉ−ＲＡＭ３１から読み出した命令が他の命令群の呼び出し命令であった場合に、プログラムカウンタ１１に記憶したアドレス値を呼び出し命令を含む実行中の命令群の階層に対応するスタック領域３３の記憶領域に記憶させる制御部１６とを有している。【選択図】        図２
2010049656.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令群をひとまとまりとし、該ひとまとまりの命令群が階層的に組み合わされたプログラムの各命令を記憶した第１記憶手段と、
次に読み出す命令を記憶した前記第１記憶手段のアドレス値を記憶した第２記憶手段と、
命令群が階層的に組み合わされた前記プログラムの各階層に対応して記憶領域が設けられた第３記憶手段と、
前記第１記憶手段から読み出した命令が他の命令群の呼び出し命令であった場合に、前記第２記憶手段に記憶したアドレス値を前記呼び出し命令を含む実行中の命令群の階層に対応する前記第３記憶手段の記憶領域に記憶させる制御手段と、
を有することを特徴とするプロセッサ。
【請求項２】
前記実行中の命令群の演算結果と、該実行中の命令群で使用される変数とを少なくとも記憶した第４記憶手段を有し、
前記制御手段は、前記第１記憶手段から読み出した命令が他の命令群の呼び出し命令であった場合に、前記第４記憶手段に記憶した情報を前記実行中の命令群の階層に対応する前記第３記憶手段の記憶領域に記憶させることを特徴とする請求項１記載のプロセッサ。
【請求項３】
コンピュータに、
複数の命令群をひとまとまりとし、該ひとまとまりの命令群が階層的に組み合わされたプログラムの各命令を記憶した第１記憶手段から読み出される命令が、他の命令群の呼び出し命令であるか否かを判定する手順と、
前記他の命令群の呼び出し命令であった場合に、第２記憶手段に記憶された、次に読み出される命令を記憶した前記第１記憶手段のアドレス値を読み出す手順と、
前記読み出したアドレス値を、前記プログラムの各階層に対応して設けられた第３記憶手段の記憶領域であって、前記呼び出し命令を含む実行中の命令群の階層に対応する記憶領域に記憶させる手順と、
を実行させるためのプログラム。
【請求項４】
複数の命令群をひとまとまりとし、該ひとまとまりの命令群が階層的に組み合わされたプログラムの各命令を記憶した第１記憶手段と、次に読み出す命令を記憶した前記第１記憶手段のアドレス値を記憶した第２記憶手段と、命令群が階層的に組み合わされた前記プログラムの各階層に対応して記憶領域が設けられた第３記憶手段と、前記第１記憶手段から読み出した命令が他の命令群の呼び出し命令であった場合に、前記第２記憶手段に記憶したアドレス値を前記呼び出し命令を含む実行中の命令群の階層に対応する前記第３記憶手段の記憶領域に記憶させる制御手段とを有する少なくとも１つのプロセッサと、
データが磁気的に記憶される記録媒体と、
前記記録媒体へのデータの書き込みと、読み出しとを行うヘッドと、
前記ヘッドを移動させるためのアクチュエータと、
上位の制御装置から送られたコマンドに従って、前記記録媒体へのデータの書き込みと読み出しとを制御する少なくとも１つのメインプロセッサとを有し、
前記少なくとも１つのプロセッサは、前記記録媒体に記録された位置情報をもとに、前記ヘッドを前記記録媒体のデータ書き込み位置又はデータ読み出し位置へと移動させるための前記アクチュエータの駆動量を計算することを特徴とする記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ、プログラム及び記憶装置に関する。特に、本発明は、複数の命令群をひとまとまりとし、ひとまとまりの命令群が階層的に組み合わされたプログラムを実行するプロセッサに関する。
【背景技術】
【０００２】
従来より、複数の命令群をひとまとまりとし、ひとまとまりの命令群が階層的に組み合わされたプログラムが知られている。例えば、メインルーチンの実行中に他の関数を呼び出して実行するプログラムが挙げられる。このようなプログラムを実行するプロセッサは、上位の命令群の実行中に下位の命令群の呼び出しを行うときには、上位の命令群に処理を復帰させるために必要となるデータを退避領域に退避させる必要がある（例えば、特許文献１参照）。このデータには、ローカル変数、引数、呼び出された命令群を終えた後に戻る場所（アドレス）等の情報が含まれる。
【０００３】
【特許文献１】特開昭５５−３３２３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、呼び出された下位の命令群を実行中にさらに下位の命令群を呼び出す場合には、退避領域を複数用意し、複数の退避領域にどの階層のデータが保存されているのかを示す情報も記憶しておかなければならない。従って、プロセッサの構造が複雑になるという問題があった。
【０００５】
本発明は上記事情に鑑みてなされたものであり、命令群が階層的に組み合わされたプログラムの処理速度を向上させることができるプロセッサを提供することを目的とする。又、このプロセッサを動作させるためのプログラムと、プロセッサを搭載した記憶装置とを提供することを目的とする。
【課題を解決するための手段】
【０００６】
かかる目的を達成するために本明細書の開示では、複数の命令群をひとまとまりとし、該ひとまとまりの命令群が階層的に組み合わされたプログラムの各命令を記憶した第１記憶手段と、次に読み出す命令を記憶した前記第１記憶手段のアドレス値を記憶した第２記憶手段と、命令群が階層的に組み合わされた前記プログラムの各階層に対応して記憶領域が設けられた第３記憶手段と、前記第１記憶手段から読み出した命令が他の命令群の呼び出し命令であった場合に、前記第２記憶手段に記憶したアドレス値を前記呼び出し命令を含む実行中の命令群の階層に対応する前記第３記憶手段の記憶領域に記憶させる制御手段とを備えている。
【発明の効果】
【０００７】
本明細書の開示によれば、命令群が階層的に組み合わされたプログラムの処理速度を向上させることができる。
【発明を実施するための最良の形態】
【０００８】
以下、添付図面を参照しながら本発明の好適な実施例を説明する。
【実施例】
【０００９】
まず、図１を参照しながら本実施例の構成を説明する。
図１に示すように本実施例のプロセッサ１は、ＣＰＵ（Central Processing Unit）１０、ＲＯＭ（Read Only Memory）２０、ＲＡＭ（Random Access Memory）３０、ＤＭＡ（Direct Memory Access）コントローラ４０がシステムバス５０に接続されている。
【００１０】
ＤＭＡコントローラ４０は、ＲＯＭ２０に格納されたプログラムをＲＡＭ３０に転送して書き込む制御を行う。
ＣＰＵ１０は、ＤＭＡコントローラ４０の制御によってＲＯＭ２０からＲＡＭ３０に転送されたプログラムを読み込んで、読み込んだプログラムに従った演算を行う。
【００１１】
図２には、ＣＰＵ１０とＲＡＭ３０との詳細な構成を示す。
ＲＡＭ３０の記憶領域は、インストラクションＲＡＭ（以下、Ｉ−ＲＡＭと略記する）３１と、データＲＡＭ（以下、Ｄ−ＲＡＭと略記する）３２と、スタック領域３３とに分割されている。
【００１２】
Ｉ−ＲＡＭ３１には、ＤＭＡコントローラ４０の制御によってＲＯＭ２０から読み出されたプログラム（命令群）が格納される。Ｄ−ＲＡＭ３２には、ＣＰＵ１０が演算に使用するデータが格納されている。
スタック領域３３は、複数の領域（本実施例では、３３＿０，３３＿１，・・・，３３＿ｎ（ｎは任意の自然数）のｎ＋１個の領域）に別れている。スタック領域（３３＿０，３３＿１，・・・，３３＿ｎ）は、プログラムの処理レベルに応じて設けられている。処理レベルとは、例えばネスト化されたプログラムの各階層に対応する。ネストとは、複数の命令群をひとまとまりにくくり、くくった命令群を階層的に組み合わせていくことでプログラムを構成することをいう。なお、以下では、スタック領域（３３＿０，３３＿１，・・・，３３−ｎ）を総称して呼ぶときには、簡単にスタック領域３３と呼ぶ。
【００１３】
ＣＰＵ１０は、図２に示すようにプログラムカウンタ１１と、命令フェッチ部１２と、命令デコーダ部１３と、演算器１４と、汎用レジスタ１５と、制御部１６とを有している。
【００１４】
プログラムカウンタ１１は、命令フェッチ部１２が次にＩ−ＲＡＭ３１から読み込む命令を記憶したＩ−ＲＡＭ３１のアドレスに対応する値（カウント値）を格納している。命令フェッチ部１２は、プログラムカウンタ１１が示すＩ−ＲＡＭ３１のアドレスから命令を読み込む。命令フェッチ部１２は、読み込んだ命令を命令デコーダ部１３に出力する。命令デコーダ部１３は、命令フェッチ部１２によって読み込まれた命令を解析する。解析結果は、命令デコーダ部１３から制御部１６に出力される。
【００１５】
制御部１６は、命令デコーダ部１３による命令の解析結果により、演算を行う必要があると判定すると、命令を演算器１４に出力する。また、制御部１６は、命令デコーダ部１３による解析結果が別の関数を呼び出すＣＡＬＬ命令であると判定すると、プログラムカウンタ１１の記憶するアドレス値や汎用レジスタ１５に格納された変数をスタック領域３３に格納する。
スタック領域３３は、上述のようにひとまとまりの命令群が複数組み合わされて階層化されたプログラムの各階層に対応して記憶領域が設けられている。例えば、別の関数を呼び出すＣＡＬＬ命令が含まれる命令群が最上位の命令群であった場合、制御部１６は、プログラムカウンタ１１のアドレス値や汎用レジスタ１５の変数を最上位の命令群に対応するスタック領域３３＿０に保存する。
また、制御部１６は、命令デコーダ部１３による解析結果が下位の関数から上位の関数又はルーチンに戻るＲＥＴＵＲＮ命令であった場合には、スタック領域３３に格納されたプログラムカウンタ１１のアドレス値に基づいて上位の関数又はルーチンに処理を移行させる。
【００１６】
演算器１４は、制御部１６から通知された命令に従って、汎用レジスタ１５やＤ−ＲＡＭ３２からデータを読み出して演算を行う。又、演算器１４は、演算結果のデータをＤ−ＲＡＭ３２や汎用レジスタ１５に格納する。
【００１７】
汎用レジスタ１５には、演算器１４が演算時に使用する種々の変数が格納されている。種々の変数とは、例えば、ローカル変数（１つの関数又はルーチンでしか使用できない変数）、引数（呼び出した関数又はサブルーチンで使用される変数）などである。
【００１８】
本実施例は、階層化されたプログラムの各階層に対応してスタック領域３３を設けている。またスタック領域３３に対応して専用のＣＡＬＬ命令、ＲＥＴＵＲＮ命令を設けている。そして、ある関数又はルーチンの実行中にＣＡＬＬ命令が読み込まれ、別の関数又はルーチンが呼ばれると、プログラムカウンタ１１の値や、汎用レジスタ１５の値を該当する階層のスタック領域３３に保存する。
スタック領域３３に対応した専用のＣＡＬＬ命令とは、ＣＡＬＬ命令によってどのスタック領域３３にプログラムカウンタ１１の値や汎用レジスタ１５の値を書き込むのかが決められていることをいう。例えば、ＣＡＬＬ０の命令が読み込まれると、スタック領域３３＿０にプログラムカウンタ１１の値や汎用レジスタ１５の値を書き込む。同様に、スタック領域３３に対応した専用のＲＥＴＵＲＮ命令とは、読み込まれたＲＥＴＵＲＮ命令によりどのスタック領域３３に保存された情報を用いてプログラムカウンタ１１や汎用レジスタ１５の値を復元するのかが決められていることをいう。例えば、ＲＥＴＵＲＮ０の命令が読み込まれると、スタック領域３３＿０に保存された情報を用いてプログラムカウンタ１１や汎用レジスタ１５の値を復元する。
【００１９】
図３、４を参照しながらＣＡＬＬ、ＲＥＴＵＲＮ命令を読み込んだときのプロセッサ１の処理について具体的に説明する。
図３、４には、プログラムの階層構造が３層の場合の処理手順を示す。プログラムの階層構造が３層であるため、スタック領域３３はスタック領域（３３＿０，３３＿１，３３＿２）の３つの領域が使用される。
図３に示すように、メインルーチンの実行中に、ＣＡＬＬ命令（この命令をＣＡＬＬ０と呼ぶ）が命令フェッチ部１２によって読み出されると、制御部１６は、ＣＡＬＬ０に従ってスタック領域３３＿０にプログラムカウンタ１１の値と、汎用レジスタ１５の値とを保存する。メインルーチンは、最上位のルーチンであるため、スタック領域３３＿０にプログラムカウンタ１１の値と、汎用レジスタ１５の値とを退避する。また、図４に示す例では、ＣＡＬＬ０の命令により、制御部１６がプログラムカウンタ１１の値［０ｘ００２］をスタック領域３３＿０に保存した状態を示す。なお、ＣＡＬＬ０によって呼び出された関数を以下では関数１と呼ぶ。また、図４にはスタック領域３３＿０に退避した汎用レジスタ１５の値は図示していない。
【００２０】
次に、制御部１６は、呼び出された関数１を実行していく。また、制御部１６は、関数１の実行中にＣＡＬＬ命令（この命令をＣＡＬＬ１と呼ぶ）を命令フェッチ部１２で読み出すと、読み出したＣＡＬＬ１の命令に従ってスタック領域３３＿１にプログラムカウンタ１１の値と、汎用レジスタ１５の値とを保存する。関数１は、最上位のメインルーチンよりも１つ下位の関数であるため、スタック領域３３＿１にプログラムカウンタ１１の値と、汎用レジスタ１５の値とを退避する。図４に示す例では、ＣＡＬＬ１の命令により、制御部１６がプログラムカウンタ１１の値［０ｘ０５２］をスタック領域３３＿１に保存した状態を示す。なお、ＣＡＬＬ１によって呼び出された関数を以下では関数２と呼ぶ。また、図４にはスタック領域３３＿１に退避した汎用レジスタ１５の値は図示していない。
【００２１】
同様に、制御部１６は、ＣＡＬＬ１によって呼び出された関数２を実行していく。制御部１６は、関数２の実行中にＣＡＬＬ命令（この命令をＣＡＬＬ２と呼ぶ）を命令フェッチ部１２で読み出すと、読み出したＣＡＬＬ２の命令に従ってスタック領域３３＿２にプログラムカウンタ１１の値と、汎用レジスタ１５の値とを退避する。関数２は、最上位のメインルーチンよりも２つ下位層の関数であるため、スタック領域３３＿２にプログラムカウンタ１１の値と、汎用レジスタ１５の値とを退避する。図４に示す例では、ＣＡＬＬ２の命令により、制御部１６がプログラムカウンタ１１の値［０ｘ１０３］をスタック領域３３＿２に保存した状態を示す。なお、ＣＡＬＬ２によって呼び出された関数を以下では関数３と呼ぶ。また、図４にはスタック領域３３＿２に退避した汎用レジスタ１５の値は図示していない。
【００２２】
制御部１６は、ＣＡＬＬ２によって呼び出された関数３を実行していく。制御部１６は、関数３の実行中にＲＥＴＵＲＮ命令（この命令をＲＥＴＵＲＮ２と呼ぶ）を読み出すと、スタック領域３３＿２に退避させていた情報によりプログラムカウンタ１１と汎用レジスタ１５の値を復元する。図４に示す例では、スタック領域３３＿２にプログラムカウンタ１１の値として［０ｘ１０３］が記憶されている。従って、制御部１６はこの値に１を加算した［０ｘ１０４］をプログラムカウンタ１１の値として関数３の上位の関数である関数２に復帰する。
【００２３】
同様に、制御部１６は、ＲＥＴＵＲＮ２の命令により移行した関数２を実行する。関数２の実行中にＲＥＴＵＲＮ命令（この命令をＲＥＴＵＲＮ１と呼ぶ）を読み出すと、制御部１６は、スタック領域３３＿１に退避させていた情報によりプログラムカウンタ１１と汎用レジスタ１５の値を復元する。図４に示す例では、スタック領域３３＿１にプログラムカウンタ１１の値として［０ｘ０５２］が記憶されている。従って、制御部１６はこの値に１を加算した［０ｘ０５３］をプログラムカウンタ１１の値として関数２の上位の関数である関数１に復帰する。
【００２４】
制御部１６は、ＲＥＴＵＲＮ１の命令により移行した関数１を実行する。関数１の実行中にＣＡＬＬ１を読み出すと、制御部１６はＣＡＬＬ１に従って、スタック領域３３＿１にプログラムカウンタ１１の値と、汎用レジスタ１５の値とを保存する。関数１は、最上位のメインルーチンよりも１つ下位の関数であるため、スタック領域３３＿１にプログラムカウンタ１１の値と、汎用レジスタ１５の値とを退避する。図４に示す例では、制御部１６の制御によってスタック領域３３＿１にプログラムカウンタ１１の値［０ｘ０８０］が保存された状態を示す。また、図４にはスタック領域３３＿１に退避した汎用レジスタ１５の値は図示していない。
【００２５】
以下、同様の処理を繰り返し行って、制御部１６はメインルーチンの処理まで処理を復帰させ、メインルーチンの処理を実行して処理を完了させる。
【００２６】
図５には、図１に示すプロセッサ１を搭載した磁気ディスク装置１００の構成を示す。
図５に示す磁気ディスク装置１００は、第１プロセッサ１０１と第１プロセッサ１１０との２つのプロセッサを有している。第１プロセッサ１０１と第１プロセッサ１１０との少なくとも一方が図１に示すプロセッサ１に該当する。なお、図５には、第１プロセッサ１０１と第２プロセッサ１１０とを有する磁気ディスク装置１００の構成を示したが、プロセッサの数は２つに限定されるものではなく、２以上の複数のプロセッサで構成することもできる。
【００２７】
ハードディスクコントローラ（ＨＤＣ）１２１は、インターフェースプロトコル制御、バッファ１２２の制御、ディスクフォーマット制御等の制御を行う。
サーボコントロール回路（ＳＶＣ）１２３は、ボイスコイルモータ（ＶＣＭ）１２６及びスピンドルモータ（ＳＰＭ）１２８を制御する。
リードチャネル（ＲＤＣ）１２４は、記録媒体として用いる磁気ディスク１２９に対するデータの書き込み及び読み出しを行う。
ヘッドＩＣ（ＨＤＩＣ）１２５は、ヘッド１２７の動作を制御するＩＣである。このＩＣは、より具体的には、データの読み出しの際には読み出した信号の増幅のためのプリアンプやヘッドのためのバイアス電流源として機能し、またデータ書き込みの際にはヘッド１２７のドライバとして機能する。
ＶＣＭ１２６は、ヘッド１２７を支えるアクチュエータを駆動する。ＳＰＭ１２８は、磁気ディスク１２９を回転させる。
【００２８】
第２プロセッサ（メインプロセッサ）１１０は、比較的複雑な処理を要求される制御を行う。例えば、上位装置から取得したコマンドに従って、ＨＤＣ１２１、ＳＶＣ１２３、ＲＤＣ１２４等を制御し、磁気ディスク１２９へのデータの書き込みと、データの読み出しの制御を行う。また、第２プロセッサ１１０は、ＨＤＣ１２１を介してバッファ１２２の管理を行う。また、磁気ディスク装置１００にエラーが発生した場合に、発生したエラーから復帰するためにＨＤＣ１２１、ＳＶＣ１２３、ＲＤＣ１２４等を制御する。
【００２９】
図６に第２プロセッサ１１０の他の構成を示す。第２プロセッサ１１０は、図２に示す構成であってもよいし、図６に示す構成であってもよい。第２プロセッサ１１０は、第１プロセッサ１０１と比較して、加算器６１と減算器６２とをハードウェアで有しており、さらに、ＲＡＭ３０のスタック領域３３にスタックポインタの値を記憶する記憶領域３５を有している。また、スタック領域３３は、複数段に分割されたヒープ構造（ヒープ０〜ヒープｎ（ｎは任意の自然数））となっている。
ＣＡＬＬ命令を命令フェッチ部１２で読み込むと、第２プロセッサ１１０の制御部１６は加算器６１を動作させ、スタックポインタの値を１加算する。加算されたスタックポインタの値は、記憶領域３５に記憶される。制御部１６は、スタックポインタの示す段のヒープにプログラムカウンタ１１の値と汎用レジスタ１５の値とを保存する。
【００３０】
また、ＲＥＴＵＲＮ命令を命令フェッチ部１２で読み込むと、第２プロセッサ１１０の制御部１６は、スタックポインタの示す段のヒープから情報を取得して、プログラムカウンタ１１の値と汎用レジスタ１５の値とを復元する。また、制御部１６は、プログラムカウンタ１１の値と汎用レジスタ１５の値とを復元すると、減算器６２を動作させて、スタックポインタの値を１減算する。減算されたスタックポインタの値は、記憶領域３５に記憶される。
【００３１】
第１プロセッサ１０１は、比較的単純な処理であるが、処理の高速性が要求されるサーボ制御の処理を行う。サーボ制御の処理とは、磁気ディスク１２９に予め記録された位置情報をもとに、ヘッド１２７を磁気ディスク１２９のデータ書き込み位置又はデータ読み出し位置へと移動させるためのアクチュエータの駆動量を計算する処理である。サーボ制御の処理には、例えば、位置復調計算、電流計算、偏心補正計算等を行う関数が含まれる。
図７にサーボ制御を実行する第１プロセッサ１０１の処理の概要を示す。
位置復調計算とは、磁気ディスク１２９に記録されたサーボ情報をもとに、ヘッド１２７の現在位置を判定する処理である。また、電流計算では、シーク、トラックフォローイング制御等によりヘッド位置を調整するために、アクチュエータに供給する電流量を計算する処理である。また、偏心補正計算では、磁気ディスク装置として組み立てられた後のＳＰＭ１２８の中心軸のずれを補正して、磁気ディスク１２９にサーボ情報を書き込むときの位置ずれを補正する処理である。
これらの位置復調計算、電流計算、偏心補正計算を実行する関数を呼び出す条件が揃うと、第１プロセッサ１０１の制御部１６は、ＣＡＬＬ０の命令によりサーボのメイン制御処理で使用していたプログラムカウンタ１１の値と汎用レジスタ１５の値とをスタック領域３３＿０に保存する。その後、制御部１６は、位置復調計算、電流計算、偏心補正計算をそれぞれ実行し、ＲＥＴＵＲＮ０の命令を読み込むと、スタック領域３３＿０に保存した値によりプログラムカウンタ１１の値と汎用レジスタ１５の値とを復元する。
【００３２】
また、電流計算を実行する関数の実行中に、下位の関数として、ノッチフィルタの計算処理が呼び出される。ノッチフィルタの計算処理は、アクチュエータの機械的共振を取り除くためのフィルタ処理である。
制御部１６は、電流計算の関数の実行中にＣＡＬＬ１の命令を読み込むと、電流計算で使用していたプログラムカウンタ１１の値と汎用レジスタ１５の値とをスタック領域３３＿１に保存する。その後、制御部１６は、ノッチフィルタの計算処理を実行し、ＲＥＴＵＲＮ１の命令を読み込むと、スタック領域３３＿１に保存した値によりプログラムカウンタ１１の値と汎用レジスタ１５の値とを復元する。
【００３３】
図８（Ａ）には、ＣＡＬＬ命令を読み込んだ時の第１プロセッサ１０１の処理手順を示し、図８（Ｂ）には、ＣＡＬＬ命令を読み込んだときの第２プロセッサ１１０の処理手順を示す。
まず、図８（Ａ）を参照しながら第１プロセッサ１０１の処理手順を説明する。
第１プロセッサ１０１は、まず、命令フェッチ部１２で、プログラムカウンタ１１が示すＩ−ＲＡＭ３１のアドレスから命令を読み込む（ステップＴ１）。次に、第１プロセッサ１０１は、命令フェッチ部１２によって読み込まれた命令を命令デコーダ部１３で解析する（ステップＴ２）。解析結果は、命令デコーダ部１３から制御部１６に出力される。
【００３４】
第１プロセッサ１０１の制御部１６は、命令デコーダ部１３による解析結果が別の関数を呼び出すＣＡＬＬ命令であると判定すると（ステップＴ３／ＹＥＳ）、プログラムカウンタ１１の記憶するアドレス値や汎用レジスタ１５に格納された変数をスタック領域３３の該当領域に格納する（ステップＴ６）。その後、第１プロセッサ１０１の制御部１６は、プログラムカウンタ１１の値を書き換えて（ステップＴ７）、ＣＡＬＬ命令を終了させる（ステップＴ８）。また、第１プロセッサ１０１の制御部１６は、命令デコーダ部１３による解析結果が別の関数を呼び出すＣＡＬＬ命令ではないと判定すると（ステップＴ３／ＮＯ）、読み出した他の命令を演算器１４に出力して、演算器１４による演算を実行する（ステップＴ５）。
【００３５】
また、図８（Ｂ）に示す第２プロセッサ１１０の処理では、ＣＡＬＬ命令であると判定した場合に（ステップＳ３／ＹＥＳ）、加算器６１を使用してスタックポインタの値を１加算する処理が追加される。第２プロセッサ１１０の制御部１６は、スタックポインタの加算を行うと、加算されたスタックポインタが示すヒープにプログラムカウンタ１１の値と汎用レジスタ１５の値とを保存する。
図８（Ａ）と（Ｂ）とを比較すると明らかなように、スタックポインタの加算処理がない分だけ第１プロセッサ１０１の処理を第２プロセッサ１１０の処理よりも高速化することができる。
【００３６】
次に、図９を参照しながらＲＥＴＵＲＮ命令を読み込んだときの第１プロセッサ１０１と第２プロセッサ１１０の処理について説明する。
図９（Ａ）には、ＲＥＴＵＲＮ命令を読み込んだ時の第１プロセッサ１０１の処理手順を示し、図９（Ｂ）には、ＲＥＴＵＲＮ命令を読み込んだときの第２プロセッサ１１０の処理手順を示す。
まず、図９（Ａ）を参照しながら第１プロセッサ１０１の処理手順を説明する。
第１プロセッサ１０１は、まず、命令フェッチ部１２で、プログラムカウンタ１１が示すＩ−ＲＡＭ３１のアドレスから命令を読み込む（ステップＴ１１）。次に、第１プロセッサ１０１は、命令フェッチ部１２によって読み込まれた命令を命令デコーダ部１３で解析する（ステップＴ１２）。解析結果は、命令デコーダ部１３から制御部１６に出力される。
【００３７】
第１プロセッサ１０１の制御部１６は、読み込んだ命令がＲＥＴＵＲＮ命令であると判定すると（ステップＴ１３／ＹＥＳ）、プログラムカウンタ１１の値や汎用レジスタ１５の値をスタック領域３３の保存情報から復元する（ステップＴ１４）。そして、第１プロセッサ１０１の制御部１６は、ＲＥＴＵＲＮ命令を含む関数よりも上位の関数の処理を行う（ステップＴ１７）。
また、第１プロセッサ１０１の制御部１６は、読み込んだ命令がＲＥＴＵＲＮ命令ではないと判定すると（ステップＴ１３／ＮＯ）、読み出した他の命令を演算器１４に出力して、演算器１４による演算を実行する（ステップＴ１５）。
【００３８】
また、図９（Ｂ）に示す第２プロセッサ１１０の処理では、プログラムカウンタ１１の値や汎用レジスタ１５の値をスタック領域３３の保存情報から復元した後に（ステップＴ１４）、スタックポインタの値を減算する処理が行われる（ステップＳ１６）。
図９（Ａ）と（Ｂ）とを比較すると明らかなように、スタックポインタの減算処理がない分だけ第１プロセッサ１０１の処理を第２プロセッサ１１０の処理よりも高速化することができる。
【００３９】
このように本実施例のプロセッサ１は、命令群が階層的に組み合わされたプログラムの処理速度を向上させることができる。
また、プロセッサ１を搭載した磁気ディスク装置１００は、高速な処理が要求される演算をプロセッサ１で行うことにより、第２プロセッサ１１０の処理負荷を軽減し、装置全体としてのパフォーマンスを向上させることができる。
【００４０】
上述した実施例は本発明の好適な実施例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
【図面の簡単な説明】
【００４１】
【図１】プロセッサの構成を示す図である。
【図２】ＣＰＵとＲＡＭの構成を示す図である。
【図３】階層構造を有するプログラムの実行手順を示す図である。
【図４】関数を呼び出すときに、スタック領域に保存されるプログラムカウンタの値を示す図である。
【図５】磁気ディスク装置の構成を示す図である。
【図６】第２プロセッサの構成を示す図である。
【図７】第１プロセッサで実行される処理を示す図である。
【図８】（Ａ）はＣＡＬＬ命令を読み込んだ時の第１プロセッサの処理手順を示すフローチャートであり、（Ｂ）はＣＡＬＬ命令を読み込んだ時の第２プロセッサの処理手順を示すフローチャートである。
【図９】（Ａ）はＲＥＴＵＲＮ命令を読み込んだ時の第１プロセッサの処理手順を示すフローチャートであり、（Ｂ）はＲＥＴＵＲＮ命令を読み込んだ時の第２プロセッサの処理手順を示すフローチャートである。
【符号の説明】
【００４２】
１  プロセッサ
１０  ＣＰＵ
１１  プログラムカウンタ（第２記憶手段）
１２  命令フェッチ部
１３  命令デコーダ部
１４  演算器
１５  汎用レジスタ（第４記憶手段）
１６  制御部
２０  ＲＯＭ
３０  ＲＡＭ
３１  Ｉ−ＲＡＭ（第１記憶手段）
３２  Ｄ−ＲＡＭ
３３  スタック領域（第３記憶手段）
４０  ＤＭＡコントローラ
【図１】
2010049656.tif 000003
【図２】
2010049656.tif 000004
【図３】
2010049656.tif 000005
【図４】
2010049656.tif 000006
【図５】
2010049656.tif 000007
【図６】
2010049656.tif 000008
【図７】
2010049656.tif 000009
【図８】
2010049656.tif 000010
【図９】
2010049656.tif 000011