운영체제 동기화 문제

이태혁·2020년 11월 8일
0
  • 프로세스 동기화: 프로세스/쓰레드는 같은 데이터에 접근해야 하는 경우가 있다. 이때 일정한 규칙없이 데이터의 수정을 허용한다면 데이터의 신뢰성을 보장하지 못한다. 이때 데이터의 일관성을 유지하는 방법을 프로세스 동기화라고 한다.

  • 임계구역 : 다른 프로세스(쓰레드)와 공유하는 코드 내용중 공통으로 접근 하는 데이터를 수정할 수 있는 부분

  • 임계구역문제 : 임계구역에 접근하는 프로세스들이 문제없이 데이터를 공유하도록 동기화를 진행하는 방법

  • 임계구역문제를 해결하기 위해서는 다음 3가지를 만족해야함

    • 상호 배제(Mutual Exclusion): 임계구역에는 동시에 한 프로세스만 접근가능함
    • 진행(Progress): 유한한 시간 내에 임계구역에 들어갈 프로세스를 정해야함
    • 한정된 대기(Bounded Waiting): 프로세스가 임계구역을 들어가기 위한 요청 이후 실제 진입까지의 과정이 유한한 시간내에 일어나야함 (스케쥴링에서 기아문제같은것이 일어나지 않는것을 말하는 듯)

임계구역 문제를 해결하는 방법으로 피터슨의 방법, Mutext Lock, 세마포, 모니터 등이 있다.

🦊 Peterson's Algorithm

do{
	flag[i] = true;      /*My intention is to enter.....*/
    turn = j;            /*Set to his turn*/
    while (flag[j] && turn == j);  /*wait only if ...*/
    critical section
    flag[i] = false;
    remainder section
  } while (1);
  • 상호배제, 진행, 유한대기 모두를 만족시킴
  • 다만 busy waiting(=spin lock)!이 생겨서 CPU와 Memory를 사용하면서 while문을 계속 돌면서 검사하게됨

🦊 Synchromnization Hardware

  • 위처럼 락을 어렵게 구현하는 이유는 명령어 한줄한줄마다 인터럽트로 인해서 CPU를 빼앗길 수 있기 때문임
  • 만약에 락을 확인하고 쓰는 과정이 하나의 과정이면 코드를 쉽게 바꿀수 있음
    = Test & modify를 atoic하게 수행할 수 있다면
    = Test & modify를 끊어지지않게 한번에 수행할 수 있다면
  • 하지만 프로그래머 입장에서 위처럼 프로그래밍 하기도 힘들고 할 수도 없기 때문에 다른 방법들을 사용함

🦊 Semaphore


P연산: 임계구역의 권한을 획득하는 과정
V연산: 임계구역의 권한을 반납하는 과정

참고

profile
back-end, cloud, docker, web의 관심이 있는 예비개발자입니다.

0개의 댓글