بخشی از مقاله

. مقدمه

1-1 هدف
NS شبيه‏سازي شئ گراست كه بصورت گسسته مبتني بر رويدادها شبكه را شبيه سازي مي‏كند، اين برنامه در دانشگاه بركلي با زبانهاي C++ و Otcl ايجاد شده و بسط يافته است. NS اساساً براي پياده‏سازي شبكه‏هاي محلي و گسترده مفيد مي‏باشد. هرچند استفاده از NS براي افرادي كه با اصول شبيه‏سازها آشنا هستند ساده خواهد بود اما بكارگرفتن اين برنامه براي كاربران مبتدي استفاده از شبيه سازها كاملاً دشوار است زيرا تعداد وستندات و راهنماهاي مناسب براي كاربران

 

مبتدي بسيار اندك مي‏باشد. با وجود اين مستندات زيادي وجود دارد كه بوسيلة افراد حرفه‏اي در شبيه سازي براي كاربران حرفه‏اي NS نوشته شده است. هدف از اين نوشته ارائة برخي ايده از چگونگي عملكرد شبيه سازها، راهنمايي براي توسعه و ادامة راه، آشنايي با اجزاي شبكه در كدهاي شبيه ساز، چگونگي ايجاد اجزاي شبكة جديد و …. مي‏باشد. عمدة مطالب با پرداختن به مثالهاي ساده و توضيحات مختصر مبتني بر تجربيات مختلف بيان شده است.


2-1 نماي كلي
NS يك شبيه ساز رويدادگراست كه در دانشگاه بركلي براي شبيه‏سازي شبكه‏هاي مبتني بر IP ايجاد گرديده. در اين شبيه ساز پروتكلهاي شبكه از قبيل TCP و UDP ، رفتار منابع ترافيك زا مانند Ftp ، Telnet و Web ، مكانيزم مديريت صف در مسيريابها از قبيل DropTail ، RED و CBQ ، الگوريتمهاي مسيريابي مانند Dijkestra و …. قابل اجرا مي‏باشند. همچنين در NS، ارسال چندتايي (Multicast) و برخي از پروتكلهاي لاية فيزيكي براي شبيه سازي LANها نيز قابل اجرا مي‏باشند.

پروژة NS در حال حاضر بخشي از پروژة VINT مي‏باشد كه ابزارهايي را براي نمايش نتايج شبيه سازي، آناليز و تبديل توپولوژهاي شبكه ايجاد كرده و توسعه مي‏دهد. توسعة VINT از طريق توليد كننده‏هايي كه بخوبي توانايي بكارگيري NS را دارند. NS رايج كنوني در محيط C++ و Otcl ( Otcl يك زبان اسكريپت با الحاقات شئ گراست كه در MIT ايجاد شده است)، نوشته شده و در دسترس مي‏باشد. در اين مقاله در مورد ساختار NS مختصري بحث مي‏شود اما چگونگي استفادة بيشتر از NS بطور جزئي با مثالهايي توضيح داده خواهد شد.


شكل 1: NS از ديدگاهي ساده شده براي كاربر

همانگونه كه در شكل 1 نشان داده شده است از ديدگاهي ساده شده براي كاربر، NS مفسر اسكريپت TCL بصورت شئ گراست كه داراي يك فهرست كنندة رويدادهاي شبيه سازي و كتابخانة Object هاي اجزاء شبكه و كتابخانه‏هاي راه‏اندازي و تنظيم شبكه مي‏باشد. بعبارت ديگر براي استفاده از NS شما در زبان اسكريپت Otcl برنامه مي‏نويسيد. براي تنظيم و راه‏اندازي شبكه، كاربر بايد اسكريپت Otcl بنويسد كه يك فهرست كنندة رويداد (زمانبند) را ايجاد كند، براي تنظيم كردن توپولوژي‏هاي شبكه از Objectهاي شبكه و توابع موجود در كتابخانه‏ها و بيان منابع ترافيك زا در هنگام شروع و توقف انتقال بسته‏ها از طريق زمانبند رويدادها استفاده مي‏شود. لغت عمودي براي تنظيم شبكه استفاده شده است چون تنظيم نمودن شبكه بصورت عمودي (عمقي) امكان مسيرهاي داده را از ميان Objectهاي شبكه بوسيلة تنظيم اشاره‏گر از يك Object به آدرس Object ديگر، فراهم مي‏كند. هنگاميكه يك كاربر بخواهد يك Object شبكة جديد ايجاد كند بسهولت مي‏تواند با نوشتن يك Object جديد يا ايجاد يك Object مركب از كتابخانة Object يك Object جديد ايجاد نمايد و جريان داده را از طريق Objectها برقرار سازد.


از اجزاء مهم NS در كنار Objectهاي شبكه زمتنبند رويدادهاست. هر رويداد در NS يك ID منحصر بفردي با زمان تنظيم شده‏ براي هر بسته است كه به يك Object كه رويدادها را موجب مي‏شود، اشاره مي‏كند. در NS يك زمنبند رويداد، زمان شبيه سازي و شروع همة رويدادها را نگه مي‏دارد. اجزاء شبكه از طريق ارسال بسته‏ها با يكديگر ارتباط برقرار مي‏كنند، هرچند كه اين امر موجب مصرف زمان حقيقي شبيه سازي نمي‏شود. همة اجزاء شبكه بخشي از زمان شبيه سازي را صرف بكاربردن

بسته‏ها مي‏كنند. براي مثال سوئيچي در شبكه كه با 20 ميكروثانيه تاٌخير خروج يك رويداد براي يك بسته شبيه سازي شده‏است، در جدول زمانبندي تاٌخير هر رويداد براي آن 20 ميكروثانيه تنظيم گرديده، زمانبند بعد از 20 ميكروثانيه رويداد را از صف خارج كرده و آنرا به عنصر سوئيچ ارسال مي‏كند، كه آنهم بعد بسته را يك عنصر مرتبط خروجي مشخص ارسال مي‏نمايد. استفادة ديگري كه از زمانبند رويداد مي‏شود بعنوان تايمر است. براي مثال TCP نيازمند يك تايمر براي نگهداري زمان

سرآمدن انتقال بسته‏ها مي‏باشد. تنها تفاوت بين تايمرها و زمانبندها، آنست كه تايمر مقدار زمان مرتبط با يك بسته را اندازه‏گيري مي‏كند و يك عمل خاص را به آن بسته بعد از سپري شدن يك زمان مشخص نسبت مي‏دهد.
NS نتنها در Otcl بلكه در C++ نيز نوشته شده است. بدليل كارآمد بودن، NS مسيرهاي عبوري داده‏ها را از مسيرهاي عبوري كنترلي تفكيك ساخته است. بخاطر كاهش دادن بسته‏ها زمان پردازش رويدادها (نه زمان شبيه سازي)، زمانبند و Object هاي اجزاي شبكة اصلي در مسير داده‏ها با زبان C++ نوشته و كمپايل شده‏اند. اين Objectهاي كمپايل شده از طريق يك اتصال Otcl در دسترس مفسر Otcl قرار گرفته‏اند كه هر اتصال Otcl يك Otcl Object جفت براي هر C++ Object ايجاد كرده و توابع كنترلي را مي‏سازند. متغيرهاي قابل تنظيم مشخص شده با Objectهاي C++ بعنوان توابع و متغيرهاي عضو Objectهاي Otcl مخابره شده عمل مي‏كنند. بدين طريق كنترل Objectهاي C++ به Otcl واگذار شده است. همچنين افزودن توابع عضو و متغيرها به يك اتصال C++ در Otcl Object امكانپذير است.

سير داده‏ها) بطور كامل مي‏تواند در Otcl اجرا شود.


شكل 2: همزادي C++ و Otcl

شكل 2 نشاندهندة يك مثال سلسله مراتبي در C++ و Otcl است. چيزي كه در اين شكل قابل توجه مي‏باشد Objectهاي C++ي هستند كه داراي يك اتصال سلسله مراتبي Otcl مي‏باشند همانطور كه نشان داده شده‏ يك جفت سلسله مراتبي Otcl Object بسيار مشابه به نوع C++ وجود دارد.


شكل3: معماري NS

 

شكل 3 معماري كلي NS را نشان مي‏هد. در اين تصوير يك كاربر عمومي (نه يك كاربر حرفه‏اي NS) مي‏تواند با قرار گرفتن در گوشه سمت چپ پايين، طراحي و اجراي شبيه سازي را در Tcl با استفاده از Objectهاي شبيه سازي موجود در كتابخانة Otcl انجام دهد. زمانبند رويدادها و اغلب اجزاي شبكه در C++ اجرا مي‏شوند و از طريق يك اتصال Otcl كه با استفاده از Tclcl ايجاد شده در دسترس Otcl قرار مي‏گيرند. تمام اين چيزها با يكديگر NS را كه يك مفسر Tcl از نوع شئ گراست را با كتابخانه‏هايش مي‏سازند.
در اينجا چيزي كه مي‏تواند جالب توجه باشد چگونگي بدست آوردن نتايج حاصل از شبيه سازي NS است. همانطور كه در شكل 1 ملاحظه مي‏شود، زمانيكه يك شبيه سازي پايان مي‏يابد، NS يك يا چند فايل خروجي متني كه محتويات آنها جزئيات داده‏هاي شبيه سازي را شامل مي‏شود، توليد مي‏كند. اين داده‏ها مي‏تواند براي آناليز كردن شبيه سازي (كه در بخش بعد 2 مثال از آناليز نتايج شبيه سازي ارائه شده است)، يا بعنوان يك ورودي يراي ابزار نمايش گرافيكي شبيه سازي كه Network Animator ناميده مي‏شود و در بخشي از پروژة VINT ايجاد شده، بكار رود. NAM (Network Animator)، داراي محيط گرافيكي مناسبي براي كاربران همانند يك برنامة CD Player (كه داراي دكمه‏هاي Play، Fast Forward و ... است) مي‏باشد. همچنين در NAM يك كنترل كنندة سرعت نمايش نيز تعبيه شده است. بعلاوه NAM مي‏تواند اطلاعات را از قبيل توان گذردهي و تعداد افت بسته‏ها در هر اتصال بصورت گرافيكي نمايش دهد هرچند كه از نتايج گرافيكي براي آناليز دقيق شبيه سازي نمي‏توان استفاده كرد.

 

2. مباني NS

1-2 Otcl : زباني براي كاربر
همانگونه كه در بخش قبل ذكر گرديد. NS اساساً يك مفسر Otcl با با كتابخانه‏هاي Object شبيه سازي شبكه مي‏باشد. دانستن چگونگي برنامه‏نويسي در محيط Otcl براي NS مفيد خواهد بود كه در اين بخش مثالهايي به اين منظور ارائه خواهد مي‏گردد.

مثال 1 يك اسكريپت Tcl عموميست كه چگونگي ايجاد يك روال و فراخواندن آن، چگونگي مقدار دهي به متغيرها و چگونگي ايجاد يك حلقه را نشان مي‏هد. دانستن اينكه Otcl تعميم يافتة شئ گرايي از Tcl است مشخص خواهد كرد كه همة فرمانهاي Tcl در Otcl قابل استفاده‏اند. وابستگي بين Tcl و Otcl عيناً مشابه C و C++ مي‏باشد. براي اجراي اين اسكريپت بايد از برنامة ex-tcl.tcl در محيط NS استفاده نمود.

مثال1: مثالي از اسكريپت Tcl

در Tcl كلمة كليدي proc براي تعريف يك روال بكار مي‏رود، بدنبال آن يك نام روال و آرگومانها در دو براكت مشخص مي‏گردند. كلمة كليدي set براي نسبت دادن مقدار به يك متغير استفاده مي‏شود. [expr...] مقادير مشخص شده در براكت‏هاي بعد از كلمة كليدي را محاسبه مي‏كند. نكتة قابل توجه گرفتن مقدار نسبت داده شده به يك متغير است، $ بهمراه نام متغير به اين منظور بكار مي‏رود . كلمة كليدي puts رشته‏هاي زير را درون دو علامت گيومه چاپ مي‏كند.
نتايج حاصل از مثال يك در اينجا نشان داده شده است.

مثال بعدي يك مثال برنامه نويسي شئ گرا در Otcl است. اين مثال بسيار ساده است اما روش چگونگي ايجاد كردن و استفاده از Objectها را در Otcl نشان مي‏دهد. شانس نوشتن يك Object براي يك كاربر مبتدي بسيار نادر است. بهرحال از اينرو همة Objectهاي NSي كه ما در برنامه‏نويسي شبيه سازي NS استفاده خواهيم كرد، چه در Otcl نوشته شد باشد چه در ++C ، اساساً Objectهاي Otcl هستند.

مثال 2: مثالي از اسكريپت Tcl

مثال 2 يك اسكريپت Otcl است كه 2 كلاس Object را تعريف مي‏كند. “mom” و “kid” بطوريكه “kid” يك كلاس فرزند از “mom” است و يك تابع عضو براي هر كلاس بنام “greet” تعيين شده است. بعد از تعريف كردن كلاسها هر Object همان لحظه ايجاد و مشخص مي‏گردد، متغير “age” براي “mom” مقدار 45 و براي “kid” مقدار 15 تنظيم مي‏شود و “greet” تابع عضو هر يك از Objectهاي ايجاد شده مي‏باشد. كلمة كليدي class براي ايجاد يك كلاس شئي و كلمة instproc براي تعريف يك تابع عضو براي يك كلاس Object مي‏باشند.


فرزندان كلاس با استفاده از كلمة كليدي superclass مشخص شده‏اند. در تعريف توابع عضو، $self همانند اشاره‏گر “this” دز C++ عمل مي‏كند. و instvar چك مي‏كند كه آيا نام متغير در كلاس خودش تعريف شده‏است يا در سوپركلاسش. اگر نام متغير گرفته شدة كنوني قبلاً تعريف شده باشد، متغير به نام جديد ديگري ارجاع داده مي‏شود. در نهايت براي ايجاد يك Object كلمة كليدي new در مثال نشان داده شده است. اجراي برنامة ex-otcl.tcl در محيط NS روي اين مثال نتايج زير را نشان خواهد داد.

2-2 مثال ساده‏اي از شبيه سازي
در اين بخش يك اسكريپت سادة NS نشان داده شده و عملياتي كه در هر سطر انجام مي‏پذيرد توضيح داده شده است. مثال 3 يك اسكريپت Otcl است كه پيكربنندي شبكة ساده‏اي را ايجاد كرده و عمليات شبيه‏سازي شكل 4 را انجام مي‏دهد. براي اجراي اين شبيه‏سازي، بايد از برنامة ns-simple.tcl در محيط استفاده شود.

شكل4: يك توپولوژي سادة شبكة و سناريوي شبيه سازي
اين شبكه داراي 4 گره مي‏باشد كه در شبكل فوق ديده مي‏شوند. اتصالات دوطرفه بين n0 و n2 ، n1 و n2 با پهناي باند 2 Mbps و تاٌخير 10 ms برقرار است. اتصالات دو طرفه بين n2 و n3 داراي 1.7 Mbps پهناي باند و 20 ms تاٌخير مي‏باشد. هر گره از يك صف دنباله دار بطول حداكثر 10 خانه استفاده مي‏كند. يك نماينده (agent) ، Tcp به n0 پيوست شده است و يك اتصال به يك نمايندة “sink” ، Tcp در n3 برقرار مي‏باشد. بعنوان پيشفرض حداكثر اندازة بسته‏هايي كه نمايندة Tcp

مي‏تواند توليد نمايد 1 Kbyte مي‏باشد. نمايندة “sink” Tcp، بسته‏هاي ack را براي فرستنده توليد و ارسال مي‏كند و بسته‏هاي دريافتي را آزاد مي‏سازد. نماينده “udp” كه به n1 پيوست شده به نمايندة “null” در n3 متصل گرديده است. يك نمايندة “null” فقط بسته‏هاي دريافتي را آزاد مي‏كند. يك توليد كنندة ترافيك “ftp” و يك توليد كنندة ترافيك “cbr” بترتيب به نمايندة Tcp و Udp پيوست مي‏شوند، و “cbr” براي توليد بسته‏هاي 1 Kbyte در نرخ 1 Mbps پيكربندي شده است. “cbr” براي شروع در ثانية 0.1 و توقف در ثانية 4.5 و ftp نيز براي شروع در ثانيه 0.1 و توقف در ثانية 4 تنظيم شده‏اند.

 


مثال3: مثالي از اسكريپت Tcl

در اينجا اسكريپت بالا را توضيح مي‏دهيم. عموماً يك اسكريپت NS با ايجاد يك Object شبيه‏ساز آغاز مي‏شود.

• set ns [new Simulator]:
يك Object شبيه‏ساز NS ايجاد مي‏كند و آنرا به متغير ns نسبت مي‏دهد و بعد از آن اين عمليات‏ها انجام مي‏گيرند.


• تعريف كردن شكل بسته
• ايجاد يك زمتنبند
• انتخاب شكل آدرس دهي پيش فرض

Object ؛شبيه‏ساز؛ توابع عضوي دارد كه اعمال زير را انجام مي‏دهند.
• ايجاد Objectهاي مركب از قبيل گره‏ها، اتصالها
• اتصال Objectهاي ايجاد شدة اجزاء شبكه
• تنظيم پارامترهاي اجزاي شبكه


• ايجاد ارتباط بين نماينده‏ها
• مشخص كردن انتخاب‏هاي نمايش NAM

اغلب توابع عضو براي تنظيم و زمانبندي شبيه‏سازي بكار مي‏روند، هر چند برخي از آنها براي نمايش NAM استفاده مي‏شوند.

• $ns color fid color:
براي تنظيم رنگ بسته‏ها در هنگام گردش در شبكه استفاده مي‏شود. اين تابع عضو براي نمايش NAM است وتاٌثيري بر شبيه‏سازي واقعي ندارد.

• $ns namtrace-all file-descriptor:
اين تابع عضو موجب مي‏شود شبيه‏ساز ركوردهاي نتيجه را در يك فايل با فرمتي كه براي ورودي NAM بكار رود، ذخيره كند.

• proc finish {}:
اين تابع بعد از پايان يافتن شبيه‏سازي فراخواني مي‏شود. در اين تابع پردازشهاي بعد از شبيه‏سازي مشخص شده‏اند.

• set n0 [$ns node]:


تابع عضو node يك گره ايجاد مي‏كند. هر گره در NS يك Object مركب است كه داراي آدرس و پورت مي‏باشد و كاربران مي‏توانند بترتيب با يك آدرس و يك Object پورت گره ايجاد كنند و آنها را با هم اتصال دهند.

• $ns duplex-link node1 node2 bandwidth delay queue-type:
2 اتصال ساده با پهناي باند و تاٌخير مشخص شده ايجاد مي‏كند و 2 گرة مشخص را بهم متصل مي‏نمايد. در NS صف خروجي هر گره بعنوان بخشي از يك اتصال محسوب مي‏شوند از اينرو كاربران بايد نوع صف را زمان ايجاد اتصالات مشخص كنند. در اسكريپت شبيه‏سازي بالا، صف دنباله دار استفاده شده است. اگر خواننده بخواهد از يك صف RED استفاده كند، بسادگي فقط كلمة Droptail را با RED جابجا مي‏نمايد. همانند يك گره هر اتصال يك Object مركب مي‏باشد و ك

اربران مي‏توانند Sub-Objectهاي خود و ارتباطات آنها و گره‏ها را ايجاد نمايند.

• $ns queue-limit node1 node2 number:
اين خط محدودة صف را بين دو اتصال ساده‏اي كه گره 1 و 2 را بهم متصل مي‏كند، با عددهاي مشخص شده تنظيم مي‏نمايد.

• $ns duplex-link-op node1 node2 ...:
هر دو خط بعدي براي نمايش NAM استفاده شده‏اند. براي مشاهدة تاٌثير اين خطوط، كاربر مي‏تواند آنها را بعنوان توضيح مشخص كند و بعد شبيه‏سازي را تكرار نمايد.

حال كه تنظيم‏هاي اولية شبكه انجام شده، نوبت تنظيم نماينده‏هاي ترافيكي از قبيل Tcp و Udp ، منابع ترافيك زا از قبيل ftp و cbr و پيوست آنها بترتيب به گره‏ها و نماينده‏ها مي‏باشد.

• set tcp [new Agent/TCP]:
اين خط چگونگي ايجاد نماينده را نشان مي‏دهد. عموماً كاربران توانايي ايجاد هر نماينده يا منبع ترافيك زا را به اين روش خواهند داشت. نماينده‏ها و منابع ترافيك زا در حقيقت Objectهاي پايه‏اي مي‏باشند (نه مركب). غالباً در C++ ايجاد شده و به Otcl متصل شده‏اند. بدين جهت توابع عضو Object شبيه‏سازي مشخصي كه بتوان اين Objectها را در لحظه ايجاد كند، وجود ندارد. براي ايجاد نماينده‏ها يا منابع ترافيك زا هر كاربر بايد نام‏هاي كلاس‏هاي اين Object ها را بداند. اين اطلاعات در مستندات NS موجود مي‏باشند.

 

• $ns attach-agent node agent:
تابع عضو attach-agent يك Object نمايندة ايجاد شده را به يك Object گره پيوست مي‏كند.

• $ns connect agent1 agent2:
بعد از اينكه 2 نماينده‏اي كه با همديگر در ارتباط هستند ايجاد شدند نوبت به برقراري اتصال يك شبكه منطقي بيت آنها مي‏رسد. اين خط يك اتصال شبكه بوسيلة تنظيم آدرس مقصد و آدرس پورت براي هر نماينده برقرار مي‏كند با اين فرض تمام پيكربندي شبكه انجام پذيرفته است نوبت به نوشتن يك سناريو براي شبيه‏سازي مي‏رسد (زمانبندي شبيه‏سازي). Object شبيه‏ساز داراي تعدادي تابع عضو زمانبندي است. اما غالباً تابع زير بيشترين كاربرد را در آن دسته دارد.

• $ns at time "string":
اين تابع عضو يك Object شبيه‏ساز زمانبند را براي زمانبندي اجراي رشته‏هاي مشخص شده در زمان شبيه‏سازي، ايجاد مي‏كند.


در NS معمولاً يك منبع ترافيك زا داده‏هاي واقعي و درستي را انتقال نمي‏دهند، اما نمايندة در نظر گرفته شده را براي آمادگي ارسال ديتا آگاه مي‏سازد و نماينده فقط از مقدار داده جهت انتقال مطلع است و ايجاد و ارسال بسته‏ها را انجام مي‏دهد. بعد از پيكربندي تمام شبكه، زمانبندي و مشخص كردن رول‏هاي بعد از شبيه‏سازي تنها عمل باقي مانده اجراي شبيه‏سازيست كه آن نيز با $ns run انجام مي‏پذيرد.

3-2 زمانبند رويداد
در اين بخش پيرامون زمانبند رويدادهاي گسسته در NS صحبت مي‏شود. همانگونه كه در بخش‏هاي قبل آمده، استفاده كننده‏هاي اصلي زمانبند رويدادها اجزايي از شبكه‏اند كه تاٌخيرهاي بسته‏ها يا زمانهاي مورد نياز آنها را شبيه‏سازي مي‏كنند. شكل 5 نشان مي‏هد كه هر Object شبكه از يك زمانبند رويداد استفاده مي‏كند، بياد داشته باشيم كه يك Object از شبكه كه يك رويداد را منتشر

مي‏كند كسي است كه بعداً در زمانبندي، يك رويداد را بكار مي‏برد. همچنين بايد دانست كه مسير داده بين Objectهاي شبكه و مسير رويدادها از هم متفاوتند. در حقيقت بسته‏ها بين يك Object شبكه و Object شبكة ديگر با استفاده از روش send(Packet* p) {target_->recv(p)}; براي ارسال و روش recv(Packet*, Handler* h = 0) براي دريافت، دست به دست مي‏شوند.


شكل5: زمانبند رويداد گسسته

NS داراي 2 نوع زمانبند رويداد متفاوت مي‏باشد. نوع همزمان (Real Time) و نوع غير همزمان (Un-RealTime) . براي يك زمانبند غير همزمان 3 نوع اجرا برقرار مي‏باشد (نوع فهرستي، كومه‏اي و تقويمي) با اين وجود همگي بطور منطقي به يك صورت اجرا مي‏گردند. وجود اين تعدد بدليل سازگاري با متدهاي مانده از قبل مي‏باشد. زمانبند غيرهمزمان تقويمي بعنوان پيش فرض تنظيم شده است. در زير يك مثال از يك زمانبند رويداد مشخص انتخاب شده است،


. . .
set ns [new Simulator]
$ns use-scheduler Heap
. .

ديگر استفاده از زمانبند رويداد، زمانبندي رويدادهاي شبيه‏سازي است، از قبيل اينكه چه وقتي كاربرد ftp شروع مي‏شود، در چه زمان يك شبيه‏سازي متوقف مي‏شود يا اينكه از آن براي توليد سناريوي شبيه‏سازي قبل از انجام يك شبيه‏سازي استفاده مي‏شود. يك Object “AtEvent” در واقع يك كلاس فرزند از رويداد است، بطوريكه داراي يك متغير اضافي براي نگهداري رشتة گرفته شده، مي‏باشد. هر چند كه در زمانبند رويداد با آن همانند يك رويداد معمولي رفتار مي‏شود.

هنگاميكه يك شبيه‏سازي آغاز گردد و يك زمان براي يك tras در صف رويدادها رسيد، AtEven به يك "AtEvent handler"داده مي‏شود كه يكبار براي همة AtEven ها ايجاد شده است و دستور Otcl مشخص شده بوسيلة فيلد string از AtEven اجرا مي‏گردد. در زير خط زمانبندي رويدادهاي شبيه‏سازي به مثال بالا افزوده شده است.

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید