/////
Search
📝

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

문제점

속도 느림
구현 복잡