[オペレーティングシステム]同期制御の古典的な問題
10842 ワード
1.Bounded Buffer問題(生産者消費者問題)
複数のメーカーおよび消費者は、限られた数のデータを保存するBufferにアクセスします.ベンダーの場合、データが作成されるとBufferに格納され、格納可能なBufferスペースがないという問題が発生する可能性があります.
消費者がデータを必要とするときにBufferからデータを取得する場合、Bufferにインポートするデータがないという問題が発生する可能性があります.
解決策は,生産者−消費者が連携し,細い麻布言語を用いてバッファを同期させることである.
int n;
semaphore empty = n; // 버퍼 내에 저장할 공간이 있는지
semaphore full = 0 // 버퍼 내에 소비 할 데이터가 있는지
semaphore mutex = 1 // 버퍼에 대한 접근을 통제하여 동기화를 충족시켜주는 세마포어
while(true){
// Data 생산
wait(empty); // 버퍼에 빈 공간이 생길 때 까지 기다린다.
wait(mutex); // 임계 영역에 진입 하기 전까지 기다린다.
// 데이터를 버퍼에 추가
signal(mutex); // 임계 영역을 빠져나왔다고 알려준다.
signal(full); // 버퍼에 데이터가 있다고 알려준다.
}
while(true){
wait(full); // 버퍼에 데이터가 들어올 때 까지 기다린다.
wait(mutex); // 임계 영역에 진입 하기 전까지 기다린다.
// 버퍼로부터 데이터를 가져온다.
signal(mutex);
signal(empty); // 버퍼에 빈 공간이 생겼다고 알려준다.
}
2.リーダ-ライタの問題
これは、複数の読者と作成者が1つのストレージスペースを共有してアクセスする場合に発生する問題です.
解決策は細い麻布語を使うことです.
int readcount = 0 //현재 Buffer에 접근 중인 독자의 수
// 독자 수가 0 일 경우 저자가 임계 영역에 접근 가능
semaphore rw_mutex = 1 //저자와 독자 사이 동기화
semaphore mutex = 1 // 상호 배제를 보장하기 위해 사용
while(true){
wait(rw_mutex); // 임계 영역에 들어가기 위해 기다리는 중
// 쓰기 작업 수행
signal(rw_mutex); // 임계 영역에서 빠져나옴
}
while(true){
wait(mutex);
readcount++; // 독자수 1 증가
if(readcount = 1 )
wait(wrt) // 쓰고 있는 저자가 없을 때 까지 기다리기
signal(mutex);
// 읽기 작업 수행
wait(mutex);
readcount--; // 독자수 1 감소
if(readcount = 0)
signal(rw_mutex); // 독자가 없다면 알려줘서 기다리고 있는 독자/저자를 끼운다.
signal(mutex);
}
3.哲学者たちの夕食問題
哲学者たちはお互いに話をすることができず、両側のフォークを持ってこそご飯を食べることができる.
細い麻布言語で反発要求を満たす
各フォークには細い麻布語が掛けられており、互いに細い麻布語を排斥している.哲学者はフォークを持ち上げる時、
wait
の演算を行い、フォークを置く時、signal
の演算を行う.while(true){
// 포크 양쪽 가져오기
wait(포크[i]);
wait(포크[(i+1)%5]);
// 냠냠 먹는다.
// 포크 양쪽 놓기
signal(포크[i]);
signal(포크[(i+1)%5]);
// 철학적인 생각한다..
}
このように表現すると,互いに反発することは強いが,교착상태
と기아현상
が生じる.行き詰まり
このとき、すべての哲学者が右に置いたフォークを手に取り、左のフォークが消えてしまうと、すべての哲学者が相手がフォークを置くのを無限に待つ問題が発生します.
解決策
飢餓問題.
両手のフォークを握って食事をする哲学者は少数しかいない.
モニタソリューション
哲学者たちの状態を
thinking
hungry
とeating
に分けた.eating
状態ではない時だけ変えることができる.コメント/画像ソース
Reference
この問題について([オペレーティングシステム]同期制御の古典的な問題), 我々は、より多くの情報をここで見つけました https://velog.io/@moonheekim0118/운영체제-동시성-제어의-고전적-문제들テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol