JP2011039659A - プロセッサ及びプロセッサの制御方法 - Google Patents

プロセッサ及びプロセッサの制御方法 Download PDF

Info

Publication number
JP2011039659A
JP2011039659A JP2009184591A JP2009184591A JP2011039659A JP 2011039659 A JP2011039659 A JP 2011039659A JP 2009184591 A JP2009184591 A JP 2009184591A JP 2009184591 A JP2009184591 A JP 2009184591A JP 2011039659 A JP2011039659 A JP 2011039659A
Authority
JP
Japan
Prior art keywords
stack
register
stack area
address data
area
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.)
Pending
Application number
JP2009184591A
Other languages
English (en)
Inventor
Takuya Hirata
卓也 平田
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.)
Fujitsu Semiconductor Ltd
Original Assignee
Fujitsu Semiconductor 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 Fujitsu Semiconductor Ltd filed Critical Fujitsu Semiconductor Ltd
Priority to JP2009184591A priority Critical patent/JP2011039659A/ja
Publication of JP2011039659A publication Critical patent/JP2011039659A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

【課題】プロセッサにおいて、スタック領域のオーバーフローに伴いスタック領域を拡張する処理にかかる時間の短縮を図る。
【解決手段】プロセッサ1は、処理を実行する処理実行部100と、処理の実行に伴いデータがスタック操作されるスタック領域を複数備えるメモリ200と、スタック領域におけるスタック操作の開始位置を示す第1のアドレスデータを格納する第1のレジスタ110と、複数のスタック領域のうち処理の実行に用いられていない空きスタック領域の位置を示す第2のアドレスデータを格納する第2のレジスタ340と、スタック操作が行われるスタック領域がオーバーフローすると判定すると、第2のアドレスデータに基づいて生成したアドレスデータを第1のレジスタ110に格納する制御部400とを有する。
【選択図】図1

Description

本発明は、スタック領域を備えるメモリを有するプロセッサ、及び、このプロセッサの制御方法に関する。
プログラムにより処理実行部が処理を実行するのに伴いデータがスタック操作されるスタック領域を複数備えたメモリを有するプロセッサが従来知られている。スタック領域は、処理の単位である例えばスレッドに対応してそれぞれ設けられている。
スレッドの実行によるスタック領域の消費量が、対応するスタック領域の記憶容量よりも大きくなる場合、スタック領域がオーバーフローしてしまう可能性があった。この場合、このスタック領域に連続して設けられている別のスレッドに割り当てられたスタック領域にデータが積み重ねられてしまう可能性があった。
この対策として、スタック操作が行われるスタック領域がオーバーフローする際に、処理の実行に用いられていない空きスタック領域を用いるようにしてスタック領域を拡張する構成が知られていた。
特開2003−271448号公報 特開平7−78092号公報 特開2008−102874号公報
しかしながら、従来の構成では、スタック領域を拡張するための処理に時間が掛かってしまう可能性があった。
上記の点を鑑みて、本発明は、スタック領域を拡張するための処理時間を短縮することが可能なプロセッサ及びプロセッサの制御方法を提供することを目的とする。
上記目的を達成するために以下のようなプロセッサが提供される。
このプロセッサは、処理を実行する処理実行部と、前記処理の実行に伴いデータがスタック操作されるスタック領域を複数備えるメモリと、前記スタック領域における前記スタック操作の開始位置を示す第1のアドレスデータを格納する第1のレジスタと、前記複数のスタック領域のうち前記処理の実行に用いられていない空きスタック領域の位置を示す第2のアドレスデータを格納する第2のレジスタと、前記スタック操作が行われる前記スタック領域がオーバーフローすると判定すると、前記第2のアドレスデータに基づいて生成したアドレスデータを前記第1のレジスタに格納する制御部とを有する。
開示のプロセッサ及びプロセッサの制御方法によれば、スタック領域のオーバーフローに伴うスタック領域を拡張するための処理の時間を短縮することが可能となる。
一実施形態に係るプロセッサを示す図。 一実施形態に係るプロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図。 一実施形態に係るプロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図。 一実施形態に係るプロセッサのスタックポインタ制御部の動作を説明するフローチャート。 一実施形態に係るプロセッサのメモリ管理実行部の動作を説明するフローチャート。
プロセッサの一実施形態について説明する。
図1は、一実施形態に係るプロセッサを示す図である。
プロセッサ1は、処理を実行する処理実行部100と、処理実行部100に設けられたスタックポインタレジスタ110とを有する。さらに、プロセッサ1は、複数のスタック領域を備えたメモリ200と、メモリ管理部300と、スタックポインタレジスタ110を制御するスタックポインタ制御部400とを有する。
処理実行部100とメモリ管理部300とは、データバス500を介してメモリ200と接続されている。
また、データバス500には周辺モジュール600が接続されている。
まず、処理実行部100の詳細を説明する。
処理実行部100は、プログラムにより、複数の処理、例えばスレッドを実行する。処理実行部100は、例えば複数のスレッドを並行して実行するマルチスレッドに対応している。
処理実行部100は、各スレッドの実行に伴い対応するメモリ200内のスタック領域をそれぞれ利用し、スタック領域にデータを積み重ねたりスタック領域からデータを取り出したりするデータのスタック操作を行う。
ここで、スタック領域にデータを積み重ねることをpushと称し、スタック領域からデータを取り出すことをpopと称することもある。
スタックポインタレジスタ110は、スタック領域におけるスタック操作の開始位置を指すスタックポインタのアドレスデータを格納する。
なお、スタックポインタレジスタ110は、例えば32ビット長である。
例えば、処理実行部100によるスタック領域へのデータの積み重ねやスタック領域からのデータの取り出しが4番地単位で行われる場合、スタックポインタが指す位置は4番地間隔となる。この場合、スタックポインタレジスタ110が例えば32ビット長であれば、下位2ビットが0に固定される。
さらに、処理実行部100は、複数の汎用レジスタ120と、ステータスレジスタ130と、プログラムカウンタレジスタ140とを有し、スレッドの実行はこれらのレジスタを用いて行われる。各レジスタは例えば32ビット長である。
次に、メモリ200の詳細を説明する。
図2は、プロセッサのメモリの記憶領域の一例と各レジスタの値を示す説明図である。
図2に示すように、メモリ200は複数のスタック領域211、212、213、214を備えている。
各スタック領域212、214は、処理実行部100が実行するスレッドに対応してそれぞれ設けられている。
各スレッドの実行に伴い、対応している各スタック領域212、214においてデータのスタック操作が行われる。
また、スタック領域213は、スレッドの実行に用いられていない空きスタック領域である。
さらに、スタック領域211には、各スタック領域211〜214の使用状態を示す管理テーブル230が格納されている。
図2では、スレッドID=5の実行にスタック領域212が用いられ、スレッドID=3の実行にスタック領域214が用いられている。
各スタック領域211〜214は、例えば1ページ単位の記憶容量を有する。1ページ分の記憶容量は例えば1024バイトである。1番地当たりの記憶容量は例えば1バイトである。
図2では、スタック領域211に0x6000番地〜0x63FF番地が割り当てられ、スタック領域212に0x5C00番地〜0x5FFF番地が割り当てられている。さらに、スタック領域213に0x5800番地〜0x5BFF番地が割り当てられ、スタック領域214に0x5400番地〜0x57FF番地が割り当てられている。
データのスタック操作は、スタックポインタSPが指す番地を開始位置として行われる。
データがスタック領域211〜214に積み重ねられる場合、データは番地が小さい方に向けて順番に連続して積み重ねられる。
反対に、データがスタック領域211〜214から取り出される場合は、データは、積み重ねられる方向とは逆の方向、即ち、番地が大きい方に向けて順番に連続して取り出される。
図2では、スタックポインタSPは、例えば0x5EFC番地を指している。
この場合、データは0x5EFC番地から0x5C00番地に向けて順番に連続して積み重ねられる。また、データは0x5EFC番地から0x5FFF番地に向けて順番に連続して取り出される。
データは例えば4番地間隔で順番に積み重ねられる。例えば、1番地当たりの記憶容量が1バイトの場合、データは4バイト単位で積み重ねられる。この場合、データの取り出しも4番地間隔、即ち4バイト単位で行われる。
管理テーブル230は、各スタック領域211〜214の使用状態を示すデータを有している。即ち、管理テーブル230は、スタック領域211〜214がどのスレッドに利用されているか、もしくは、空きスタック領域かどうか等を示すデータを有している。
各スタック領域211〜214の使用状態は、例えば、1バイトのデータで管理されている。例えば、スタック領域211〜214が使用されている場合は、対応するスレッドのID番号に基づいて0x00〜0xfeというデータで管理され、スタック領域が使用されていない場合は、0xffというデータで管理されている。
図2では、管理テーブル230は、スタック領域211、スタック領域212、スタック領域213、スタック領域214の使用状態を示すデータを有している。
ここで、各スタック領域211〜214の使用状態は、例えば、番地が大きい方から順番に、0x00、0x05、0xff、0x03というデータで管理されている。ここで、0x00は管理テーブル230が格納されていることを示す。
次にメモリ管理部300の詳細を説明する。
図1に示すように、メモリ管理部300は、メモリ管理実行部310と、レジスタSP_head320と、レジスタSP_last330とを有する。さらに、メモリ管理部300は、レジスタSP_next340と、レジスタSP_next_v341と、レジスタSP_prev350と、レジスタSP_prev_v351と、管理テーブルバッファ360とを有する。
レジスタSP_head320及びレジスタSP_last330は、例えば32ビット長であり、下位10ビットは0固定とされる。
レジスタSP_head320には、管理テーブル230が管理しているスタック領域のうち最も番地の大きいスタック領域のアドレスデータが格納される。
レジスタSP_last330には、管理テーブル230が管理しているスタック領域のうち最も番地の小さいスタック領域のアドレスデータが格納される。
例えば、図2の場合、最も番地が大きいスタック領域は管理テーブル230が格納されているスタック領域211なので、レジスタSP_head320には、例えば、図2のように、0x6000番地を示すアドレスデータが格納される。
また、図2の場合、最も番地が小さいスタック領域はスレッドID=3の実行に用いられるスタック領域214なので、レジスタSP_last330には、例えば、図2のように、0x5400番地を示すアドレスデータが格納される。
レジスタSP_next340及びレジスタSP_prev350は、例えば32ビット長であり、下位10ビットは0固定とされる。
レジスタSP_next340には、スレッドの実行に用いられていない空きスタック領域のアドレスデータが格納される。
図3は、レジスタSP_nextの設定例を示す図である。
図3に示す例では、メモリ200の番地が大きい方から順番に、スタック領域211、スタック領域212、スタック領域213、スタック領域214が設けられている。
スタック領域212は、スレッドの実行に伴い現在スタック操作が行われているカレントスタック領域である。ここで、スタックポインタSPはスタック領域212内のある番地を指している。スタック領域211及びスタック領域213は、別のスレッドの実行に用いられているスタック領域である。スタック領域214はスレッドの実行に用いられていない空きスタック領域である。
この場合、レジスタSP_next340には、空きスタック領域であるスタック領域214のアドレスデータとして、例えば0x3800番地を示すアドレスデータが格納される。
一方、レジスタSP_prev350には、スレッドの実行に伴いデータがあるスタック領域から他のスタック領域に渡って連続して積み重ねられている場合に、前段のスタック領域のアドレスデータが格納される。
図4は、レジスタSP_prevの設定例を示す図である。
図4に示す例では、スタック領域214は、スレッドの実行に伴い現在スタック操作が行われているカレントスタック領域であり、スタック領域212は、同じスレッドの実行に用いられている前段のスタック領域である。
つまり、あるスレッドの実行に伴いデータがスタック領域212から、スタック領域213を飛ばして、スタック領域214に渡って連続して積み重ねられている。
ここで、スタックポインタSPはスタック領域214内のある番地を指している。
スタック領域211及びスタック領域213は、別のスレッドの実行に用いられているスタック領域である。
この場合、前段のスタック領域はスタック領域212なので、レジスタSP_prev350には、スタック領域212のアドレスデータとして、例えば0x4000番地を示すアドレスデータが格納される。
レジスタSP_next_v341には、レジスタSP_next340の有効フラグが格納される。レジスタSP_next_v341には、レジスタSP_next340が有効の場合は例えば1が格納され、無効の場合は例えば0が格納される。
レジスタSP_prev_v351には、レジスタSP_prev350の有効フラグが格納される。SP_prev_v351には、レジスタSP_prev350が有効の場合は例えば1が格納され、無効の場合は例えば0が格納される。
図1に示すように、管理テーブルバッファ360はデータバス500を介してメモリ200に接続されている。
管理テーブルバッファ360には、メモリ200に格納されている管理テーブル230がバッファリングされて格納される。
次に、メモリ管理実行部310の詳細を説明する。
図1に示すように、メモリ管理実行部310は、管理テーブルバッファ360を介してメモリ200に接続されている。
メモリ管理実行部310は、処理実行部100と独立して動作する。
メモリ管理実行部310は、メモリ200にアクセスし、例えば、図2に示したようなスタック領域211に格納されている管理テーブル230を参照する。また、メモリ管理実行部310は、メモリ200にアクセスし、スタック領域211に格納されている管理テーブル230の一部もしくは全部を管理テーブルバッファ360にバッファリングする。
ここで、メモリ管理実行部310は、参照対象のデータが管理テーブルバッファ360に格納された管理テーブル230にある場合はそれを参照する。また、メモリ管理実行部310は、参照対象のデータが管理テーブルバッファにない場合にはメモリ200にアクセスしてメモリ200内のスタック領域に格納されている管理テーブル230を参照する。
プロセッサ1では、管理テーブルバッファ360に管理テーブル230をバッファリングしているため、管理テーブル230を参照する度にメモリ200にアクセスする必要が無く、管理テーブル230の参照にかかる時間を短縮することが可能となる。
さらに、メモリ管理実行部310は、レジスタSP_head320及びレジスタSP_last330に格納されているアドレスデータに基づいて、メモリ200内の管理テーブル230の更新作業を実行する。
また、メモリ管理実行部310は、スタックポインタ制御部400からスタック領域の解放要求があった場合、レジスタSP_next340のアドレスデータが示すスタック領域を解放するべく、メモリ200内の管理テーブル230を更新する。
さらに、メモリ管理実行部310は、管理テーブル230のデータに基づいて、レジスタSP_head320、レジスタSP_last330、レジスタSP_next340、レジスタSP_prev350に格納すべきアドレスデータを生成する。そして、メモリ管理実行部310は、生成したアドレスデータを各レジスタに格納する。
さらに、メモリ管理実行部310は、レジスタSP_next_v341及びレジスタSP_prev_v351のフラグの設定を行う。
また、メモリ管理実行部310は、処理実行部100にアクセスしてスタック領域の消費量を監視している。
さらに、メモリ管理実行部310は、レジスタSP_next_v341及びレジスタSP_prev_v351のフラグを監視している。
メモリ管理実行部310は、スレッドの実行に伴いスタック領域の消費量が規定値を超えたと判定し、かつ、レジスタSP_next_v341のフラグが無効を示す場合、次の処理を実行する。
即ち、メモリ管理実行部310は、管理テーブル230のデータに基づいて空きスタック領域を探索して空きスタック領域のアドレスデータを生成し、生成したアドレスデータをレジスタSP_next340に格納する。
なお、この処理は、処理実行部100の処理の実行と並行して行われる。
この時、メモリ管理実行部310は、レジスタSP_next_v341のフラグを有効とする。
図5及び図6は、スタック領域の消費量増大時の様子を示す図である。
メモリ200の記憶領域が図5の場合を例に説明する。
図5に示す例では、スタック領域212は、スレッドの実行に伴い現在スタック操作が行われているカレントスタック領域であり、スタック領域211及びスタック領域213は、別のスレッドの実行に用いられているスタック領域である。スタック領域214はスレッドの実行に用いられていない空きスタック領域である。
ここで、スタックポインタSPは規定値よりも大きい番地、例えば0x43FC番地を指している。即ち、スタック領域212の消費量は規定値を超えていない。
また、レジスタSP_next_v341のフラグは0であり、レジスタSP_prev_v351のフラグは0である。
この状態からスタック操作が進みスタック領域212の消費量が増大した様子を図6に示す。
スタック操作が進みスタック領域212の消費量が規定値を超えた場合、メモリ管理実行部310は管理テーブル230にアクセスして空きスタック領域を探索する。
ここで、スタックポインタSPは、例えば0x4180番地を指している。
空きスタック領域はスタック領域214なので、メモリ管理実行部310は、レジスタSP_next340にスタック領域214のアドレスデータとして、例えば0x3800番地を示すアドレスデータを格納する。
さらに、メモリ管理実行部310は、レジスタSP_next_v341に有効を示すフラグとして1を格納する。
さらに、メモリ管理実行部310は、スタック領域214がスタック領域212の拡張スタック領域、即ち、次段のスタック領域とされたことを反映するべく、管理テーブル230を更新する。
メモリ管理実行部310は、スレッドの実行に伴うスタック領域の消費量が規定値を下回ったと判定し、かつ、レジスタSP_prev_v351が無効を示す場合、次の処理を実行する。
即ち、メモリ管理実行部310は、管理テーブル230のデータに基づいて前段のスタック領域を探索して前段のスタック領域のアドレスデータを生成し、生成したアドレスデータをレジスタSP_prev350に格納する。
なお、この処理は、処理実行部100の処理の実行と並行して行われる。
この時、メモリ管理実行部310は、レジスタSP_prev_v351のフラグを有効とする。
図7及び図8は、スタック領域の消費量減少時の様子を示す図である。
図7に示す例では、スタック領域214は、スレッドの実行に伴い現在スタック操作が行われているカレントスタック領域であり、スタック領域212は、同じスレッドの実行に用いられている前段のスタック領域である。また、スタック領域211及びスタック領域213は、別のスレッドの実行に用いられているスタック領域である。
ここで、スタックポインタSPは規定値よりも小さい番地、例えば0x3804番地を指している。即ち、スタック領域214の消費量は規定値を下回っていない。
また、レジスタSP_next_v341のフラグは0であり、レジスタSP_prev_v351のフラグは0である。
この状態からスタック操作が進み、スタック領域214の消費量が減少した様子を図8に示す。
スタック操作が進み、スタック領域214の消費量が規定値を下回った場合、メモリ管理実行部310は管理テーブル230にアクセスして前段のスタック領域を探索する。
ここで、スタックポインタSPは、例えば0x3A20番地を指している。
前段のスタック領域はスタック領域212なので、メモリ管理実行部310は、レジスタSP_prev350にスタック領域212のアドレスデータとして、例えば0x4000番地を示すアドレスデータを格納する。
さらに、メモリ管理実行部310は、レジスタSP_prev_v351に有効を示すフラグとして1を格納する。
次に、スタックポインタ制御部400の詳細を説明する。
スタックポインタ制御部400は、レジスタSP_next340及びレジスタSP_prev350のアドレスデータに基づいてアドレスデータを生成し、生成したアドレスデータをスタックポインタレジスタ110に格納する。
また、スタックポインタ制御部400は、スタックポインタレジスタ110のアドレスデータに基づいてアドレスデータを生成し、生成したアドレスデータをレジスタSP_next340及びレジスタSP_prev350に格納する。
さらに、スタックポインタ制御部400は、処理実行部100にアクセスしてスタック操作命令の有無及びスタック領域の消費量を監視する。また、スタックポインタ制御部400は、処理実行部100にスタック操作開始命令を行う。
さらに、スタックポインタ制御部400は、レジスタSP_next_v341及びレジスタSP_prev_v351のフラグを監視している。
スタックポインタ制御部400は、処理実行部100からスタック操作命令があると、スタック領域がオーバーフローするかどうか、もしくは、アンダーフローするかどうかを判定する。
スタックポインタ制御部400は、スタック領域がオーバーフローすると判定し、かつ、レジスタSP_next_v341のフラグが有効な場合、次の処理を行う。
即ち、スタックポインタ制御部400は、レジスタSP_next340に格納されたアドレスデータに基づいて空きスタック領域を示すアドレスデータを生成する。さらに、スタックポインタ制御部400は、生成したアドレスデータをスタックポインタレジスタ110に格納する。
これにより、スタックポインタSPは空きスタック領域を指す。
このため、データのスタック操作がスタック領域から空きスタック領域に切り替えられるので、スタック領域がオーバーフローしてしまうことを回避することが可能となる。
つまり、空きスタック領域をスタック領域の拡張領域とすることが可能となる。
さらに、スタックポインタ制御部400は、レジスタSP_next_v341に無効を示すフラグを格納する。
また、スタックポインタ制御部400は、スタックポインタレジスタ110のアドレスデータに基づいて、現在スタック操作が行われているスタック領域を示すアドレスデータを生成し、生成したアドレスデータをレジスタSP_prev350に格納する。さらに、スタックポインタ制御部400は、レジスタSP_prev_v351に有効を示すフラグを格納する。
ここで、アドレスデータのレジスタSP_prev350への格納は、例えば、スタックポインタレジスタ110が32ビット長の場合、スタックポインタレジスタ110の上位22ビットをレジスタSP_prev350に上書きすることで行われる。
その後、スタックポインタ制御部400は処理実行部100にスタック操作を行うよう命令し、これにより、空きスタック領域のスタックポインタSPが指す番地からデータが積み重ねられる。
例えば、図9及び図10に示す場合を例にして、スタック領域のオーバーフロー時のスタックポインタ制御部400の動作を説明する。
図9は、図6の状態からスタック操作が進みスタック領域212の消費量が増大した状態を示したもので、スタックポインタSPは、例えば0x4004番地を指している。
この状態からスタック操作が行われてスタック領域の例えば0xC番地分の領域にデータが積み重ねられる場合、0x4000番地よりも小さい番地までデータが積み重ねられてしまい、スタック領域212はオーバーフローしてしまう。
スタックポインタ制御部400はスタック領域212がオーバーフローすると判定すると、レジスタSP_next_v341のフラグは1なので、次の処理を行う。
即ち、図10に示すように、スタックポインタ制御部400は、レジスタSP_next340に格納されたアドレスデータに基づいて空きスタック領域である次段のスタック領域214を示すアドレスデータを生成する。さらに、スタックポインタ制御部400は生成したアドレスデータをスタックポインタレジスタ110に格納する。
ここでは、スタックポインタ制御部400は、スタックポインタレジスタ110の値から0xC減じた値に、上位22ビットをレジスタSP_next340の値で置き換えた値を生成し、スタックポインタレジスタ110に格納する。
さらに、スタックポインタ制御部400は、レジスタSP_next_v341に無効を示すフラグとして0を格納する。
さらに、スタックポインタ制御部400は、レジスタSP_prev350に現在スタック操作が行われているスタック領域212を示すアドレスデータとして0x4000番地を示すアドレスデータを格納する。さらに、スタックポインタ制御部400は、レジスタSP_prev_v351に有効を示すフラグとして1を格納する。
スタックポインタ制御部400は、あるスレッドに対応するデータがあるスタック領域から他のスタック領域に渡って連続して積み重ねられている場合に、後段のスタック領域がアンダーフローするかどうかを判定する。
スタックポインタ制御部400は、後段のスタック領域がアンダーフローすると判定すると、次の処理を実行する。
即ち、スタックポインタ制御部400は、レジスタSP_next_v341のフラグが有効な場合、レジスタSP_next340のアドレスデータが示すスタック領域を解放するようメモリ管理実行部310に要求する。
次に、スタックポインタ制御部400は、レジスタSP_prev_v351のフラグが有効な場合、レジスタSP_prev350に格納されたアドレスデータに基づいて前段のスタック領域を示すアドレスデータを生成する。さらに、スタックポインタ制御部400は、生成したアドレスデータをスタックポインタレジスタ110に格納する。
これにより、スタックポインタSPは、前段のスタック領域を指す。
このため、データのスタック操作が後段のスタック領域から前段のスタック領域に切り替えられるので、後段のスタック領域がアンダーフローしてしまうことを回避することが可能となる。
さらに、スタックポインタ制御部400は、レジスタSP_prev_v351に無効を示すフラグを格納する。
また、スタックポインタ制御部400は、スタックポインタレジスタ110のアドレスデータに基づいて、現在スタック操作が行われている後段のスタック領域を示すアドレスデータを生成する。さらにスタックポインタ制御部400は、生成したアドレスデータをレジスタSP_next340に格納する。さらに、スタックポインタ制御部400は、レジスタSP_next_v341に有効を示すフラグを格納する。
ここで、アドレスデータのレジスタSP_next340への格納は、例えば、スタックポインタレジスタ110が32ビット長の場合、スタックポインタレジスタ110の上位22ビットをレジスタSP_next340に上書きすることで行われる。
この後、スタックポインタ制御部400は処理実行部100にスタック操作を行うよう命令し、これにより、スタックポインタSPが指す前段のスタック領域の番地からデータが取り出される。
例えば、図10及び図11に示す場合を例にして、スタック領域のアンダーフロー時のスタックポインタ制御部400の動作を説明する。
図10に示す状態からスタック操作が行われ、スタック領域214から0x28番地分のデータを取り出す場合、3BFF番地よりも大きい番地までデータが取り出されてしまい、スタック領域214はアンダーフローしてしまう。
スタックポインタ制御部400は、スタック領域214がアンダーフローすると判定すると、レジスタSP_prev_v351のフラグは1なので、次の処理を行う。
即ち、図11に示すように、スタックポインタ制御部400は、レジスタSP_prev350に格納されたアドレスデータに基づいて前段のスタック領域212を示すアドレスデータを生成し、生成したアドレスデータをスタックポインタレジスタ110に格納する。
ここでは、スタックポインタ制御部400は、スタックポインタレジスタ110の値に0x28加算した値に、上位22ビットをレジスタSP_prev350の値で置き換えた値を生成し、スタックポインタレジスタ110に格納する。
さらに、スタックポインタ制御部400は、レジスタSP_prev_v351に無効を示すフラグとして0を格納する。
また、スタックポインタ制御部400は、レジスタSP_next340に現在スタック操作が行われているスタック領域214を示すアドレスデータとして0x3800番地を示すアドレスデータを格納する。さらに、スタックポインタ制御部400は、レジスタSP_next_v341に有効を示すフラグとして1を格納する。
このように、プロセッサ1では、スタックポインタ制御部400は、スタック領域がオーバーフローすると判定すると、レジスタSP_next340のアドレスデータに基づいて生成したアドレスデータをスタックポインタレジスタ110に格納する。
この構成によれば、スタック領域のオーバーフロー発生時、複雑な処理を施すことなく、予めレジスタに格納されているデータに基づいてスタックポインタレジスタ110のデータを書き換える処理だけで、スタック領域の拡張を行うことが可能となる。
これにより、プロセッサ1では、スタック領域の拡張に伴う処理時間を低減することが可能となる。
さらに、プロセッサ1では、メモリ管理実行部310は、スタック領域の消費量が規定値を超えたと判定した時に、空きスタック領域を探索する。また、メモリ管理実行部310は、スタック領域の消費量が規定値を下回ったと判定した時に、前段のスタック領域を探索する。
この構成によれば、スタック領域の消費量が小さくスタック領域のオーバーフローが発生する可能性が低い段階で、メモリ管理実行部310が空きスタック領域の探索を行うことを防ぐことが可能となる。さらに、この構成によれば、スタック領域の消費量が大きくスタック領域のアンダーフローが発生する可能性が低い段階で、メモリ管理実行部310が前段のスタック領域の探索を行うことを防ぐことが可能となる。
これにより、プロセッサ1では、メモリ管理実行部310による処理の量を低減することが可能となる。
以下、フローチャートを用いて、プロセッサ1の動作をまとめる。
図12は、プロセッサのスタックポインタ制御部の動作を説明するフローチャートである。
スタックポインタ制御部400は、処理実行部100からスタック操作命令があると、スタック領域がオーバーフローするかどうかを判定する(ステップS100)。
スタック領域がオーバーフローすると判定した場合、スタックポインタ制御部400は、レジスタSP_next_v341のフラグが有効かどうかを判定する(ステップS110)。
レジスタSP_next_v341のフラグが有効でなければ、スタックポインタ制御部400はステップS110を繰り返す。
レジスタSP_next_v341のフラグが有効(例えば1)である場合、スタックポインタ制御部400は次の処理を行う。
即ち、スタックポインタ制御部400は、スタックポインタレジスタ110のアドレスデータに基づいて生成されたアドレスデータをレジスタSP_prev350に格納する。さらに、スタックポインタ制御部400は、レジスタSP_prev_v351に有効を示すフラグ(例えば1)を格納する。
次に、スタックポインタ制御部400は、スタックポインタレジスタ110にレジスタSP_next340のアドレスデータに基づいて生成されたアドレスデータを格納する。さらに、スタックポインタ制御部400は、レジスタSP_next_v341に無効を示すフラグ(例えば0)を格納する(ステップS120)。
ステップS120の後、スタックポインタ制御部400は処理実行部100にスタック操作開始命令を行う。
一方、ステップS100にて、スタック領域がオーバーフローしないと判定された場合、スタックポインタ制御部400は、スタック領域がアンダーフローするかどうかを判定する(ステップS130)。
スタック領域がアンダーフローしないと判定された場合、スタックポインタ制御部400は処理実行部100にスタック操作開始命令を行う。
ステップS130にて、スタック領域がアンダーフローすると判定された場合、スタックポインタ制御部400は、次の処理を行う。
即ち、スタックポインタ制御部400は、レジスタSP_next_v351のフラグが有効な場合、レジスタSP_next340のアドレスデータが示す番地を含むスタック領域の解放をメモリ管理実行部310に要求する(ステップS140)。
次に、スタックポインタ制御部400は、レジスタSP_prev_v351のフラグが有効(例えば1)かどうかを判定する(ステップS150)。
レジスタSP_prev_v351のフラグが有効ではない場合、スタックポインタ制御部400はステップS150を繰り返す。
レジスタSP_prev_v351のフラグが有効(例えば1)である場合、スタックポインタ制御部400は、次の処理を行う。
即ち、スタックポインタ制御部400は、レジスタSP_next340にスタックポインタレジスタ110のアドレスデータに基づいて生成されたアドレスデータを格納する。さらに、スタックポインタ制御部400は、レジスタSP_next_v341に有効を示すフラグ(例えば1)を格納する。
次に、スタックポインタ制御部400は、スタックポインタレジスタ110にレジスタSP_prev350のアドレスデータに基づいて生成されたアドレスデータを格納する。さらに、スタックポインタ制御部400は、レジスタSP_prev_v351に無効を示すフラグ(例えば0)を格納する(ステップS160)。
ステップS160の後、スタックポインタ制御部400は処理実行部100にスタック操作開始命令を行う。
ここで、例えば、ステップS100とステップS130とは順番が入れ替わっても良い。
次に、メモリ管理実行部310の動作について説明する。
図13は、プロセッサのメモリ管理実行部の動作を説明するフローチャートである。
メモリ管理実行部310は、スタックポインタ制御部400からのスタック領域の解放要求の有無を判定する(ステップS210)。
スタック領域の解放要求が有る場合、レジスタSP_next340のアドレスデータが示すスタック領域を解放する(ステップS220)。
その後、メモリ管理実行部310は初期状態に戻る(ステップS200)。
スタック領域の解放要求が無い場合、メモリ管理実行部310は、スタック領域の消費量が規定値以上かどうか、さらに、レジスタSP_next_v341のフラグが無効(例えば0)かどうかを判定する(ステップS230)。
スタック消費量が規定値以上であり、かつ、レジスタSP_next_v341のフラグが無効である場合、メモリ管理実行部310は、次の処理を行う。
即ち、メモリ管理実行部310は、管理テーブル230にアクセスして空きスタック領域を探索し、レジスタSP_next340に空きスタック領域のアドレスデータを格納する。さらに、メモリ管理実行部310は、レジスタSP_next_v341に有効を示すフラグ(例えば1)を格納する(ステップS240)。
その後、メモリ管理実行部310は初期状態に戻る(ステップS200)。
スタックの消費量が規定値以上ではなく、もしくは、レジスタSP_next_v341が無効ではない場合、メモリ管理実行部310は、スタックの消費量が規定値以下かどうか、さらに、レジスタSP_prev_v351のフラグが無効(例えば0)かどうかを判定する(ステップS250)。
スタック領域の消費量が規定値以下であり、かつ、レジスタSP_prev_v351のフラグが無効である場合、メモリ管理実行部310は、次の処理を行う。
即ち、メモリ管理実行部310は、管理テーブル230にアクセスして前段のスタック領域を探索し、レジスタSP_prev350に前段のスタック領域の位置を示すアドレスデータを格納する。さらに、メモリ管理実行部310は、レジスタSP_prev_v351に有効を示すフラグ(例えば1)を格納する(ステップS260)。
その後、メモリ管理実行部310は初期状態に戻る(ステップS200)。
スタックの消費量が規定値以下ではなく、もしくは、レジスタSP_prev_v351が無効ではない場合、メモリ管理実行部310は初期状態に戻る(ステップS200)。
以上説明した実施の形態に関し、さらに以下の付記を開示する。
(付記1) 処理を実行する処理実行部と、
前記処理の実行に伴いデータがスタック操作されるスタック領域を複数備えるメモリと、
前記スタック領域における前記スタック操作の開始位置を示す第1のアドレスデータを格納する第1のレジスタと、
前記複数のスタック領域のうち前記処理の実行に用いられていない空きスタック領域の位置を示す第2のアドレスデータを格納する第2のレジスタと、
前記スタック操作が行われる前記スタック領域がオーバーフローすると判定すると、前記第2のアドレスデータに基づいて生成したアドレスデータを前記第1のレジスタに格納する制御部とを有することを特徴とするプロセッサ。
(付記2) 前記複数のスタック領域は、第1及び第2のスタック領域を含み、前記データが前記第1のスタック領域から前記第2のスタック領域に渡って連続して積み重ねられている場合に、前記第1のスタック領域の位置を示す第3のアドレスデータを格納する第3のレジスタを有し、
前記制御部は、前記第2のスタック領域がアンダーフローすると判定すると、前記第3のアドレスデータに基づいて生成したアドレスデータを前記第1のレジスタに格納することを特徴とする付記1に記載のプロセッサ。
(付記3) 前記第2のアドレスデータを生成して前記第2のレジスタに格納し、前記第3のアドレスデータを生成して前記第3のレジスタに格納するメモリ管理実行部を有することを特徴とする付記2に記載のプロセッサ。
(付記4) 前記メモリは、前記複数のスタック領域の使用状態を示す管理テーブルを備え、
前記メモリ管理実行部は、前記管理テーブルに基づいて前記空きスタック領域を探索して前記第2のアドレスデータを生成することを特徴とする付記3に記載のプロセッサ。
(付記5) 前記空きスタック領域の探索は、前記スタック操作が行われる前記スタック領域の消費量に応じて開始されることを特徴とする付記4に記載のプロセッサ。
(付記6) 前記メモリ管理実行部は、前記管理テーブルに基づいて前記第1のスタック領域を探索して前記第3のアドレスデータを生成することを特徴とする付記4又は5に記載のプロセッサ。
(付記7) 前記第1のスタック領域の探索は、前記スタック操作が行われる前記スタック領域の消費量に応じて開始されることを特徴とする付記6に記載のプロセッサ。
(付記8) 前記処理実行部と前記メモリ管理実行部とは、それぞれ独立して動作することを特徴とする付記3〜7のいずれか1つに記載のプロセッサ。
(付記9) 処理実行部が処理を実行するに伴いデータがスタック操作されるメモリ内に設けられた複数のスタック領域のうち、前記処理の実行に用いられていない空きスタック領域の位置を示す第2のアドレスデータを、メモリ管理実行部が生成して第2のレジスタに格納し、
制御部が、前記スタック操作が行われる前記スタック領域がオーバーフローすると判定すると、前記第2のアドレスデータに基づいて生成したアドレスデータを、前記スタック操作の開始位置を示すアドレスデータを格納する第1のレジスタに格納することを特徴とするプロセッサの制御方法。
(付記10) 前記処理実行部の前記処理の実行と並行して、前記メモリ管理実行部は前記第2のアドレスデータを生成して前記第2のレジスタに格納することを特徴とする付記9に記載のプロセッサの制御方法。
(付記11) 前記複数のスタック領域が第1及び第2のスタック領域を含み、
前記データが前記第1のスタック領域から前記第2のスタック領域に渡って連続して積み重ねられている場合に、前記メモリ管理実行部は、前記第1のスタック領域の位置を示す第3のアドレスデータを生成して第3のレジスタに格納することを特徴とする付記9又は10に記載のプロセッサの制御方法。
(付記12) 前記処理実行部の前記処理の実行と並行して、前記メモリ管理実行部は前記第3のアドレスデータを生成して前記第3のレジスタに格納することを特徴とする付記11に記載のプロセッサの制御方法。
1 プロセッサ
100 処理実行部
110 スタックポインタレジスタ
120 汎用レジスタ
130 ステータスレジスタ
140 プログラムカウンタレジスタ
200 メモリ
211、212、213、214 スタック領域
230 管理テーブル
300 メモリ管理部
310 メモリ管理実行部
320 レジスタSP_head
330 レジスタSP_last
340 レジスタSP_next
341 レジスタSP_next_v
350 レジスタSP_prev
351 レジスタSP_prev_v
360 管理テーブルバッファ
400 スタックポインタ制御部
500 データバス
600 周辺モジュール

Claims (6)

  1. 処理を実行する処理実行部と、
    前記処理の実行に伴いデータがスタック操作されるスタック領域を複数備えるメモリと、
    前記スタック領域における前記スタック操作の開始位置を示す第1のアドレスデータを格納する第1のレジスタと、
    前記複数のスタック領域のうち前記処理の実行に用いられていない空きスタック領域の位置を示す第2のアドレスデータを格納する第2のレジスタと、
    前記スタック操作が行われる前記スタック領域がオーバーフローすると判定すると、前記第2のアドレスデータに基づいて生成したアドレスデータを前記第1のレジスタに格納する制御部とを有することを特徴とするプロセッサ。
  2. 前記複数のスタック領域は、第1及び第2のスタック領域を含み、前記データが前記第1のスタック領域から前記第2のスタック領域に渡って連続して積み重ねられている場合に、前記第1のスタック領域の位置を示す第3のアドレスデータを格納する第3のレジスタを有し、
    前記制御部は、前記第2のスタック領域がアンダーフローすると判定すると、前記第3のアドレスデータに基づいて生成したアドレスデータを前記第1のレジスタに格納することを特徴とする請求項1に記載のプロセッサ。
  3. 前記第2のアドレスデータを生成して前記第2のレジスタに格納し、前記第3のアドレスデータを生成して前記第3のレジスタに格納するメモリ管理実行部を有することを特徴とする請求項2に記載のプロセッサ。
  4. 前記メモリは、前記複数のスタック領域の使用状態を示す管理テーブルを備え、
    前記メモリ管理実行部は、前記管理テーブルに基づいて前記空きスタック領域を探索して前記第2のアドレスデータを生成することを特徴とする請求項3に記載のプロセッサ。
  5. 前記空きスタック領域の探索は、前記スタック操作が行われる前記スタック領域の消費量に応じて開始されることを特徴とする請求項4に記載のプロセッサ。
  6. 処理実行部が処理を実行するに伴いデータがスタック操作されるメモリ内に設けられた複数のスタック領域のうち、前記処理の実行に用いられていない空きスタック領域の位置を示す第2のアドレスデータを、メモリ管理実行部が生成して第2のレジスタに格納し、
    制御部が、前記スタック操作が行われる前記スタック領域がオーバーフローすると判定すると、前記第2のアドレスデータに基づいて生成したアドレスデータを、前記スタック操作の開始位置を示すアドレスデータを格納する第1のレジスタに格納することを特徴とするプロセッサの制御方法。
JP2009184591A 2009-08-07 2009-08-07 プロセッサ及びプロセッサの制御方法 Pending JP2011039659A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009184591A JP2011039659A (ja) 2009-08-07 2009-08-07 プロセッサ及びプロセッサの制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009184591A JP2011039659A (ja) 2009-08-07 2009-08-07 プロセッサ及びプロセッサの制御方法

Publications (1)

Publication Number Publication Date
JP2011039659A true JP2011039659A (ja) 2011-02-24

Family

ID=43767384

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009184591A Pending JP2011039659A (ja) 2009-08-07 2009-08-07 プロセッサ及びプロセッサの制御方法

Country Status (1)

Country Link
JP (1) JP2011039659A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115221506A (zh) * 2022-07-15 2022-10-21 深圳市航顺芯片技术研发有限公司 一种防止堆栈溢出的保护方法及相关设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115221506A (zh) * 2022-07-15 2022-10-21 深圳市航顺芯片技术研发有限公司 一种防止堆栈溢出的保护方法及相关设备
CN115221506B (zh) * 2022-07-15 2023-08-29 深圳市航顺芯片技术研发有限公司 一种防止堆栈溢出的保护方法及相关设备

Similar Documents

Publication Publication Date Title
TWI379229B (en) Microprocessor with multiple operating modes dynamically configurable by a device driver based on currently running applications
TWI453663B (zh) 預取資料的系統與方法
EP2593861B1 (en) System and method to allocate portions of a shared stack
US9043806B2 (en) Information processing device and task switching method
JP2007219581A (ja) メモリコントローラおよびこれを搭載する電子機器
KR102568051B1 (ko) 메모리 관리
US20130254576A1 (en) Multiprocessor system and method of controlling power
WO2011027626A1 (ja) メモリ管理方法、計算機システム及びコンピュータ可読媒体
US9317438B2 (en) Cache memory apparatus, cache control method, and microprocessor system
JP5159258B2 (ja) 演算処理装置
JP5045163B2 (ja) 演算処理装置および演算処理装置の制御方法
JP5108690B2 (ja) Dma装置及びdma転送方法
JP2011039659A (ja) プロセッサ及びプロセッサの制御方法
JP4056768B2 (ja) マイクロコンピュータ、キャッシュメモリ制御方法及びクロック制御方法
JP2006215799A (ja) メモリコントローラ
JP2011108140A (ja) データ処理装置
JP2010152837A (ja) バッファ装置
JP6016689B2 (ja) 半導体装置
US20080250211A1 (en) Cache control method, cache device, and microcomputer
JP2009199384A (ja) データ処理装置
JP2009258984A (ja) 情報処理装置およびロード制御方法
JP2008015668A (ja) タスク管理装置
JP2010231701A (ja) システムの起動高速化装置
EP2416250A1 (en) Prefetch request circuit
JP2005157717A (ja) データ転送方法及びその装置