TIL 221202

강지훈·2022년 12월 1일
0

동기와 비동기의 차이
비유를 통한 쉬운 설명
`해야할 일'이 빨래, 설거지, 청소 세 가지가 있다고 가정한다. 이 일들을 동기적으로 처리한다면 =>
빨래 하고 설거지하고 청소를 한다

비동기적으로 일을 처리한다면 빨래하는 업체에게 빨래를 시키고 설거지 대행 업체에 설거지를 시킨다. 청소 대행 업체에 청소를 시킨다.
셋 중 어떤 것이 먼저 완료될지는 알 수 없다.

Sync VS Async
일반적으로 동기와 비동기의 차이는 메소드를 실행시킴과 동시에 반환 값이 기대되는 경우를 동기라고 표현하고 그렇지 않은 경우에 대해서 비동기 라고 표현한다.
동시에라는 말은 실행되었을 때 값이 반환되기 전까지는 blocking 되어 있다는 것을 의미한다.
비동기의 경우, blocking 되지 않고 이벤트 큐에 넣거나 백그라운드 스레드에게 해당 task를 위임하고 바로 다음 코드를 실행하기 때문에 기대되는 값이 바로 반환되지 않는다.

프로세스 동기화
Critical Section (임계 영역)
멀티 스레딩에 문제점에서 나오듯, 동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역을 Critical Section 이라 칭한다.

Critical Section Problem(임계영역 문제)
프로세스들이 Critical Section을 함께 사용할 수 있는 프로토콜을 설계하는 것이다.

해결을 위한 기본조건
Mutual Exclusion(상호배제)
프로세스 p1이 Critical Section 에서 실행중이라면, 다른 프로세스들은 그들이 가진 Critical Section 에서 실행될 수 없다.

Progress(진행)
Critical Section 에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section 진입 후보로서 참여될 수 있다.

Bounded Waitinmg(한정된 대기)
P1가 Critical Section 에 진입 신청 후 부터 받아들여질 때까지, 다른 프로세스들이 Critical Section에 진입하는 횟수는 제한이 있어야 한다.

해결책
Mutext Lock
동시에 공유 자원에 접근하는 것을 막기 위해 Critical Section에 진입하는 프로세스는 Lock을 획득하고 Critical Section을 빠져 나올 때, Lock을 방출함으로써 동시에 접근이 되지 않도록 한다.

한계
다충처리기 환경에서는 시간적인 효율성 측면에서 적용할 수 없다.

Semaphores(세마포)
소프트웨어 상에서 Critical Section 문제를 해결하기 위한 동기화 도구

종류
OS 는 Counting/Binary 세마포를 구분한다.

카운팅 세마포
가용한 개수를 가진 자원에 대한 접근 제어용으로 사용되며, 세마포는 그 가용한 자원의 개수로 초기화된다.
자원을 사용하면 세마포가 감소, 방출하면 세마포가 증가한다.

이진 세마포
MUTEX 라고 부르며 상호배제의 머릿글자를 따서 만들어졌다.
이름 그대로 0과 1사이의 값만 가능하며 , 다중 프로세스들 사이의 Critical Section 문제를 해결하기 위해 사용한다.

단점
Busy Waiting(바쁜 대기)
Spin lock이라고 불리는 Semaphore 초기 버전에서 Critical Section 에 진입해야하는 프로세스는 진입 코드를 계속 반복 실행해야 하며, CPU 시간을 낭비했었다. 이를 Busy Waiting이라고 부르며 특수한 상황이 아니면 비효율적이다. 일반적으로는 Semaphore에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 Block시킨 뒤, Critical Section에 자리가 날 때 다시 깨우는 방식을 사용한다. 이 경우 Busy waiting으로 인한 시간낭비 문제가 해결된다.

Deadlock(교착상태)
세마포가 Ready Queue 를 가지고 있고, 둘 이상의 프로세스가 Critical Section 진입을 무한정 기다리고 있고, Critical Section 에서 실행되는 프로세스는 진입 대기 중인 프로세스가 실행되야만 빠져나올 수 있는 상황을 지칭한다.

profile
never stop

0개의 댓글