-
[OS] Synchronization과 AsynchronizationCS/Operating System 2021. 9. 20. 20:26
이 포스팅은 세미나를 위해 https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS를 참고하여 작성하였습니다.
Synchronization vs Asychronization
- Synchronization: 메소드를 실행했을 때 값이 반환되기 전까지 blocking되어 메소드 실행과 동시에 반환 값이 기대되는 경우를 말한다.
- Asynchronization: 메소드를 실행했을 때 blocking되지 않고 이벤트 큐에 넣거나 백그라운드 스레드에게 해당 task를 위임하고 다음 코드를 수행하기 때문에 반환 값을 바로 반환하지 않는다.
프로세스 동기화
Critical Section (임계영역)
- 동일한 자원을 동시에 접근하는 작업 (e.g., 공유하는 변수 사용, 동일 파일 동시 수정 등)을 실행하는 코드 영역
Critical Section Problem (임계영역문제)
- 프로세스들이 Critical section을 함께 사용할 수 있는 프로토콜을 설계하는 것
- Requirements
- Mutual Exclusion (상호 배제)
어떤 프로세스가 Critical Section에서 실행 중이라면 다른 프로세스들은 그들이 가진 해당 Critical Section에서 실행될 수 없다. - Progress (진행)
Critical Section에서 실행 중인 프로세스가 없고, Critical Section에 진입하고자 희망하는 프로세스가 존재한다면, Critical Section에 진입할 프로세스가 무기한 연기될 수 없다. → deadlock free - Bounded Waiting (한정된 대기)
각 프로세스는 유한한 수의 시도 후에 Critical Section에 진입할 수 있어야 한다. → starvation free
- Mutual Exclusion (상호 배제)
해결책
Lock
- 하드웨어 기반 해결책
- 동시에 공유 자원에 접근하는 것을 막기 위해 C.S.에 진입하는 프로세스는 Lock을 획득하고 C.S.을 빠져나올 때, Lock을 방출함으로써 동시에 접근하지 못하도록 한다.
한계: Multiprocessor 환경에서는 시간적인 효율성 측면에서 적용할 수 없다 (?)
Semaphores
- 소프트웨어 상에서 C.S. 문제를 해결하기 위한 동기화 도구
- 종류
- Counting Semaphore: 가용한 개수를 가진 자원에 대한 접근 제어용으로 사용되며, 세마포는 그 가용한 자원의 개수로 초기화 된다. 자원을 사용하면 세마포가 감소, 방출하면 세마포가 증가 한다.
- Binary Semaphore: MUTEX라고도 부르며, 0 과 1 사이의 값만 가능하며, 멀티프로세스들 사이의 C.S. 문제를 해결하기 위해 사용한다.
- 단점
- Busy Waiting
- Spin lock이라고 불리는 Semaphore 초기 버전에서 Critical Section에 진입해야하는 프로세스는 진입 코드를 계속 반복 실행해야 하며, CPU cycle이 낭비됨.
- 일반적으로는 Semaphore에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 block시킨 뒤, Critical Section에 자리가 날 때 다시 깨우는 방식을 사용한다. 이 경우 Busy waiting으로 인한 시간낭비 문제가 해결된다.
- Busy waiting을 할 경우 CPU cycle이 낭비된다는 단점이 있지만, C.S.에 진입하지 못한 프로세스를 block하는 경우 2번의 context switch가 일어나게 된다.
만약 lock을 짧은 시간 동안 소유하고 있는 경우엔 busy waiting이 효율적일 수 있다
→ tradeoff: context switch time (block) vs busy waiting
- Busy Waiting
문제점 (수정 必)
DeadlockPriority InversionIncorrect Use of Semaphores
모니터
- 고급 언어의 설계 구조물로서, 개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태이다.
- 공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리한다.
(Semaphore는 직접 키 해제와 공유자원 접근 처리가 필요하다. )
'CS > Operating System' 카테고리의 다른 글
[OS] Critical Section Problem S/W Solution - Peterson's Solution (0) 2021.12.01 [OS] Synchronization과 Critical-Section Problem (0) 2021.12.01 [OS] CPU Scheduler (0) 2021.09.20 [OS] Scheduler (0) 2021.09.20 [OS] Multithread (0) 2021.09.20