-
[Java/OS] 세마포어(Semaphore)에 관하여프로그래밍 언어/Java 2022. 3. 18. 08:26
이전에 OS와 시스템프로그래밍을 공부할 때
임계영역, 세마포어, 데드락, 뮤텍스락 등 배운적이 있는데
기억이 흐릿해져 다시 한번 정리하고자 한다.
사실 재밌는 옛날이야기를 찾아 신나서 포스팅 하는 것이기도 하다. ㅋㅋㅋㅋㅋ
세마포어(Semaphore)의 유래
Semaphore
는 깃발이라는 뜻이다. (!!!)
옛날 기찻길에서 깃발 표식으로 파란색이 걸려있으면 지나가도 되고
빨간색이면 다른기차가 지나간 후에 통과하라는 표시였다고 한다.
그리고 이 깃발이 Semaphore라고 한다.
(매 우 흥 미 롭 잖 아 !!)세마포어와 뮤텍스(Mutex)
세마포어는 2개이상의 프로세스(또는 쓰레드)가 공유자원에 대한 접근을 제어하는
변수
뮤텍스는 딱 2개의 프로세스(또는 쓰레드)가 공유자원에 대한 접근을 제어하는변수
(그래서바이너리 세마포어(Binary Semaphore)
라고도 불린다.)
그리고 프로세스의 공유자원은 메모리와 같은 하드웨어가 있어 보통 세마포어(Semaphore)로 제어되지만
쓰레드의 공유자원은 소프트웨어 자원(공유변수)이기에 뮤텍스(Mutex)로 많이 제어가 이루어진다.세마포어가 공유자원을 제어하는 방법
예시로 해당 공유자원(ex_ 프린터)에 접근가능한 프로세스가 최대 4개라고 한다면
세마포어는 4로 설정이 되어있고, 프린터가 사용될 때 마다 1씩 감소한다.
자원(프린터)의 사용이 끝나고 반환되면 다시 세마포어는 1이 증가한다.
즉, 세마포어가 0일때는 프로세스는 자원을 사용하기 위해 wait 상태에 빠진다.728x90'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 바이트코드 조작하기 (JavaAgent, JVM, Jacoco) (0) 2022.06.06 [Java] JVM 이 무엇인지, 어떻게 작동하는지 대충 훑어보자! (feat. 클래스로더) (1) 2022.05.29 [Java] ThreadLocal 이 필요할 때 (feat. Thread, Thread-Safe, OS, Spring Security) (0) 2022.03.15 [Java 성능개선] for 루프와 String 연산, 입출력 (0) 2022.01.26 [Java] Swap 함수 구현 (Call-by-value) (0) 2021.10.15