説明

プログラムコード実行サーバ

【課題】利用者が作成したプログラムコードを加工せずに、実行される機能の範囲や計算機資源の使用量を監視下に置いて実行するサーバ機能を提供する。
【解決手段】利用者の処理要求の正当性を判別する機能を有する起動制御手段と、プログラムコードの走査や静的リンクを用いて、実行される機能範囲を制限することでシステムを保護する機能を有する実行準備手段202と、計算機資源利用量や入出力を監視する機能を有する実行監視手段209と、で構成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータのプログラム言語のソースコードを入力して実行するサーバ機能に関するものである。
【背景技術】
【0002】
プログラムコードを入力して実行するサーバ機能の用途のひとつに、インターネットを利用したWebベースのプログラム言語の実習サイトがある。これまで、Webブラウザ上で実習できるとするもの(例えば、特許文献1参照)は、プログラムの穴埋めだけか、提供者が用意したプログラムコードと一致したときだけ予め用意された実行結果を応答するものであり、利用者の書いたプログラムコードを加工せずに実行するシステムではない。この種の機能提供が厳しい条件下に置かれるのは、利用者のプログラムコードを加工せずに実行するときには機能の制約が難しく、サーバの動作環境の保全が困難となるためである。
【特許文献1】特許公開2002−366667
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかしながら、こうした従来システムは、コンピュータを動作させるための言語の学習であるにもかかわらず、学習の過程で利用者の書いたプログラムを動作させることができないという致命的な問題を有する。ソースコードを入力して実行するサーバ機能の代わりにCDを配布する方法では、学習の連続性が損なわれるだけでなく、利用者に不慣れな設置作業を要求することや、利用者のコンピュータの動作環境による違いが問題となる。さらに、ひとつの結果を得るプログラムは変数名のつけ方の違いなどから無数に存在するため、穴埋めやただひとつのプログラムを正解とする扱いには無理があり、利用者が自由にプログラムを書けるシステムが必要である。
【0004】
そこで、第1の発明は、穴埋め式や用意された解答と完全に一致したときだけの実行ではなく、実際に利用者の書いたプログラムコードを加工せずに実行するシステムを提供することを目的としている。
【課題を解決するための手段】
【0005】
上記目的を達成するため、請求項1に記載の発明は、利用者が与えたプログラムコードを加工せずに実行できるサーバ機能であって、受信した要求の正当性を判断し、多数の要求が交錯する中で実行結果をそれぞれの要求元に応答する機能を有する起動制御手段と、受信したプログラムコードに含まれる危険要因を走査検出する機能を有する実行準備手段と、システムに害を及ぼさないよう監視下で実行する実行監視手段と、から構成されるプログラムコード実行サーバであり、誤りや悪意の利用者からシステムを守るための手段とともに所期の機能を実現することを特徴としている。
【0006】
請求項2に記載の発明は、前記起動制御手段が、複数の利用者から発せられる複数の処理要求の識別を、暗号化した判別キーによって管理する機能を有することで誤操作や悪意の改竄を検出できることと、正当な要求ではその種類に応じて実行準備手段や実行監視手段にそれらを伝達し、処理の結果を処理要求発行元に伝達することと、一定時間処理要求が届かない利用者を見つけて占有している計算機資源を解放することと、を特徴としている。
【0007】
請求項3に記載の発明は、前記実行準備手段が、利用者の作成したプログラムコードの実行によってシステムが危害を受けないことを確認し、コンパイラ言語にあってはコンパイル処理を実行する機能であって、プログラムコードの中に制限すべき関数呼出しが無いかを調べるプログラムコード走査機能と、実行時ライブラリを参照することになる未解決外部参照を調べて、同名のダミー関数を先に静的にリンクすることでシステムの実行時ライブラリを変更することなく機能を制約できる機能制約ライブラリと、から構成されることを特徴としている。
【0008】
請求項4に記載の発明は、前記実行監視手段が、利用者の作成したプログラムコードの実行により使用されるCPU時間、メモリ領域、ファイルなどの計算機資源の使用量に上限を設けて監視することと、実行により出力された内容を随時利用者に提示することと、実行中に利用者の入力を促すプログラムの場合は実行を停止して利用者の入力を受け付けることと、実行時にエラーが生じたときはその内容を提示できることと、を特徴としている。
【発明の効果】
【0009】
以上説明したように、請求項1に記載の発明によれば、利用者が作成したプログラムコードを加工せずに実行するサーバ機能であって、入力した要求の正当性を判断し、多数の要求が交錯する中で実行結果をそれぞれの要求元に応答する機能を有する起動制御手段と、受信したプログラムコードに含まれる危険要因を走査検出する機能を有する実行準備手段と、システムに害を及ぼさないよう監視下で実行する実行監視手段と、から構成されるプログラムコード実行サーバであり、誤りや悪意の利用者からシステムを守るための手段とともに所期の機能を実現することができる。
【0010】
また、請求項2に記載の発明によれば、前記起動制御手段が、複数の利用者から発せられる複数の処理要求の識別を、暗号化した判別キーによって管理する機能を有することで誤操作や悪意の改竄を検出できることと、正当な要求ではその種類に応じて実行準備手段や実行監視手段にそれらを伝達し、処理の結果を処理要求発行元に伝達することと、一定時間処理要求が届かない利用者を見つけて占有している計算機資源を解放することと、が可能となる。
【0011】
また、請求項3に記載の発明によれば、前記実行準備手段が、利用者の作成したプログラムコードの実行によってシステムが危害を受けないことを確認し、コンパイラ言語にあってはコンパイル処理を実行する機能であって、プログラムコードの中に制限すべき関数呼出しが無いかを調べるプログラムコード走査機能と、実行時ライブラリを参照することになる未解決外部参照を調べて、同名のダミー関数を先に静的にリンクすることでシステムの実行時ライブラリを変更することなく機能を制約できる機能制約ライブラリと、から構成されることにより、サーバを含んでシステムの動作環境を保全した上で利用者のプログラムコードを実行することができる。
【0012】
また、請求項4に記載の発明によれば、前記実行監視手段が、利用者の作成したプログラムコードの実行により使用されるCPU時間、メモリ領域、ファイルなどの計算機資源の使用量に上限を設けて監視することと、実行により出力された内容を随時利用者に提示することと、実行中に利用者の入力を促すプログラムの場合は実行を停止して利用者の入力を受け付けることと、実行時にエラーが生じたときはその内容を提示できることとにより、利用者が自身のコンピュータにプログラム言語処理系を用意したときと同様のことができる。
【発明を実施するための最良の形態】
【0013】
以下、本発明の、最良の実施の形態について図を参照して説明する。図1は本発明の、最良の実施の形態に係るプログラミング言語実習システムの構成図である。図2は図1に示す実行準備手段と実行監視手段の構成図である。
【0014】
図1において、1はコンピュータ装置により実習用サーバを構成するプログラミング言語実習システムであり、次のように構成される。2はネットワーク上に実習サイトを設置するWebサーバである。3はプログラミング言語実習システムにおいて利用者の作成したプログラムコードを実行するサーバ機能の窓口となる起動制御手段である。4はプログラムコードを走査して危険行為を禁止する実行準備手段であり、5は計算機資源の使用量や利用者プログラムの入出力を監視する実行監視手段である。
【0015】
6から8はプログラミング言語実習システムが必要とする機能のうちプログラムコードを実行するサーバ機能以外の機能であり、6は利用者認証手段、7は教材管理手段、8はコミュニティ役務である。9はインターネット等の通信ネットワーク、10はこのシステムの利用者である。
【0016】
つぎに動作について説明する。先ず、利用者10が通信ネットワーク9を介してプログラミング言語実習システム1に接続すると、利用者認証手段6を用いて利用者認証の手続きを行い、正当な利用者であるときは利用者情報データベースから取り出した学習中の課題に応じた最適のページに、起動制御手段3から取得した正当性判別のためのキーを埋め込んで送信する。このとき、送信ページの内容となる教材は、教材管理手段7が教材データベースから取り出したものである。利用者認証後のすべての要求は、起動制御手段が正当な要求であることを確認したうえで処理を開始する。なお、コミュニティ役務は利用者間での情報交換を目的としたものであり、この実施形態に不可欠のものではない。
【0017】
利用者10から実行準備要求を受信したときは、実行準備手段4がそれを担当する。実行準備手段は、利用者の作成したプログラムコードの実行によってシステムが危害を受けないことを確認し、コンパイラ言語にあってはコンパイル処理を実行する。またシステム関数の呼び出しでは、システムの持つ実行時ライブラリを参照させないために予め静的なリンクを実行したり、インタプリタ言語にあってはインタプリタが実行時に参照するライブラリを切り替えることで、システムに危害を及ぼす可能性のある処理を制限する。このことによって、システムの動作環境を保全した上で利用者の作成したプログラムコードの実行が可能となる。
【0018】
実行監視手段は、利用者の作成したプログラムコードの実行中に、役務を提供するコンピュータ装置のCPU時間、メモリ、ディスクスペースなどの計算機資源使用量を監視したり、要求発行元との間の入出力データ交換を適切に処理する機能を有する。
【0019】
実行準備手段の処理が正しく行われた場合、引き続き自動的に実行監視手段が起動制御手段から呼び出される形態とするか、または、実行準備手段と実行監視手段の処理要求を別個に扱う形態とするかは、プログラミング言語がコンパイラ言語かインタプリタ言語かという言語の性質や実習サイトの方針によって選択できる。
【0020】
図2はコンパイラ言語の場合において、実行準備手段と実行監視手段の連携を示す実施例である。利用者はWebブラウザ画面に表示される解説記事やサンプルコードを参考にしてWebブラウザ画面上にソースコード201を作成する。実行準備手段202は、それをプログラミング言語コンパイラ203に与えることでオブジェクトモジュール204を生成させる。続いて実行準備手段から起動されたリンカ205がオブジェクトモジュール204を制約機能ライブラリ206とリンクして実行オブジェクトコード207を生成する。機能制約ライブラリ206は、悪用すればプログラミング言語実習システムに害を及ぼす恐れのある機能を除くことで機能を制約されたライブラリである。
【0021】
コンパイラ203の出力したメッセージを利用者のWebブラウザ上に設けたコンパイル結果の表示域208に応答する。利用者の作成したソースコードに誤りがあるときは、誤りの内容が表示される。正しいときはエラーの無いことが報告され、実行可能状態になる。利用者が実行指示を出すと、その要求は実行監視手段209に伝達される。実行監視手段はその監視下で当該利用者の実行オブジェクトコード207を起動する。実行監視手段はCPU時間やメモリなどの計算機資源の使用量をとともに、利用者のプログラムの挙動を監視する。利用者プログラムがデータ入力を要求したときは、実行監視手段がそれを検出して利用者のWebブラウザのデータ入力要求域210にデータ入力を要求する。利用者の入力したデータは実行監視手段が実行中の利用者プログラムに与える。実行が終了すると、それまでに利用者プログラムが出力した内容と終了コードを実行監視手段がWebブラウザの実行結果表示域211に表示する。なお、コンパイル結果の表示域208、データ入力要求域210、実行結果表示域211は必要なものだけを起動制御手段(図1の3)が判断して利用者のWebブラウザに表示する。
【0022】
このような本実施の形態によれば、Webブラウザが使用できさえすれば、利用者は自身のコンピュータの種類に関わらず、さらに何ら言語処理系を設置することなく、実習ができる。また、説明と実習が途切れることなく同じ画面に表示されるので、思考を妨げずに学習を進めることができる。さらに利用者の作成したプログラムは事前に加工することなく言語処理系に与えられるので、診断メッセージも各言語処理系のものをそのまま表示できる。一方で、自由なコーディングを受け入れることによって、悪意を持つ利用者から攻撃を受ける可能性が高くなるが、このような本実施の形態によってシステムの保護が可能となる。
【0023】
ここまでは、本発明はWebサーバから起動されるものとして説明したが、通信ネットワークを介せず利用者のコンピュータ装置内で動作する場合も含め、プロセス間通信によって処理要求をやり取りする形態全般に応用できる。
【産業上の利用可能性】
【0024】
本発明は、Webブラウザを用いたコンピュータのプログラム言語のコーディング実習など、個々のコンピュータ装置にプログラミング言語処理系を設置することなくプログラムコードを実行する仕組みを提供することに関するものである。
【図面の簡単な説明】
【0025】
【図1】本発明の、第1の実施の形態に係るプログラミング言語実習システムの構成図である。
【図2】図1に示す実行準備手段と実行監視手段の構成図である。
【符号の説明】
【0026】
1 プログラミング言語実習システム
2 Webサーバ
3 起動制御手段
4 実行準備手段
5 実行監視手段
6 利用者認証手段
7 教材管理手段
8 コミュニティ役務
9 通信ネットワーク
10 利用者
201 ソースコード
202 実行準備手段
203 各種のプログラミング言語コンパイラ
204 コンパイラが出力したオブジェクト
205 リンカ
206 機能を制約したライブラリ
207 実行オブジェクトコード
208 コンパイル結果の表示域
209 実行監視手段
210 データ入力要求域
211 実行結果

【特許請求の範囲】
【請求項1】
利用者が作成したプログラムコードを実行するサーバであって、処理要求を受け付けて正当性確認後に伝達する起動制御手段と、プログラムコードを走査する実行準備手段と、監視下でプログラムを実行する実行監視手段と、から構成されるプログラムコード実行サーバ。
【請求項2】
前記起動制御手段は、複数の利用者から発せられる複数の処理要求の識別を、暗号化した判別キーによって管理する機能を有することで誤操作や悪意の改竄を検出できることと、正当な要求ではその種類に応じて実行準備手段や実行監視手段にそれらを伝達し、処理の結果を処理要求発行元に伝達することと、一定時間処理要求が届かない利用者を見つけて占有している計算機資源を解放することと、を特徴とする請求項1に記載のプログラムコード実行サーバ。
【請求項3】
前記実行準備手段は、利用者の作成したプログラムコードの実行によってシステムが危害を受けないことを確認し、コンパイラ言語にあってはコンパイル処理を実行する機能であって、プログラムコードの中に制限すべき関数呼出しが無いかを調べるプログラムコード走査機能と、実行時ライブラリを参照することになる未解決外部参照を調べて、同名のダミー関数を先に静的にリンクすることでシステムの実行時ライブラリを変更することなく機能を制約できる機能制約ライブラリと、から構成されることを特徴とする請求項1に記載のプログラムコード実行サーバ。
【請求項4】
前記実行監視手段は、利用者の作成したプログラムコードの実行により使用されるCPU時間、メモリ領域、ファイルなどの計算機資源の使用量に上限を設けて監視することと、実行により出力された内容を随時利用者に提示することと、実行中に利用者の入力を促すプログラムの場合は実行を停止して利用者の入力を受け付けることと、実行時にエラーが生じたときはその内容を提示できることと、を特徴とする請求項1に記載のプログラムコード実行サーバ。

【図1】
image rotate

【図2】
image rotate


【公開番号】特開2006−139465(P2006−139465A)
【公開日】平成18年6月1日(2006.6.1)
【国際特許分類】
【出願番号】特願2004−327616(P2004−327616)
【出願日】平成16年11月11日(2004.11.11)
【出願人】(300049534)システムズ・クリッパー株式会社 (1)
【Fターム(参考)】