NS3의 이벤트 스케줄링 메커니즘에 대한 이해

2704 단어 NS3
ns-3은 이산 이벤트 네트워크 시뮬레이터입니다.각 이벤트에는 지정된 실행 예정 시뮬레이션 시간이 있습니다.개념적으로 아날로그는 아날로그 시간에 실행될 여러 사건을 추적한다.아날로그의 작업 메커니즘은 예정된 아날로그 시간 순서에 따라 사건을 집행하고 순서대로 스케줄링하는 것이다.이벤트가 발생하고 실행이 완료되면 시뮬레이터는 다음 이벤트로 이동합니다.
시뮬레이터는 이러한 모든 작업을 수행하려면 다음과 같은 몇 가지 요소가 필요합니다.
(1) 시뮬레이터 대상, 이 대상은 이벤트 대기열에 접근할 수 있고 이벤트의 실행을 관리할 수 있다.
(2) 스케줄러, 대기열에 이벤트를 삽입하고 삭제합니다.
(3) 시뮬레이션 시간을 나타내는 방식
(4) 이벤트 자체는 보통 어떤 함수이다.
스케줄링 이벤트가 발생하는 방식은 두 가지가 있는데 그것이 바로 context가 필요하거나 필요하지 않다는 것이다. 여기의context는 이벤트에 대응하는 노드의 정보를 포함한다.스케줄링할 이벤트가 이 노드에서 실행된다면 context가 필요하지 않습니다.만약에 크로스 노드의 스케줄링 이벤트가 발생하면 스케줄러에context 즉 노드의 정보를 전달해야 한다.크로스 노드의 스케줄링 이벤트의 이런 상황은 전송 패키지가 채널에 전달되는 데 발생한다. 채널의 다른 노드가 이 패키지를 수신할 수 있도록 하려면 이벤트를 스케줄링할 때 목표 노드의context 정보를 전달해야 한다.
두 가지 스케줄링은 다음과 같습니다.
Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj);

Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj);

여기서 매개변수 time는 이벤트의 예상 실행 시간입니다. 매개변수 memptr는 스케줄링된 이벤트의 지침입니다. 매개 변수obj는 스케줄링을 시작하는 클래스의 지침입니다.
ns3의 스크립트는 응용층을 설정할 때 실제로 하도급 이벤트가 발생했습니다.한 응용층의 하도급 이벤트는 하나하나 이어지고 하나의 하도급 이벤트가 끝난 후 응용층의 실제 상황에 따라 시간 간격을 계산하여 이 시간 간격으로 다음 하도급 이벤트가 발생한다.발생한 하도급 이벤트가 이벤트 대기열에 추가됩니다.
에뮬레이션 스크립트의 마지막 부분에는 다음과 같은 코드가 있습니다.
Simulator::Stop (Seconds (21.0));
Simulator::Run ();
Simulator::Destroy ();

첫 번째 문장은 모의 종료 시간을 미리 설정하는 것입니다. 이 문장이 없으면 모의 실행은Simulator:::런 () 에 영원히 머무를 것입니다.
Simulator::Run () 은 하나의 순환에 해당합니다. 이 순환은 이벤트 대기열의 실행 대기 이벤트를 끊임없이 검사합니다. 예정된 시간이 가장 먼저인 (먼저 들어오는 것이 반드시 먼저 실행되는 것은 아닙니다. 이벤트의 실행 시간을 보아야 합니다.) 이벤트를 출력하고 실행이 끝난 다음에 다음을 실행합니다.비realtime 모의 모드에서 모의기는 진정한 모의 시간에 관심이 없고 사건의 발생 순서에 따라 하나씩 집행할 뿐이다. 모의 시간이 압축되면 모의 과정은 곧 집행되고 완성된다.리얼타임 모드에서 이벤트의 실행 시간은 설정된 시간과 엄격하게 일치하고 모의 과정은 비교적 느리다.다음은 라이브 에뮬레이션 코드입니다.
GlobalValue::Bind ("SimulatorImplementationType",
                     StringValue ("ns3::RealtimeSimulatorImpl"));

Simulator:::런 () 은 설정된 stop 시간까지 실행된 후에 종료됩니다. Simulator::Destroy () 에서 관련 자원을 방출합니다.이 모방을 끝냅니다.
따라서 팩시밀리 프로세스는 Simulator:::Run () 이 사순환과 유사한 함수에서 이루어지고 이벤트를 실행합니다.이벤트의 발생은 최초의 응용층이 초기화될 때 시작된 것이다. 이 이벤트는 하도급 이벤트를 생성하고 하도급 이벤트는Simulator::Run()에서 실행된 다음에 층층이 프로토콜을 통해 하도급 패키지(기간에 중간 이벤트가 있을 수 있음)를 전달한다. 맨 밑에 가면 채널 지연 시간, 메시지 소음 비율, 오타 등 파라미터를 계산하고 하도급 이벤트를 발생시킨다.패키지 이벤트는 다른 노드에서 실행되기 때문에 위에서 설명한 context를 사용합니다.하도급 사건이 끝나기 전에 다음 하도급 사건이 예정된다.따라서 응용층의 하도급 이벤트는 끊임없이 순서대로 발생하고 모든 하도급 이벤트가 끝나기 전에 다른 노드의 하도급 이벤트가 발생하며 다른 노드의 하도급 이벤트는 이어서 집행된다.이 과정은 응용층 stop 시간이 끝날 때까지 실행됩니다.레이어를 적용하여 시작 및 종료 시간을 설정하는 코드의 예는 다음과 같습니다.
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (19.0));

좋은 웹페이지 즐겨찾기