Process Management - Synchronization Examples

이영민·2023년 3월 25일
1

운영체제

목록 보기
4/11
post-thumbnail
post-custom-banner
  • 동기화의 클래식한 문제들을 살펴 본다.

1. Bounded - Buffer Problem

  • n 개의 버퍼공간이 존재할 때
    • 세마포의 mutex는 1
    • 세마포가 full인 경우 0
    • 세마포가 empty인 경우 n
  • 생산자 프로세스의 구조
whilw(true){

	wait(empty); // 생산자가 넣기 위해 버퍼가 비었는지 확인한다.
	wait(mutex) ; 
		/* 버퍼에 생산한 것을 넣는다*/
	signal(mutex); //하나 넣었으니 다른 사람 접근 가능하게 함
	signal(full)
  • 소비자의 프로세스 구조
while(true){
	wait(full);
	wait(mutex);
	/*버퍼에 있는 것 소비 */
	signal(mutex);
	signal(empty);
	/*

2. Readers - Writers Problem

  • 하나의 데이터베이스가 병행적으로 실행되는 다수의 프로세스가 공유한다고 생각 했을 때, 그 데이터를 읽는 reader은 데이터 변경에 영향을 미치지 않으므로 동시에 여러명이 읽어도 된다.
  • 하지만 write가 동시에 여러명이 쓴다면 문제가 발생할 수 있다. 그래서 write가 쓰기 작업 동안에 공유 데이터베이스에 대해 Mutual exclusive하게 접근해야 할 필요가 있다.
  • writer 프로세스의 구조
    while(true){
    	wait(rw_mutex); // rw_mutex는 1로 initialized되어 있다.
    	
    	/*writing is performed*/
    
    	signal(rw_mutex);
    }
  • reader 프로세스의 구조
    while(true){
    	wait(mutex); //mutex.rw_mutes는 1로 초기화
    	read_count++; //read_count는 0으로 초기화
    	if(read_count == 1)
    		wait(rw_mutex);
    	signal(mutex);
    	
    	/*reading is performed*/
    
    	wait(mutex);
    	read_count--;
    	if(read_count == 0)
    		signal(rw_mutex);
    	signal(mutex);

3. Dining - Philosophers Problem

  • 식사하는 철학자들 문제는 고전적 동기화 문제로, 철학자들이 밥을 먹기 위해서(프로세스가 요청 사항을 수행) 양쪽에 있는 젓가락을 하나씩 사용(시스템 내의 자원을 사용)해야 하는 경우를 생각해보자.

    • 어쩌다 동시에 배고파진 철학자들이 동시에 자신의 왼쪽에 놓인 젓가락을 집었다고 생각해보자. 그러면 책상위에 남은 젓가락은 없고 아무도 식사를 진행 할 수 없을 것이다.
  • 식사하는 철학자들의 문제는 고전적인 동기화 문제로 병행실행시 교착상태와 기아를 발생 시키지 않고 여러 스레드, 프로세스에게 여러 자원을 할당해야 할 필요를 단순히 표현한 것이다.

  • 교착상태를 해결하는 데에는 다음과 같은 방법이 있다.

    • 최대 4명만 앉게 한다.
    • 한 철학자가 두개를 동시에 집을 수 있을 때만 젓가락을 집을 수 있게 한다.
    • 홀수 번호의 철학자는 왼쪽, 짝수 번호의 철학자는 오른쪽의 젓가락을 먼저 집게 한다.
  • 하지만 교착상태가 해결된다는 것이 기아를 방지 하지 않는다.

post-custom-banner

0개의 댓글