메인 회로 네트워크 채널(줄여서 전역채널 이라 말함)이 존재한다
전역채널은 모든 역들의 프로세서와 중앙 프로세서에 연결되어있는 한 가닥의 선이다

중앙에서 계산을 담당하는 중앙 프로세서가 존재한다
중앙 프로세서에는 선점 관리자, 전역id관리자가 포함된다

물류 기차는 메인역 -> 메인역 -> 대기역 의 스케줄을 가진다
대기역에는 주유소가 존재한다

기차를 이용한 신호 처리 우선순위 선점 기능(줄여서 선점 이라 말함)으로 전역채널의 소유권을 분배한다
전역채널은 한 번에 최대 한 요청역만이 소유권을 갖게 된다
전역채널을 다 사용한 이후에는 전역채널을 소유하던 역의 프로세서에서 전역 채널로 선점 종료 신호를 보낸다
선점 종료 신호를 받은 중앙의 선점 관리자는 소유권을 회수하고 다른 선점 요청을 처리하기를 시작한다

공급/요청 역마다 프로세서가 존재한다
공급/요청 역마다 기차가 정차하고 신호를 읽는 메인 역 하나, 그리고 선점 기능을 위한 선점 역 하나 이렇게 2역이 필요하다
공급 역은 추가로 공급 전용 소유권을 할당받기 위한 공급 선점역이 1개 추가로 필요해 총 3개의 역이 필요하다
모든 메인 역 이름은 서로 같으며, 모든 선점 역 이름은 서로 같다
선점 역과 공급 선점 역 이름은 서로 다르다
공급/요청 역마다 할당된 작업의 id를 저장하는 작업id 레지스터가 존재한다
요청 역마다 상태를 저장하는 상태 레지스터가 존재한다
공급 역마다 아이템의 공급 수량을 저장하는 레지스터가 존재한다

전역id관리자에 존재하는 변수인 작업id는 초기값 1을 가진다
소유권을 얻은 공급/요청역은 현재의 작업 id값을 해당 작업의 작업id로 사용한다
이렇게 작업id값을 사용한 다음 전역id관리자는 작업id값을 1 증가시켜 다음에 쓰일 작업id가 중복되지 않도록 한다
전역id관리자는 전역 채널의 작업id값이 오버플로우하여 0이 되면 작업id값을 1 증가시켜 다시 사용할 수 있도록 한다
(0인 작업id값은 유효하지 않다)

<알고리즘>
1. 요청역은 상자의 아이템 수량이 설정량보다 적은 걸 감지해 자신의 상태 레지스터를 0에서 1로 바꾸고 선점을 요청한다
2. 선점이 시작되면 요청역은 자신의 상태 레지스터를 1에서 2로 바꾸고 전역 채널에 자신이 필요한 아이템을 신호로 1틱동안 출력한다
3. 공급역은 자신이 공급하는 아이템과 전역 채널에 표시된 아이템이 같은 경우 해당 수량만큼을 공급할 여력이 되면 공급 선점을 요청한다
4. 선점에 성공한 공급역은 선점 성공 신호를 전역 채널에 1틱동안 보내며 필요한 아이템의 수량을 레지스터에 저장한다
5. 전역 채널에 선점 성공 신호가 1틱만큼 보내지면 그 다음 틱엔 공급/요청 역의 작업id레지스터에 동일한 작업id가 들어가고
    전역id관리자는 작업id를 1 증가시킨다
    동시에 공급역이 1틱통안 활성화되어 기차는 대기역에서 공급역으로 출발한다
5. 어떤 공급역도 선점 성공 신호를 보내지 않았을 경우 요청역은 자신의 상태 레지스터를 2에서 3으로 바꾼다
    그리고 일정 틱만큼 대기한 후 상태 레지스터를 3에서 1로 바꾸고 다시 선점을 요청하게 된다
6. 기차가 공급역에 도착하고 해당 아이템을 전부 정확한 수량으로 적재하면 공급역은 선점을 요청한다
7. 선점이 시작되면 공급역은 자신이 저장하고 있던 작업id를 전역 채널로 1틱 보낸다
8. 요청역은 자신이 저장하던 작업id와 동일한 작업id가 전역 채널에 송신된 것을 확인하고 역을 활성화시킨다
    이때 공급역과 요청역의 작업id레지스터는 더 필요가 없으니 초기화된다
    또한 요청역의 상태 레지스터를 2에서 4로 바꾼다
9. 기차가 요청역에 도착해 물건을 전부 하역했을 경우 요청역은 상태 레지스터를 4에서 0으로 바꾼다