意味論と実装とは? わかりやすく解説

意味論と実装

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/15 04:56 UTC 版)

セマフォ」の記事における「意味論と実装」の解説

セマフォ変数重要な属性として、その値の変更には特定の関数群を使わなければならないという点が挙げられる。ここではそれらの関数wait()signal() とする。 カウンティングセマフォでの2つ操作は、歴史的には V(または signal())と P(または wait())と記述される。V操作セマフォSをインクリメントし、P操作デクリメントする。角括弧囲まれ部分不可分操作であることを意味し、その部分途中経過は他の実行単位からは見えないセマフォSの値は、その時点で使用可能な資源個数である。P操作資源獲得しようとするもので、セマフォ守られている資源使用可能になるまでビジーウェイトまたはスリープ英語版)で待つことになる。V操作はその逆であり、使用していた資源解放するwait()signal()簡単に説明する次のうになるwait(): セマフォの値を1だけデクリメントする。その結果、値が負になるなら wait()実行している実行単位ブロックされる。つまり、セマフォ待ちキュー追加されるsignal(): セマフォの値を1だけインクリメントする。その後インクリメント前の値が負だったら(つまり資源待ち状態の実行単位があるなら)、セマフォ待ちキュー上にあるブロックされ実行単位レディ実行可能)キューに移す。 多くOS効率的なセマフォプリミティブ提供しており、セマフォインクリメントした際には1つだけ待ち状態の実行単位をアンブロックする。すなわち、複数実行単位同時にアンブロックした際の無用なセマフォ値のチェック処理を防いでいる。 カウンティングセマフォの概念は、一度複数個の資源獲得解放できるように拡張でき、UNIXでの実装そのようになっている。その場合のVおよびP操作次のように修正されるfunction V(semaphore S, integer I): [S ← S + I]function P(semaphore S, integer I): repeat: [if S >= I: S ← S - I break] リソーススタベーションを防ぐため、セマフォには実行単位キュー通常FIFO)が1つ付属している。セマフォ値がゼロのときにP操作をすると、その実単位セマフォ付属キュー追加される別の実行単位がV操作セマフォ値をインクリメントしたとき、キュー上に実行単位があれば、そのうち1つキューから外して実行再開させる。実行単位優先度設定されている場合キュー上で優先度順に実行単位並べるなどして、最も優先度の高い実行単位最初に実行再開できるようにする。 実装においてインクリメント/デクリメント比較不可分性保証されていない場合インクリメントデクリメントが行われなかったり、セマフォ値が不正になる危険性生じる。不可分性達成するには、リード・モディファイ・ライト(英語版)(読み取って変更加えて書き込むという処理サイクル)を不可分に実行できる機械語命令使用するそのような機械語命令ない場合デッカーのアルゴリズムなどのソフトウェアによる排他制御使用する。シングルプロセッサのシステムでの不可分操作は、プリエンプション一時的に禁止したり、割り込みマスクしたりすることでも実現できるマルチプロセッサシステムではそれだけでは不十分で、同じセマフォ共有する2つプログラムが別々のプロセッサ上で同時に動作している場合対処できない。そのためテスト・アンド・セット命令などを使用してセマフォ変数へのアクセスロックする必要がある

※この「意味論と実装」の解説は、「セマフォ」の解説の一部です。
「意味論と実装」を含む「セマフォ」の記事については、「セマフォ」の概要を参照ください。

ウィキペディア小見出し辞書の「意味論と実装」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「意味論と実装」の関連用語

意味論と実装のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



意味論と実装のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのセマフォ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS