운영체제 정리 (4)

2021년 08월 15일
제작기간 2021년 8월 15일
태그 CS

4-1. 병행 프로세스

병행 프로세스의 개념

  • 독립 프로세스
    • 단일 처리 시스템
    • 독립적임
  • 협력 프로세스
    • 다른 프로세스와 영향을 주고받는 비동기적 프로세스
    • OS가 자원 경쟁을 고려하여 디스크/프린터로의 접근 조절
    • 한 프로세스의 수행이 다른 프로세스에 영향을 줄 수 있어 상호배제가 필요

병행 프로세스의 해결 과제

  • 공유 자원을 상호 배타적으로 사용해야 함
  • 병행 프로세스 간에는 협력이나 동기화(ex 상호배제)가 필요
  • 두 프로세스 사이에서 데이터 교환이 가능해야 함
  • determinancy확보 필요
    • 결정성: 실행 속도와 관계 없이 항상 일정한 실행 결과 보장
  • 교착 상태 해결 + 병행 프로세스들의 병렬 처리 능력 극대화 필요
  • 상호배제를 보장해야 함
    • 상호배제: 어떤 프로세스가 작업을 실행 중일 때, 나머지 프로세스는 그것과 관련된 작업을 할 수 없도록 하는 것

선행 그래프와 병행 프로그램

  1. 선행 그래프
    • 선행 제약(precedence constraint)은 프로세스를 순서대로 다른 상태로 옮기는 것
    • 두 프로세스 사이에 선행 제약이 없으면 이 둘은 독립적인 것
    • 순차적 활동을 제약하는 방향성 비순환 그래프
  2. fork와 join 구조
    • fork L; : 병행 프로세서 2개 생성(레이블이 L인 문장 / fork 명령어 바로 다음)
    • jon v; : 병행 연산 2개를 결합
  3. 병행 문장
    • parbegin/parend 사이의 모든 문장은 병행 수행이 가능

4-2. 상호배제와 동기화

상호배제(mutual exclusion)의 개념

  • 병행 프로세스에서 프로세스 하나가 공유 자원을 사용할 때, 다른 프로세스들이 동일한 일을 할 수 없도록 하는 방법
  • 동기화: 공유 자원을 동시에 사용하지 못하게 실행을 제어하는 방법
    • 동기화로 상호배제를 보장하면 교착과 기아 상태 발생 가능 (Chapter 5)
  • critical resources(임계 자원): 두 프로세스가 동시에 사용할 수 없는 공유 자원
  • critical section(임계 영역): critical resources에 접근하고 실행하는 program code 부분
    • 동일한 critical section에 들어가면 뒤에 들어온 프로세스 차단
    • 수정 가능한 공유 자원에서만 차단이 필요
    • 단, 단순 읽기 작업은 허가

임계 영역

  • 한 순간에는 하나의 프로세스만 사용 가능
  • 진행: 임계 영역에 프로세스가 없는 상태에서 여러 프로세스가 진입을 원하면 적절히 결정해야 함
  • 한정 대기: 프로세스가 무한정 기다리는 것을 방지하기 위해, 임계 영역에 한 번 들어간 프로세스는 재진입 제한을 둠

생산자/소비자 문제와 상호배제를 해결하는 초기의 시도

  • 운영체제에서 비동기적으로 수행하는 모델
    • 생산자 프로세스가 생산한 정보를 소비자 프로세스가 소비
  • 버퍼 (임시 기억장소)
    • 생산자는 소비자가 받을 준비가 될 때까지 대기하는 문제를 해결
    • 생산자는 버퍼로 데이터를 전송
    • 소비자는 버퍼에서 데이터를 받음
    • 동기화가 필요: 생산자는 버퍼가 가득 차면 생산 X + 소비자는 버퍼가 비면 소비 X
  • race condition(경쟁 상태)
    • 여러 프로세스가 동시에 공유 데이터에 접근할 때, 접근 순서에 따라 실행 결과가 달라지는 상황에 놓인 프로세스
    • 상호배제를 이용해 병행 프로세스들을 동기화하여 예방

4-3. 상호배제 방법들

데커의 알고리즘 (Dekker’s algorithm)

  • 소프트웨어로 해결
  • 다익스트라(dijkstra)로 임계 영역 문제에 적용함
    • 최초로 상호배제를 소프트웨어로 해결
    • 실행 시간이 가장 짧은 프로세스에 프로세서 할당하는 세마포 방법
    • 가장 짧은 평균 대기시간
  • 진입 순서에 따라 허용
  • 진입을 원하면 플래그 설정 후 대기
  • 장점
    • 하드웨어 제어 X, 프로세스가 무한정 기다리지 않게 됨
  • 기타 유용한 상호배제 알고리즘
    • knuth(크누스) : 이전 알고리즘 관계 분석 후, 패턴을 찾아 반복을 줄여, 프로세스에 프로세서 할당
    • lamport(램포트) : 우선순위를 부여하여 차례로 진입 허용
    • brinch hansen(핸슨) : 대기시간과 실행시간을 이용하는 모니터 방법

Test And Set (테스)

  • 하드웨어로 해결
  • 메모리 영역의 값에 대해 검사와 수정을 원자적으로 수행할 수 있는 하드웨어 명령어
  • atomic operation (원자적 연산)은 중단 없이, 중간에 다른 사람이 수정할 수 없는 최소 단위 연산
  • 장점
    • 다중 임계 영역을 지원
    • 프로세서, 프로세스 수에 관계 없음
  • 단점
    • 프로세서 시간 소모가 큼
    • 바쁜 대기를 하게 됨
    • 대기 프로세스는 비생산적
    • 기아/교착 발생

semaphore (세마포)

  • 소프트웨어로 제공
  • 진입 조건 반복 조사의 비효율을 해결
  • 정수의 플래그 변수
  • Proberen(검사), Verhogen(증가) 연산과 관련
    • P: wait
    • V: signal, 준비 큐에서 프로세스를 껀 그 프로세스 시작
  • 동기화에도 사용이 가능
  • 종류
    • 계수(counting) 세마포: 상호배제와 조건부 동기화를 해결하기 위함
    • 이진(binary) 세마포: 임계 영역처럼 상호배제를 해결하려기 위함
  • 구현
    • 제어를 넘겨받은 프로세서는 준비 큐에서 다른 프로세스를 선택
    • 그 프로세스를 실행하도록 프로세서 스케줄러에 전송
    • 중단된 프로세스는 다른 프로세스가 V(signal)연산을 실행해야 재시작 가능
    • 프로세스는 wakeup 연산으로 대기에서 준비 상태로 변하며, 준비 큐에 놓임
  • 단점
    • wait 연산에 의한 교착 상태 발생

monitor (모니터)

  • 소프트웨어로 제공
  • 공유 자원과 그의 임계 영역 관리
  • 공유 데이터, 임계 영역이 코딩된 프로시저, 초기화 코드로 구성된 모듈
  • 프로세스는 모니터의 프로시저를 호출하여 모니터(하나만)에 진입, 원하는 공유 데이터에 접근 가능
    • 모니터에서 하나 이상의 프로세스 실행 X
  • 모니터 VS 세마포
    • x.wait x.signal 은 P V 연산과 비슷함
    • wait은 프로세스를 반드시 차단하고 P는 계숙 세마포에 따라 다름
    • signal은 호출 시 대기 작업이 없으면 아무 기능X, V는 반드시 counter를 증가시킴
  • 구현
    • 1로 초기화된 세마포 mutex 사용
    • x.wait(c); signal 연산을 실행할 때, 우선순위 c를 통해서 다음 프로세스 결정
  • 단점
    • 프로그래밍 언어로 일부 구현되어 있기 때문에 컴파일러가 코드를 생성해야 함
    • 병행성을 지원하는 언어만 모니터를 지원