甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション13.1 - タスクの基本

Adaチュートリアル セクション13.1 - タスクの基本

E-mail Print PDF

セクション 13.1 - タスクの基本

Ada言語は、Adaタスクという並列処理に対する組み込みのサポートを含んでいます。 Adaタスクは並列して実行され、いくつかの異なった機構を利用してお互いにインタラクションすることが出来ます。本質的に。それぞれのAdaタスクは分割された計算機上で動作するように実行されます。タスクは、「スレッド」とか「ライト・ウェイト・プロセス」と呼ぶ人もいます。タスクのような振る舞いに対する、より一般的な用語は「プロセス」や「エージェント」あるいは「アクティブ・オブジェクト」があります。

 

 

なぜ、プログラマーはタスクを使用しようと思うのでしょうか?そこで、ここでは1つ例を挙げましょう。プログラマーがWebブラウザーを開発していると想定してみましょう。このようなブラウザーは。いくつかの(遅い)通信デバイスを通じて、情報をダウンロードしなければなりません。そして、その情報を表示します。さて、プログラマーが全ての情報が有効になるまで待って、それを表示するとしたら、それは利用者にかなり長い時間を待たせることになってしまいます。もっと良い解決法は、2つのタスクを持つことです。1つのタスクが情報をダウンロードし、もう1つのタスクが情報を表示するのです。最初のタスクは、もっと情報を集めることにより、二番目のタスクにダウンロードされた情報の部分を渡します。二番目のタスクは、最初のタスクがデータを集めるのが終わっていなくても、利用者に情報を表示するために働きます。2つのタスクは「同期的に」動作するのです。

タスクは、スタートアップ(アクティベート)することが出来、停止(ターミネーテッド)することが出来ます。さまざまなタスクが一度アクティベートされると、お互いに通信することが出来ます。主な方法としては以下のようになります。

  • タスクは、他のタスクが官僚するのを待つことが出来ます。
  • タスクは、お互いにメッセージを送信することが出来ます。これは。ランデブーと呼ばれています。
  • タスクは、「プロテクトされたオブジェクト」を使うことが出来ます。これは、排他的に読み書きのアクセスがデータに行えるものです。プロテクトされたオブジェクトは、Ada 95で新たに導入されました。
  • タスクは、コミュニケーションのためにグローバル変数を設定することが出来ます。この最後の手段は、効果的でもありますが、特に、プログラマーが並列処理の問題を十分に理解していない場合には、危険でもあります。Adaはこの最後のアプローチを、いくらかのリアルタイム系システム開発者が実際にこの機能を必要としているために許しています。しかし、アプローチは十分な注意を払って利用されるべきです。

私たちは、これらの異なったコミュニケーション手段を、次のいくつかのセクションで議論していきます。

いくつかの計算機システムは。実際に複数の計算機をシステムに組み込んでいます。もしAdaコンパイラーが、またオペレーティング・システムが対応していれば、複数の異なったタスクが異なった計算机上で動作するかもしれません。このことで、劇的にプログラムの実行速度が向上することがあります。

タスクについてはいくつかの重要な注意が必要です。

  • Adaは存在しないものを作成することはできません。 シングルCPUの計算機上では、Adaは単一計算機上で複数の計算機をシミュレートしなければなりません。そして、そのためにはいくらかのオーバーヘッドが存在します。このオーバーヘッドは、「スケジューリング・オーバーヘッド」と呼ばれています。そしてスケジューリング・オーバーヘッドの重要な部分は。「コンテキスト・スイッチ・タイム」と呼ばれているものです。ほとんどのコンパイラーベンダーは。これらの値についての情報を提供しています。
  • タスクは、アンダーユーズド、あるいは、オーバーユーズドでありえます。いくらかの人々は、何百もの不必要なタスクを作成し、遅延を起こし、ひどいプログラムを作成します。他のなんらかのツールのように、タスクを適切に利用してください。第一のルールとして、シングルCPUの上で10から20のタスク以上の利用をしている場合には、プログラマーが何をしているかを確認してください。その中のいくつか以上が同時にアクティブである場合は、特に注意すべきです。また、ささいな作業をしている多くのローレベル(ハードウェアレベル)のタスクがある一方で、複数のタスクが単純にささいではない操作をすべきであり、そのとき、他のタスクに情報を送信すべきです。これらのルールに奴隷のように従う必要はありません。プログラマーがタスクをより完全に理解するまでは、これらのネイティブなガイドラインを念頭においてください。
  • もし下にオペレーティングシステムが存在する場合、そのオペレーティング・システムはAdaのタスクを十分に動作させるための十分なサポートを提供していなければなりません。現代的なオペレーティング・システムは、スレッドやライト・ウェイト・プロセスを通常きちんと動作させます。例としては、Windows NTやWindows 95、OS/2、Mach、Solarisなどです。ほとんど全てのリアルタイム系のオペレーティング・システムでは、Adaのタスクを実装するのに十分な機構を提供しています。Windows 3.1や古いUnixシステムはそのようなサポートを提供していません。また。このことはマイナーな理由によるものですが。そのようなシステムでは、いらいらするような制限を引き起こすことがあり、それについては後のセクションで議論します。MS-DOSは、スレッドを直接サポートしていませんが、そのようなプリミティブなオペレーティングシステムではタスクは単純に作成され、マシン全体で実行されます。(古いバージョンのGNATは、MS-DOSのタスクをサポートしていません。それは、MS-DOSの一番上にタスクを特に実装することによって付け加えられていたからです)

技術的なことを言えば。Adaのプログラムは常に、少なくとも1つのタスクを含んでいます。これは、environmentタスクと呼ばれています。このメインの(開始に使われた)サブプログラムは、このenvironmentタスクの上で実行されます。

出典: http://www.adahome.com/Tutorials/Lovelace/s13s1.htm

Last Updated on Friday, 11 May 2012 14:33  

ニュース速報

リナックスアカデミーでのLinuxセキュリティの4回目。

内容は、

1、CentOS 4.8のネットワークインストール

2、サーバーの構築。ただし、セキュリティに考慮したものにする。

手順が簡略化されているので、とまどっている様子。

PCによっては、CD-ROMが認識されないものがある。