(57)【要約】【課題】マルチタスクシステムにおいて、タスクの状態を表すのに必要なタスク情報を格納するＴＣＢ（タスク制御ブロック）領域を低減することで、システム全体で使用するメモリ容量を低減する。【解決手段】従来はＴＣＢ領域に格納されていたタスク情報の一部又は全部を、スタック領域又はシステム全体で共通に管理する共通領域又はその両方に配置し、その情報を配置した領域をタスク毎に排他制御することで、使用するメモリ容量を低減する。【選択図】図２
2007122421.tif 000002
【特許請求の範囲】
【請求項１】
書き換え可能なメモリを有するシステムにおけるメモリ管理方法であって、
前記メモリを、処理毎に管理する情報を格納する専用領域と、処理には依存せずシステム全体で共通に管理する情報を格納する共通領域とに区分し、
前記専用領域を、処理中の箇所によって管理する情報量が変化する第１の領域と、管理する情報量が一定である第２の領域とに区別する特定処理について、前記第２の領域で管理する情報の一部又は全部を前記第１の領域又は前記共通領域又はその両方に配置することを特徴とするメモリ管理方法。
【請求項２】
請求項１記載のメモリ管理方法において、
前記システムは、複数の処理を並列に処理するマルチタスクシステムであることを特徴とするメモリ管理方法。
【請求項３】
請求項２記載のメモリ管理方法において、
前記特定処理は、タスクに相当することを特徴とするメモリ管理方法。
【請求項４】
請求項２記載のメモリ管理方法において、
前記特定処理は、タスクや割込み処理に相当することを特徴とするメモリ管理方法。
【請求項５】
請求項３記載のメモリ管理方法において、
前記第１の領域はタスクのスタック領域に相当し、前記第２の領域はタスクの状態を表すのに必要なタスク情報が格納される領域に相当することを特徴とするメモリ管理方法。
【請求項６】
請求項４記載のメモリ管理方法において、
前記第１の領域はタスクや割込み処理のスタック領域に相当し、前記第２の領域はタスクの状態を表すのに必要なタスク情報が格納される領域や割込みの状態を表すのに必要な割込み情報が格納される領域に相当することを特徴とするメモリ管理方法。
【請求項７】
請求項５又は６に記載のメモリ管理方法において、
実行中のタスクのタスク情報の一部又は全部を前記共通領域に配置し、実行中でないタスクのタスク情報の一部又は全部をタスクのスタック領域に配置することを特徴とするメモリ管理方法。
【請求項８】
請求項７記載のメモリ管理方法において、
タスクの切替え処理にて、前記共通領域に配置されていた実行中であったタスクのタスク情報をそのタスクのスタック領域に退避させ、また実行中となったタスクのスタック領域に配置されていたタスク情報を前記共通領域に復帰させることを特徴とするメモリ管理方法。
【請求項９】
請求項８記載のメモリ管理方法において、
前記タスクの切替え処理は、タスク処理中にタスクの切替え要求を発行するタスクからのディスパッチ処理に相当することを特徴とするメモリ管理方法。
【請求項１０】
請求項８記載のメモリ管理方法において、
前記タスクの切替え処理は、割込み処理中にタスクの切替え要求を発行する割込みからのディスパッチ処理に相当することを特徴とするメモリ管理方法。
【請求項１１】
請求項８記載のメモリ管理方法において、
前記タスクの切替え処理は、タスクからのディスパッチ処理と割込みからのディスパッチ処理との両方に相当することを特徴とするメモリ管理方法。
【請求項１２】
請求項５又は６に記載のメモリ管理方法において、
実行中のタスクのタスク情報のうち、タスク処理中にタスク切替え要求を発行するタスクからのディスパッチ処理を跨がない寿命を持つ特別タスク情報の一部又は全部を前記共通領域に配置することを特徴とするメモリ管理方法。
【請求項１３】
請求項１２記載のメモリ管理方法において、
割込み入口処理にて前記共通領域に配置された特別タスク情報をタスクのスタック領域に退避させ、また割込み出口処理にてタスクのスタック領域に退避されていた特別タスク情報を前記共通領域に復帰させ、また、割り込みからのディスパッチ処理直前にて、前記共通領域に配置された特別タスク情報をタスクのスタック領域に退避させ、割込みからのディスパッチ処理直後にて、タスクのスタック領域に退避されていた特別タスク情報を前記共通領域に復帰させることを特徴とするメモリ管理方法。
【請求項１４】
請求項１２記載のメモリ管理方法において、
割込み処理用のスタック領域が存在するとき、割込み入口処理にて前記共通領域に配置された特別タスク情報を割込み処理のスタック領域に退避させ、また割込み出口処理にて割込み処理のスタック領域に退避されていた特別タスク情報を前記共通領域に復帰させ、また、割込みからのディスパッチ処理直前にて、前記共通領域に配置された特別タスク情報をタスクのスタック領域に退避させ、割込みからのディスパッチ処理直後にて、タスクのスタック領域に退避されていた特別タスク情報を前記共通領域に復帰させることを特徴とするメモリ管理方法。
【請求項１５】
請求項１２記載のメモリ管理方法において、
割込みからのディスパッチ処理が割込み出入口処理の間にある場合には、割込み入口処理にて前記共通領域に配置された特別タスク情報の一部又は全部をタスクのスタック領域に退避させ、また割込み出口処理にてタスクのスタック領域に退避されていた特別タスク情報を前記共通領域に復帰させることを特徴とするメモリ管理方法。
【請求項１６】
請求項１３〜１５のいずれか１項に記載のメモリ管理方法において、
前記特別タスク情報の一部又は全部を配置する前記共通領域を、割込み処理中は割込み情報を格納する領域として利用することを特徴とするメモリ管理方法。
【請求項１７】
請求項５又は６に記載のメモリ管理方法において、
タスクのスタック領域で管理する情報量が複数のタスクで同時には最大とならないことが保証されるとき、タスク情報の一部又は全部をタスクのスタック領域に配置することを特徴とするメモリ管理方法。
【請求項１８】
請求項１７記載のメモリ管理方法において、
タスクのスタック領域で管理する情報量がある一定量以上となる場合には、タスクのスタック領域に配置されたタスク情報を前記共通領域に退避させることを特徴とするメモリ管理方法。
【請求項１９】
請求項１７記載のメモリ管理方法において、
タスクのスタック領域で管理する情報量が一定量以上となる場合が割込み処理中であることが保証されるときには、割込み入口処理にてタスクのスタック領域に配置されたタスク情報を前記共通領域に退避させ、割込み出口処理にて前記共通領域に退避されたタスク情報をタスクのスタック領域に復帰させることを特徴とするメモリ管理方法。
【請求項２０】
請求項１８又は１９に記載のメモリ管理方法において、
前記一定量は、タスクのスタック領域の全体の大きさからタスクのスタック領域に配置されたタスク情報の大きさを減算することで得られる量であることを特徴とするメモリ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書き換え可能なメモリを有するシステムにおけるメモリ管理方法に関し、特に組込用途のマイクロコンピュータにおけるメモリ管理方法に関するものである。
【背景技術】
【０００２】
プログラムにおける制御の複雑化により、コンピュータによる仕事の単位であるタスクを一度に２つ以上処理することができるマルチタスクシステムが一般的になってきている。このマルチタスクシステムを用いることによって、複数のタスクを効率良く切替えて実行することができる。
【０００３】
従来のマルチタスクシステムでは、タスクの状態を表すのに必要な情報（タスク情報）が格納される領域とスタック領域とをタスク毎に管理している。タスク情報が格納される領域は、主にＴＣＢ（タスク制御ブロック）領域と呼ばれる。
【０００４】
ある従来技術によれば、メモリの消費を低減させるために、同時には使用しない複数のタスクをグループ化し、当該グループ化された複数のタスクがＴＣＢ領域及びスタック領域を共有し、スタック領域の使用を排他的に制御することで、使用するメモリ容量を削減する（特許文献１参照）。
【特許文献１】特開平１０−１０５４１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のマルチタスクシステムでは、全てのタスクのＴＣＢ領域とスタック領域とを静的に確保するため、静的に生成するタスク１個につき、１組のＴＣＢ領域及びスタック領域が必要になり、多くのタスクを生成すると、それだけ多くのメモリを必要とする。
【０００６】
また、上記従来技術に係る方法では、同時に起動する複数のタスクについてはメモリ容量を削減できない。
【０００７】
したがって、本発明の目的は、１つのタスクのＴＣＢ領域を小さくすることにより、使用するメモリ容量を低減することのできるメモリ管理方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明は、例えばマルチタスクシステムにおいて、ＴＣＢ領域で管理するタスク情報の一部又は全部をスタック領域又はタスクに依存せずシステム全体で共通に管理する情報を格納する共通領域又はその両方に配置することで、ＴＣＢ領域のサイズを小さくすることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、ＴＣＢ領域で管理される情報の一部又は全部を共通領域又はスタック領域又はその両方に配置することでＴＣＢ領域のサイズを小さくし、使用するメモリを低減することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１０】
図１に示す従来のマルチタスクシステムは、２つのタスク１０３，１０６と割込み処理１０８とがオペレーティングシステム（以下ＯＳという）１１０上で動作しており、２つのタスク１０３，１０６はそれぞれスタック領域１０１，１０４とＴＣＢ領域１０２，１０５とを管理している。また、割込み処理１０８はスタック領域１０７を管理している。また、タスクには依存せずシステム全体で共通に管理する情報を格納する領域（共通領域）１０９も存在し、タスクに依存しない情報はこの領域で管理される。
【００１１】
以下、本発明の実施形態について、図２〜図１２を参照しつつ図１に示す従来のマルチタスクシステムとの違いを詳細に説明する。
【００１２】
《第１の実施形態》
図２に示す本発明の第１の実施形態のマルチタスクシステムは、２つのタスク１０３，１０６と割込み処理１０８とがＯＳ１１０上で動作しており、それぞれのタスク１０３，１０６はそれぞれスタック領域１０１，１０４とＴＣＢ領域１０２，１０５とを管理している。ただし、従来ＴＣＢ領域１０２，１０５で管理されていたタスク情報の一部又は全部は共通領域１０９に配置されており、その分ＴＣＢ領域１０２，１０５の大きさが小さくなっている。また、割込み処理１０８はスタック領域１０７を管理している。
【００１３】
図３は、本発明の第１の実施形態のマルチタスクシステムにおいて、タスクが２つと割込み処理が１つとが動作し、タスク２がＲＵＮ状態である場合を示す図である。タスク２がＲＵＮ状態であるときは、共通領域１０９ではタスク２のタスク情報を管理する。また、タスク１のタスク情報はタスク１のスタック領域１０１で管理されている。
【００１４】
図４は、図３の状態において、タスク２からタスク１へのタスク切替え要求が発生し、タスク１にタスクからのディスパッチが起こった場合の状態を示す。タスク２からタスク１へのタスク切替え要求が発生したときは、タスクからのディスパッチ処理時に共通領域１０９で管理されていたタスク２のタスク情報をタスク２のスタック領域１０４に退避し、タスク１のスタック領域１０１で管理されていたタスク１のタスク情報を共通領域１０９に復帰する。なお、図３の状態において割込みが発生し、割込み処理中にタスク１へのタスク切替え要求が発生し、タスク１に割込みからのディスパッチが起こった場合も同様である。
【００１５】
その後、再度タスク１からタスク２へのタスク切替え要求が発生し、タスク２にタスクからのディスパッチが起こった場合には、共通領域１０９で管理されていたタスク１のタスク情報をタスク１のスタック領域１０１に退避し、タスク２のスタック領域１０４で管理されていたタスク２のタスク情報を共通領域１０９に復帰する。なお、タスク２に割込みからのディスパッチが起こった場合においても同様である。
【００１６】
これらのタスクからのディスパッチ処理における退避／復帰や、割込みからのディスパッチ処理における退避／復帰は、不必要な場合はしなくてもよい。つまり、タスク情報がタスクからのディスパッチを跨がない寿命を持つ情報であれば、タスクからのディスパッチ処理における退避／復帰を省くことが可能である。また同様に、共通領域１０９に配置されたタスク情報が、割込みからのディスパッチを跨がない寿命を持つ情報であれば、割込みからのディスパッチ処理における退避／復帰を省くことが可能である。
【００１７】
なお、本実施形態では、システムをマルチタスクシステムとしたが、処理毎に管理する情報を格納する領域と、システム全体で共通に管理する情報を格納する領域とを持ち、処理毎に管理する情報を格納する領域は更に、処理中の箇所によって管理する情報量が変化する領域と、管理する情報量が一定である領域とに区別することができる処理が存在するシステムであればよい。
【００１８】
ただし、第１の実施形態では、タスクの切替え時に必要に応じてタスク情報を退避／復帰させる必要がある。
【００１９】
《第２の実施形態》
図５に示す本発明の第２の実施形態のマルチタスクシステムは、２つのタスク１０３，１０６と割込み処理１０８とがＯＳ１１０上で動作しており、それぞれのタスク１０３，１０６はそれぞれスタック領域１０１，１０４とＴＣＢ領域１０２，１０５とを管理している。ただし、従来ＴＣＢ領域１０２，１０５で管理されていたタスク情報のうち、タスク処理中にタスクの切替え要求を発行するタスクからのディスパッチ処理を跨がない寿命を持つ特別タスク情報の一部又は全部は、共通領域１０９に配置されており、その分ＴＣＢ領域１０２，１０５の大きさが小さくなっている。また、割込み処理１０８はスタック領域１０７を管理している。
【００２０】
図６は、本発明の第２の実施形態のマルチタスクシステムにおいて、タスクが２つと割込み処理が１つとが動作し、タスク１が処理中にタスク２へのタスク切替え要求が発生し、タスクからのディスパッチ処理を経由してタスク２がＲＵＮ状態となった場合を示す図である。タスク２がＲＵＮ状態であるときは、共通領域１０９ではタスク２の特別タスク情報を管理する。
【００２１】
図７は、本発明の第２の実施形態のマルチタスクシステムにおける、割込み処理フローを示す。割込みが発生した場合には、割込み入口処理にて共通領域１０９に配置されている特別タスク情報を割込み処理のスタック領域１０７に退避し（Ｓ１）、アプリケーションの割込ハンドラ処理を呼び出した（Ｓ２）うえ、割込み出口処理にて割込み処理のスタック領域１０７に退避されていた特別タスク情報を共通領域１０９に復帰し（Ｓ３）、また割込み処理中にタスクの切替え要求が発生したときには、共通領域１０９に配置されている特別タスク情報を割込み直前に実行していたタスクのスタック領域に退避し（Ｓ４）、割込みからのディスパッチ処理を実行した（Ｓ５）うえ、当該タスクのスタック領域に退避されていた特別タスク情報を共通領域１０９に復帰させる（Ｓ６）。
【００２２】
なお、ここでは割込み入口処理と出口処理とで特別タスク情報を割込み処理のスタック領域１０７に退避／復帰するとしたが、タスクのスタック領域１０１，１０４に退避／復帰させてもよい。この場合、本来はシステムに必要なスタック領域のサイズに特別タスク情報の退避領域分のサイズを足した分のサイズをスタック領域のサイズとしなければならないが、もしタスクのスタック領域で管理する情報量が最大となる時が割込み禁止期間内にある場合には、特別タスク情報の退避領域分のサイズを足す必要がないこともある。
【００２３】
図８は、割込みからのディスパッチ処理（Ｓ５）が割込み出入口処理の間にある場合の割込み処理フローを示す。この場合には、割込みが発生したとき、割込み入口処理にて共通領域１０９に配置されている特別タスク情報を割込み直前に実行していたタスクのスタック領域に退避した（Ｓ４）うえ、アプリケーションの割込ハンドラ処理を呼び出し（Ｓ２）、割込み出口処理にて当該タスクのスタック領域に退避されていた特別タスク情報を共通領域１０９に復帰させる（Ｓ６）だけでよい。これらの処理により、割込みハンドラ処理にてタスク切替え要求が発生し、割込みからのディスパッチ処理にてタスク１に処理が切り替わった場合には、共通領域１０９をタスク１の特別タスク情報用の領域として使用することが可能となり、その後タスク１からタスク２に処理が切り替わった時には、タスク２のスタック領域１０４に退避されていたタスク２の特別タスク情報が共通領域１０９に復帰される。また、割込みハンドラ処理中は、共通領域１０９の特別タスク情報が配置された領域をＩＣＢ（割込み制御ブロック）領域として利用することも可能となる。
【００２４】
図９は、図６の状態において割込みが発生し、割込みからのディスパッチ処理（Ｓ５）にてタスク１にディスパッチした場合の状態を示す。
【００２５】
第１の実施形態では、実行中でないタスクのタスク情報をそのタスクのスタック領域１０１，１０４に配置していたが、第２の実施形態では、タスクのスタック領域１０１，１０４に配置しておく必要はなく、割込みが発生したときのみタスクのスタック領域１０１，１０４に退避させるだけでよい。
【００２６】
《第３の実施形態》
図１０に示す本発明の第３の実施形態のマルチタスクシステムは、２つのタスク１０３，１０６と割込み処理１０８とがＯＳ１１０上で動作しており、また、２つのタスク１０３，１０６はそれぞれスタック領域１０１，１０４とＴＣＢ領域１０２，１０５とを管理している。ただし、従来ＴＣＢ領域１０２，１０５で管理されていたタスク情報の一部又は全部は各タスクのスタック領域１０１，１０４に配置されており、その分ＴＣＢ領域１０２，１０５の大きさが小さくなっている。ここでは、タスクのスタック領域１０１，１０４で管理する情報量が同時には最大とならないものとする。また、割込み処理１０８はスタック領域１０７を管理している。
【００２７】
図１１は、本発明の第３の実施形態のマルチタスクシステムにおいて、タスクが２つと割込み処理が１つとが動作し、タスク２がＲＵＮ状態である場合を示す図である。このとき、タスク２のスタック領域１０４で管理する情報量、つまり本来のタスク２のスタックとして利用可能な領域の大きさは、タスク２のスタック領域１０４の全体の大きさから当該スタック領域１０４に配置されたタスク情報の大きさを減算することで得られる量（以後、一定量）以下である。
【００２８】
図１２は、図１１の状態において、タスク２のスタック領域１０４で管理する情報量が一定量を超えた場合の状態を示す。タスク２のスタック領域１０４で管理する情報量が一定量を超えるときには、タスク２のスタック領域１０４で管理しているタスク２のタスク情報を共通領域１０９に退避させる。また、その後にタスク２のスタック領域１０４で管理する情報量が一定量以下となった場合には、共通領域１０９に退避していたタスク２のタスク情報をタスク２のスタック領域１０４に復帰させる。
【００２９】
なお、タスクのスタック領域１０１，１０４で管理する情報量が一定量以上となる時が割込み処理中であることが保証される場合には、割込み入口処理にてタスクのスタック領域１０１，１０４に配置されたタスク情報を共通領域１０９に退避させ、割込み出口処理にて共通領域１０９に退避されたタスク情報をタスクのスタック領域１０１，１０４に復帰させるだけでよい。
【産業上の利用可能性】
【００３０】
以上説明してきたとおり、本発明は、例えばマルチタスクシステムにおける使用メモリの削減が可能となるため、特に組込用途のマイクロコンピュータの省メモリ組込型マルチタスクシステムにおいてセットのコスト削減に繋がる。
【図面の簡単な説明】
【００３１】
【図１】従来のマルチタスクシステムの構造を示すブロック図である。
【図２】本発明の第１の実施形態のマルチタスクシステムの構造を示す図である。
【図３】本発明の第１の実施形態のマルチタスクシステムのある状態を示す図である。
【図４】本発明の第１の実施形態のマルチタスクシステムの他の状態を示す図である。
【図５】本発明の第２の実施形態のマルチタスクシステムの構造を示す図である。
【図６】本発明の第２の実施形態のマルチタスクシステムのある状態を示す図である。
【図７】本発明の第２の実施形態のマルチタスクシステムの割込み処理フローを示す図である。
【図８】本発明の第２の実施形態のマルチタスクシステムの他の割込み処理フローを示す図である。
【図９】本発明の第２の実施形態のマルチタスクシステムの他の状態を示す図である。
【図１０】本発明の第３の実施形態のマルチタスクシステムの構造を示す図である。
【図１１】本発明の第３の実施形態のマルチタスクシステムのある状態を示す図である。
【図１２】本発明の第３の実施形態のマルチタスクシステムの他の状態を示す図である。
【符号の説明】
【００３２】
１０１  タスク１用スタック領域
１０２  タスク１用ＴＣＢ領域
１０３  タスク１
１０４  タスク２用スタック領域
１０５  タスク２用ＴＣＢ領域
１０６  タスク２
１０７  割込み処理用スタック領域
１０８  割込み処理
１０９  共通領域
１１０  オペレーティングシステム（ＯＳ）
【図１】
2007122421.tif 000003
【図２】
2007122421.tif 000004
【図３】
2007122421.tif 000005
【図４】
2007122421.tif 000006
【図５】
2007122421.tif 000007
【図６】
2007122421.tif 000008
【図７】
2007122421.tif 000009
【図８】
2007122421.tif 000010
【図９】
2007122421.tif 000011
【図１０】
2007122421.tif 000012
【図１１】
2007122421.tif 000013
【図１２】
2007122421.tif 000014