Search
moon
sun
📝

5월9일(목)

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

문제점

•
속도 느림
•
구현 복잡