DEVELOP

본 게시물은 운영체제 과목의 강의영상과 강의자료를 바탕으로 작성한 학습용 게시물입니다.


  • 공유변수 활용 → 간섭 문제 발생 
  • race condition : 공유 변수 동시 접근 시 발생하는 문제 

원소적 실행, 동기화, 임계구역

  • 원소적 실행
    : 공유변수를 통해 상호작용하는 프로세스 혹은 쓰레드 간에 문맥교환이 언제 일어나도 간섭이 없는 실행이 보장되는 것  
    - 공유변수를 사용하는 코드 영역에 임계구역을 설정 
  • 임계구역 설정 
    : 원소적 실행을 위해 각 프로세스 혹은 쓰레드가 공유변수, 자료구조, 파일 등을 배타적으로 읽고 쓸 수 있도록 설정한 코드 세그먼트 
    → mutex가 기본 
  • 동기화 : 코드 상에 임계구역을 설정해 진입/진출을 순서화 하는 것

상호작용 프로세스와 결정성

# 상호작용 프로세스 

  • 컴퓨터 시스템 자체가 상호 작용하는 여러 프로세스의 집합 
    - 한 프로세스 내에도 여러 쓰레드가 병행 수행될 수 있음 
  • 주요이슈 
    - 결정성, 상호배제와 동기화, 교착 상태, 기아 

# 프로세스 시스템 

  • 프로세스 집합 & 이들의 선행 제약 (순서 제약 관계)
  • 선행제약 : 부분 순서 성질을 갖는 것으로, 이행성을 가짐 
    - 선행제약 관계가 없는 두 프로세스는 독립적 
  • 프로세스 시스템 내의 프로세스들은 서로 독립적이거나 선행제약 관계가 있다면 비순환적이어야 함 

# 선행 그래프

  • 프로세스 시스템 내의 프로세스 간 성행제약 관계를 directed 그래프로 표현
  • 정상적인 프로세스 시스템의 선행 그래프는 비순환적

순환이 있는 선행 그래프

# 결정성 

  • 프로세스 시스템 내의 프로세스들 간의 코드 실행 순열이 매번 다를 수 있지만 같은 조건과 입력이 주어진다면, 항상 같은 결과를 산출해야 한다는 성질 

# 프로세스 비간섭 관계 

  • 프로세스 시스템에서 두 개의 프로세스가 있을 때, 한 프로세스가 다른 프로세스를 선행하거나, 또는 이들이 서로 독립적일 경우 한 프로세스의 출력 장소가 다른 프로세스의 입력 장소나 출력 장소가 아니면 이들은 비간섭 관계에 있다고 정의한다. 
  • 한 프로세스 시스템에서, 모든 프로세스 쌍에 대해 비간섭 관계가 성립하면, 그 시스템은 비간섭 관계를 만족한다고 한다. 
  • 한 프로세스 시스템에 있어서, 비간섭 관계는 그 시스템이 결정적인가에 대한 필요충분 조건

상호배제 

# 임계구역에 대한 요구사항 3가지 

  • 상호 배제 
    - 한 프로세스가 임계 구역을 실행 중일때, 다른 어떤 프로세스도 임계 구역 실행 x
  • 진행
    - 반드시 하나의 프로세스를 선택해 진입시키는 올바른 결정 기법이 있어야하고, 
      이러한 결정은 무한정 미루어져서는 x
  • 제한된 대기
    - 다른 프로세스가 임계 구역을 실행할 수 있는 회수에는 제한o 

# mutex의 구현  (Busy Wating)

 

enter_mutex(lock)

임계구역

exit_mutex(lock)

  • 피터슨의 솔루션 : 먼저 양보한 쪽이 먼저 들어가게 됨 
  • 베이커리 알고리즘 : 여러개의 알고리즘에 대한 해결책 
    - 각 프로세스는 번호표, 자신의 번호가 가장 작은 번호가 될 때까지 대기
    - 발급 받은 숫자가 같을 경우 PID가 작은 것 먼저 처리 
  • test-and-test 
    : lock에 대한 test 혹은 copy를 CPU의 명령어로 제공 
    - CPU 명령어 하나는 문맥교환 없이 원소적으로 수행됨 
    - 딱 하나의 프로세스가 딱 한번만 0의 값을 리턴받게 됨 
  • swap 
    : CPU의 명령어로 두 변수 값을 문맥교환 없이 교체
    - lock : 전역변수 
    - key : 지역변수 
    - 딱 하나의 프로세스가 딱 한번만 key<-0으로 설정되면서, lock<-1로 원위치됨 
  • 인터럽트 통제 
    - 임계 구역 내의 문맥 교환 자체를 방지 
    - 특권 명령어이기 때문에 사용자 모드에서는 x 

세마포어

  • busy waiting 
    : 임계구역 진입 시 이미 다른 프로세스가 진입해 있으면 busy-waiting loop
    → 타임 슬라이스 낭비 
  • 세마포어 : block/wakeup 알고리즘
    - 진입 불가능 시에는 대기 상태로 전환 
    - 임계구역을 떠나는 프로세스가 대기 프로세스를 준비 상태로 깨워줌 
    - 일종의 객체 (value, 프로세스 대기큐, init, wait(P연산), signal(V연산) 
    - S.value
       → 양수 : 남아있는 자원 수 
       → 음수 : 부족하여 대기하고 있는 대기자 수 
       → 초기값 n  :  자원의 개수 

# 우선순위 역전 문제 

  • 높은 우선순위 프로세스가 현재 낮은 우선순위 프로세스가 자원 사용을 마칠 때까지 기다려햐 하는 경우 발생 
profile

DEVELOP

@JUNGY00N