< 쉬운예시 >
할 일(task)가 : 빨래, 설거지, 청소 라고 할 경우
동기 : 빨래 끝내고-> 설거지 끝내고 -> 청소를 한다.
비동기 : 빨래 대행 업체, 설거지 대행 업체, 청소 대행 업체
=> task가 언제 끝날지는 모르지만 완료되면 나한테 알려주니 난 다른 작업을 할 수 있다
- 요청과 그에 따른
결과가 동시에일어나는 것
=> 이 말은 값이 반환 되기 전까지는 '블로킹' 되어 있다.- 즉 요청 후 결과가 와야만, 그 다음 작업이 이루어지는 방식
🤦♀️어떠한 일을 처리하는 동안 다른 일을 할 수 없다.
- 요청과 그 결과가
동시에 일어나지 않는 것
=> 얘는 '블로킹' 되지 않고이벤트 큐에 넣거나, 백그라운드 스레드에게 해당 task 를 위임하고 바로 다음 코드를 실행하기 때문에 기대되는 값이 바로 반환되지 않는다.- 요청 후 결과가 오는 동안, 그 다음 작업을 함
👍 동기보다 복잡하지만, 일을 처리하면서도 다른 쪽에서도 일을 할 수 있어 효율적임.
'블로킹'/'논-블로킹'은 동기/비동기와 관점이 다르고, 제어권이 어디에 있느냐에 대한 관점이다.
블로킹
호출된 함수가 자신의 작업을 모두 끝날 때 까지 제어권을 갖고 있어 호출한 함수가 대기하도록 함
논-블로킹
호출된 함수가 바로 return 해서 호출한 함수에게 제어권을 넘겨주어 다른 일을 할 수 있게 함
여러 프로세스가 공유하는 자원의 일관성을 유지하는 것.
=> 공유하는 자원에 하나의 프로세스만이 이용하도록 제어
**공유 자원**에 대해 여러 프로세스 or 스레드가 **동시에 접근하려고**할 때, 결과값에 **영향을 줄 수 있는 상태**
=> 동기화 메커니즘을 사용하여 공유 자원에 대한 접근을 조절할 수 있습니다.
프로세스가 'System Call'을 하여 커널 모드로 진입하여 작업을 수행하는 도중 '문맥 교환'이 발생
문맥 교환 : 현재 실행 중인 프로세스의 상태를 저장하고 다음 실행할 프로세스의 상태를 복원하는 작업
문제점 :
프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우 ( 프로세스2가 작업에 반영되지 않음 )
해결법
프로세스가 커널모드에서 작업을 하는 경우 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 함
동일한 자원에 - 동시에 접근하는 작업(ex. 공유하는 변수 사용, 동일 파일 접근 및 수정 등)을 실행하는 코드 영역을 뜻함.
우리의 목표 = 데이터가 한 번에 하나의 프로세스만 접근할 수 있게 하자
ex) 이해 꿀팁: 화장실 키를 들고 갔다로 이해하자
뮤텍스는 상태가 오직 획득(Lock) / 해제(Unlock)만 존재한다
(정의)
(한계)
다중처리기 환경에서는 시간적인 효율성 측면에서 적용이 어려움.
ex) 이해 꿀팁 🤔:
세마포어는 화장실이 여러 개 있고, 화장실 입구에는 현재 빈 화장실의 개수를 알려주는 전광판이 있는 식당과 비슷하다.
모든 칸의 화장실이 사용중일 때 전광판의 숫자는 0이 되며, 손님들은 전광판 숫자가 1로 바뀔 때까지 대기해야한다.
(정의)
(단점)
Busy Waiting(바쁜 대기)
'스핀 락'(세마포어 초기 버전)에서 '임계영역'에 진입해야하는 프로세스는 진입 코드를 계속 반복 실행해야 하며, CPU 시간을 낭비한다는 점.
카운팅 세마포어
이진 세마포어 (뮤텍스)
'뮤텍스'는 상태가 0, 1 두 개 뿐인 '이진 세마포어' 이다.
'세마포어'는 프로세스/스레드가 소유할 수 없는 반면, '뮤텍스'는 소유가 가능하며 프로세스/스레드가 이에 대한 책임을 진다.
=> (Mutex 의 경우 상태가 두개 뿐인 lock 이므로 lock 을 ‘가질’ 수 있다.)
'뮤텍스'는 동기화 대상이 오직 하나뿐일 때, '세마포어'는 동기화 대상이 하나 이상일 때 사용한다.
사용 목적
뮤텍스: 주로 임계 영역에 대한 접근을 제어하는 데 사용됩니다. 한 번에 하나의 스레드만이 임계 영역에 접근할 수 있도록 합니다.
세마포어: 주로 자원의 접근을 조율하고 동기화하는 데 사용됩니다. 여러 개의 스레드 또는 프로세스가 동시에 접근할 수 있는 자원의 개수를 제한하는 데 사용됩니다.
'세마포어'는 자원의 가용 개수를 제한하거나 동기화를 위해 카운팅이 필요한 경우
반면 '뮤텍스'는 임계 영역에 대한 동시 접근을 막아야 하는 경우에
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리기 때문에 아무것도 완료되지 못하고 있는 상태
외나무 다리에 서있듯이 서로가 비켜주지 않는다.
1. 상호배제 : 하나의 프로세스가 자원을 사용중일 때 다른 프로세스는 그를 사용할 수 없다.
2.점유 대기(Hold and Wait) : 1개 이상의 자원을 점유하고 있으면서 다른 프로세스가 사용중인 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재한다.
3. 비선점 : 다른 프로세스가 자원을 사용중인 경우 그 사용이 끝날 때 까지 강제로 뺏을 수 없다.
4. 순환 대기 : 프로세스의 집합에서 순환형태로 자원을 대기하고 있어야 한다.
조건 중 하나를 제거하면서 예방.
프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 미리 검사하여 교착 상태를 회피한다.
교착상태 발생시, 해결한다와 성능저하가 심할 경우 무시한다.
특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태를 말함.