운영체제 세마포어 예제

이들은 정수 값 세마포이며 무제한 값 도메인을 가있습니다. 이러한 세마포는 리소스 액세스를 조정하는 데 사용되며, 여기서 세마포 수는 사용 가능한 리소스 수입니다. 리소스가 추가되면 세마포 수가 자동으로 증가되고 리소스가 제거되면 개수가 감소됩니다. 세마포어 개념은 네덜란드의 컴퓨터 과학자 인 Edsger Dijkstra가 1962 년 또는 1963 년에 발명했으며[1] Dijkstra와 그의 팀은 전기 로직라 X8의 운영 체제를 개발할 때 발명되었습니다. 그 시스템은 결국 멀티 프로그래밍 시스템으로 알려지게되었다. 10명의 사용자만 지원할 수 있는 시스템(S=10)을 고려합니다. 사용자가 로그인할 때마다 P가 호출되어 세마포 S를 1로 줄입니다. 사용자가 로그아웃할 때마다 V가 호출되고 사용 가능해진 로그인 슬롯을 나타내는 S를 1로 증가시입니다. S가 0이면 로그인하려는 모든 사용자는 S > 0까지 기다려야 하며 로그인 요청이 FIFO 큐에 큐에 대기됩니다. 상호 제외는 요청이 순서대로 큐에 대기되도록 하는 데 사용됩니다.

S가 0(로그인 슬롯 사용 가능)을 초과할 때마다 로그인 요청이 큐에서 해제되고 요청을 소유한 사용자가 로그인할 수 있습니다. 세마포 개념계산은 유닉스에서 구현된 기술인 세마포어로부터 하나 이상의 „단위”를 주장하거나 반환하는 능력으로 확장될 수 있다. 수정된 V 및 P 연산은 다음과 같이, 대괄호를 사용하여 원자성 작업, 즉 다른 프로세스의 관점에서 나눌 수 없는 것처럼 보이는 작업을 나타냅니다: 많은 운영 체제는 블록을 해제하는 효율적인 세마포 프리미티브를 제공합니다. 세마포가 증분될 때 대기 프로세스를 진행합니다. 즉, 프로세스가 세마포 값을 불필요하게 확인하는 데 시간을 낭비하지 않습니다. 예를 들어, 우리는 세마포 s, 그리고 동시에 그들의 중요 한 섹션을 입력 하려는 두 개의 프로세스, P1 및 P2. P1 먼저 대기(들)를 호출합니다. s의 값은 0으로 감소하고 P1은 임계 섹션에 들어갑니다. P1이 임계 섹션에 있는 동안 P2는 wait(들)를 호출하지만 s의 값이 0이기 때문에 P1이 임계 섹션을 완료하고 신호를 실행할 때까지 기다려야 합니다. P1이 신호를 호출하면 s의 값이 1로 증가되고 P2는 임계 섹션에서 실행을 진행할 수 있습니다(세마포를 다시 감소한 후).