甲府方重信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.5 - その他のタスクの課題

Adaチュートリアル セクション13.5 - その他のタスクの課題

E-mail Print PDF

セクション 13.5 - その他のタスクの課題

タスクにはオペレーティング・システムが影響を与えます。特に、もしオペレーティング・システムが特定の最低限の機能を提供しないような場合です。(例えば、スレッド・サポート) これは、プログラマーが考える必要があるのは、2つの影響です。:

  1. (マイクロソフト社のWindows 3.1や、多くの古いUNIXマシンなど)いくつかのオペレーティングシステムでは、スレッド(ライトウェイト・プロセス)がサポートされていません。そこでは、通常のプロセス(ときには、ヘビーウェイト・プロセスと呼ばれます)がサポートされているだけです。この2つの違いは、スレッドは、メモリーを共有できるのに対し、プロセスは一般的にそれは出来ないということです。スレッドをサポートしないシステムにおいては、なにかタスクがオペレーティング・システムにリクエストを行う(たとえば、入力など)と、全てのAdaのタスクが通常は、オペレーティングシステムがそのリクエストを完了するまで停止してしまいます。ほとんどのAdaコンパイラーがこのような環境においては、全てのAdaタスクを単一のオペレーティングシステムのプロセスにいれて、そのプロセスの中でタスクをシミュレートするためによります。オペレーティングシステムは、異なったAdaのタスクが単一のプロセスで動作しているのを区別することが出来ないので、全てのAdaタスクが停止してしまうのです。より多くのオペレーティングシステムは、高機能となってきているので、この問題は少なくなってきています。そして、組み込み素ステムに対しては一般的に問題とはなりません。 (組み込みシステムでは、Adaはシステム全税を完全に制御しますし、リアルタイム・オペレーティングシステム上で動作します)。
  2. いくつかのオペレーヒングシステムでは、タスク間で時刻を自動的の共有するのは、困難であるか非効率的な場合があります。等しい優先度のタスク間で時刻を自動的の共有する昨日を、「プリエンプティブ・マルチタスキング」もしくは「タイムスライシング」と呼びます。プリエンプティブ・マルチタスキングをサポートするオペレーティングシステムは、よりプログラマーに対して便利です。プリエンプティブ・マルチタスキングをサポートしないオペレーティングシステムでは、Adaコンパイラーは、タスクが他のタスクと通信するまで、タスクは実行しつづけるか、待たされるかのどちらかになります(この場合delay文を使います)。このような種類の振る舞いを、「コペラティブ・マルチタスキング」を読んでいます。なぜなら、等しい優先度のタスクは、CPUを共有するための協力しなければならないからです。ほとんとの人々は、Adaの実装がプリエンプティブ・マルチタスキングを持っているので好んでいます。もしプログラマーがコオペレティブ・マルチタスキングのみをサポートするAdaコンパイラーと取引しなければならないとしたら、実行する機会のあるタスクのさまざまな箇所に「delay 0.0」ステートメントを挿入することを考慮してください。; いくつかのコンパイラーは、プログラマーにプリエンプティブか、コオペレティブな振る舞いを選択することができるようになっています。また、今日のほとんどのAdaコンパイラーは、(ほぼ一般的に)プリエンプティブ・マルチタスキングの振る舞いを提供しています。

タスクについては、それほどこのLovelaceではカバーしていません。例えば:

  • プログラマーは、パッケージの宣言部、もしくは本体部に宣言することによって、プログラマーが実行している限りにおいて既存のタスクを作成する事が出来ます。 (グローバル変数の宣言の仕方と同じです)。
  • タスク型を作成してから、タスクを作成する代わりに、プログラマーは直接タスクを作成することができます。
  • エントリーは、ファースト・イン・ファースト・アウトにおいてキューされます。そして、もし必要であれば、再キューすることが出来ます。

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

Last Updated on Tuesday, 12 June 2012 10:38  

ニュース速報

http://d.hatena.ne.jp/sesejun/20100902/p1

http://downloads.whamcloud.com/public/lustre/lustre-1.8.6-wc1/el5/server/i686/