Week4 Process Synchronize
프로세스 동기화
병행성에 대해 설명해주세요. (병렬성 X)
"여러 작업이 논리적으로 동시에 실행되는 것을 의미"
여러 작업이 동시에 실행되는 것처럼 보이도록 작업들을 빠르게 번갈아가며 수행하는 것을 의미
특히 단일 코어 시스템에서 여러 스레드가 동시에 실행되는 것처럼 보이지만 실제로는 교대로 실행
CPU코어 < 스레드
멀티코어 CPU라면, 여러 코어가 동시에 여러 스레드를 병렬로 처리할 수 있지만, 코어가 부족한 경우, 여러 스레드가 교대로 실행됩니다.
(여러 프로세스가 있을 경우, CPU 스케줄러는 프로세스 단위로 CPU 시간을 할당. 한 프로세스가 CPU를 배정받으면, 그 프로세스 내에서 스레드들 간에도 스케줄링이 이루어짐.)
병렬성에 대해 설명해주세요.
"여러 작업이 물리적으로 동시에 실행되는 것을 의미"
멀티프로세싱 시스템이나 멀티스레드 환경(+멀티 프로세싱 시스템) 에서 발생하며, 여러 개의 CPU 코어 또는 프로세서가 동시에 각기 다른 작업을 실행할 때 병렬 처리가 이루어짐
작업이 실제로 동시에 진행되기 때문에 성능 향상에 유리
병렬 컴퓨팅에서 중요한 역할(하나의 큰 작업을 여러 개의 작은 작업으로 나누어 동시에 처리하는 방식)
프로세스 동기화가 뭔가요?
프로세스 동기화란 여러 프로세스가 동시에 공유 자원에 접근할 때, 데이터의 일관성과 무결성을 유지하는 것을 의미
다수의 프로세스가 같은 자원에 접근할 때 경쟁 상태(Race Condition) 가 발생하지 않도록 프로세스 간의 실행 순서를 제어
뮤텍스, 세마포어 같은 동기화 메커니즘을 사용해 구현됩니다.
Critical Section(임계 영역)에 대해 설명해주세요.
여러 프로세스나 스레드가 공유 자원에 접근하는 코드의 특정 부분
동시에 여러 프로세스나 스레드가 이 영역에 진입하면 데이터 일관성 문제가 발생
하나의 프로세스 또는 스레드만이 접근할 수 있도록 상호 배제(Mutual Exclusion)가 필요
경쟁 상태(Race Condition)이 뭔가요?
두 개 이상의 프로세스나 스레드가 동시에 공유 자원에 접근할 때, 실행 순서에 따라 결과가 달라지거나 예기치 않은 결과가 발생하는 상태
두 스레드가 동일한 변수를 동시에 읽고 수정할 때, 한 스레드의 변경이 다른 스레드에 의해 덮어쓰여 원치 않는 결과가 발생
상호 배제를 통해 해결 -> 뮤텍스, 세마포어 같은 동기화 메커니즘
Race Condition을 어떻게 해결할 수 있나요?
RaceCondition: 두개 이상의 프로세스/스레드가 공유 리소스에 동시에 접근할때 실행 순서에 따라 결과값이 달라지는 상황
Race Condition을 해결하기 위해서는 상호보안 (Mutual Exclusive)이 보장되어야합니다.
락 메커니즘
뮤텍스: 한 번에 하나의 스레드 또는 프로세스만이 임계 영역에 진입 락의 소유권을 가지며, 작업이 끝난 후 락을 반환 스핀락 등을 통해 재시도(But CPU 자원 사용)
이진 세마포어: 0과 1의 값을 가지며, 뮤텍스와 유사하지만, 락을 설정한 스레드와 해제하는 스레드가 다를 수 있다는 차이
카운팅 세마포어: 동시에 접근할 수 있는 프로세스나 스레드의 수를 N개로 제한
Mutual Exclusion(상호 배제)에 대해 설명해주세요.
임계 영역에 동시에 여러 프로세스 또는 스레드가 접근하지 못하도록 하는 것
여러 프로세스나 스레드가 한 번에 하나만 임계 영역에 진입하도록 제한하여 Race Condition을 방지하는 것이 목적
뮤텍스는 주로 상호 배제를 보장하기 위해 사용되고, 세마포어는 여러 스레드나 프로세스의 동시 접근을 조절
뮤텍스에 대해 설명해주세요.
뮤텍스(Mutex)는 상호 배제(Mutual Exclusion)를 보장하기 위해 사용되는 락 메커니즘으로, 여러 스레드 또는 프로세스가 동시에 공유 자원에 접근하지 못하도록 하는 역할
임계 영역(Critical Section)에서 발생할 수 있는 Race Condition(경쟁 상태)를 예방하기 위해 사용되며, 한 번에 하나의 스레드 또는 프로세스만이 자원에 접근할 수 있도록 제한
뮤텍스는 락을 획득한 스레드만이 락을 해제할 수 있습니다. 이는 이진 세마포어와의 차이점으로, 이진 세마포어는 다른 스레드가 락을 해제할 수 있지만, 뮤텍스는 반드시 락을 건 스레드가 해제해야 합니다.
세마포어에 대해 설명해주세요.
세마포어(Semaphore)는 여러 프로세스나 스레드가 공유 자원에 안전하게 접근할 수 있도록 자원의 사용을 제어하는 동기화 메커니즘
이진 세마포어(Binary Semaphore): 뮤텍스와의 차이는, 이진 세마포어는 락을 획득한 스레드가 아닌 다른 스레드나 프로세스도 락을 해제할 수 있다는 것
카운팅 세마포어: 동시에 접근할 수 있는 스레드 또는 프로세스의 수를 제한
뮤텍스와 이진 세마포어의 차이에 대해 설명해주세요.
뮤텍스: 뮤텍스를 잠근 스레드나 프로세스만이 락을 해제할 수 있습니다. 즉, 락을 획득한 소유권이 존재
이진 세마포어: 다른 스레드나 프로세스도 락을 해제할 수 있습니다. 즉, 자원을 획득한 스레드가 아닌 다른 스레드도 락을 해제
모니터(Monitor)에 대해 설명해주세요
프로그래밍 언어 수준에서 제공되는 고수준의 동기화 메커니즘
락(Lock)과 조건 변수(Condition Variable)를 포함하는 구조로, 이를 통해 스레드 간의 동기화를 쉽게 관리 (락 메커니즘 이상의 역할)
객체 내의 공유 자원에 접근할 수 있는 메커니즘을 자동으로 제어.
특징: 자동 동기화: 프로그래머가 직접 락을 관리하지 않아도, 모니터는 상호 배제를 보장하며 동기화 문제를 해결합니다. 상호 배제: 모니터는 한 번에 하나의 스레드만 임계 영역에 진입할 수 있도록 제어하여, Race Condition을 방지합니다. 고수준 동기화: 모니터는 자원 관리와 스레드 간 동기화를 자동으로 처리해 프로그래머가 직접 락과 조건 변수를 다룰 필요가 없습니다.
데드락이 무엇인가요?
데드락(Deadlock)은 두 개 이상의 프로세스 또는 스레드가 서로가 가진 자원을 기다리며 무한 대기 상태에 빠지는 현상
상호 배제, 점유 대기, 비선점, 순환 대기 조건이 모두 만족하면 데드락이 발생합니다.
데드락 발생 조건 4가지를 설명해주세요.
상호 배제: 한번에 하나의 스레드 또는 프로세스가 접근할 수 있는 조건
비선점:다른 스레드나 프로세스가 강제로 점유하고 있는 리소스의 소유권을 뻇을 수 없는 조건
점유 대기: 프로세스가 이미 하나 이상의 자원을 점유하고 있는 상태
순환 구조: 여러 프로세스가 순환적으로 자원을 요청하며 서로를 대기하는 상태
데드락을 막는 방법에 대해 설명해주세요.
데드락 예방
상호 배제 조건 완화: 동시 접근 가능하게 합니다. (읽기 작업 등)
점유 대기 조건 완화: 요청할때 모든 자원의 락을 한꺼번에 (순차적으로)요청. 만약 중간에 획득이 불가능하면 다 반환을 한다.
비선점 조건 완화: 다른 프로세스가 자원을 강제로 가져갈 수 있도록
순환 대기 조건 완화: 자원을 고정된 순서로만 요청
데드락 회피
은행원 알고리즘: 은행원이 고객에게 대출을 해주는 방식. 자원의 상태를 미리 검사하여 데드락이 발생할 수 있는지 판단한 후, 안전한 자원 할당만을 허용(매니저가 관리해주는 것 처럼)
데드락 무시
관리자가 직접 해결
Last updated