(57)【要約】【課題】スレッドの不正メモリ領域へのアクセスが生じた場合に、プロセスの終了を回避するオペレーティングシステムを提供する。【解決手段】本発明は、複数の処理プログラムをコンピュータに実行させることで1個のプロセスを処理させるオペレーティングシステムにおいて、起動したプロセスの複数の処理プログラムを管理するプロセス管理手段と、プロセス毎の各処理プログラムの記憶領域アドレスに基づいて各処理プログラムを記憶領域へのアクセスを制御するアクセス制御手段と、各処理プログラム実行で不正な記憶領域へのアクセスを検出する不正アクセス検出手段と、不正アクセス検出手段から不正アクセス検出信号を受けて当該不正な記憶領域へのアクセスに係る当該処理プログラムの内容が、プロセス処理に影響がないものと判断したときに、当該処理プログラムのみを削除するプログラム管理手段とを備えることを特徴とする。【選択図】      図１
2005284630.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理プログラムをコンピュータに実行させることで1個のプロセスを処理させるオペレーティングシステムにおいて、
起動したプロセスを処理するための上記複数の処理プログラムを管理するプロセス管理手段と、
上記プロセス毎の上記各処理プログラム実行で使用する記憶領域アドレスを保持し、その記憶領域アドレスに基づいて上記各処理プログラムを記憶領域へのアクセスを制御するアクセス制御手段と、
上記各処理プログラム実行で不正な記憶領域へのアクセスを検出する不正アクセス検出手段と、
上記不正アクセス検出手段から不正アクセス検出信号を受けた場合、当該不正な記憶領域へのアクセスに係る当該処理プログラムの内容が、プロセス処理に影響がないものと判断したときに、上記プロセス管理手段が管理する上記複数の処理プログラムの中から当該処理プログラムのみを削除するプログラム管理手段と
を備えることを特徴とするオペレーティングシステム。
【請求項２】
上記プログラム管理手段は、上記プログラム管理手段が管理する上記各処理プログラムの内容及び記憶領域情報を管理することを特徴とする請求項１に記載のオペレーティングシステム。
【請求項３】
上記プログラム管理手段は、削除した上記処理プログラムが使用していた記憶領域を解放することを特徴とする請求項１又は２に記載のオペレーティングシステム。
【請求項４】
上記プログラム管理手段は、削除した上記処理プログラムが使用した記憶領域を、新たに設定した処理プログラムの使用に割り当てることを特徴とする請求項１又は２に記載のオペレーティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーティングシステムに関し、例えば、Ｌｉｎｕｘ（登録商標）やＵＮＩＸ（登録商標）等のオペレーティングシステム上のプロセスのスレッドが、不正な記憶領域にアクセスした場合に、そのプロセスが終了してしまうことを回避するシステムに適用し得る。
【背景技術】
【０００２】
例えば、ネットワーク通信技術における情報処理装置の情報処理システムとして、例えばＬｉｎｕｘやＵＮＩＸなどのオペレーティングシステム（ＯＳ）が広く使用されている。
【０００３】
このようなオペレーティングシステムにおいて、ユーザにより、プロセスが起動されると（プログラムが実行されると）、ＯＳ上のカーネルの制御により、そのプロセスが起動され、そのプロセスを処理するためのスレッドが生成される。そして、スレッドの処理を実行することで、ユーザの所望プロセスの実行を図ることが可能となる。
【０００４】
ここで、カーネルはＯＳ上の基本制御プログラムであり、スレッドは、プロセスを実行するための単一の処理プログラムであり、複数の処理をＣＰＵに同時実行させるための仕組みをもつ。スレッドは、例えば、ＰＯＳＩＸ（Ｐｏｒｔａｂｌｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）で規定されているＰＯＳＩＸスレッドなどがある。
【０００５】
図２は、プログラム実行中にスレッドを生成するプロセスの、起動から終了までの動作を概念的に示すシーケンス図である。なお、カーネル及びプロセス管理の詳細な動作は、それぞれのＯＳの実装によって異なるため、省略する。
【０００６】
図２において、システムのＯＳ（カーネル）が起動した後（Ｓ１）、ユーザにより、プロセスが起動されたとする（Ｓ２）。
【０００７】
このとき、カーネルは、ユーザが起動したプロセスを管理するプログラム（ここではプロセス管理と呼ぶ）を同時に起動する（Ｓ３）。このプロセス管理の制御によりプロセスが起動する（Ｓ４）。
【０００８】
プロセスが起動すると、起動したプロセスは、カーネル又はプロセス管理に対してスレッドを生成する要求を投げる（Ｓ５）。なお、このスレッド生成要求の要求先は、各ＯＳの実装により異なり、カーネルとする場合又はプロセス管理いずれかとすることができ、図２ではいずれにも対応可能に示す。
【０００９】
カーネル又はプロセス管理は、スレッド生成要求を受けると、スレッド生成処理を実行し（Ｓ６）、スレッドを生成する（Ｓ７）。そして、生成されたスレッドは、スレッド処理の実行を開始する（Ｓ８）。ここで、スレッドは、プロセスとは非同期に処理を実行する。
【００１０】
スレッド処理が終了すると（Ｓ９）、スレッドは、スレッド処理終了の旨をプロセス管理に与え、プロセス管理は、スレッド処理終了の旨をプロセスに通知する（Ｓ１０、Ｓ１１）。このとき、プロセスは、スレッド処理終了待ちをしており、プロセス管理からのスレッド処理終了通知をもって終了を確認する。
【００１１】
プロセスは、すべてのスレッドが終了を確認後、終了し、プロセス管理も終了する（Ｓ１２、Ｓ１３）。
【００１２】
次に、起動するプロセスと、それに係る生成したスレッドとの関係について図３を参照して説明する。
【００１３】
図３は、プロセスの実行環境を示すものである。一般的にプロセスは、ユーザ空間とＯＳ（カーネル）空間とに大別でき、図３では、ユーザ空間で実行するプロセス（ユーザプログラム）とＯＳ（カーネル）空間でのプロセス（ＯＳ）とを示す。
【００１４】
図３において、ユーザプログラムは、複数のプロセス１及びプロセス２を有し、ＯＳ（ＯＳ空間）は、カーネル資源１及びカーネル資源２を有する。また、カーネル資源１及びカーネル資源２は、プロセス起動時に、カーネルから、１個のプロセスに対応する１個の資源が提供される。
【００１５】
ここで、カーネル資源とは、プロセスが動作するために必要な情報である。また、カーネル資源は、少なくとも、シグナルを受信し処理する機構であるシグナルハンドラ１３、プロセスやスレッドが使用するメモリへの仮想アドレス１４（１４ａ及び１４ｂ）を有する。なお、カーネル資源は、他にもファイルディスクリプタなどがあるが、説明便宜のため省略している。
【００１６】
あるプロセス中のスレッドは、対応するカーネル資源にアクセスし、カーネル資源である仮想アドレス１４に基づいて使用するメモリ領域にアクセスしている。これにより、スレッドが使用するメモリ領域にアクセスすることができ、処理が実行される。
【特許文献１】特開２００２−９１８２６号公報
【非特許文献１】Ｌｉｎｕｘ  Ｖ２．４カーネル内部解析報．ドラフト第４版．[Ｏｎｌｉｎｅ]．[２００４年３月１６日検索]．インターネット．＜ＵＲＬ：ｈｔｔｐ：／／ｊａｐａｎ．ｌｉｎｕｘ．ｃｏｍ／ｋｅｒｎｅｌ／ｉｎｔｅｒｎａｌ２４／ｉｎｄｅｘ．ｓｈｔｍｌ＞．
【発明の開示】
【発明が解決しようとする課題】
【００１７】
しかしながら、従来、ＬｉｎｕｘシステムやＵＮＩＸシステムにおいて、起動されたプロセス中のスレッドが不正なメモリ領域ヘアクセスすると、ＯＳ（カーネル）側の処理により、そのスレッドをもつプロセスが強制終了させられるという問題があった。
【００１８】
また、このプロセスの強制終了により、サーバ側がユーザに提供するサービスも終了してしまうという問題もあった。
【００１９】
この提供サービスの終了は、ユーザにサービスの提供ができないことになるが、特に商用サービスである場合、企業等の有用な情報管理等をしていることもあり、ユーザに対して大きな損害を与えかねない。
【００２０】
そのため、プロセスの強制終了を回避するシステムが強く望まれている。
【００２１】
従来システムにおける上述したプロセスの強制終了は以下のようにしてなされる。
【００２２】
上述したように、プロセス中のスレッドは、カーネル資源である仮想アドレスに基づいてメモリ領域にアクセスしているが、例えばプロセス１のスレッドが、プロセス２が使用するメモリ領域ヘアクセスしてしまう場合がある（図４参照）。
【００２３】
このとき、カーネルは、プロセス２の動作を保証するため（プロセス２が使用するメモリを保護するため）、プロセス１を即座に終了させるが、この場合、カーネルは、プロセス１を終了させるために、プロセス１及びそれに対応するカーネル資源１の全てを削除している（図５参照）。
【００２４】
図６は、スレッドが不正なメモリ領域にアクセスした場合、プロセスを終了させる処理を説明するシーケンス図である。
【００２５】
図６において、不正メモリへアクセスした場合（Ｓ１４）、カーネルは、プロセスを終了させるシグナル（例えば、Ｌｉｎｕｘ、ＵＮＩＸの場合、ＳＩＧＳＥＧＶ  シグナル）をプロセス管理に与える（Ｓ１５）。
【００２６】
プロセス管理は、カーネルからこのシグナルを受信することで、起動しているプロセス全体を終了させている。
【００２７】
また、このようにプロセス管理が、スレッドが不正メモリ領域にアクセスした場合に、プロセス全体を削除するのは、プロセス管理が、スレッドやプロセスの動作内容を知らないからである。
【００２８】
つまり、プロセス管理は、そもそもカーネルから提供されている機能であり、不正アクセスに対して、例えば、どのスレッドを停止し、どのメモリ領域を開放すればよいのかを知らない。
【００２９】
そのため、プロセス管理は、スレッドが不正メモリ領域ヘアクセスした場合、どのスレッドを削除してよいのかがわからず、また他のプロセスに影響を与えないようにするため、該当プロセス全体を削除し終了させている。
【００３０】
そこで、上述したプロセス管理の実情を考慮し、プロセス中のスレッドが不正な記憶領域にアクセスした場合であっても、プロセスの強制終了を回避し、ユーザに提供するサービスの中断を回避することができるオペレーティングシステムを提供する。
【課題を解決するための手段】
【００３１】
かかる課題を解決するために、本発明のオペレーティングシステムは、複数の処理プログラムをコンピュータに実行させることで1個のプロセスを処理させるオペレーティングシステムにおいて、起動したプロセスを処理するための複数の処理プログラムを管理するプロセス管理手段と、プロセス毎の各処理プログラム実行で使用する記憶領域アドレスを保持し、その記憶領域アドレスに基づいて各処理プログラムを記憶領域へのアクセスを制御するアクセス制御手段と、各処理プログラム実行で不正な記憶領域へのアクセスを検出する不正アクセス検出手段と、不正アクセス検出手段から不正アクセス検出信号を受けた場合、当該不正な記憶領域へのアクセスに係る当該処理プログラムの内容が、プロセス処理に影響がないものと判断したときに、プロセス管理手段が管理する複数の処理プログラムの中から当該処理プログラムのみを削除するプログラム管理手段とを備えることを特徴とする。
【発明の効果】
【００３２】
本発明によれば、プロセス処理中に処理プログラムの実行が不正な記憶領域にアクセスした場合であっても、プロセス全体を終了することなく、その処理プログラムの実行のみを終了することができる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明のオペレーティングシステムを実施するための最良の形態について説明する。
【００３４】
以下の実施形態は、例えばＬｉｎｕｘに適用した場合について説明する。また、以下の実施形態は、プロセス中のスレッドが不正なメモリ領域にアクセスした場合に、プロセス全体を削除するのではなく、図７に示すように、プロセス中のスレッドのみを削除し、プロセスの強制終了を回避する点に特徴がある。
【００３５】
（Ａ）第１の実施形態
以下、本発明のオペレーティングシステムの第１の実施形態について図面を参照して説明する。
【００３６】
（Ａ−１）第１の実施形態の構成
図１は、Ｌｉｎｕｘ上において、カーネルの制御により、起動したプロセス１１０の状態を概念的に示す図である。なお、プロセス１１０は、ユーザ空間（ユーザプログラム）１０で実行されるものである。
【００３７】
また、図１６は、本実施形態を実施するためのハードウェア構成を示す。図１６に示すように、メモリ５０に格納されている所定プログラムを、ＣＰＵ４０が読み出し、所定プログラムをＣＰＵ４０が実行することで各種機能が実現される。なお、図１６におけるメモリ５０は機能を実現するために必要な仮想記憶部という概念をも含むものである。
【００３８】
図１において、プロセス１１０は、ユーザからの指示を受けて、カーネルの制御により、起動するものである。プロセス１１０は、ｎ（ｎは正の整数）個のスレッド１１１（１１１−１〜１１１−ｎ）、スレッド状態管理１１２を少なくとも備える。
【００３９】
スレッド１１１（１１１−１〜１１１−ｎ）は、プロセス１１０を実行するために分割された処理単位であり、スレッド１１１−１〜１１１−ｎが実行されことによりプロセスが処理される。また、スレッド１１１−１〜１１１−ｎの実行は、複数の処理を同時にすることができる。
【００４０】
また、スレッド１１１−１〜１１１−ｎは、一般的に、削除されることで、プロセス処理に影響を与えるものと、プロセス処理に影響を与えないものとがある。
【００４１】
プロセス処理に影響を与えるスレッドとして、例えば、シグナルの管理スレッドや時間管理スレッドなどが該当する。また、プロセス処理に影響を与えないスレッドとして、例えば、ＴＣＰサーバにおけるＴＣＰコネクションのみを管理するスレッドが該当する。例えばＴＣＰコネクション管理スレッドは削除されてもＴＣＰコネクションが１つ切れるだけであるため、削除されてもプロセス処理に影響を与えない。
【００４２】
本実施形態は、この削除されてもプロセス処理に影響を与えないスレッド（以下、「強制終了対象スレッド」という。）が、不正メモリ領域にアクセスした場合に、その強制終了対象スレッドのみを削除し、又強制終了対象スレッドのみが使用するメモリ領域を開放することで、プロセス全体の削除を回避するものである。これにより、この場合、サービスを継続して提供することが可能となる。
【００４３】
スレッド状態管理１１２は、生成したスレッド１１１−１〜１１１−ｎに関する情報を管理する機能である。また、スレッド状態管理１１２は、管理するスレッド１１１−１〜１１１−ｎの処理が終了すると、そのスレッド１１１−１〜１１１−ｎの管理情報を削除する機能である。これにより、プロセス１１０中で実行しているスレッド１１１−１〜１１１−ｎを管理することができる。
【００４４】
また、スレッド状態管理１１２は、後述するシグナル受付１１２ａを有する。スレッド状態管理１１２は、シグナル受付１１２ａをプロセス管理（図１には図示しない）に登録する機能を有し、又カーネルからのＳＩＧＳＥＧＶシグナルがプロセス管理にあたえられると、シグナル受付１１２ａにより、呼び出されるものである。
【００４５】
このＳＩＧＳＥＧＶシグナルは、スレッドが不正なメモリ領域にアクセスした場合に、カーネルからプロセス管理に与えられるシグナルである。スレッド状態管理１１２がシグナル受付１１２ａを有することにより、スレッドの不正アクセス時を検知することができる。
【００４６】
また、スレッド状態管理１１２は、シグナル受付１１２ａにより呼び出されると、処理しているスレッドが強制終了対象スレッドであるか否かを管理情報に基づいて判定するものである。またスレッド状態管理１１２は、強制終了対象スレッドであると判定した場合、その強制終了対象スレッドを削除し、その強制終了対象スレッドが確保しているメモリ領域を解放する機能である。
【００４７】
シグナル受付１１２ａは、プロセス管理がＳＩＧＳＥＧＶシグナルを受信したときに、スレッド状態管理１１２を呼び出す機能である。また、シグナル受付１１２ａは、スレッド状態管理１１２によってプロセス管理に登録させるものである。
【００４８】
次に、スレッド状態管理１１２が管理する情報例について図８のスレッド管理テーブルを参照して説明する。
【００４９】
図８において、スレッド状態管理１１２が管理する情報は、例えば、スレッド１１１−１〜１１１−ｎの内容を特定するための識別番号（スレッドＩＤ）、スレッド１１１−１〜１１１−ｎが使用するメモリ領域への先頭アドレス（仮想アドレス）、メモリ領域のサイズ等である。
【００５０】
これにより、スレッド状態管理１１２は、プロセス１１０中のスレッドがどのメモリ領域を使用しているかを把握することができる。
【００５１】
次に、Ｌｉｎｕｘ上における、ユーザ空間（ユーザプログラム）１０、ＯＳ（カーネル空間）２０及びメモリ３０のそれぞれの状態について図９を参照して説明する。
【００５２】
図９において、ユーザプログラム１０の状態は図１で説明した状態に対応するので省略する。
【００５３】
ＯＳ２０は、プロセス１１０に対応するカーネル資源２１０を有する。このカーネル資源２１０は、プロセス１１０を実行するために必要な情報を有するものである。
【００５４】
図９において、カーネル資源２１０は、少なくとも、プロセスやスレッドが使用するメモリ領域の仮想アドレス２１３（２１３ａ及び２１３ｂ）、シグナルハンドラ２１２を有する。
【００５５】
シグナルハンドラ２１２は、シグナルの受信処理をする機能であり、カーネルが送信するＳＩＧＳＥＧＶシグナルを、スレッド状態管理１１２のシグナル受付１１２ａに送信するシグナル受付２１１を有する。
【００５６】
仮想アドレス２１３は、プロセス１１０を処理するためのスレッド１１１−１〜１１１−ｎの記憶領域（仮想記憶部の記憶領域）のアドレス情報であり、この仮想アドレス２１３に基づいて記憶領域にアクセスし、スレッド１１１−１〜１１１−ｎが読み出されたり、処理に必要な情報が書き込まれたりする。
【００５７】
メモリ３０は、処理プログラムを格納するものであり、又処理に必要なデータを格納するものである。メモリ３０は、割り当てられたメモリ領域に、プロセス１１０やスレッド１１１−１〜１１１−ｎを格納し、また処理実行にメモリ領域を確保し必要な情報データを格納するものである。メモリ３０がプロセス１１０やスレッド１１１−１〜１１１−ｎを格納するメモリ領域は、情報としてカーネル資源２１０に保持される。
【００５８】
（Ａ−２）第１の実施形態の動作
次に、本実施形態のオペレーティングシステムの動作について図面を参照して説明する。
【００５９】
以下では、プロセスの全体動作、スレッドの正常動作時のスレッド状態管理１１２の動作及びスレッド状態管理１１２の動作について順に説明する。
【００６０】
（Ａ−２−３）プロセスの全体動作
図１０は、プロセスの全体動作を説明するためのフローチャートである。なお、図１０は、強制終了対象スレッドが不正なメモリ領域にアクセスした場合の動作を明確にしたものである。
【００６１】
図１０において、システムのＯＳ（カーネル）が起動した後（Ｓ１）、ユーザにより、プロセス１１０が起動された（プログラムが実行された）とする（Ｓ２）。
【００６２】
このとき、カーネルは、ユーザが起動したプロセスを管理するプログラム（プロセス管理）を同時に起動する（Ｓ３）。このプロセス管理の制御によりプロセス１１０が起動する（Ｓ４）。
【００６３】
プロセス１１０が起動されると、まず、スレッド状態管理１１２が生成される（Ｓ２１）。そして、スレッド状態管理１１２が生成されると、スレッド状態管理１１２は、シグナル受付１１２ａを生成し、生成したシグナル受付１１２ａをプロセス管理に登録する（Ｓ２２）。
【００６４】
ここで、シグナル受付１１２ａの登録は、例えば、プロセス管理が、カーネルからシグナルを受信した場合に、その受信したシグナルをシグナル受付１１２ａに送信するように定義付ける所定の関数（例えば、Ｌｉｎｕｘでは、ｓｉｇａｃｔｉｏｎ関数）を用いて登録することが可能である。
【００６５】
スレッド状態管理１１２ａによりシグナル受付１１２ａの登録がなされると、プロセス１１０を実行するためのスレッド１１１−１〜１１１−ｎの生成要求が、プロセス１１０からカーネル又はプロセス管理に与えられる（Ｓ２３）。なお、図１０では、スレッド生成要求がプロセス管理に与えられる場合について示す。
【００６６】
スレッド生成要求がプロセス管理に与えられると、プロセス管理により、スレッド生成処理がなされ（Ｓ２４）、スレッド１１１−１〜１１１−ｎが生成する（Ｓ２５）。
【００６７】
ここで、スレッド１１１−１〜１１１−ｎの生成はスレッド生成するたびに要求され、スレッド１１１−１〜１１１−ｎが生成すると、その生成したスレッド１１１−１〜１１１−ｎのスレッドＩＤがスレッド管理テーブル（図８参照）に登録される。
【００６８】
生成したスレッド１１１−１〜１１１−ｎのスレッドＩＤがスレッド管理テーブルに登録されると、その生成したスレッド１１１−１〜１１１−ｎの処理実行が開始される（Ｓ２６）。
【００６９】
スレッド１１１−１〜１１１−ｎの処理が実行されると、処理実行に使用するメモリ領域３０が確保される。そして、その確保されたメモリ領域３０のアドレス及びメモリサイズが、スレッド管理テーブル（図８参照）に登録される（Ｓ２７）。
【００７０】
このようにして、スレッド１１１−１〜１１１−ｎは処理実行されていき、正常に処理が終了するスレッド１１１−１〜１１１−ｎは、図２の従来のスレッド終了処理（図２のＳ９〜Ｓ１１）と同様にして終了する。
【００７１】
一方、スレッド１１１−１〜１１１−ｎが不正なメモリ領域にアクセスし、異常が発生すると（Ｓ２８）、Ｓ１ＧＳＥＧＶシグナルが、カーネルからプロセス管理に送信される（Ｓ２９）。
【００７２】
カーネルからのＳＩＧＳＥＧＶシグナルがプロセス管理に与えられると、プロセス管理により、登録されているシグナル受付１１２ａが呼び出され、シグナル受付１１２ａにより、スレッド状態管理が呼び出される（Ｓ３０）。
【００７３】
シグナル受付１１２ａによりスレッド状態管理１１２が呼び出されると、スレッド状態管理１１２により、その処理をしているスレッド１１１−１〜１１１−ｎが強制終了対象スレッドであるか否かスレッド管理テーブル（図８参照）により判定される。
【００７４】
そして、スレッド状態管理１１２により、当該処理しているスレッド１１１−１〜１１１−ｎが強制終了対象スレッドであると判定されると、そのスレッド１１１−１〜１１１−ｎが削除され、当該スレッド１１１−１〜１１１−ｎのメモリ領域が解放される。これにより、当該強制終了対象スレッドのみ削除され、この強制終了対象スレッドのみ終了させることができる。
【００７５】
なお、スレッド状態管理１１２により、不正メモリ領域にアクセスしたスレッド１１１−１〜１１１−ｎが強制終了対象スレッドでないと判定された場合、プロセス１１０全体が削除されプロセス１１０は強制終了される。
【００７６】
（Ａ−２−２）スレッドの正常動作時のスレッド状態管理１１２の動作
次に、スレッドの正常動作時のスレッド状態管理１１２の動作について図１１を参照して説明する。
【００７７】
図１１は、図１０のＳ２５において、生成したスレッド１１１−１〜１１１−ｎが正常に起動し、正常処理が実行され、正常に終了する場合の動作を示すフローチャートである。
【００７８】
図１０のＳ２５において、生成したスレッド１１１−１〜１１１−ｎが起動されると（Ｓ２６）、その起動したスレッド１１１−１〜１１１−ｎが使用するメモリ領域３０が確保される（Ｓ３３）。
【００７９】
メモリ領域３０が確保されると、その確保したメモリ領域３０の先頭アドレス及びメモリサイズとは、スレッドＩＤに対応付けて、スレッド管理テーブルに登録される（Ｓ３４）。
【００８０】
このメモリ領域３０の登録は、スレッド１１１−１〜１１１−ｎが使用するメモリ領域３０が確保されるたびに登録される。
【００８１】
これにより、プロセス１１０中の各スレッド１１１−１〜１１１−ｎについて、スレッドＩＤと対応付けたメモリ領域３０のアドレスとメモリサイズとを管理することができる。
【００８２】
その後、スレッド１１１−１〜１１１−ｎが、所定の処理が実行され（Ｓ３５）、正常に処理が終了すると、スレッド状態管理１１２により、スレッド１１１−１〜１１１−ｎが使用していたメモリ領域３０が解放される（Ｓ３６）。
【００８３】
そして、スレッド状態管理１１２が管理するスレッド管理テーブルに基づいて、処理が終了したスレッド１１１−１〜１１１−ｎについて、メモリ領域３０の先頭アドレス及びメモリサイズが削除され（Ｓ３７）、最後に当該スレッド１１１−１〜１１１−ｎを終了する（Ｓ３８）。
【００８４】
なお、スレッド１１１−１〜１１１−ｎの処理中、動的にメモリ領域を取得、又は解放する場合は、Ｓ３３〜Ｓ３７の動作を繰り返す。
【００８５】
（Ａ−２−３）スレッド状態管理１１２の動作
次に、スレッド状態管理１１２の動作について、図１２を参照して説明する。図１２は、第１の実施形態におけるスレッド状態管理１１２の動作を示すフローチャートである。
【００８６】
プロセス１１０によりスレッド状態管理１１２が生成されると（Ｓ４０）、スレッド状態管理１１２により、シグナル受付１１２ａが生成され、プロセス管理に登録される（Ｓ４１）。
【００８７】
シグナル受付１１２ａの登録がなされると、スレッド状態管理１１２により、スレッド処理が終了したか否かが判定される（Ｓ４２）。スレッド処理が終了したと判定した場合Ｓ５１に移り、スレッド処理が終了していないと判定した場合Ｓ４３に移る。
【００８８】
なお、このとき、シグナル受付１１２ａは、ＳＩＧＳＥＧＶシグナルがカーネルからプロセス管理に与えられ、プロセス管理からの呼び出しを受け付けている。
【００８９】
スレッド状態管理１１２によりスレッド処理が終了していないと判定された場合、スレッド状態管理１１２により、プロセス１１０内においてスレッド１１１−１〜１１１−ｎが生成されたか否かが判定される（Ｓ４３）。
【００９０】
プロセス１１０内においてスレッド１１１−１〜１１１−ｎが生成されたことを判定された場合、その生成したスレッド１１１−１〜１１１−ｎの管理情報がスレッド管理テーブルに登録（エントリ）される（Ｓ４４）。このエントリがされると、Ｓ４２に戻り繰り返し動作がなされる。
【００９１】
一方、プロセス１１０内においてスレッド１１１−１〜１１１−ｎが生成されたことが判定されない場合、実行中のスレッド１１１−１〜１１１−ｎの処理が終了したか否かが判定される（Ｓ４５）。
【００９２】
実行中のスレッド１１１−１〜１１１−ｎの処理が終了したと判定された場合、そのスレッド処理が終了したスレッド１１１−１〜１１１−ｎについて、登録されている管理情報が、スレッド管理テーブルから削除される（Ｓ４６）。
【００９３】
一方、実行中のスレッド１１１−１〜１１１−ｎの処理が終了していないと判定された場合、シグナル受付１１２ａが、プロセス管理から呼び出されているか否かを判定する（Ｓ４７）。
【００９４】
つまり、ＳＩＧＳＥＧＶシグナルが、カーネルからプロセス管理に与えられ、プロセス管理によりシグナル受付１１２ａが呼び出された場合、スレッド１１１−１〜１１１−ｎが不正なメモリ領域３０にアクセスしたものと判断し、その不正アクセスが発生したときのスレッド１１１−１〜１１１−ｎが強制終了対象スレッドであるか否かが、スレッド管理テーブルに基づいて判断される（Ｓ４８）。なお、シグナル受付１１２ａがプロセス管理から呼び出されていない場合、Ｓ４２に戻り動作が繰り返される。
【００９５】
Ｓ４８において、強制終了対象スレッドであると判断されると、その強制終了対象スレッドが削除される。また、スレッド管理テーブルを参照して、その削除された強制終了対象スレッドのスレッドＩＤに基づいて強制終了対象スレッドが確保していたメモリ領域３０が検索され、そのメモリ領域が解放される（Ｓ４９）。
【００９６】
なお、強制終了対象スレッドの削除及び使用していたメモリ領域３０の解放がなされると、Ｓ４２に戻り動作が繰り返される。
【００９７】
これにより、不正メモリ領域にアクセスしたスレッド１１１−１〜１１１−ｎが強制終了対象スレッドである場合に、プロセス全体を削除することなく、強制終了対象スレッドのみを削除することができる。
【００９８】
一方、Ｓ４８において、強制終了対象スレッドでないと判断されると、プロセス全体が削除されて、プロセスは強制終了（異常終了）する（Ｓ５０）。
【００９９】
また、Ｓ４２において、スレッド処理が終了したと判定すると、シグナル受付１１２ａによるプロセス管理の呼び出し受付を終了し（Ｓ５１）、スレッド状態の管理が終了する（Ｓ５２）。
【０１００】
以上により、強制終了対象スレッドが不正メモリヘアクセスした場合、図１２のＳ４８〜Ｓ５０の処理により、プロセスを削除せずに強制終了対象スレッドのみを削除し、他のプロセスが使用するメモリを保護する機能を実現する。
【０１０１】
（Ａ−３）第１の実施形態の効果
以上、本実施形態によれば、オペレーティングシステム上のユーザ空間において、少なくとも、プロセスを実行するスレッドの内容及びメモリ領域情報の管理機能、シグナル受付機能、シグナル受信時のスレッド内容判定機能を有することにより、不正なメモリ領域にアクセスしたスレッドが強制終了対象スレッドである場合に、その強制終了対象スレッドのみを削除し、かつ、その強制終了対象スレッドのメモリ領域を解放することができる。
【０１０２】
その結果、スレッドが不正なメモリ領域にアクセスした場合に、プロセス全体を削除することによるプロセスの終了を回避することができる。また、プロセスの終了を回避できるので、ユーザに提供するサービスを継続して提供することができる。
【０１０３】
（Ｂ）第２の実施形態
次に、本発明のオペレーティングシステムの第２の実施形態について図面を参照して説明する。
【０１０４】
（Ｂ−１）第２の実施形態の構成及び動作
第２の実施形態は、図１及び図９で説明した第１の実施形態の構成に対応する。従って、以下では、図１及び図９中の対応構成及び符号を用いて、第２の実施形態について説明する。
【０１０５】
第２の実施形態が第１の実施形態と異なる点は、強制終了対象スレッドが不正なメモリへアクセスした時のスレッド状態管理１１２の動作であり、第１の実施形態では、強制終了対象スレッドの削除及びそのメモリ領域を解放するのに対し、第２の実施形態では、強制終了対象スレッドを削除するが、メモリ領域を解放しない点でことなる。そして、第２の実施形態では、スレッドを再生して、その再生スレッドに解放しなかったメモリ領域を割り当てる点が、第１の実施形態と異なる。
【０１０６】
以下では、第２の実施形態のスレッド状態管理１１２の動作について図面を参照して説明する。
【０１０７】
図１５は、第２の実施形態のスレッド状態管理１１２の動作を示すフローチャートである。なお、図１５において、図１２の説明と対応するフローについては、対応符号を付して示す。
【０１０８】
図１５において、スレッド状態管理１１２の起動からシグナルの受信の有無の判定までの動作（Ｓ４０〜Ｓ４７）は、図１２の第１の実施形態の動作に対応するので詳細な動作は省略する。
【０１０９】
Ｓ４７において、カーネルからプロセス管理にＳＩＧＳＥＧＶシグナル与えられ、プロセス管理によりシグナル受付１１２ａが呼び出されると、フレッド状態管理１１２により、不正アクセスを起こしたスレッド１１１−１〜１１１−ｎが強制終了対象スレッドであるか否かスレッド管理テーブル（図８参照）に基づいて判断される（Ｓ４８）。
【０１１０】
不正なメモリにアクセスしたスレッド１１１−１〜１１１−ｎが強制終了対象スレッドであると判断した場合、そのスレッド１１１−１〜１１１−ｎのみを削除する（Ｓ６１）。
【０１１１】
このときのスレッド状態管理１１２の動作の様子について図１３を参照して説明する。図１３に示すように、不正なメモリにアクセスしたスレッド１１１が強制終了対象スレッドである場合、そのスレッド１１１のみを削除する。第１の実施形態では、スレッド管理テーブルを検索して、強制終了対象スレッドが使用するメモリ領域を解放することとするが、本実施形態では、スレッド状態管理１１２が、強制終了対象スレッドが使用するメモリ領域を解放しない。
【０１１２】
これにより、削除された強制終了対象スレッドが削除されるまでに使用していた情報を、喪失せずに保つことができる。
【０１１３】
Ｓ６１において、スレッド状態管理１１２により強制終了対象スレッドが削除されるとスレッドが再生される。そして、スレッド状態管理１１２により、削除された強制終了対象スレッドについてのスレッド管理テーブルの管理内容を、再生されたスレッドに割り当てられ管理される（Ｓ６２）。
【０１１４】
このときのスレッド状態管理１１２の動作を様子について図１４を参照して説明する。図１４に示すように、スレッド１１１が再生されると、スレッド状態管理１１２から、削除したスレッドが使用していたメモリ領域が通知される。スレッド状態管理１１２からメモリ領域の通知を受けた再生スレッドは、そのメモリ領域にアクセスし、メモリ領域に格納されている内容をチェックして、そのメモリ領域の内容を用いて処理を継続する。
【０１１５】
これにより、再生したスレッドが、強制終了対象スレッドが削除されるまでに使用していたメモリ領域をそのまま用いて処理させることができる。
【０１１６】
なお、スレッドの再生処理は、図１０の第１の実施形態で説明したスレッド生成処理（Ｓ２３〜Ｓ２５）と同様にして生成する。
【０１１７】
また、Ｓ４８において、不正なメモリにアクセスしたスレッドが強制終了対象スレッドでない場合の動作（Ｓ５０）、及び、スレッド処理が終了した場合の動作（Ｓ４２、Ｓ５１及びＳ５２）は、第１の実施形態と同様なので詳細な動作説明は省略する。
【０１１８】
（Ｂ−３）第２の実施形態の効果
以上、第２の実施形態によれば、第１の実施形態と同様の効果を奏する。
【０１１９】
また、第２の実施形態によれば、スレッド状態管理の処理を、図１５のステップＳ６１、Ｓ６２のようにすることで、強制終了対象スレッド削除時も、情報を失うことなく、プロセスの処理継統を可能にすることができる。
【０１２０】
（Ｃ）他の利用形態
（Ｃ−１）第１及び第２の実施形態では、オペレーティングシステムとしてＬｉｎｕｘを適用した場合について説明したが、複数のスレッドを動作させる複数のプロセスを並列処理可能なマルチプロセス・マルチスレッドを採用するオペレーティングシステムであれば、広く適用することが可能である。マルチプロセス・マルチスレッド採用のオペレーティングシステムの例として、例えばＳＵＮ  Ｍｉｃｒｏｓｙｓｔｅｍｓ社が提供するＳｏｌａｒｉｓ（登録商標）、ヒューレットパッカード社が提供するＨＰ−ＵＸ（登録商標）などの汎用ＵＮＩＸ上のプロセスにも適用可能である。
【図面の簡単な説明】
【０１２１】
【図１】第１の実施形態の起動したプロセスの状態を概念的に示す図である。
【図２】従来のプロセス起動から終了までの動作を示すフローチャートである。
【図３】従来のプロセスの実行環境を示す図である。
【図４】従来の不正なメモリアクセスを説明する概念図である。
【図５】従来のプロセス全体の削除動作を示す概念図である。
【図６】従来のプロセス終了処理を説明するためのシーケンス図である。
【図７】実施形態の特徴を説明する説明図である。
【図８】第１の実施形態のスレッド管理テーブル例を示す説明図である。
【図９】第１の実施形態のプロセスの状態を説明する概念図である。
【図１０】第１の実施形態のプロセスの全体動作を示すフローチャートである。
【図１１】第１の実施形態のスレッドの正常動作時のスレッド状態管理の動作を示すフローチャートである。
【図１２】第１の実施形態のスレッド状態管理の動作を示すフローチャートである。
【図１３】第２の実施形態のプロセスの状態を説明する概念図である。
【図１４】第２の実施形態のプロセスの状態を説明する概念図である。
【図１５】第２の実施形態のスレッド状態管理の動作を示すフローチャートである。
【図１６】第１の実施形態のハードウェア構成図である。
【符号の説明】
【０１２２】
１０…ユーザ空間、２０…ＯＳ、１１０…プロセス、１１１−１〜１１１−ｎ…スレッド、１１２…スレッド状態管理、１１２ａ…シグナル受付、４０…ＣＰＵ、３０、５０…メモリ。
【図１】
2005284630.tif 000003
【図２】
2005284630.tif 000004
【図３】
2005284630.tif 000005
【図４】
2005284630.tif 000006
【図５】
2005284630.tif 000007
【図６】
2005284630.tif 000008
【図７】
2005284630.tif 000009
【図８】
2005284630.tif 000010
【図９】
2005284630.tif 000011
【図１０】
2005284630.tif 000012
【図１１】
2005284630.tif 000013
【図１２】
2005284630.tif 000014
【図１３】
2005284630.tif 000015
【図１４】
2005284630.tif 000016
【図１５】
2005284630.tif 000017
【図１６】
2005284630.tif 000018