기술(IT)

세마포어(Semaphores)

2019. 10. 8.
728x90

세마포어는 변수다. 이 변수는 중요한 섹션 문제를 해결하고 다중 처리 환경에서 프로세스 동기화를 달성하는 데 사용된다. 사소한 세마포어는 프로그래머 정의 조건에 따라 변하는 평범한 변수다. 컴퓨터 과학에서 세마포어는 멀티태스킹 운영 체제와 같은 동시 시스템에서 복수의 프로세스에 의해 공통 자원에 대한 접근을 제어하기 위해 사용되는 변수 또는 추상 데이터 유형이다. 실제 시스템에 사용되는 세마포어를 생각할 수 있는 유용한 방법은 특정 자원의 단위를 몇 개 사용할 수 있는지를 기록한 것으로, 단위가 요구되거나 자유로워질 때 안전하게 그 기록을 조정하는 작업과 결합되어 있으며, 필요한 경우 자원의 단위가 이용 가능해질 때까지 기다리는 것이다.  세마포어는 인종 조건의 예방에 유용한 도구지만, 프로그램이 이러한 문제로부터 자유롭다는 보장은 결코 아니다. 임의의 자원 개수를 허용하는 세마포어를 세마포어(counting semaphore)라고 하고, 값 0과 1로 제한되는 세마포어를 이진 세마포어(binary semaphores)라고 하며, 잠금을 구현하는 데 사용한다. 라이브러리이 한 번에 한 학생에 의해 사용될 10개의 동일한 공부방을 가지고 있다고 가정하자. 학생들은 공부방을 쓰려면 프런트에 방을 요청해야 한다. 만약 방이 없다면, 학생들은 누군가가 방을 포기할 때까지 책상에서 기다린다. 학생이 방 사용을 마쳤을 때, 학생은 반드시 책상으로 돌아와 한 방이 자유로워졌음을 표시해야 한다. 가장 간단한 구현으로 프런트의 점원은 이용할 수 있는 무료 객실 수만 알고 있는데, 모든 학생들이 등록을 하고 다 마쳤을 때 실제로 방을 사용하고 있는지 여부만 정확히 알고 있다. 학생이 방을 요청하면, 점원은 이 번호를 줄인다. 학생이 방을 내놓으면 점원은 이 숫자를 늘린다. 그 방은 원하는 만큼 오래 사용할 수 있어서, 미리 방을 예약할 수 없다. 이 시나리오에서 프런트 데스크의 개수 보유자는 셈 세마포어를 나타내고, 룸은 자원이며, 학생은 프로세스/스레드를 나타낸다.
이 시나리오에서 세마포어의 값은 처음에는 10이며, 모든 방은 비어 있다. 학생이 방을 요청하면 열람이 허가되고, 세마포어의 가치는 9로 변경된다. 다음 학생이 오면 8명, 7명 등으로 떨어진다. 누군가가 방을 요청하고 현재 세마포어의 값이 0이면, 그들은 방이 해방될 때까지 기다리게 된다. 방 중 하나가 풀려났지만 여러 명의 학생이 기다리고 있다면, 어떤 방법을 써서라도 그 방을 차지할 사람을 선택할 수 있다. 그리고 물론 학생은 정말로 방을 나간 후에야 비로소 자신의 방을 풀어준다는 사실을 점원에게 알려야 할 필요가 있고, 그렇지 않으면 그런 학생이 방을 나가는 과정에 있고, 또 다른 학생이 방을 나가기 전에 방에 들어갈 때는 난처한 상황이 벌어질 수 있다.

중요 관측치
리소스 풀에 대한 액세스를 제어하는 데 사용할 때 세마포어는 사용 가능한 리소스 수만 추적하며, 어떤 리소스가 사용 가능한지 추적하지 않는다. 특정 자유 자원을 선택하기 위해 다른 메커니즘이 필요할 수 있다. 패러다임은 특히 강력하다. 왜냐하면 세마포어 카운트는 여러 가지 다른 작용에 유용한 트리거 역할을 할 수 있기 때문이다. 위의 사서들은 학생들이 남아 있지 않을 때 학습장에 불을 끌 수도 있고, 대부분의 방이 비어 있을 때 방이 매우 바쁘다는 표지판을 놓을 수도 있다. 프로토콜의 성공에는 어플리케이션이 그것을 정확히 따라야 한다. 공정성과 안전성은 한 가지 과정이라도 잘못 작용하면 훼손되기 쉽다. 여기에는 다음이 포함된다.

의미론 및 구현
세마포어 카운팅에는 역사적으로 P와 V로 표기된 두 가지 작업이 장착된다. 연산 V는 세마포어 S를 증가시키고, 연산 P는 세마포어 S를 감소시킨다. 세마포어 S의 값은 현재 사용 가능한 리소스의 단위 수입니다. P 운영은 세마포어에 의해 보호되는 자원을 사용할 수 있게 될 때까지 시간을 낭비하거나 잠을 잔다. 이때 그 자원은 즉시 할당된다. V 작업은 역순으로 진행되며, 프로세스가 V를 사용한 후 리소스를 다시 사용할 수 있게 한다. 세마포어 S의 한 가지 중요한 속성은 V와 P 연산을 사용하는 경우를 제외하고는 그 값을 변경할 수 없다는 것이다.

대기(P) 및 신호(V) 작동 이해
대기: 세마포어 변수의 값을 1로 감소시킨다. 세마포어 변수의 새 값이 음수일 경우, 대기 실행 프로세스가 차단된다. 그렇지 않을 경우, 프로세스는 리소스의 단위를 사용하여 실행을 계속한다.
신호: 세마포어 변수의 값을 1씩 증가시키십시오. 증분 후 증가 전 값이 음수라면, 차단된 프로세스를 세마포어의 대기열에서 준비 대기열로 전송한다.
많은 운영 체제는 세마포어가 증가할 때 대기 프로세스를 차단하는 효율적인 세마포어 원료를 제공한다. 이는 공정이 불필요하게 세마포어 값을 확인하는 데 시간을 낭비하지 않는다는 것을 의미한다. 세마포어는 기아를 피하기 위해 프로세스와 관련된 대기열을 가지고 있다. 값이 0인 세마포어에 대해 공정이 P연산을 수행하면 공정이 세마포어의 큐에 추가되어 실행이 보류된다. 다른 프로세스가 V 작업을 수행하여 세마포어를 증가시키고 대기열에 프로세스가 있을 때 그 중 하나가 대기열에서 제거되어 실행을 재개한다. 프로세스가 서로 다른 우선순위를 가질 경우, 우선 순위에 따라 대기열을 정렬하여 가장 높은 우선순위 프로세스를 먼저 대기열에서 취하도록 할 수 있다.

세마포어 개념은 유닉스(Unix)에서 구현된 기술인 세마포어(Semaphore)에서 둘 이상의 단위를 청구하거나 반환할 수 있는 기능으로 확장될 수 있다. 수정된 V와 P 연산은 다음과 같다. 대괄호를 사용하여 원자 연산을 나타낸다. 즉, 다른 공정의 관점에서 분리할 수 없는 것으로 보이는 연산은 다음과 같다. 단, 본 섹션의 나머지 부분은 별도로 명시하지 않는 한 단일한 V 및 P 연산을 갖는 세마포어를 가리킨다. 이행이 증가, 감소 및 비교 작업의 원자성을 보장하지 않는다면, 증가 또는 감소는 잊혀지거나 세마포어 값이 음수가 될 위험이 있다. 원자성은 세마포어를 한 번의 작업으로 읽고, 수정하고, 쓸 수 있는 기계지침을 사용함으로써 달성될 수 있다. 그러한 하드웨어 명령이 없는 경우, 원자 조작은 소프트웨어 상호 배제 알고리즘을 사용하여 합성할 수 있다. 유니프로세서 시스템에서는 임시로 선처를 중단하거나 하드웨어 인터럽트를 비활성화함으로써 원자력 운영을 보장할 수 있다. 이 접근방식은 세마포어를 공유하는 두 프로그램이 동시에 다른 프로세서에서 실행될 수 있는 다중 프로세서 시스템에서는 작동하지 않는다. 다중 프로세서 시스템에서 이 문제를 해결하기 위해 세마포어에 대한 접근을 제어하는 잠금 변수를 사용할 수 있다. 잠금 변수는 시험 및 설정 잠금 명령을 사용하여 조작된다.

LIST

'기술(IT)' 카테고리의 다른 글

커널 (Kernel)  (0) 2019.10.10
DMA (Direct Memory Access)  (0) 2019.10.09
CPU 캐시(CPU Cache) 캐시 계층  (0) 2019.10.07
CPU 캐시(CPU Cache) 주소번역  (0) 2019.10.07
CPU 캐시(CPU Cache) 정책  (0) 2019.10.06

댓글

추천 글