티스토리 뷰

동기화 (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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함