Notice
Recent Posts
Recent Comments
Link
«   2025/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
Tags
more
Archives
Today
Total
관리 메뉴

dearbeany

[OS] 세마포어와 뮤텍스(Semaphore and Mutex) 본문

OS

[OS] 세마포어와 뮤텍스(Semaphore and Mutex)

dearbeany 2022. 5. 1. 16:27

프로세스 간 충돌? (ex. 쓰레드 프로그래밍)→ Concurrency 문제 무조건 발생! → OS가 충돌 예방 위해 자원을 할당/회수 해야.

 

*용어 정리

 

- Synchronization(동기화): 스레드 혹은 프로세스들이 수행되는 시점을 조절하여 서로가 알고 있는 정보가 일치하는 것.

- Race Condition: 둘 이상의 프로세스 혹은 스레드가 동기화 없이 공유자원을 접근하는 현상. 즉, 같은 영역을 거의 동시 access 상황일 때, 어느 프로세스가 변수값 변경하려 하는 경우 거의 동시에 다른 프로세스도 같은 변수에 접근하는 경우.

- Mutual Exclusion: 한 번에 하나의 프로세스씩 access 하는 성질.(서로를 배척해서 하나의 프로세스만이 자원을 사용)

- Critical Section: OS에서 여러 프로세스가 데이터 공유하면서 수행될 때, 각 프로세스에서 공유자원에 접근하는 프로그램 코드 부분.

- Starvation: 자원을 요청했으나, 오랜 시간 배정되지 않아 기다려야 하는 비정상적인 상황

DeadLock: 영원히 Starvation 하는 경우. 다중 프로세스/스레드 환경에서 어느 두 프로세스/스레드가 자원을 점유한 상태에서 동시에 상호 간에 점유한 자원을 요구하는 경우 빠지게 되는 진행 불능 상태.(=교착상태)

Inter-Process Communication(IPC): 공유메모리 영역에 선언된 변수값을 프로세스들끼리 사용.

- Producer-Consumer Problem: 프로세스 처리 시 정보가 필요한데, 이 때 Producer 는 정보를 생산하는 일을, Consumer 는 생산된 정보를 소비하는 일을 한다. Producer 프로세스와 Consumer 프로세스가 생산-소비를 반복하며 Circular buffer 가 비어있는 상태에서 Consumer가 소비하려고 시도하는 경우, 혹은 buffer가 꽉 차 있으나 Producer 프로세스가 생산해내려 하는 경우 문제가 발생. 즉, Shared Memory에 접근 시 Mutual Exclusion 이 보장되지 않아 Race condition이 발생할 수 있음.

 

 

 

* 세마포어 사용 통한 Critical Section Problem 문제 & Busy-Waiting(CPU낭비) 문제 해결.

 - 세마포어(Semaphore): 정수값(0, 1)을 갖는 변수며 자원의 개수. Busy-waiting을 방지.

TestSet()이 Critical Section 에 진입할 수 없는 동안, Busy-waiting 하지 않고 CPU 를 대기상태(=sleep, waiting, blocked)로 보냄.

이 때 CPU는 다른 프로세스에게 할당되며 CPU 점유 때문에 발생했던 낭비 문제 해결!

 

semWait(), semSignal() → carried out Atomically, 즉 실행 중 interrupt 처리하지X.

Why Atomic? Atomic 아니면 Race Condition이 발생할 수 있기 때문에.

여러 개 프로세스가 동시에 fence 와도 하나의 프로세스만 진입, 나머지 프로세스 들은 Blocked Queue에 쌓임.

 

- 뮤텍스(Mutex, Mutual Exclusive): 하나의 프로세스/쓰레드가 Critical Section에서 작업하고 있는 경우, 다른 프로세스/쓰레드의 접근을 막아야(mutual exclusive) Critical Section Probelm 를 방지할 수 있음

'OS' 카테고리의 다른 글

[OS] 파일, 디렉토리  (0) 2022.05.25
[OS] Virtual Machine  (0) 2022.05.24