ch6_part1 : Synchronization Tools부터 시작합니다
비선점형 스케쥴링
선점형 스케쥴링
윗 두 프로세스에 대해 배웠음
Turnaround-time, Waiting-time, Response-Time
스케쥴링마다 어떤 타임에 중점을 둘 건지가 달라짐
(RoundRobin(RR) 같은 것들)
Motivation
협력적 프로세스
•
시스템 내 실행중인 다른 프로세스의 실행에 영향을 주거나 받는 프로세스
•
논리주소공간(코드 및 데이터)을 직접 공유하거나
공유 메모리 or 메시지 전달을 통해서 데이터 공유 가능
•
공유데이터에 동시 접근 시, 데이터 일관성에 문제
•
데이터 일관성을 유지할 수 있는 방안 필요
Objectives
Background
Producer VS Consumer
데이터 일관성을 유지하기 위해서(데이터 일관성 관점),
적절한 접근 타이밍 설정이 필요
Race Condition
Mutual Exclusion 문제를 해결하지 못 한 경우(아래 참고)
Critical Section
Solution to Critical-Section Problem
1.
Mutual Exclusion
특정 프로세스가 C-S내에서 실행중이면,
다른 프로세스들은 C-S 내에서 실행될 수 없다
2.
Progress
CS안에 있는 프로세스만이,
다른 프로세스가 C-S에 접근하는 것을 막을 수 있다
3.
Bounded Waiting(제한된 대기)
어떤 프로세스가 C-S내에 있으면, 기다리는 건 맞으나
그런 대기시간이 무한해서는 안되는 것이다
Critical Section Problem
Critical-Section Problem Solution
•
단일코어 환경에서
공유변수를 수정하는 동안 인터럽트 발생을 막는 경우,
CS문제 해결(선점 없이 해결)
•
다중 처리기 환경에선 불가능
•
인터럽트 비활성화할 경우, 많은 시간 소요
•
인터럽트 비활성화할 경우, 시스템 효율성 저하
Mutual Exclusion
ME(Mutual Exclusion) Primitives
•
enterCS() primitive
•
exitCS() primitive
Two Process ME
<ME Primitives ver1>
Process0(P0) 기준으로,
turn값이 0이면, CS로 진입
값이 1이면 대기(while문 내에서)
CS에서 나오면서 turn을 넘겨줌
Progress 조건에 위배되는 경우 : P0가 CS에 진입하지 않는 경우
<ME Primitives ver2>
P0는 CS 진입 전, P1의 flag(flag[1])를 확인
→ flag[1]이 true면 대기, false면 flag[0]를 true로 만들고 진입
→ CS에서 나오면 false로 flag[0]를 변경
Preemption(선점) 발생하는 경우, ME 위배
<ME Primitives ver3>
flag[0]를 먼저 true로 설정(= 진입의사를 밝힘)
preemption 발생 경우, progress 조건 위반. bounding waiting 위반
Dijkstra’s Algorithm
SW 기반 Solution
문제점
•
속도 느림
•
구현 복잡







