One_Blog

상호배제 방법 [운영체제 수업] 본문

운영체제

상호배제 방법 [운영체제 수업]

0xOne 2023. 4. 11. 16:19
728x90

날짜 : 2023년 3월 11일

 

오늘 수업 주제

: 상호배제 방법





오늘 배운 내용 요약

:

Monitor로 해결하는 생산 - 소비의 문제

 

Produced {

while(1) {

acquire();

while(BUFFER_IS_FULL) {

wait(lock,fullB); // 못들어가면 Entry Queue에 삽입

}

signal(emptyB);

or broadcast(emptyB);

release();

}

}

Consumed {

while(1) {

acquire();

while(BUFFER_IS_FULL) {

wait(lock,emptyB);

}

signal(fullB);

or broadcast(fullB);

release();

}

}

 

Dekker’s 알고리즘

  • 병행 프로그래밍 상호 배제 문제에 대한 최초 해결책
  • 2개의 프로세스의 임계 영역 문제를 소프트웨어적으로 해결한 알고리즘
  • P0, p1일때, flag[0], flag[1]이라는 bool형 공유 변수를 사용
  • flag : 임계 구역에 들어가길 원하는지 나타내는 변수
  • turn : 누가 임계 영역에 들어갈 차례인지 나타내는 변수

상호배제

  • 동시에 들어가고자 할 때 turn 변수로 하나만 들어가도록 함

진행

  • turn이 0이더라도 flag[0]이 false라면 while문에서 임계영역 진입 가능

한정 대기

  • 다른 프로세스가 실행되고 있다면, while(turn ==1)에서 기다리고,
  • 임계 영역에서 나오면서 flag의 turn을 바꾸고 나오기 때문에
  • 한 프로세스가 임계 영역을 계속 가지고 있지 않음



수업 중 질문

<<Turn == 0일때>>

  • P1이 임계 영역에 진입 가능한가?
  • 다른 프로세스가 있으면 임계영역에 있으면 어떻게 될까?
  • P1이 들어가려 할 때, turn == 0이면, P0이 진입하려 할 때 어디서 대기?