クイックキャンパスチャレンジ9日目
オペレーティングシステム
同期プロセス
複数のプロセスが共有データにアクセスすると、データが一致しない可能性があります.
データの一貫性を保つためには、プロセス間の順序を指定する論理が必要です.
価格調整の生産者/消費者問題から見るとitem next_producted;
while(true){
/* next_producted에 item 생산*/
while (count == BUFFER_SIZE)
/* 아무일도 안함 */
buffer[in] = next_producted;
in = (in+1) % BUFFER_SIZE;
count++
}
ㄴ共有メモリを使用する生産者プロセス(生産毎にカウントが増加)item next_consumed;
while(true){
while(count == 0)
/* 아무일도 안함 */
next_consumed=buffer[out];
out = (out+1) % BUFFER_SIZE;
count--;
/* next_consumed 에 있는 item소비 */
}
ㄴ共有メモリを使用する消費者プロセス(消費ごとにカウントが減少)
りんごを結ぶ値は5のはずだったが、結果的に分岐した.どうしたんですか.count変数に同時にアクセスすると、結果は実行されたかどうかcount
によって異なる場合があります.count変数に触れる変数が1つしかないことを確認します.
りんかいいき
各プロセスには、臨界領域と呼ばれるコードセグメントが存在します.プロセスがアクセスして更新したデータは、少なくとも別のプロセスと共有されます.
1つのプロセスが臨界領域で実行されると、他のプロセスは臨界領域にアクセスできません.
転送/終了/残りの領域からなる
臨界領域問題の解決の要求
🔹 누가 언제 먼저
:プロセスが臨界領域で実行されると、他のプロセスは臨界領域にアクセスできません.
🔹 경쟁조건
:臨界領域にプロセスがなく、臨界領域に入るプロセスが存在する場合、これらのプロセスは残りの領域で実行されていないプロセスである必要があります.この選択は無限に延期できない.
🔹 상호배제(Mutual Exclusion)
:プロセス要求が許可されるまで、プロセス要求が自分の臨界領域に入る回数を制限しなければならない.
[🎵解決方法]ピーターソンの解決策
ソリューションは、2つのプロセスが2つのデータ・アイテムを共有することです.진행(Progress)
:臨界領域に入る順番exを示す)0はP 0、1はP 1はP 1を示す제한이 있는 대기시간(Bounded Waiting)
:プロセス準備が臨界領域に入るとex)flag[i]=trueとなり、Pi準備が臨界領域に入る
Piの構造int turn
¥Piで教えてくれましたが、臨界エリアを使いたいので、入る準備ができています.bool flag[2]
勘定科目iを書く前に、誰かが待っているのではないかと心配して、カーブをjに移動してください.
flag[j]=trueならjも書くのを待っていますこの場合、次のwhile文でiがjの書き終わるのを待つ.そうしないとwhile文は実行されないflag[i] = TRUE;
ここではflagとturn変数を用いて同時アクセスを阻止する.while文条件trueはjが臨界領域を書く準備ができていることを示しているので、ここでj書きを待っています(実際にはCPUも使っているのでbusy waitingと呼ばれています)turn = j;
ゲートが離脱するとPiは臨界領域を使用するwhile (flag[j] && turn == j);
flag変数をfalseに設定する
さてPjの立場ではwhile(flag[i]&turn=i)で待つべきで、flag[i]=FALSEに従ってjがwhileゲートから脱出して臨界領域を使う
https://bit.ly/3FVdhDa
このレポートは、迅速なキャンパス税還付の課題に参加することを目的としています.
Reference
この問題について(クイックキャンパスチャレンジ9日目), 我々は、より多くの情報をここで見つけました
https://velog.io/@jinny/패스트캠퍼스-챌린지-9일차
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
item next_producted;
while(true){
/* next_producted에 item 생산*/
while (count == BUFFER_SIZE)
/* 아무일도 안함 */
buffer[in] = next_producted;
in = (in+1) % BUFFER_SIZE;
count++
}
item next_consumed;
while(true){
while(count == 0)
/* 아무일도 안함 */
next_consumed=buffer[out];
out = (out+1) % BUFFER_SIZE;
count--;
/* next_consumed 에 있는 item소비 */
}
Reference
この問題について(クイックキャンパスチャレンジ9日目), 我々は、より多くの情報をここで見つけました https://velog.io/@jinny/패스트캠퍼스-챌린지-9일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol