ns2 에서 예제파일 소스 궁금증 입니다.
안녕하세요?
ns2를 설치하고 예제를 돌리고 있는 학생입니다.
예제의 많은 부분은 이해를 하였는데요 다음과 같은 부분은 잘 모르겠어서 이렇게 질문을 올립니다.
1. nam trace란?
추적하는 내용을 out.nam 에 Write한다는 건 알겠는데 정확히 무슨 내용을 trace해서 남기는지 모르겠습니다.
소스는 다음과 같습니다.
#이 부분은 nam trace를 생성해주고
set nf [open out.nam w]
$ns namtrace-all $nf
#finish proc안에서 실행시키는 것 같습니다.
proc finish {} {
global ns nf
$ns flush-trace
#Close the trace file
close $nf
#Execute nam on the trace file
exec nam out.nam &
exit 0
}
그리고 생성된 out.nam을 열어 보았더니
V -t * -v 1.0a5 -a 0
A -t * -n 1 -p 0 -o 0xffffffff -c 31 -a 1
A -t * -h 1 -m 2147483647 -s 0
n -t * -a 0 -s 0 -S UP -v circle -c black -i black
n -t * -a 1 -s 1 -S UP -v circle -c black -i black
l -t * -s 0 -d 1 -S UP -r 1000000 -D 0.01 -c black -o right
+ -t 0.5 -s 0 -d 1 -p cbr -e 500 -c 0 -i 0 -a 0 -x {0.0 1.0 0 ------- null}
- -t 0.5 -s 0 -d 1 -p cbr -e 500 -c 0 -i 0 -a 0 -x {0.0 1.0 0 ------- null}
h -t 0.5 -s 0 -d 1 -p cbr -e 500 -c 0 -i 0 -a 0 -x {0.0 1.0 -1 ------- null}
+ -t 0.505 -s 0 -d 1 -p cbr -e 500 -c 0 -i 1 -a 0 -x {0.0 1.0 1 ------- null}
.....
이런 식으로 나오더라구요
2. finish procedure 를 정의해 주는 부분의 코드들이 명확하게 이해되지 않습니다.
proc finish {} {
global ns nf //global 변수로 ns, nf생성
$ns flush-trace //flush-trace가 뭔가요?
#Close the trace file
close $nf //trace file을 닫아 주는 이유가 뭐죠?
#Execute nam on the trace file
exec nam out.nam & //이 부분에서 위에서 생성하였던 nam trace를 실행시키고
exit 0 //종료하는 것 같습니다.
}
저의 궁금증을 해결해 주신다면 정말 감사하겠습니다
모두들 좋은 하루 되세요^^
예전 기억을 더듬어
예전 기억을 더듬어 말씀드리자면,
ns2 패키지 안에 아마 nam이라는 것도 들어있을 것입니다. 이건 단순히 텍스트로 시뮬레이션 결과를 보는게 아니라 눈으로 볼 수 있도록 한 것입니다. 따라서 nam용 포맷으로 시뮬레이션 결과를 출력하면 nam이라는 것으로 그 내용을 애니메이션 처럼 볼 수 있습니다. 패킷이 흘러가고 뭐 그런것들을 말이죠.
그리고 finish procedure 안의 flush-trace는 프로그래밍을 하신분이라면 짐작을 하시겠지만, 시뮬레이션 내용을 출력하기 위해 열었던 파일에 아직 기록하지 않은 부분을 강제로 기록하는 것이고, 이후에 파일을 닫는 것이죠. 그 아래 부분은 말씀하신 내용이 맞습니다.
추가적으로 프로시저안의 global은 변수의 생성이 아니라 프로시저안에서 전역변수를 사용하고자 할 때 선언하는 용도로 사용하는 키워드 입니다. ns2 시뮬레이션은 tcl스크립트를 이용해서 하기 때문에 tcl의 간단한 문법은 익히시는것이 정신건강에 좋을듯 하네요... :)
Nam Trace file format에
Nam Trace file format에 대한 자세한 설명입니다.(메뉴얼)
http://www.isi.edu/nsnam/ns/doc/node613.html
참고하시면 되겠네요..
댓글 달기