2

コードの一部をクリティカルセクションとして指定する要因

私が理解しているように、コードへの同時アクセスを防ぐために、process synchronizationなどのカーネルデータ構造を使用して採用されています。一般に、定義は「クリティカルセクションは共有データ(または)共有リソースにアクセスする可能性のあるコードの一部」であると考えています。したがって、質問は次のとおりです。semaphorescritical section

  • 共有データはユーザースペースエンティティです。したがって、アクセスの一貫性を確保するのはユーザープロセスの責任です。
  • 複数のプロセスによるリソースへの同時アクセスは、カーネルが注意を払う必要があるものだと思います。そこではどのようなユーザーレベルの同期が必要ですか?
  • ユーザースペースプログラムのコードがクリティカルセクションであると判断される要因は何ですか。
4

2 に答える 2

2

「カーネルスペース/ユーザースペース」と「クリティカルセクション」を混在させています。
カーネル/ユーザースペースは、プロセスが所有する特権の種類のみを定義します。スレッドがユーザースペースで実行されている場合、物理メモリに直接アクセスすることはできません。カーネルの仮想メモリ管理を通過する必要があります。
一方、クリティカルセクションはコードの一部であり、2つのプロセスで並行して実行すると、データが破損する可能性があります。これは、コードが共有リソースにアクセスしているために発生します。
これらの2つの概念は独立しています。クリティカルセクションは、ユーザースペースまたはカーネルスペースのいずれかになります。共有リソースの破損を回避するには、何らかの同期が必要です。2つのプロセス/スレッドがカーネルモードで実行されていて、共有リソースにアクセスしたい場合でも、何らかの同期メカニズム(スピンロックまたはミューテックス)を適用する必要があります。

これがお役に立てば幸いです。

于 2012-11-09T04:51:47.287 に答える
0

プロセス間同期は、名前付き同期オブジェクトによって実装できます。Windws同期関数は、たとえば名前付きミューテックスと名前付きセマフォを提供します。Linuxについてはこの回答を参照してください。

いくつかのプロセスの共有リソースは、例えば、共有メモリであり得る。

スレッドの同期を処理するクリティカルセクションオブジェクト(Windows)があるため、質問で行われている方法という用語を使用するcritical sectionと、少し誤解を招く可能性があります。

プロセスにも明示的に注意しているので、これはより一般的な意味だと思います。

ただし、共有メモリやその他のオブジェクトを問わず、共有リソースは、作業中の同時アクセスから保護する必要があります。

于 2012-11-08T15:22:05.190 に答える