티스토리 뷰
동기화 (Synchronization)
- 동시에 실행되는 프로세서들의 실행을 제어하여 원하는 실행 순서에 따라서 실행 시점을 맞추는 것
- 공유되는 데이터의 일관성 보장
- 임계 영역(공유데이터를 동시에 조작할때 실행의 특정 순서가 달라질 수 도 있는 영역) 문제를 해결하는 것
락 (Lock)
- 한 프로세스가 임계 영역에 해당하는 코드를 실행하고 있을 때 다른 프로세스가 임계영역으로 진입하지 못하도록 하는 것
- 임계영역으로의 진입 가능성 확인과 동시에 진입 거부를 원자적(프로그램이 중간에 끼어들 수 없음)으로 한번에 처리
- 락킹(locking)을 원자적으로 처리하는 하드웨어 명령어
o TestAndSet()
한 워드의 내용을 확인하고 수정하는 연산을 원자적으로 처리
o Swap()
두 워드의 내용을 서로 교환하는 연산을 원자적으로 처리
(값을 받아오냐 바꾸냐의 차이, 근본적으로는 같음)
세마포어 (Semaphore)
- 하드웨어 명령어를 활용하는 락보다 쉽게 프로그램에 활용하기 위해 제공하는 시스템 API
- 락의 매커니즘을 그대로 활용
- 구성
o 세마포어 변수 S
o 검사 연산 : wait(S) -> 락(lock)의 획득
o 증가 연산 : signal(S) -> 락(lock)의 해제
- 세마포어의 문제
o Busy waiting 문제 - 스핀락(Spinlock) 문제
프로세스가 락을 기다리는 동안 계속 순환됨
짧은 락을 기다리는 경우에는 문맥 교환 비용을 절약할 수 있으나 일반적으로는 CPU를 점유한 상태로 기다리므로 자원낭비
동기화의 문제점
- 교착상태 (Deadlock)
o 두개 이상의 프로세스가 어떤 사건을 기다리고 있는데, 같이 기다리는 프로세스 중 하나만이 그 사건을 발생시킬 수 있는 상황
o 교착상태의 조건
1. 상호배재 (Mutual Exclusion) : 한번에 오직 한 프로세스 만이 자원을 활용할 수 있다.
2. 점유와 대기 (Hold and wait) : 프로세스가 적어도 하나의 자원을 점유하면서 다른 프로세스가 점유하고 있는 자원을 추가로 얻기위해 대기한다.
3. 비선점 (No preemption) : 점유된 자원은 강제로 해체될 수 없고, 점유하고 있는 프로세스가 작업을 마치고 자원을 자발적으로 해체한다.
4. 순환대기 (Circular wait) : 대기하고 있는 프로세스 집합 {P0, P1, ... , Pn} 에서 P0은 P1이 점유한 자원을 대기하고, P1은 P2가 점유한 자원을 대기하고, Pn-1은 계속해서 Pn을 대기하며, Pn은 P0이 점유한 자원을 대기한다.
- 기아 (Starvaiton)
o 프로세스가 세마포어 큐에서 무한히 대기하는 상황
- 우선순위 역전 (Priority inversion)
o 공유 자원에 대한 허가를 기다리는 동안, 낮은 우선순위 프로세스와 스케줄링 순서가 뒤바뀌는 상황
'개발 > 운영체제' 카테고리의 다른 글
페이징(Paging) (0) | 2018.01.08 |
---|---|
메모리 관리(Memory Management) (0) | 2018.01.07 |
교착상태(Deadlock) (0) | 2018.01.05 |
스레드(Thread) (0) | 2018.01.04 |