55941718 tap2 mophongtrongns 2 org
Post on 26-Nov-2015
34 Views
Preview:
TRANSCRIPT
-
VNTELECOM.ORG
ADNET
NETSIM
M PHNG TRONG NS-2
TI LIU THAM KHO
LNH VC M PHNG V NG DNG
Dch thut bi: Nhm TE
Bin tp bi: Nhm CM
H Ni 12 - 2009
-
Ni dung trong ti liu ny c ly t mt s sch tham kho v cc bi bo khoa hc. Vic
thc hin ti liu ny l Phi Li Nhun nn chng ti khng tin hnh cc th tc v bn quyn.
Nu c nhn/t chc no sao chp ni dung ti liu ny vo cc sn phm thng mi th trch
nhim thc thi vn bn quyn thuc v c nhn/t chc .
y l mt ti liu min ph. Bn hon ton c th phn phi li cho nhng ngi s dng
khc hoc c th chnh sa cho ph hp.
Ti liu ny c pht hnh vi hy vng rng n s tr nn hu ch, nhng n KHNG KM
THEO BT K S BO M NO, ngay c nhng m bo ngm hiu v vic thng
mi ho hay phi ph hp vi mt ch c th no (vn ny bn c th tham kho giy
php GNU General Public License bit thm chi tit)
Ti liu ny c ti tng hp v nh dng li t cc bn dch. Trong qu trnh nh dng, ti
c gng sa cc li nh: tham chiu cc phn, li chnh t, thiu du ... nhng c th cn
b st. Trong trng hp bn c pht hin c li, cc bn hy gi th v a ch cui ti
liu ny. Cc li ny s c sa i trong phin bn k tip
NetSim
AdNetVNtelcom.orgTM Tp hai: M phng trong NS-2 One Edition
-
Xin c trch dn mt cu trong cun sch "The Last Lecture", tc gi cun sch
lm vic ti trng i hc Carnegie Mellon (CMU). L do trch dn xin mi bn
c tm hiu ...!
"...
Chng ta khng i c nhng qun bi chia,
ch c th i cch chi nhng qun bi ..."
The Last Lecture by Randy Pausch
Carnegie Mellon University
-
Li ni u
K t khi ban qun tr din n vntelecom.org thnh lp nhm AdNet cho ti
nay c hn mt nm. T khi thnh lp nhm pht ng d n NETSIM
D n bin tp ti liu m phng bng ting Vit. n thng 04/2009 nhm hon
thnh tp mt ca d n, ti liu c tn l - "L thuyt chung v m phng". Tp
mt c cng b chnh thc trn din n vntelecom.org.
Sau khi hon thnh tp mt, nhm tip tc pht trin d n vi mc tiu l hon
thnh tp hai: M phng trong NS-2. Sau nhiu ln tr hon v nhng l do khc
nhau, n thng 12-2009 nhm hon thnh tp hai.
tp mt chng ti bin dch v gii thiu vi bn c nhng khi nim tng
quan trong m phng. Nhng khi nim v nh gi hiu nng, cc li thng gp khi
m phng, cc k thut m phng, nguyn l v m phng, gii thiu v m phng
ri rc trong h thng mng my tnh v mng vin thng. Ngoi ra cn cp n
vic so snh v nh gi cc chng trnh m phng ph bin hin nay. Nh vy, ni
dung trong tp mt l nn tng nhng ngi quan tm n lnh vc m phng c
th tm hiu. ng thi n l c s bn c tm hiu cc vn c cp trong
tp hai. Nhng vn ny thng hay b b qua i vi nhng ngi mi tm hiu.
Trong tp hai, chng ti gii thiu vi bn c mt b cng c m phng c th
- l b cng c m phng NS-2-allinone. Trong ti liu ny gi tt l NS-2. L
do chng ti chn NS-2 n gin l y l b m phng m ngun m, min ph vi
ngi dng. N l b cng c m phng mnh, c cng ng mng s dng ph
bin khp ni trn th gii, thm ch c nhng din n chuyn v chng. B m
phng ny ph hp vi cc i tng sinh vin, nghin cu sinh. Thng tin chi tit
c trnh by chng 1 ca cun ny.
Mc ch ca vic dch ti liu
xy dng ni dung cho tp hai, chng ti la chn v bin dch t cc ti
liu [1] [2] [3] [4], y l nhng ti liu khng th thiu c vi nhng ai ang v
s tm hiu v m phng. S d nhm tin hnh d n bin dch ny l ph bin
NS-2 ti cc bn sinh vin, cc nghin cu sinh.... Ngoi ra cc bn mi tm hiu
4
-
v c nh tm hiu rt ngn c thi gian tip cn. m bo tnh chnh xc
v cc vn bn quyn, chng ti a thng tin v ngun gc ca bn gc bn
c la chn dch u mi chng. Nu cm thy cha an tm vi bn dch
cc bn c th tham kho trc tip cc bn gc.
Ni dung cc chng trong tp hai
T chng 1 ti chng 4 gii thiu tng quan v NS2, cc thnh phn trong NS2,
gii thiu v hai ngn ng chnh c s dng trong NS-2 l TCL v C++, m t v
file vt sau khi chy m phng. . Hiu v nm chc cc phn ny bn c s s dng
NS-2 c tt hn.
cc bn mi tm hiu hng th hn vi NS-2, chng ti trnh by trong chng
5 mt tutorial hng dn bn c c th to c mt chng trnh n gin
u tin. c bit, chng 5 cn cung cp m ngun ca cc chng trnh mu, bn
c c th ti v, chy th v quan st kt qu.
Chng 6, 7, 8,9 cung cp cho bn c kin thc v cc k thut m t v giao
thc truyn ti TCP, UDP, m t v TCP/IP trong NS, loi b ngu nhin sm. y
l cc k thut c bn p dng vo mt chng trnh c th.
T chng 10 n chng 14 gii thiu vi bn c chi tit hn v cc m-dun
m phng ph bin. Ni dung ca tng chng c tp trung lm sng t
cc vn t l thuyt cho n lc p dng vo m hnh m phng. Ni dung cc
chng ny c th ni mc nng cao hn, ph hp vi nhng sinh vin nm
cui. Nhng ngi lm ti tt nghip c th tham kho phc v cho bo co
ca mnh. in hnh l:
Chng 10: M phng mng LAN.
Chng 11: M phng MPLS [4]
Chng 12: M phng hng i.
Chng 13: M phng trong mng di ng.
Chng 14: M phng mng v tinh.
Vi hn 200 trang ti liu, khng qu di m cng khng qu ngn. Nhm bin
son hi vng s cung cp cho bn c nhng trang ti liu b ch. Da vo y bn
c c th tip cn, k tha, pht trin v sng to ra cc kch bn m phng. Nu
kh nng c th vit c cc m-dun da trn NS2. to ra ti liu ny cc
nhm lm vic s dng nhng tin ch c cung cp trn mng internet, gn kt
v lin lc vi nhau. Cc nhm c t chc theo quy trnh: la chn ti liu, dch,
bin tp, nh dng v xut bn. Thng tin nhm cc bn c th tham kho phn
cui cng ca ti liu.
5
-
Vi tinh thn t nguyn, ch ng v khng ngng hc hi gip chng ti
hon thnh ti liu ny. Sn phm ny l cng sc chung ca c nhm, nhn y ban
bin tp chn thnh cm n s cng tc ca cc c nhn, cc sinh vin, cc thy c
t cc trng i hc, ng thi xin c gi li cm n ti ban qun tr din n
vntelecom.org to ra sn chi ny, y l mt sn chi thc s b ch vi nhng
ngi quan tm n lnh vc mng vin thng ni ring v truyn thng ni chung.
Cun sch ny c thnh vin trong nhm NETSIM nh dng v hiu chnh.
Trong qu trnh lm vic c gng ht kh nng th hin ti liu c khoa hc
nht, trong qu trnh nh dng chnh sa li cc phn tham kho, cc ch thch
theo bn gc, mt s ch ngi dch khng a vo bn dch. Do khi c ti liu
ny cc bn c th tham kho cng vi bn gc nu c kh nng Anh vn tt. c
bit, vic thng nht cc thut ng rt cn bn c v nhng ngi c kinh nghim
gp thm. Trong phin bn ti, nhm s b xung cc thiu st (thut ng, li chnh
t, c php cu, vit ha hnh nh . . . ), b xung cc m-dun m phng WiMax, m
phng WDM, m phng SDR. . . Vic ci t NS-2 c rt nhiu ti liu v hng
dn bng ting Vit cc bn c th tham kho t mng internet, chng ti khng
a vo trong ti liu ny.
Mi kin ng gp bn c c th gi v th in t ca nhm:
adnet@ vntelecom. org ban bin tp s tip nhn, sa cha v b xung kp thi.
Ngy 24 thng 12 nm 2009
Tc gi
Nhm bin son
6
-
Mc lc
Li ni u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Mc lc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Danh sch hnh v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Danh sch bng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Nhng t vit tt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Chng 1. Gii thiu v NS-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.1. Khi nim tng quan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.2. Tng quan v m ngun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3. Lp Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3.1. t c mt tham chiu vi v d v lp Tcl . . . . . . . . . . . . . . . . . . . . . 24
1.3.2. Dn chng v cc th tc ca OTcl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.3. Truy nhp cc kt qu n/t trnh thng dch . . . . . . . . . . . . . . . . . . . . 26
1.3.4. Thot v bo co li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3.5. Cc hm hash trong trnh thng dch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.3.6. Cc hot ng khc trn trnh thng dch . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.4. Lp TclObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4.1. To v hu cc TclObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.4.2. S rng buc bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.4.3. Bm vt bin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.4.4. Cc phng thc command: nh ngha v gi ra . . . . . . . . . . . . . . . . . . 35
1.5. Lp TclClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.5.1. Lm th no rng buc cc bin thnh vin lp C++ tnh . . . . . . 39
7
-
1.6. Lp Tcl Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.7. Lp EmbeddedTcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.8. Lp InstVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Chng 2. C bn v TCL v OTCL . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.1. Tng quan v NS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.2. Lp trnh Tcl v Otcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Chng 3. Cc thnh phn c bn trong b m phng NS. . . . . . 53
3.1. Khi to v kt thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2. nh ngha mt mng cc lin kt v cc nt . . . . . . . . . . . 56
3.3. Tc nhn v ng dng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.3.1. FTP trn nn TCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.3.2. CBR qua UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.3.3. UDP vi cc ngun lu lng khc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.4. Lp lch s kin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.5. Hin th: dng NAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.6. Bm vt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.6.1. Bm cc i tng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.6.2. Cu trc ca cc file bm vt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.7. Bin ngu nhin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.7.1. Ht nhn (hay gi tr ban u ca mt bin ngu nhin)v b to . 70
3.7.2. To cc bin ngu nhin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Chng 4. Lm vic vi file trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.1. X l file d liu vi cng c awk . . . . . . . . . . . . . . . . . . . . . . 74
4.2. S dng grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.3. X l cc file d liu vi perl . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.4. V th vi gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.5. V th vi xgraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8
-
4.6. Trch tch thng tin trong mt kch bn tcl . . . . . . . . . . . . . 80
4.7. Minh ha mt s file awk v gnuplot . . . . . . . . . . . . . . . . . . . 80
4.7.1. Tnh thng lng ca mng theo hai kiu file trace . . . . . . . . . . . . . . . . 80
4.7.2. Mu v th thng lng va tnh xong bng file awk. . . . . . . . . . . . 82
4.8. Mt s file hnh plot v bng gnuplot . . . . . . . . . . . . . . . . . . . 82
Chng 5. NS Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.1. Kch bn Tcl u tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.1.1. Bt u nh th no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.1.2. Hai node, mt lin kt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.1.3. Gi d liu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.2. Topo trong NS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.2.1. To topo trong NS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.2.2. To cc s kin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.2.3. nh nhn cho lung d liu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.2.4. Gim st hng i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.3. Mng c tnh cht ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.3.1. To mt Topo ln hn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.3.2. Lin kt li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Chng 6. M phng v m t TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . 96
6.1. M t TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.1.1. Cc mc ch ca TCP v iu khin lung theo c ch ca s. . . . . 97
6.1.2. Cc bn tin xc nhn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.1.3. Ca s chng tc nghn ng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.1.4. Mt cc gi tin v ngng Wth ng: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.1.5. Khi to kt ni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.2. Qu trnh bm vt v phn tch v d Ex1.tcl. . . . . . . . . . 100
6.3. TCP trn lin kt nhiu v vic gim st hng i . . . . . 101
6.4. To nhiu kt ni vi cc c tnh ngu nhin . . . . . . . . . 107
6.5. Cc kt ni TCP ngn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9
-
6.6. Cc cng c gim st tin tin: . . . . . . . . . . . . . . . . . . . . . . . . 119
6.7. Bi tp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Chng 7. nh tuyn v mng di dng . . . . . . . . . . . . . . . . . . . . . . . 126
7.1. Bt u nh th no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.2. Mng ng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
7.3. Cc giao thc nh tuyn multicast (PIM). . . . . . . . . . . . . 130
7.3.1. Ch Dense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.3.2. nh tuyn da trn im RP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.4. nh tuyn da trn im RP. . . . . . . . . . . . . . . . . . . . . . . . . 132
7.4.1. Ch DM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.4.2. nh tuyn vi im RV tp trung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
7.5. Kho st m phng pimdm.tcl . . . . . . . . . . . . . . . . . . . . . . . . 138
7.6. Bi tp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Chng 8. Loi b ngu nhin sm. . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
8.1. M t RED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
8.2. Thit t cc tham s RED trong ns . . . . . . . . . . . . . . . . . . 142
8.3. Cc v d v m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
8.3.1. B m loi Drop-Tail (B ng ui) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
8.3.2. B m RED vi cu hnh tham s t ng . . . . . . . . . . . . . . . . . . . . . . 148
8.3.3. B m RED vi cc tham s khc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
8.4. Gim st cc lung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
8.5. Bi tp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Chng 9. Cc dch v phn bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
9.1. M t chuyn tip c m bo ca Diffserv . . . . . . . . . . . . 163
9.2. Cc router MRED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
9.2.1. M t chung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
9.2.2. Cu hnh MRED trong ns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
9.2.3. Truy vn TCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10
-
9.3. nh ngha cc chnh sch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
9.3.1. nh ngha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
9.3.2. Cu hnh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
9.4. M phng Diffserv: bo v cc gi tin d b tn cng . . 168
9.4.1. Kch bn m phngnh ngha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
9.5. Kt qu m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.6. Tho lun v kt lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
9.7. Bi tp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Chng 10. M phng mng LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
10.1. C s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
10.2. M phng mng LAN vi ns: . . . . . . . . . . . . . . . . . . . . . . . . . 182
Chng 11. M phng mng cho MPLS (MNS) . . . . . . . . . . . . . . . 184
11.1. Gii thiu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
11.2. Gii thiu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
11.2.1. Mc ch v phm vi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
11.2.2. M hnh khi nim ca MNS h tr QoS . . . . . . . . . . . . . . . . . . . . . . . . 186
11.3. Thit k v thi hnh vi MNS. . . . . . . . . . . . . . . . . . . . . . . . 187
11.3.1. Chuyn mch nhn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
11.3.2. Chuyn mch nhn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
11.3.3. S ginh trc ti nguyn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
11.3.4. Mc lp - Class Level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.3.5. Mi trng thc thi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.4. Cc v d m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
11.4.1. M phng lu lng QoS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
11.4.2. M phng s u tin trc ti nguyn. . . . . . . . . . . . . . . . . . . . . . . . . . . 192
11.5. Kt lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
11
-
Chng 12. Mng di ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
12.1. Cc thut ton nh tuyn . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
12.1.1. Vector khong cch theo th t ch DSDV . . . . . . . . . . . . . . . . . . . . 197
12.1.2. Vector khong cch theo yu cu c bit AODV. . . . . . . . . . . . . . 198
12.1.3. nh tuyn ngun ng DSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
12.1.4. Thut ton nh tuyn t ch tm thi TORA . . . . . . . . . . . . . . . 199
12.2. M phng mng di ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
12.2.1. Kch bn m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
12.2.2. Vit mt tcl script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
12.3. nh dng file vt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
12.4. Phn tch kt qu m phng . . . . . . . . . . . . . . . . . . . . . . . . . 207
12.5. So snh vi nh tuyn ad-hoc khc . . . . . . . . . . . . . . . . . . 208
12.5.1. TCP qua DSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
12.5.2. TCP qua AODV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
12.5.3. TCP qua TORA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
12.5.4. Mt vi bnh lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
12.6. S tc ng ca TCP ti giao thc MAC. . . . . . . . . . . . . 211
12.6.1. Bi cnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
12.6.2. Kch bn m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
12.6.3. Cc kt qu m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
12.6.4. Thay i cho NS vi trng hp n > 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Chng 13. Hng i c in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
13.1. M phng hng i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
13.2. Hng i hu hn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Chng 14. Mng v tinh trong NS . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
14.1. Tng quan v cc m hnh v tinh . . . . . . . . . . . . . . . . . . . . 227
14.1.1. V tinh a tnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
14.1.2. Cc v tinh LEO (Cc v tinh qu o thp) . . . . . . . . . . . . . . . . . . . . 228
12
-
14.2. S dng cc tnh nng m rng cho v tinh . . . . . . . . . . 230
14.2.1. Nt mng v v tr ca nt mng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
14.2.2. ng truyn v tinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
14.2.3. Chuyn giao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
14.2.4. nh tuyn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
14.2.5. H tr bm vt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
14.2.6. Cc m hnh li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
14.2.7. Cc la chn cu hnh khc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
14.2.8. M phng h tr NAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
14.2.9. Tch hp vi m hu tuyn v v tuyn . . . . . . . . . . . . . . . . . . . . . . . . . 241
14.2.10. Cc tp lnh v d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
14.3. Thc hin phn m rng m phng v tinh . . . . . . . . . . 243
14.3.1. S dng cc danh sch lin kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
14.3.2. Cu trc nt mng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
14.3.3. Cc chi tit v ng truyn v tinh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
14.4. Commands at a glance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Ti liu tham kho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Thng tin nhm bin son . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
13
-
Danh sch hnh v
3.1 Knh truyn n cng . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.2 V d v mt mng n gin . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.3 Giao din ha NAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.4 Bm cc i tng trong mt knh truyn n cng . . . . . . . . . . . . 67
3.5 Cc trng xut hin trong mt trace . . . . . . . . . . . . . . . . . . . . 67
4.1 Probability Distribution Fuction of BS queue delay rtPS - Nontoken-
bucket - Nonmobility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.2 Evaluation of throughphut performance in downlink WiMAX with PF
scheduler (Nonmonbility Tokenbucket) . . . . . . . . . . . . . . . . . . . 83
5.1 To kt ni gia n0 v n1 . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.2 Gi d liu gia n0 v n1 . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.3 Topo ca on m gm 4 nt . . . . . . . . . . . . . . . . . . . . . . . . 89
5.4 Mu sc cc lung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.5 Gim st hng i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.6 Cn bng trong gim st hng i . . . . . . . . . . . . . . . . . . . . . . 92
5.7 M hnh gm 7 nt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.8 Minh ha lin kt b li . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.9 Lu lng truyn theo nt 6, 5, 4 . . . . . . . . . . . . . . . . . . . . . . 95
6.1 Thng lng kt ni TCP . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.2 Kch thc ca s TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.3 V d rdrop.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.4 Kch thc ca s TCP vi 20% gi tin mt ngu nhin . . . . . . . . . . 106
6.5 Kch thc ca s TCP vi 20% gi tin mt ngu nhin: phng to . . 106
6.6 Ca s TCP khi t l mt gi l 0 . . . . . . . . . . . . . . . . . . . . . . 106
6.7 V d v mng vi mt s kt ni TCP . . . . . . . . . . . . . . . . . . . 108
6.8 Kch thc hng i trong v d shortTcp.tcl . . . . . . . . . . . . . . . . 118
14
-
6.9 Kch thc hng i trong v d shortTcp.tcl khi s kt ni b gii hn . 118
6.10 S lng kt ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.11 Bng thng c s dng trong giai on nghn c chai . . . . . . . . . 119
7.1 V d v nh tuyn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.2 V d v nh tuyn multicast . . . . . . . . . . . . . . . . . . . . . . . . 133
8.1 Thit lp mng cho vic nghin cu RED . . . . . . . . . . . . . . . . . . 144
8.2 S tng kch thc hng i . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.3 Kch thc ca s ca tt c cc phin kt ni TCP . . . . . . . . . . . . 148
8.4 S tin trin ca kch thc hng i trung bnh tc thi . . . . . . . . . 149
8.5 S tin trin ca kch thc hng i trung bnh tc thi phng to . . . 149
8.6 Kch thc ca s ca tc c cc phin kt ni TCP cho b m RED
vi cc cu hnh tham s t ng . . . . . . . . . . . . . . . . . . . . . . 150
8.7 S thay i v kch thc hng i . . . . . . . . . . . . . . . . . . . . . 154
8.8 Kch thc hng i ca tt c cc phin kt ni cho b m RED . . . 154
8.9 S tin trin ca kch thc hng i v gi tr trung bnh ca n . . . . 161
8.10 S tin ha ca kch thc hng i v gi tr trung bnh ca n c
phng to) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8.11 S cc phin kt ni tch cc theo thi gian . . . . . . . . . . . . . . . . . 161
9.1 Topo mng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
9.2 S tin ha ca tng s phin . . . . . . . . . . . . . . . . . . . . . . . . 178
10.1 V d mng LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
11.1 M hnh khi nim ca MNS . . . . . . . . . . . . . . . . . . . . . . . . . 187
11.2 Kin trc nt MPLS vi chuyn mch nhn . . . . . . . . . . . . . . . . 188
11.3 X l lu lng QoS MPLS ca nt v link MPLS . . . . . . . . . . . . . 189
11.4 Qu trnh ginh trc ti nguyn ca nt v link MPLS . . . . . . . . . 189
11.5 Mc lp trong MPLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.6 Mng MPLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
11.7 M lp lch s kin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
11.8 S bin i lu lng bng thng . . . . . . . . . . . . . . . . . . . . . . 192
11.9 M lp lch s kin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
11.10Kt qu ca m lp lch s kin . . . . . . . . . . . . . . . . . . . . . . . 193
12.1 V d v mt mng ad-hoc 3 im . . . . . . . . . . . . . . . . . . . . . . 201
15
-
12.2 Kch thc ca s TCP trong kch bn 3 nt mng vi giao thc nh
tuyn DSDV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
12.3 Kch thc ca s TCP trong kch bn 3 nt mng vi giao thc nh
tuyn DSDV vi kt ni qua v khng qua trung gian) . . . . . . . . . . 208
12.4 TCP trong kch bn 3 nt mng vi giao thc nh tuyn DSDV, thi
im 124.14 giy, kt ni trc tip . . . . . . . . . . . . . . . . . . . . . . 208
12.5 TCP trong kch bn 3 nt mng vi giao thc nh tuyn DSDV, thi
im 58 giy, kt ni qua 1 trung gian . . . . . . . . . . . . . . . . . . . 208
12.6 Kch thc ca s ca kt ni TCP qua DSR . . . . . . . . . . . . . . . . 209
12.7 Kch thc ca s ca kt ni TCP qua AODV . . . . . . . . . . . . . . 209
12.8 Kch thc ca s ca kt ni TCP qua TORA vi 4 nt mng . . . . . . 210
12.9 TCP qua AODV vi gi tr ln ca kch thc ca s ln nht . . . . . . 210
12.10TCP qua TORA vi 4 nt mng, im thi gian 33 . . . . . . . . . . . . 211
12.11TCP qua Tora vi 4 nt mng. im thi gian 56 . . . . . . . . . . . . . 211
12.12Chui topo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
12.13S gi tin/giy i vi n = 9 nh mt chc nng ca kch c ca s ln nht216
12.14S gi tin/giy i vi n = 20 nh mt chc nng ca kch c ca s
ln nht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
12.15: S gi tin/giy i vi n = 30 nh mt chc nng ca kch c ca s
ln nht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
12.16Tin trnh ca kch thc ca s cho TCP chun vi kch thc ca s
ln nht l 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
12.17Tin trnh ca kch thc ca s cho DelAck TCP vi d = 3 v kch
thc ca s ln nht l 2000 . . . . . . . . . . . . . . . . . . . . . . . . 217
12.18Tin trnh ca kch thc ca s cho TCP chun vi 9 nt mng v
kch thc ca s ln nht l 3 . . . . . . . . . . . . . . . . . . . . . . . 218
12.19Tc ng ca khong thi gian tr ACK ti s gi tin TCP gi c,
nh l mt chc nng ca kch thc ca s ln nht. d=3 . . . . . . . . 218
13.1 S m rng kch c ca hng i M/M/1 . . . . . . . . . . . . . . . . . . 223
14.1 V d ca mt chm sao LEO qu o cc . . . . . . . . . . . . . . . . . 229
14.2 H thng ta hnh cu dng cc nt mng v tinh . . . . . . . . . . . 231
14.3 Cc thnh phn chnh ca giao din mng v tinh . . . . . . . . . . . . . 234
14.4 B sung danh sch ng truyn trong ns . . . . . . . . . . . . . . . . . 243
14.5 Cu trc ca lp SatNode . . . . . . . . . . . . . . . . . . . . . . . . . . 245
14.6 Chi tit c t ngn xp giao din ca mng . . . . . . . . . . . . . . . . 246
16
-
Danh sch bng
2.1 Chng trnh Tcl thc hin cc php ton . . . . . . . . . . . . . . . . . 49
2.2 Chng trnh Tcl tnh ton cc s nguyn t . . . . . . . . . . . . . . . . 50
2.3 Chng trnh Tcl tnh giai tha ca mt s . . . . . . . . . . . . . . . . . 51
2.4 Chng trnh Tcl n gin s dng i tng real v integer . . . . . . . 52
3.1 nh ngha cc nt, knh truyn v gn kch c hng i . . . . . . . . . 57
3.2 nh ngha mt ng dng FTP s dng tc nhn TCP . . . . . . . . . . 58
3.3 nh ngha mt ng dng CBR s dng tc nhn UDP . . . . . . . . . . 60
3.4 Chng trnh ex.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.5 Ni dung ca mt file bm vt (trace file) . . . . . . . . . . . . . . . . . 69
3.6 Kim tra cc bin ngu nhin phn b Pareto vi cc seed khc nhau . . 72
4.1 awk script tnh gi tr trung bnh ca ct 4 ca mt file . . . . . . . . 74
4.2 awk script tnh gi tr lch chun ca ct 4 ca mt file . . . . . . 74
4.3 Mt on m awk s dng mng tnh trung bnh v lch chun . . 75
4.4 Mt on m tnh tng cc ct . . . . . . . . . . . . . . . . . . . . . . . 75
4.5 Mt on m tnh thng lng . . . . . . . . . . . . . . . . . . . . . . . 77
6.1 nh ngha mt ng dng FTP s dng tc nhn TCP . . . . . . . . . . 106
6.2 on m ex3.tcl i vi mt s kt ni TCP cnh tranh . . . . . . . . . 111
6.3 on m shortTcp.tcl i vi mt s kt ni TCP ngn . . . . . . . . . . 118
6.4 on m shortTcp.tcl i vi mt s kt ni TCP ngn . . . . . . . . . . 124
7.1 Kch bn tcl cho nh tuyn tnh v ng(ex2.tcl) . . . . . . . . . . . . . 129
7.2 V d cho multicast vi m hnh DM: pimdm.tcl . . . . . . . . . . . . . . 135
7.3 V d cho multicast vi m hnh im RV: bts.tcl . . . . . . . . . . . . . 138
8.1 on m tcl droptail.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.2 on m tcl droptail.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
17
-
8.3 Kch tcl shortRed.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
9.1 on m Diffs.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
9.2 Bo v cc gi tin d b tn thng nh mt hm ca CIR . . . . . . . . 177
9.3 Thi gian trung bnh ca mt phin theo hm CIR . . . . . . . . . . . . 177
12.1 Kch bn "wrls-dsdv.tcl" cho TCP ttrn mt mng ad-hoc . . . . . . . . 207
12.2 Kch bn tcpwD.tcl cho TCp qua mt mng ad-hoc tnh vi chui topo . 215
12.3 S lng gi tin gi c trong khong thi gian 149 giy vi n=3 nh
mt chc nng ca kch thc ca s ln nht . . . . . . . . . . . . . . . 219
13.1 Kch bn tcl mm1.tcl m phng hng i MM1 . . . . . . . . . . . . . 222
13.2 Kch bn tcl mm1k.tcl m phng hng i MM1. . . . . . . . . . . . . . 225
18
-
Nhng t vit tt
AODV Ad hoc On Demand Distance Vector
CDMA Code Division Multiple Access
CIR Committed Information Rate
CTS Clear to Send
CR-LDP Constraint-based Label Distribution Protocol
CR-LSP Constraint-based routed label switched path
CSMA/CD Carrier Sense Multiple Access with Collision Detect
Diffserv Differentiated Services
ED Early Drops
ERB Explicit Route information Base
FDDI Fiber Distributed Data Interface
FDMI Frequency Division Multiple Access
FTP File Transfer Protocol
IEEE Institute of Electrical and Electronics Engineers
Intserv Integrated Service
IP Internet Protocol
LAN Local Area Network
LDP Label Distribution Protolcol
LIB Label Information Table
LSP Label Switch Path
LSR Label Switch Router
MAC Medium Access Control
MPLS Multiprotocol Label Switching
MRED Multi RED
NAM Network Animator
NS Network Simulaton
NS 2 Network Simulaton version 2
PFT Partial Forwarding Table
PHB Per Hop Behavior
QoS Quality of service
RED Random Early Detection
RFC Request for Comments
RR Round Robin
19
-
TCP Transmission Control Protocol
TDMA Time Division Multiple Access
UDP User Datagram Protocol
UMTS Universal Mobile Telecommunications System
VINT Virtual InterNetwork Testbed
WIRR Weighted Interleaved Round Robin
20
-
Chng 1
Gii thiu v NS-2
Mc lc
1.1. Khi nim tng quan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.2. Tng quan v m ngun . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3. Lp Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3.1. t c mt tham chiu vi v d v lp Tcl . . . . . . . . . . . 24
1.3.2. Dn chng v cc th tc ca OTcl . . . . . . . . . . . . . . . . . . . . . . 25
1.3.3. Truy nhp cc kt qu n/t trnh thng dch . . . . . . . . . . 26
1.3.4. Thot v bo co li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3.5. Cc hm hash trong trnh thng dch . . . . . . . . . . . . . . . . . . . . 27
1.3.6. Cc hot ng khc trn trnh thng dch . . . . . . . . . . . . . . . 27
1.4. Lp TclObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4.1. To v hu cc TclObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.4.2. S rng buc bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.4.3. Bm vt bin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.4.4. Cc phng thc command: nh ngha v gi ra . . . . . . . . 35
1.5. Lp TclClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.5.1. Lm th no rng buc cc bin thnh vin lp C++ tnh
39
1.6. Lp Tcl Command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.7. Lp EmbeddedTcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.8. Lp InstVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
21
-
vntelecom
Ngi dch: Nguyn Quc Huy
Bin tp: H Tt Thnh.
Bn gc: The ns Manual, Chapter 3 [1]
NS l mt b m phng hng i tng, c vit bng ngn ng C++, vi trnh
thng dch OTcL nh l lp v (frontend). B m phng ny h tr mt nhnh lp
trong C++ ( cn c gi l nhnh c bin dch compiled hierarchy trong ti
liu ny ), v mt nhnh lp tng t trong trnh thng dch OTcL ( trong ti liu
ny gi l nhnh c thng dch interpreted hierarchy). Hai h thng ny c mi
tng quan kh mt thit; nhn t pha ngi s dng th y l mi tng quan mt
- mt gia mt lp nhnh thng dch v mt lp nhnh bin dch. Phn gc ca
nhnh ny l lp TcLObject. Ngi dng to cc i tng ca b m phng mi
thng qua b thng dch; cc i tng ny c to sn bn trong trnh thng dch,
v cng c phn nh bi mt i tng tng ng trong nhnh bin dch. Nhnh
lp c thng dch s c thnh lp mt cch t ng thng qua cc phng
php c nh ngha trong lp TcLClass. Cc i tng c to sn c phn
nh thng qua cc phng php c nh ngha trng lp TclObject. C cc nhnh
khc trong m C++ v on m Otcl; nhng nhnh khc ny khng c phn nh
trong cch ca TclObject.
1.1. Khi nim tng quan
Ti sao li l hai ngn ng? NS s dng hai ngn ng bi v b m phng c hai
kiu cng vic khc nhau cn phi lm. Mt mt, m phng chi tit cc giao thc
yu cu mt ngn ng lp trnh h thng c th thao tc mt cch hiu qu n cc
byte, cc tiu gi, v cc thut ton trin khai m c th chy trn mt tp d
liu ln. Vi nhim v ny th tc chy chng trnh v thi gian xoay vng (gm
chy m phng, tm li, sa li, bin dch li, chy li) l t quan trng hn.
Mt khc, mt phn ln cc nghin cu v mng bao gm cc tham s hoc cc
cu hnh t thay i, hay nghin cu nhanh chng mt s hot cnh. Trong cc trng
hp , thi gian lp li (thay i mu v chy li) quan trng hn. Khi cu hnh
chy mt ln ( ti thi im bt u m phng), thi gian chy ca phn nhim v
ny th t quan trng hn.
NS p ng c hai yu cu ny vi 2 ngn ng, C++ v OTcl. Vi C++ chy
chng trnh nhanh nhng thay i li chm hn, iu khin n ph hp cho vic
22
-
trin khai giao thc chi tit. OTcl chy chm hn nhiu nhng c th c thay i
rt nhanh (v c th tng tc), v n l tng cho vic cu hnh m phng. NS
(thng qua tclcl) cung cp s kt dnh to nn cc i tng v cc bin trong c
hai ngn ng.
bit thm thng tin v tng v cc ngn ng to bn v chng trnh phn
chia ngn ng, tham kho tiu ca Ousterhout trong IEEE Computer. Thng tin
v chng trnh phn cp phn chia cho m phng mng, xem trang NS[2].
Ngn ng no lm g? C hai ngn ng ct th la chn dn n lm tng s
cu hi rng ngn ng no nn c dng cho mc ch g. Li khuyn c bn ca
chng ti l dng Otcl :
Cu hnh, ci t, v cc cng vic thc hin mt ln. Nu bn c th lm iu g bn mun bng vic thao tc vi cc i tng c
sn trong C++ v dng C++.
Nu bn s lm bt c th g m yu cu x l mi gi ca mt lung. Nu bn phi thay i hot ng ca mt lp c sn trong C++ bng nhng
cch m cha tng c bit n.
V d, cc knh truyn l cc i tng OTcl m tp hp tr, vic xp hng, v
cc mun c th b mt. Nu bn c th s dng thnh tho cc cng c ny th
tt. Nu khng, thay vo bn mun lm iu g ring bit (mt quy tc xp
hng c bit hoc cc kiu mt mt), th bn cn mt i tng C++ mi.
C nhng phn khng r rng: hu ht vic nh tuyn c thc hin trong OTcl
(mc d thut ton li Dijkstra trong C++). Chng ta c nhng b m phng
HTTP m trong mi lung c bt u trong OTcl v qu trnh x l trn mt
gi c nh ngha trong C++. iu ny n khi chng ta c 100cc lung bt
u trn mt giy trong thi gian m phng. Ni chung, nu chng ta cn n Tcl
nhiu ln trn mt giy, th nn chuyn sang C++.
1.2. Tng quan v m ngun
Trong ti liu ny, chng ta s dng t interpreter ng ngha vi trnh thng
dch OTcl. M giao tip vi trnh thng dch ny nm trong mt th mc ring,
tclcl. Phn cn li ca m b m phng nm trong th mc ns-2. Chng ta s s
dng k hiu tclcl/hfilei cp n mt phn hfilei ring bit trong Tcl. Tng
t, chng ta dng k hiu, ns/hfilei gn cho phn hfilei trong th mc ns-2 .
C mt s lng cc lp c nh ngha trong tclcl/. Chng ta ch tp trung
vo lp th 6 c dng trong ns. Lp Tcl (phn 1.3) bao gm cc phng php m
23
-
m C++ s dng truy cp trnh thng dch. Lp TclObject (phn 1.4) l lp c
bn cho tt c cc i tng ca b m phng m cng c phn nh vo trong h
thng cp bc c bin dch. Lp TclClass (phn 1.5) xc nh cc h thng cp bc
lp c bin dch, v cc phng php cho php ngi dng din gii TclObjects.
Lp TclCommand (phn 1.6) c s dng nh ngha cc lnh bin dch ton cc
c bn. Lp EmbeddedTcl (phn 1.7) bao gm cc phng thc ti cc lnh c
sn cp cao hn, iu ny lm cho vic m phng cu hnh tr nn d dng hn.
Cui cng, lp InstVar (phn 1.8) l cc phng php truy cp cc bin thnh
vin ca C++ nh l cac bin trong OTcl.
Cc th tc v cc hm c m t trong chng ny c th c tm thy
trong tclcl/Tcl.cc, h, tclcl/Tcl2.cc, tclcl/tcl-object.tcl, v tclcl/tracedvar.cc, h. File
tclcl/tcl2c++.c c dng xy dng ns, v c cp mt cch ngn gn trong
chng ny.
1.3. Lp Tcl
Lp class Tcl tm gn trng hp thc ca b thng dch OTcl, v cung cp cc
phng php truy cp v giao tip vi b thng dch ny. Cc phng thc c
m t trong phn ny lin quan n ngi lp trnh ns, tc ngi s vit on m
C++. N cn cho ta cc phng php cho cc hot ng sau y:
t c tham chiu ti Tcl instance. Gi ra cc th tc OTcl thng qua b thng dch. Khi phc hoc gi li cc kt qu ca trnh thng dch. Bo co cc tnh trng li v thot ra nh bnh thng. Lu tr v tra cu cc TclObjects. Ginh quyn truy cp trc tip vo trnh thng dch.
1.3.1. t c mt tham chiu vi v d v lp Tcl
Mt instance n l ca lp c khai bo trong file tclcl/Tcl.cc nh mt bin
thnh vin tnh; ngi lp trnh phi nhn c mt tham chiu n instance ny
c th truy cp ti cc phng php khc c m t trong phn ny. Cu lnh
truy cp instance ny l.
Tcl& tcl = Tcl::instance();
24
-
1.3.2. Dn chng v cc th tc ca OTcl
C 4 phng php khc nhau gi ra mt lnh OTcl thng qua trng tcl.
Chng khc nhau mt cch c bn v cc i s gi. Mi hm chuyn mt chui vo
trnh thng dch, m sau nh gi chui ny trong mt ng cnh chung (global
context). Cc phng php ny s tr v cho hm gi nu trnh thng dch tr v
bn tin TCL_OK. Hay ni cch khc, nu trnh thng dch tr v TCL_ERROR,
cc phng thc ny s gi th tc tkerror{}. Ngi dng c th lm qu ti th tc
ny c b qua mt s loi li no . Nhng phc tp ca vic lp trnh OTcl
nm ngoi phm vi ca ti liu ny. Phn tip theo (phn 1.3.3) s m t cc phng
thc truy cp kt qu c tr v bi b thng dch.
tcl.eval(char* s) invokes Tcl_GlobalEval() to execute s through the interpreter. tcl.evalc(const char* s) preserves the argument string s. It copies the string s
into its internal buffer; it then invokes the previous eval(char* s) on the internal
buffer.
tcl.eval() assumes that the command is already stored in the class internal bp_;it directly invokes tcl.eval(char*bp_). A handle to the buffer itself is available
through the method tcl.buffer(void).
tcl.evalf(const char* s, . . . ) is a Printf(3) like equivalent. It uses vsprintf(3)internally to create the input string.
tcl.eval(char* s) vin dn Tcl_GlobalEval() thc thi s thng qua trnh thngdch.
tcl.evalc(const char* s) lu gi chui i s s. N copy chui s vo b m bntrong; sau n dn nhp eval(char* s) trc ln b m bn trong.
tcl.eval() cho rng lnh c lu tr sn sng trong bp_ ni ca lp; n dnnhp tcl.eval(char*bp_) mt cch trc tip. Mt khc b m ca n lun sn
sng thng qua th tc tcl.buffer(void).
tcl.evalf(const char* s, . . . ) tng ng vi Printf(3). N s dng vsprintf(3) to nn mt chui ni ti bn trong n.
V d, di y l mt s cch s dng cc phng php ni trn:
Tcl& tcl = Tcl::instance();
char wrk[128];
strcpy(wrk, "Simulator set NumberInterfaces_ 1");
tcl.eval(wrk);
sprintf(tcl.buffer(), "Agent/SRM set requestFunction_ %s", "Fixed");
25
-
tcl.eval();
tcl.evalc("puts stdout hello world");
tcl.evalf("%s request %d %d", name_, sender, msgid);
1.3.3. Truy nhp cc kt qu n/t trnh thng dch
Khi trnh thng dch vin dn mt phng thc t C++, n mong mun c c
mt kt qu phn hi trong mt bin thnh vin ring bit, tcl_>result. C hai
cch to nn bin ny:
tcl.result(const char* s)Dn nhp chui kt qu s tr v li trnh thng dch.
tcl.resultf(const char* fmt, . . . )varargs(3) s thay i nh trn l nh dng kt qu s dng vsprintf(3),
dn nhp chui kt qu tr v li trnh thng dch.
if (strcmp(argv[1], "now") == 0) {
tcl.resultf("%.17g", clock());
return TCL_OK;
}
tcl.result("Invalid operation specified");
return TCL_ERROR;
Tng t, khi mt phng thc ca C++ vin dn mt lnh OTcl, trnh thng dch
s tr v kt qu trong tcl_>result.
tcl.result(void) phi c s dng tm li kt qu. Lu rng, kt qu lmt chui, phi c chuyn sang mt nh dng bn trong ph hp vi kiu
ca kt qu.
tcl.evalc("Simulator set NumberInterfaces_");
char* ni = tcl.result();
if (atoi(ni) != 1)
tcl.evalc("Simulator set NumberInterfaces_ 1");
1.3.4. Thot v bo co li
Phng php ny cung cp mt cch thc quy chun bo co cc li trong m
c bin dch.
tcl.error(const char* s) thc hin cc chc nng sau y: ghi s vo stdout; ghitcl_>result vo stdout; thot ra vi m li 1.
26
-
tcl.resultf("cmd = %s", cmd);
tcl.error("invalid command specified");
/*NOTREACHED*/
Lu , khng c s khc nhau nhiu gia vic tr v bn tin TCL_ERROR nh
chng ta lm trong phn trc (phn 3.3.3), v vic gi Tcl::error(). B nh dng
s to mt ngoi l bn trong trnh thng dch; ngi dng c th gi ngoi l ny v
c th khi phc li t li. Nu ngi dng khng nh ngha bt c ngoi l no,
th trnh thng dch s in mt vt cm v thot. Tuy nhin, nu m gi ra error(),
th ngi dng m phng khng th gi li; thm vo , ns s khng in bt k mt
vt cm no.
1.3.5. Cc hm hash trong trnh thng dch
ns lu tr mt tham chiu vi mi TclObject trong nhnh c bin dch trong
mt mt bng hash; iu ny cho php truy cp nhanh n cc i tng. Bng hash
ny nm bn trong b thng dch. ns dng tn ca TclObject nh l cha kho
truy nhp, tra cu, hoc xo TclObject trong bng hash.
tcl.enter(TclObject* o) s chn mt con tr vo TclObject o bn trong bnghash.
N c dng bi TclClass::create_shadow() chn mt i tng vo bn
trong bng, khi i tng c to ra.
tcl.lookup(char* s) s tm li c TclObject vi tn s.N c dng bi TclObject::lookup().
_ tcl.remove(TclObject* o) s xo cc quan h vi TclObject o t bng hash.N c dng bi TclClass::delete_shadow() xo mt entry ang tn ti t
bng hash, khi i tng b xo.
Cc hm ny c dng bn trong bi lp TclObject v lp TclClass.
1.3.6. Cc hot ng khc trn trnh thng dch
Nu cc phng php trn khng , th chng ta phi nm c trnh thng
dch v vit ra cc hm ring cho mnh.
tcl.interp(void) tr v cc hm bn trong trnh thng dch m c lu trtrong lp Tcl.
27
-
1.4. Lp TclObject
class TclObject l lp c bn cho hu ht cc lp khc trong cc nhnh thng
dch v bin dch. Mi i tng trong lp TclObject c to ra bi ngi dng t
bn trong b thng dch. Mt i tng phn bng tng ng c to ra nhnh
bin dch. Hai i tng ny c mi tng quan cht ch vi nhau. Lp TclClass, m
s c m t trong phn tip theo, cha cc c cu thc hin qu trnh bng ho
(qu trnh nh x t i tng nhnh thng dch sang i tng nhwrnh bin
dch ).
Trong phn cn li ca ti liu ny, chng ta s thng xuyn gi mt i tng
l mt TclObject1. Bng cch , ta xem xt mt i tng c th m c trng lp
TclObject hoc trong mt lp m c to ra t lp TclObject. Nu cn thit, ta xc
nh xem i tng l mt i tng trong b thng dch hay l trong m bin
dch. Trong nhng trng hp nh vy, chng ta s s dng cc thut ng tng ng
l "i tng thng dch", v "i tng bin dch" phn bit hai loi i tng
trn.
Nhng s khc bit t ns v1 Khng nh ns v1, lp TclObject1 gp cc hm trc
y ca lp NsObject. V th, n lu tr nhng lin kt bin giao din ( phn 1.4.2)
m dng ni cc bin instance ca Otcl trong i tng thng dch vi cc bin
thnh vin C++ tng ng trong i tng bin dch. S rng buc ny mnh hn
trong ns v1 v trong bt k s thay i cc bin OTcl u b kho, v cc gi tr
C++ v OTcl hin ti u c lm cho ph hp sau mi ln truy cp thng qua b
thng dch. S ng nht c thc hin thng qua lp InstVar (phn 3.8). Khc
nls v1, cc i tng trong lp TclObject cng khng cn c lu nh mt danh
sch lin kt ton cc. Thay vo , chng c lu tr trong mt bng hash thuc
lp Tcl (phn 1.3.5).
Cu hnh tiu biu ca mt TclObject V d sau y m t cu hnh ca mt
tc t SRM (class Agent/SRM/Adaptive).
set srm [new Agent/SRM/Adaptive]
\$srm set packetSize\_{} 1024
\$srm traffic-source \$s0
Theo quy c trong ns, lp Agent/SRM/Adaptive l mt lp con ca Agent/SRM,
l mt lp con ca Agent, l mt lp con ca TclObject. Nhnh lp bin dch tng
ng l ASRMAgent, c ly t SRMAgent, SRMAgent li c ly t Agent, v
cui cng l t TclObject mt cch tun t. Dng u tin ca v d trn cho thy
mt TclObject c to ra (hoc b hu) nh th no (phn 3.4.1); dng tip theo
1Trong phin bn gn y nht ca ns v ns/tclcl, i tng ny c i tn thnh Spli-tObjefct, phn nh mt cch chnh xc hn s bn cht ca s tn ti ca n. Tuy nhin, lc ny,chng ta s tip tc s dng thut ng TclObject ch nhng i tng ny v lp ny
28
-
cu hnh mt bin gii hn (phn 3.4.2); v cui cng, dng cui m t i tng
c thng dch bng cch gi ra mt phng thc C++ ngay khi n l mt th
tc v d.
1.4.1. To v hu cc TclObject
Khi ngi dng to/hu mt TclObject mi, s dng cc th tc new{} v
delete{}; cc th tc ny c nh ngha trong tclcl/tcl-object.tcl. Chng c th
c dng to hay hu cc i tng trong tt c cc lp, bao gm cc TclOb-
jects2 Trong phn ny,chng ta s m t cc hot ng bn trong c thc thi khi
mt TclObject c to ra.
To cc TclObject bng cch dng new{}, ngi dng to mt TclObject c
thng dch. b thng dch xy dng cu trc cho i tng , init{}, cc i s ca
phn ny c cung cp bi ngi dng. ns chu trch nhim to ra i tng
bin dch mt cch t ng. i tng bng c to ra bi lp c bn ca hm to
TclObject. V th, hm to cho mt TclObject mi phi gi hm to lp ngun ca
n trc. new{} tr v mt chc danh cho i tng, m c th c dng cho cc
hot ng sau ny trn i tng .
V d sau y minh ha hm to Agent/SRM/Adaptive:
Agent/SRM/Adaptive instproc init args \{
eval \$self next \$args
\$self array set closest\_{} "requestor 0 repairor 0"
\$self set eps\_{} [\$class set eps\_{}]
\}
Chui cc hot ng sau y c thc hin bi trnh thng dch nh mt phn
ca vic th hin mt TclObject mi . cho d theo di, chng ta s m t tng
bc to nn mt i tng Agent/SRM/Adaptive. Cc bc l:
1. To c mt tn duy nht cho mt i tng mi t khng gian tn TclObject.
Tn ny c tr v cho ngi dng. Hu ht tn trong ns u c dng_,
vi l mt s nguyn. Tn ny c to bi getid{}. N c th c
tm thy t C++ bng phng thc name(){}.
2. To hm to cho mt i tng mi. Bt k cc i s c quy nh bi ngi
dng no cng c truyn ti hm to ny. Hm to ny phi gi ra hm to
c lin kt vi lp ngun ca n.
2Nh v d, Cc lp, Simulator, Node, Link, hay rtObject, l cc lp m khng xut pht t lpTclObject. Cc i tng trong nhng lp ny v th khng phi l TclObjects. Tuy nhin, mt itng Simulator, Node, Link, hoc route cng c to ra bng cch s dng th tc new trong ns.
29
-
Trong v d trn, Agent/SRM/Adaptive gi lp ngun ca n dng chnh u
tin.
Lu rng mi hm to ln lt gi ra hm to ca lp ngun ca n ad
nauseum. Hm to cui cng trong ns l hm to TclObject. Hm to ny chu
trch nhim thit lp i tng bng, v thc hin nhng vic khi to thao v
cc rng buc khc, nh chng ti gii thch bn di. Tt hn l nn gi cc
cu trc ngun trc khi thc hin vic np cc thng s c yu cu trong
lp ny. iu ny cho php i tng bng c thit lp, v cc rng buc
bin c thit lp.
3. Hm to TclObject gi ra th tc v d create-shadow{} cho lp Agent/SRM/Adaptive.
4. Khi i tng bng c to ra, ns gi tt c cc b cu trc cho i tng
bin dch, mi b nh vy c th thit lp cc rng buc bin cho cc i
tng trong lp , v thc hin cc khi to cn thit khc. Do lnh hun
th trc y ca chng ta ph hp hn gi ra cc hm to ngun trc khi
thc hin vic khi to lp.
5. Sau khi i tng bng c to ra thnh cng bng lnh create_shadow(void)
(a) i tng mi vo bng hash ca cc TclObject c m t trc y
(phn 1.3.5).
(b) Thc hin cmd{}, mt th tc ca i tng thng dch mi c to.
Th tc v d ny gi ra phng thc command() ca i tng bin dch.
Trong mt phn nh sau (Section 1.4.4), chng ti s m t cch thc
command c nh ngha , v c gi ra nh th no.
Lu rng tt c cc c ch bng ho trn ch hot ng khi ngi dng to mt
TclObject mi thng qua trnh thng dch. N s khng lm vic nu ngi lp trnh
to mt TclObject c bin dch mt cch n phng. V th, ngi lp trnh b
cm khng dng phng thc mi C++ to cc i tng bin dch mt cch trc
tip.
Xo cc TclObject: lnh delete hu i tng thng dch, v i tng bng tng
ng.V d, use-scheduler{hscheduleri} dng th tc delete xo b b lp lch trnh
bng k mc nh, v to ra mt b lch trnh thay th trong khng gian ca n.
Simulator instproc use-scheduler type {
\$self instvar scheduler\_{}
delete scheduler\_{} ; # xo b lch trnh bng
k ang tn ti trc
set scheduler\_{} [new Scheduler/\$type]
}
30
-
1.4.2. S rng buc bin
Trong hu ht cc trng hp, vic truy cp n cc bin thnh vin bin dch b
gii hn ti m bin dch, v truy cp n cc bin thnh phn c thng dch
cng b hn ch, phi truy nhp thng qua m thng dch; tuy nhin, c th thit
lp cc rng buc hai chiu nh c hai bin thnh phn thng dch v bin thnh
phn bin dch, truy cp cng d liu, v vic thay i gi tr ca c hai bin c
th thay i gi tr ca bin c cp i tng ng sang cng mt gi tr.
S rng buc c to ra bi hm to c bin dch khi i tng c to; c
th truy cp mt cch t ng bi i tng c thng dch nh mt bin instanc.
ns h tr nm kiu d liu khc nhau: cc gi tr thc, cc bin nh tr bng thng,
cc bin nh tr thi gian, cc s nguyn, v cc s nh phn. C php m t cc
gi tr c c t trong OTcl l khc nhau ng vi mi kiu.
Cc bin gi tr thc v s nguyn c c t theo dng "bnh thng" . Vd,
$object set realvar 1.2e3
$object set intvar 12
Bng thng c c t nh mt gi tr thc, c in thm tin t l mtk hay K ch gi tr hng ngn, hoc m hay M ch gi tr hng triu.
Mt k t B sau cng th hin gi tr Byte trn mt giy. Theo mc nh,
bng thng c th hin dng bps. V d, tt cc cc dng lnh sau l tng
ng:
$object set bwvar 1.5m
$object set bwvar 1.5mb
$object set bwvar 1500k
$object set bwvar 1500kb
$object set bwvar .1875MB
$object set bwvar 187.5kB
$object set bwvar 1.5e6
$object set bwvar 1500kb
$object set bwvar .1875MB
$object set bwvar 187.5kB
$object set bwvar 1.5e6
Thi gian c quy nh nh l mt gi tr thc,c th i km vi hu t m th hin n v mili giy, v n nu l nano giy, hoc l pico giy vi p.
Gi tr mc nh l giy (s). V d, tt c cc gi tr sau l tng ng nhau:
$object set timevar 1500m
$object set timevar 1.5
$object set timevar 1.5e9n
31
-
$object set timevar 1500e9p
Lu rng ta c cng th thm 1 ch s biu th n v l giy. ns w s b
qua tt c cc gi tr khc ngoi cc con s, hoc kt thc bng ch m, n,
hay p.
Cc gi tr nh phn c th c biu din c hai dng nh mt s nguyn,hay nh T hoc t vi gi tr ng. Cc k t theo sau ch ci u tin c
b qua. Nu gi tr khng phi l mt s nguyn hay mt gi tr ng th ng
nhin c xem l sai. V d,
$object set boolvar t ; # t gi tr l ng
$object set boolvar true
$object set boolvar 1 ; # hay bt k gi tr khng bng khng
no $object set boolvar false ; # t gi tr l sai
$object set boolvar junk
$object set boolvar 0
Cc v d sau y cho thy hm to ca ASRMAgent3
ASRMAgent::ASRMAgent() {
bind("pdistance_", &pdistance_); /* bin gi tr thc */
bind("requestor_", &requestor_); /* ibin gi tr nguyn */
bind_time("lastSent_", &lastSessSent_); /* bin gi tr thi gian
*/
bind_bw("ctrlLimit_", &ctrlBWLimit_); /* bin gi tr bng thng
*/
bind_bool("running_", &running_); /* bin gi tr nh phn */
Ch rng tt c cc hm trn u c hai i s, tn ca mt bin OTcl, v a
ch ca bin thnh vin c bin dch tng ng c lin kt li. Trong khi thng
c trng hp l cc rng buc c thit lp bi hm to ca i tng, khng cn
phi lun c thc hin theo kiu ny. Ta s tho lun cc phng php thay th
khi n mc m t lp InstVar (phn 3.8) mt cch chi tit phn sau.
Mi bin c rng buc s t ng c khi to vi gi tr mc nh khi i tng
c to ra. Cc gi tr mc nh ny c c t nh cc bin lp c thng dch.
Qu trnh khi to ny c thc hin bi tuyn init-instvar{}, c gi ra bi cc
phng php trong lp Insvar, s c m t sau (phn 1.8). hm init-instvar{} kim
tra lp i tng thng dch, v tt c cc lp ngun ca i tng , tm kim
lp u tin m cc bin c nh ngha. N dng gi tr ca bin trong lp
khi to i tng . Hu ht cc gi tr khi to lin quan c nh ngha
trong ns/tcl/lib/ns-default.tcl. V d, nu cc bin lp sau y c nh ngha cho
ASRMAgent:
3Lu rng hm to ny c t im thm m t cc c im ca c ch rng buc bin
32
-
Agent/SRM/Adaptive set pdistance_ 15.0
Agent/SRM set pdistance_ 10.0
Agent/SRM set lastSent_ 8.345m
Agent set ctrlLimit_ 1.44M
Agent/SRM/Adaptive set running_ f
Agent/SRM/Adaptive set pdistance_ 15.0
Agent/SRM set pdistance_ 10.0
Agent/SRM set lastSent_ 8.345m
Agent set ctrlLimit_ 1.44M
Agent/SRM/Adaptive set running_ f
Do , mi i tng Agent/SRM/Adaptive mi s c tham s pdistance_ vi
gi tr t l 15.0; lastSent_ l 8.345m t vic ci t bin lp ca lp ngun;
ctrlLimit_ c gi tr l 1.44M s dng bin lp ca lp ngun hai ln b xo;
running c t l sai; bin trng hp pdistance_ khng c gn tham s u vo,
v khng c bin lp tn ti trong bt k h thng phn cp lp ca i tng thng
dch. Trong nhng trng hp nh vy, init-instvar{} s gi ra warn-instvar{},
in ra mt cnh bo v mt bin chng hn. Ngi dng c th b qua mt cch
c chn lc th tc ny trong cc bn m t m phng, lt qua cnh bo ny.
Ch rng s rng buc thc t c thc hin bng vic to cc i tng trong
lp InstVar. Mi i tng trong lp InstVar rng buc mt bin thnh vin bin
dch vi mt bin thnh vin thng dch. Mt TclObject lu tr mt danh sch cc
i tng InstVar tng ng vi mi bin thnh vin ca n m b rng buc trong
kiu ny. Phn u ca danh sch c lu trong bin thnh vin ca n instvar_
ca TclObject.
im cui cng cn xem xt l NS s bo m cc gi tr thc ca bin, c trong
i tng thng dch v i tng bin dch, s ging nhau mi lc. Tuy nhin, nu
cc phng thc v cc bin khc ca compiled object m bm theo gi tr ca bin
, chng phi c gi ra r rng hoc c thay i bt k khi no gi tr ca bin
b thay i. iu ny thng i hi cc t gc m ngi dng cn bit. C mt
cch cung cp cc t gc trong NS l thng qua phng thc command() s c
m t trong phn tip theo.
1.4.3. Bm vt bin
Thm vo cc rng buc bin, TclObject cn h tr bm vt ca cc bin trng
hp trong C++ v Tcl. Mt bin bm vt c th c to v cu hnh trong C++
hay Tcl. to ra qu trnh bm vt bin ng vi mc Tcl, bin phi c nhn thy
trong Tcl, iu c ngha rng n phi l mt bin trng hp Tcl thun ty hoc
bin C++/Tcl b gii hn . Thm vo , i tng s hu bin bm vt cng phi
c yu cu thit lp qu trnh bm vt s dng phng thc Tcl trace ca
33
-
TclObject. i s u tin trong phng thc trace phi l tn bin. i s th 2
(khng bt buc) c t i tng bm vt, chu trch nhim bm vt ca bin .
Nu i tng vt khng c c t, th i tng s hu bin chu trch nhim
bm vt n.
Vi mt TclObject, bm vt cc bin, n phi m rng phng thc bn m
n c nh ngha trong TclObject. Lp bm vt thc hin mt phng thc trace
n gin, v th, n c th hot ng nh mt ngi bm vt chung cho tt c cc
bin.
class Trace public Connector {:
...
virtual void trace(TracedVar*);
};
Di y l mt v d n gin cho vic ci t qu trnh bm vt bin trong Tcl:
\# \$tcp tracing its own variable cwnd\_
\$tcp trace cwnd_
\# the variable ssthresh_ of \$tcp is traced by a generic \$tracer
set tracer [new Trace/Var]
\$tcp trace ssthresh_ \$tracer
i vi mt bin C++ c th bm vt c, n phi thuc v mt lp m bt
ngun t TracedVar. Lp c s o TracedVar lu tr tn bin, ngi s hu, v cc
b bm vt. Cc lp m bt ngun t TracedVar s phi cung cp phng thc o
value, phng thc m ly b m k t nh l mt i s v ghi gi tr ca bin
vo .
class TracedVar {
...
virtual char* value(char* buf) = 0;
protected:
TracedVar(const char* name);
const char* name_; // name of the variable
TclObject* owner_; // the object that owns this variable
TclObject* tracer_; // callback when the variable is changed
...
};
Th vin TclCL xut ra 2 lp ca TracedVar l: TracedInt v TracedDouble.
Cc lp ny c th c dng vi cc kiu d liu c bn ca int v double tng
ng. C TracedInt v TracedDouble lm qu ti tt c cc hot ng m c th thay
34
-
i gi tr ca bin nh php gn, tng v gim. Cc hot ng b qu ti ny dng
phng thc assign gn gi tr mi cho bin v gi b bm vt nu gi tr mi khc
vi gi tr c trc . TracedInt v TracedDouble cng b sung cc phng thc v
value ca chng m a cc gi tr bin vo trong chui. rng v tnh chnh xc
ca u ra c th c c t trc.
1.4.4. Cc phng thc command: nh ngha v gi ra
i vi mi TclObject c to ra, ns thit lp th tc trng hp, cmd{}, nh
l mt bn l thc thi cc phng thc thng qua i tng bn sao c
bin dch. Th tc cmd{} gi ra phng thc command() ca i tng bng mt
cch t ng, nhp cc i s cho cmd{} nh l mt vector i s vi phng thc
command().
Ngi dng c th gi phng thc cmd{} bng mt trong 2 cch sau: gi ra mt
cch r rng th tc, c t hot ng mong mun nh l i s u tin, hoc mt
cch r rng , nu c mt th tc trng hp ca cng tn nh hot ng
mong mun. Hu ht cc bn m phng s dng kiu sau ny, v th, ta s m t
kiu dn chng kia trc.
Cho rng tnh ton khong cch trong SRM c thc hin bi i tng bin
dch; tuy nhin, n li thng c s dng bi i tng thng dch v thng c
gi ra nh sau:
$srmObject distance?
Nu khng c th tc no gi l distance, trnh thng dch s gi ra th tc
unknown, c nh ngha trong TclObject lp c bn. Th tc unknown sau s
gi ra
$srmObject cmd distance?
thc hin hot ng thng qua th tc command() ca i tng bin dch.
D nhin, ngi dng c th gi hot ng ny mt cch trc tip. Mt l do cho
iu ny l c th lm qu ti hot ng bng cch s dng mt th tc trng
tn. V d,
Agent/SRM/Adaptive instproc distance? addr {
$self instvar distanceCache_
if ![info exists distanceCache_($addr)] {
set distanceCache_($addr) [$self cmd distance? $addr]
}
set distanceCache_($addr)
}
By gi ta s m t cch m phng thc command() s dng ASRMAgent:command():
nh v d sau:
35
-
int ASRMAgent:command(int argc, const char*const*argv) :
Tcl& tcl = Tcl:instance();:
if (argc == 3) {
if (strcmp(argv[1], "distance?") == 0) {
int sender = atoi(argv[2]);
SRMinfo* sp = get_state(sender);
tcl.tesultf("%f", sp->distance_);
return TCL_OK;
}
}
return (SRMAgent:command(argc, argv));:
}
Chng ta c th phn tch on m ny nh sau:
Hm c gi vi 2 i s: i s u tin (argc) biu th s lng ca cc is c c t trong dng lnh cho trnh thng dch. Vector cc i s dng
lnh (argv) bao gm
argv[0] cha tn ca phng thc, "cmd".
argv[1] c t hot ng mong mun.
Nu ngi dng c t bt k i s no, th chng phi c t trong
argv[2...(argc - 1)]. Cc i s c truyn nh cc chui; chng phi c
chuyn i sang kiu d liu ph hp.
Nu php ton l ng, th n s tr v kt qu php ton s dng cc phngthc c m t trc (phn 1.3.3).
Bn thn hm command() phi tr v hoc l TCL_OK hay TCL_ERROR biu th thnh cng hay tht bi.
Nu php ton trong phng thc ny khng ng, n phi gi ra phng thclnh gc, v tr v kt qu tng ng. iu ny cho php ngi dng hnh dung
c cc php ton khi c c cc thuc tnh k tha nh l cc th tc trng
hp, hoc cc phng php bin dch. Trng hp phng thc command ny
c nh ngha cho mt lp vi s a k tha, ngi lp trnh c th t do
chn mt trong hai thnh phn b sung sau:
1. Chng c th gi ra mt trong cc phng thc command gc, v tr v
kt qu ca s gi ra , hoc l.
2. Chng c th l mt trong cc phng thc command gc mt s chui,
v tr v kt qu ca s gi ra u tin thnh cng. Nu khng thnh
cng, th chng s tr v mt li.
36
-
Trong ti liu ny, chng ta gi cc php ton c thc thi thng qua command() l
instproc-likes. N phn nh cng dng ca nhng hot ng ny nh th chng
l cc th tc trng hp OTcl ca mt i tng, nhng c th s rt khc trong s
nhn thc v s dng.
1.5. Lp TclClass
Lp bin dch ny (class TclClass) l mt lp hon ton o. Cc lp thu
c t lp c s ny cung cp 2 chc nng: xy dng nn nhnh lp thng dch
phn nh nhnh lp bin dch; v cung cp cc phng thc to ra cc TclObject
mi. Mi lp thu c nh vy kt hp vi mt lp bin dch ring bit trong nhnh
lp bin dch, v c th to cc i tng mi trong lp kt hp.
V d, xt mt lp nh RenoTcpClass. N c ly ra t lp TclClass, v c kt
hp vi lp RenoTcpAgent. N s dn ra cc i tng mi trong lp RenoTcpAgent.
Nhnh lp bin dch cho RenoTcpAgent l lp ln lt c to ra t TcpAgent, Tc-
pAgent: li c to ra t Agent, Agent li c to ra t TclObject. RenoTcpClass
c nh ngha nh sau
static class RenoTcpClass: public TclClass {
public:
RenoTcpClass() : TclClass("Agent/TCP/Reno") {}
TclObject* create(int argc, const char*const* argv) {
return (new RenoTcpAgent());
}
} class_reno;
Chng ta c th a ra mt s phn tch t nh ngha trn:
1. Lp ny ch nh ngha hm to, v mt phng thc thm vo, create cc
i tng ca TclObject kp hp.
2. NS s thc hin hm to hm to RenoTcpClass cho bin tnh class_reno},
khi n c bt u ln u tin. Vic ny ci t cc phng thc thch hp
v nhnh lp phin dch.
3. Hm to c t lp thng dch mt cch r rng nh Agent/TCP/Reno. iu
ny cng c t nhnh lp thng dch mt cch hon ton.
Gi li tho thun kia trong ns is l dng k t gch cho (/) nh l cch
phn chia. Vi bt k lp c cho l A/B/C/D, th lp A/B/C/D l 1 lp con
37
-
ca A/B/C, A/B/C l lp con ca A/B, ln lt A/B l lp con ca A. A chnh
n li l lp con ca TclObject.
Trong trng hp trn, hm to TclClass to ra 3 lp, Agent/TCP/Reno l lp
con ca Agent/TCP l lp con ca Agent l lp con ca TclObject.
4. Lp ny kp hp vi lp RenoTcpAgent; n to ra cc i tng mi trong lp
c kt hp ny.
5. Phng thc RenoTcpClass::create tr cc TclObject v trong lp RenoTcpAgent.
6. Khi ngi dng c t new Agent/TCP/Reno, th tc tip theo RenoTcpClass::create
c gi ra
7. Vector cc i s (argv) bao gm
argv[0] cha tn ca i tng.
argv[1...3] cha $self, $class, v $proc. K t khi create is c gi thng
qua th tc trng hp create-shadow, argv[3] bao gm create-shadow.
argv[4] cha bt k i s b sung no (c xem nh l mt chui) c cung
cp bi ngi dng.
class Trace minh ho vic trnh by i s bng cc phng thc TclClass.
class TraceClass : public TclClass \{
public:\tab
{}TraceClass() : TclClass("Trace") \{\}
{}TclObject* create(int args, const char*const* argv) \{
{}if (args >= 5)\untab
{}return (new Trace(*argv[4]));
{}else
{}return NULL;
{}\}
{}\} trace\_{}class;
Mt i tng Trace c to ra nh
new Trace "X"
Cui cng, v c bn, cch m nhnh lp thng dch c to nn nh sau:
1. Hm to i tng c thc hin khi ns khi ng ln u.
2. Hm to ny gi hm to TclClass vi ci tn ca lp c thng dch cng
nh i s ca n.
3. Hm to TclClass lu tr tn ca lp, v chn i tng ny vo mt bng k
lin kt ca cc i tng TclClass.
38
-
4. Trong sut qu trnh khi to ca b m phng, hm Tcl_AppInit(void) gi
ra TclClass::bind(void)
5. Vi mi i tng trong bng k cc i tng TclClass, hm bind() gi ra
register{}, bng cch c t tn ca lp thng dch nh i s ca n.
6. Hm register{} thit lp lp nhnh, to cc lp c yu cu, v cha c
to ra.
7. Cui cng, hm bind() nh ngha cc th tc i tng creat-shadow v
delete-shadow cho chnh lp mi ny.
1.5.1. Lm th no rng buc cc bin thnh vin lp C++
tnh
Trong phn 1.4, ta thy cch phi by cc bin thnh vin ca mt i tng
C++ sang khng gian OTcl. Tuy nhin, iu ny khng p dng cho cc bin thnh
vin tnh ca mt lp C++. D nhin, c th to ra mt bin OTcl cho bin thnh
vin tnh ca mi i tng C++; mt cch hin nhin iu ny lm mt hon ton
ngha ca cc bin thnh vin tnh.
Chng ta khng th gii quyt vn rng buc bng cch s dng gii php
tng t nh vic rng buc trong TclObject da trn lp InstVar, bi v lp InstVar
trong TclCL yu cu s hin hu ca mt TclObject. Tuy nhin, ta c th to mt
phng thc trong lp TclClass tng ng v truy cp cc thnh vin tnh ca mt
lp C++ thng qua cc phng thc TclObject tng ng ca n. Th tc y nh
sau:
1. To TclClass ca chnh bn nh m t trn;
2. Khai bo cc phng thc bind() v method() trong lp do bn to ra;
3. To cc phng thc rng buc ca bn trong hm bind() ca bn vi hm
add_method("your_method"), v sau b sung bin iu khin trong method()
bng cch tng t nh bn s lm trong TclObject::command(). Lu , s
lng bin hp quy cch vi TclClass::method() l khc so vi TclObject::command().
Ngi to c nhiu hn 2 i s trc.
Nh v d sau, chng ta biu din mt phin bn n gin PacketHeaderClass trong
~ns/packet.cc. Gi s rng chng ta c lp Packet sau y c cha mt bin tnh
hdrlen_ m ta mun truy cp t OTcl:
class Packet {
......
39
-
static int hdrlen_;
};
Sau ta lm tip theo nh bn di xy dng mt b truy cp cho bin ny:
class PacketHeaderClass:public TclClass {
protected:
PacketHeaderClass(const char* classname, int hdrsize);
TclObject* create(int argc, const char*const* argv);
/* Hai thnh phn ca cc phng thc truy nhp
trong lp Tcl */
virtual void bind();
virtual int method(int argc, const char*const* argv);
};
void PacketHeaderClass::bind()
{
/*Gi n lp c bn bind() phi lm trc
add_method()*/
TclClass::bind();
add_method("hdrlen");
{
int PacketHeaderClass::method(int ac, const char*const* av)
{
Tcl& tcl = Tcl::instance();
/*Lu vic chuyn i i s ny; ta c th sau
i x vi chng nh nu l trong TclObject::command()*/
int argc = ac - 2;
const char*const* argv = av 2;+
if (argc == 2) {
if (strcmp(argv[1], "hdrlen") == 0) {
tcl.resultf("%d", Packet::hdrlen_);
return (TCL_OK);
}
} else if (argc == 3) {
if (strcmp(argv[1], "hdrlen") == 0) {
Packet::hdrlen_ = atoi(argv[2]);
return (TCL_OK);
}
}
return TclClass::method(ac, av);
{
Sau bc ny, ta c th dng lnh OTcl sau truy cp v thay i cc gi tr ca
bin Packet::hdrlen_:
40
-
PacketHeader hdrlen 120
set i [PacketHeader hdrlen]
1.6. Lp Tcl Command
Lp ny (class TclCommand) ch cung cp c ch cho NS to xut ra cc
lnh n gin cho trnh thng dch, m sau c th c thc thi trong mt
bi cnh ton cc bi trnh thng dch. C hai hm c nh ngha trong file
~ns/misc.cc l: ns-random v ns-version. Hai hm ny c khi to bi hm
init_misc(void), c nh ngha trong ~ns/misc.cc; init_misc v c gi ra
bi Tcl_AppInit(void)
trong sut qu trnh khi ng.
class VersionCommand nh ngha lnh ns-version. N khng cn i s, vtr v phin bn NS hin hnh.
% ns-version ; # ly phin bn hin hnh
2.0a12
class RandomCommand nh ngha lnh ns-random. Khng cn i s, ns-randomreturns tr v mt s nguyn, v c phn b u trong khong [0, 231 1].Khi c t mt i s, n ly i s nh ht ging. Nu ht ging ny
c gi tr l 0, lnh dng mt gi tr ht ging heuristic; hay ni cch khc, n
t ht ging cho hm to s ngu nhin mt gi tr c th.
% ns-random; # tr v mt s ngu nhin
2078917053
% ns-random 0; #set the seed heuristically
858190129
% ns-random 23786; #t ht ging v gi tr c c t
23786
Lu rng, ni chung khng nn xy dng cc lnh mc cao cho ngi dng.
By gi ta m t cch nh ngha mt lnh mi bng cch s dng v d class
say_hello. V d nh ngha lnh hi, in chui "hello world", c theo sau bi
bt k cc i s dng lnh no c c t bi ngi dng. V d
% hi this is ns [ns-version]
hello world, this is ns 2.0a12
41
-
1. Lnh phi c nh ngha bn trong mt lp c xut pht t class TclCom-
mand. Vic nh ngha lp ny nh sau:
class say_hello : public TclCommand {
public:
say_hello();
int command(int argc, const char*const* argv);
};
2. Hm to cho lp phi gi ra hm to TclCommand vi lnh v i s; v.v.,
say_hello() : TclCommand("hi") {}
Hm to TclCommand t "hi" nh l mt th tc ton cc m gi ra
TclCommand::dispatch_cmd()
3. Phng thc command() phi thc hin c vic mong mun. Phng thc c
2 i s, mt l argc, cha s lng i s thc t c thng qua bi ngi
dng. Cc i s thc t c truyn vo bi ngi s dng u c xem nh
l mt vector i s (argv) v bao gm:
argv[0] cha tn ca lnh (hi).
argv[1...(argc - 1)] cha cc i s khc c c t trn dng lnh bi
ngi dng. command() c gi ra bi dispatch_cmd().
#include /* bi v ta dng dng I/O */
int say_hello::command(int argc, const char*const* argv) {
cout
-
1.7. Lp EmbeddedTcl
NS cho php s pht trin ca cc tnh nng trong c m bin dch, hoc thng
qua m thng dch, m c nh gi trong qu trnh khi to. V d, cc bn trong
tclcl/tcl-object.tcl hay trong ns/tcl/lib. Vic ti v nh gi cc on m nh vy
c thc hin thng qua cc i tng trong lp class EmbeddedTcl.
Cch d nht m rng ns is l thm m OTcl vo hoc tclcl/tcl-object.tcl hoc
qua cc on m th mc ns/tcl/lib. Lu rng, trong nhng trng hp sau ny,
ns t ng to ns/tcl/lib/ns-lib.tcl, v v th ngi lp trnh phi thm hai dng
lnh vo file ny bn dch ca chng s t ng ly ngun t ns khi khi ng.
V d, file ns/tcl/mcast/srm.tcl xc nh mt s th tc trng hp chy SRM.
Trong ns/tcl/lib/ns-lib.tcl, chng ta c cc dng lnh:
source tcl/mcast/srm.tcl
t ng ly srm.tcl c to bi NS khi khi ng.
C ba im cn lu vi m EmbeddedTcl l: u tin nu m c mt li
c to ra trong qu trnh nh gi th ns s khng chy. Th hai, ngi dng c
th khng cn n bt k m no trong cc bn dch. c bit, chng c th
ti to ton b on m sau khi sau khi c s thay i ni ti. Cui cng, sau
khi thm cc bn dch cho ns/tcl/lib/ns-lib.tcl, v t v sau bt c khi no
on m thay i, ngi dng phi bin dch li ns lm s thay i c hiu lc.
D nhin, trong hu ht trng hp 4, ngi dng ch th to on m ca mnh
b qua m c nhng.
Phn cn li ny s m t cch tch hp cc bn c lp trc tip vo trong
ns. Bc u tin l chuyn i bn dch vo trong mt i tng EmbeddedTcl. Cc
dng bn di m rng ns-lib.tcl v to ra i tng EmbeddedTcl c gi l
et_ns_lib:
tclsh bin/tcl-expand.tcl tcl/lib/ns-lib.tcl | n
../Tcl/tcl2c++ et_ns_lib > gen/ns_tcl.cc
on m,ns/bin/tcl-expand.tcl m rng ns-lib.tcl bng cch thay th tt c cc
dng source lines bi cc file ngun tng ng. Chng trnh, tclcl/tcl2cc.c, chuyn
i m OTcl thnh mt i tng EmbeddedTcl tng ng, et_ns_lib.
Trong qu khi to, vic gi ra phng thc EmbeddedTcl::load s nh gi
mng mt cch r rng.
tclcl/tcl-object.tcl c nh tr bi phng thc Tcl::init(void); Tcl_AppInit()gi ra Tcl::Init(). C php lnh chng xc cho ti l:
4Mt t trng hp m iu ny c th s khng xy ra l khi cc bin no c th phi cnh ngha hay khng c nh ngha, hoc ni cch khc bn dch cha m khc hn l th tc,v vic nh ngha bin v thc thi cc hot ng mt cch trc tip l khng th o ngc c
43
-
et_tclobject.load();
Mt cch tng t, ns/tcl/lib/ns-lib.tcl c nh tr trc tip bi Tcl_AppInittrong ns/ns_tclsh.cc.
et_ns_lib.load();
1.8. Lp InstVar
Phn ny m t cc bn cht ca lp InstVar. Lp ny xc nh cc phng thc
v c cu rng buc mt bin thnh vin C++ trong i tng bng bin dch
vi mt bin trng hp OTcl c c t trong i tng thng dch tng ng.
Vic rng buc c thit lp gi tr ca bin c th c t hoc c truy cp
t c trnh thng dch hoc t m bin dch mi lc.
C nm lp bin i tng: class InstVarReal, class InstVarTime, class
InstVarBandwidth, class InstVarInt, v class InstVarBool, tng ng vi
cc rng buc cho cc bin gi tr thc, thi gian, bng thng, s nguyn, v nh
phn mt cch ln lt.
By gi, ta m t c cu ci t cc bin trng hp. Ta dng class InstVarReal to
din gii khi nim. Tuy nhin, c cu ny c th ng dng c vi c 5 kiu bin
trng hp. Khi vic ci t mt bin thng dch truy cp mt bin thnh vin,
cc hm thnh vin ca lp InstVar gi s rng chng ang thc hin cc phng
thc thch hp, do chng s khng truy vn trnh thng dch xc nh bi cnh
m bin phi tn ti.
bo m hon cnh thc thi phng thc chnh xc, mt bin phi c rng
buc nu lp ca n c thit lp trong b trnh thng dch, v trnh thng dch
ang lm vic trn mt i tng ca lp . rng b nh dng yu cu khi
mt phng thc trong mt lp cho sn s lm cc bin ca n c th truy cp thng
qua trnh thng dch, phi l mt lp TclClass (phn 1.5) lin kt c nh
ngha nhn dng nhnh lp ph hp cho trnh thng dch. V th, bi cnh thc
thi phng thc ph hp, c th c to ra bng mt trong 2 cch.
Mt gii php n xut hin bt c khi no mt TclObject c to ra bn trong
trnh thng dich. iu ny thit lp bi cnh thc thi phng thc trong trnh thng
dch. Khi i tng bng bin dch ca TclObject thng dch c to ra, hm to
cho i tng bin dch c th rng buc cc bin thnh vin ca i tng
vi cc bin i tng thng dch trong bi cnh ca i tng thng dch mi c
to .
Mt gii php ni nh ngha mt php ton bind-variables trong mt hm
command, m c th c gi ra thng qua phng thc cmd. Bi cnh thc thi
phng thc ng c thit lp thc hin phng thc cmd. Tng t, m bin
44
-
dch by gi s hot ng trn i tng bng thch hp, v v th c th rng buc
chc chn cc bin thnh vin c yu cu.
Mt bin i tng c to bi vic c t tn ca bin thng dch, v a ch
ca bin thnh vin trong i tng bin dch. Hm to cho lp c s InstVar to ra
mt trng hp ca bin trong trnh thng dch, v sau thit lp mt th tc
by bt tt c cc truy cp n bin thng qua trnh thng dch.
Mi khi bin c c thng qua trnh thn dch, th tc by c gi ra trc
ngay khi c thao tc c. Th tc gi ra hm get thch hp tng ng s tr v gi
tr hin ti ca bin. Gi tr ny sau c dng t gi tr ca bin thng dch
v sau c c bi trnh thng dch.
Tng t, mi khi bin c lp thng qua trnh thng dch, th tc by c
gi ra ch sau khi vic ghi hon tt. Th tc ly gi tr hin ti c lp bi trnh
thng dch, v gi ra hm set tng ng chu trch nhim lp gi tr ca thnh vin
bin dch n gi tr hin ti c lp bn trong trnh thng dch.
45
-
Chng 2
C bn v TCL v OTCL
Mc lc
2.1. Tng quan v NS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.2. Lp trnh Tcl v Otcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Ngi dch: H Tt Thnh
Bin tp: L Tin Anh.
Bn gc: NS Simulator for beginners, Chapter 1 [2]
2.1. Tng quan v NS
B m phng NS da trn hai ngn ng: mt b m phng hng i tng, c
vit bng C++, v mt b thng dch OTcl (phn m rng hng i tng ca Tcl),
c dng thc hin cc on m kch bn (script) ca ngi dng.
NS c mt th vin s cc i tng giao thc v mng. C 2 nhnh cc lp
trong NS: nhnh gm m ngn ng C++ c bin dch v nhnh gm m lnh
OtcL oc thng dch, gia chng c s tng ng 1-1.
Nhnh gm m ngn ng C++ c bin dch cho php ta t hiu qu m
phng vi thi gian thc hin nhanh hn. iu ny c bit hu ch cho vic nh
ngha v m phng hot ng mt cch tht chi tit ca cc giao thc c th, cho
php ta gim thi gian x l s kin v gi tin.
Sau , on m Otcl c nhp bi ngi dng, ta c th nh ngha mt cu
trc (topo) mng c th, cc giao thc v ng dng ring bit m ta mun m phng
(tp tnh ca chng c nh ngha bn nhnh m ngn ng C++ c bin
46
-
dch) v dng ca d liu u ra mun nhn c t b m phng. Otcl c th tn
dng cc i tng c bin dch trong C++ thng qua mt lin kt Otcl (c
thc hin bng vic s dng TclCL1)[5] , lin kt Otcl ny to ra mt nh x gia
i tng Otcl vi mi i tng trong C++.
NS l mt b m phng s kin ri rc, trong , tng ca thi gian ph thuc
vo vic nh thi ca cc s kin, tng ny c duy tr vi mt b nh trnh.
Mt s kin l mt i tng trong nhnh C++ vi mt ID duy nht, mt thi gian
nh trc v con tr tr ti i tng s dng s kin . B nh trnh nm quyn
qun l mt cu trc d liu c th t (c 4 cu trc, nhng theo mc nh, NS s
dng mt danh sch lin kt n gin) cng vi cc s kin chun b c thc hin,
v thc thi tng s kin mt bng cch kch hot th (handle) ca s kin .
2.2. Lp trnh Tcl v Otcl
Trong Tcl, cc bin khng c nh kiu, v vy, mt bin c th l kiu chuihoc kiu s nguyn ty thuc vo gi tr m bn gn cho n. V d, khi ta
mun in kt qu ca php chia 1/60, nu ta vit: puts "[expr 1/60]", th kt
qu s l 0! c c kt qu chnh xc, ta cn ch ra rng ta khng lm vic
vi s nguyn, v cn nhp nh sau: put"[expr 1.0/60.0]"
Du # bt u mt dng ch thch khng nm trong chng trnh, trnh thngdch tcl s b qua dng ny.
to mt file, ta phi cho n mt ci tn, gi s l "filename", v gn mtcon tr ti n, con tr ny s c dng trong chng trnh tcl lin kt vi
file , gi s l "file1". Vic ny c thc hin bi cu lnh:
set file1 [open filename w].
Lnh puts c dng in kt qu u ra. Ch : mi ln lnh puts cdng, mt dng mi c bt u. trnh m dng mi, ta phi thm hu
t -nonewline sau lnh "puts. Nu mun in kt qu ra file (gi s l file ta
nh ngha trn), g: puts $file1 "on cn nhp". Khong nhy trng
c to ra bng cch thm . V d, nu mt bin, gi s l x, c gi tr l 2
v ta nhp lnh puts $file1 "x $x" sau n s in mt lnh vo file c tn
l filename, vi hai thnh phn "x" v "2" c ngn cch bi khong nhy
trng.
Thc thi mt cu lnh unix: g "exec" v cu lnh. V d, ta mun ns hin thmt ng cong t d liu c ghi trong mt file c 2 ct, vi tn l "data
1TCL web page[5]
47
-
trong phm vi chng trnh m phng. iu ny c th thc hin c bng
cch dng lnh xgraph nh sau:
Exec xgraph data &
(ch : du "&" c dng iu khin cho lnh thc hin ngm).
Cu trc ca mt cu lnh if nh sau:If { biu thc}{
} else {
{
}
Cu lnh if c th c bao trong cc cu lnh "if" khc v vi cc cu lnh
"else". Chng c th xut hin trong phn ". Ch , khi kim
tra iu kin logic tng ng, ta nn dng du "==" ch khng nn dng du
"=". iu kin logic bt tng ng c c php l "!=".
Cc vng lp c dng nh sau:for {set i 0}{$ i < 5}{incr i}{
}
Trong v d ny, khi cu lnh trong vng lp s c thc hin 5 ln. Sau
ton t for, cm "{set i 0} khai bo bin i l b m ca vng lp ng thi
khi to gi tr 0 cho n. Phn th hai trong {} l iu kin tip tc ca vng
lp, n c ngha l "tip tc thc hin vng lp nu i
-
puts "k >= 5, mod = [expr $d % $k]"
}
}
}
calling the procedure
test
Bng 2.1: Chng trnh Tcl thc hin cc php ton
tcl cho php to cc th tc. Chng c th tr v mt vi gi tr trong trnghp chng c cha lnh "return". C php tng qut ca mt th tc c tn
v d l blue nh sau:
proc blue {par1 par2 ...} {
global var1 var 2
Return $
}
Th tc nhn mt vi tham s u vo, c th l cc i tng, file, hoc cc
bin. Trong trng hp ca chng ta, cc bin c t tn l par1, par2, v.v..
Th tc c gi ra bng cch g: blue x y ... y, gi tr ca x v y s
c gn cho par1 v par2. Nu par1 v par 2 b thay i trong th tc, iu
khng nh hng g ti x v y. Mt khc, nu ta mun th tc c kh nng
tc ng trc tip ti cc bin bn ngoi phm vi ca n, ta phi nh ngha
cc bin l bin ton cc "global, v d di y l var 1 v var 2.
bng 2.1, ta thy mt v d th hin rt nhiu ton t s hc trong tcl. Ch th
pow cho kt qu l hm m bc k ca bin d (dk).
bng 2.2, ta ly v d mt chng trnh tcl tnh tt c s nguyn t nh
hn mt gii hn j cho trc. V d, nhn c cc s nguyn t nh hn 11, g:
ns prime.tcl 11. V d v cc s nguyn t cho thy cch s dng lnh if, cc
vng lp v th tc. Bin argc c cha cc tham s c a vo chng trnh. Bin
argv l mt vect cha cc tham s c truyn ti chng trnh (vy nn bin argc
chnh l di ca bin argv), v lnh lindex cho php chng ta ly trng hp ca
vect c tr bi tham s th hai. Do vy, dng lnh set j [lindex $argv 0] gn
cho bin j gi tr ca tham s u tin c truyn vo chng trnh (gi tr c
lu vo bin argv).
49
-
# Cch s dng: ns prime.tcl NUMBER
# NUMBER l s cc s nguyn t m chng ta mun nhn
If {$argc !=1}{
# Phi nhn ly mt i s n, hoc chng trnh s bo
#li Puts stderr ERROR! Ns called with wrong number of argument!($argc)
exit 1
} else{
Set j [lindex $argv 0]
proc prime {j}{
#Tnh ton tt c cc s nguyn t cho ti j
for {set a 2}{$a
-
ti khuyn co cc bn tm hiu thm v OTcl bng cch c thm cc ti liu khc.
# Cch dng: ns fact.tcl Number
# NUMBER l s m ta mun ly giai tha
#
if {$argc !=1}{
# Phi ly i s n hoc chng trnh bo li
# Puts stderr ERROR! Ns called with wrong number
# of argument!($argc)
exit 1
} else{
Set f [lindex $argv 0]
}
proc Factorial{x}{
for {ser result 1}{$x>1}{set x [expr $x-1]}{
set result [expr $result*$x]
}
return $result
}
Set res [Factorial $f]
Puts Factorial of $f is $res
Bng 2.3: Chng trnh Tcl tnh giai tha ca mt s
Class Real
Real instproc init {a}{
$self instvar value_
set value_ $a
}
Real instproc sum {x}{
$self instvar value_
set op $value_+[$x set value_] = \t
set value_[expr $value_+ [$x set value_]]
put $op $value_
}
Real instproc multiply {x}{
51
-
$self instvar value_
set op $value_*[$x set value_] = \t
set value_[expr $value_* [$x set value_]]
put $op $value_
}
Real instproc divide {x}{
$self instvar value_
set op $value_/[$x set value_] = \t
set value_[expr $value_/ [$x set value_]]
put $op $value_
}
Class integer superclass Real
Integer instproc divide {x}{+
$self instvar value_
set op $value_/[$x set value_] = \t
set d[expr $value_/ [$x set value_]]
set value_ [expr round($d)]
put $op $value_
}
set realA [new Real 12.3]
set realB [new Real 0.5]
$realA sum $realB
$realA multiply $realB
$realA divide $realB
set integerA [new Integer 12]
set integerB [new Integer 5]
set integerC [new Integer 7]
$integerA multiply $integerB
$integerB divide $integerC
Bng 2.4: Chng trnh Tcl n gin s dng i tng real v integer
52
-
Chng 3
Cc thnh phn c bn trong b
m phng NS
Mc lc
3.1. Khi to v kt thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2. nh ngha mt mng c
top related