آموزش زبان با داستان انگلیسی
 
پایان نامه پیش بینی بهره کشی و خوشه بندی آسیب پذیری­ ها بوسیله­ متن کاوی

پایان نامه­ کارشناسی ارشد در رشته­ مهندسی کامپیوتر- نرم ­افزار

عنوان:پیش بینی بهره کشی و خوشه بندی آسیب پذیری­ ها بوسیله­ متن کاوی

تعداد صفحات : 111

 

چکیده:

آسیب پذیری­های نرم افزار می­تواند منجر به تلفات مالی و اطلاعاتی شود. به علت محدود بودن منابع مالی و انسانی، اولویت دهی به آسیب­ها بسیار مورد توجه می­باشد. پیش از این پژوهش، تعداد زیادی از محققان آسیب پذیری­ها را براساس دانش­های تجربی و آماری، رده بندی کرده­اند. اماگاهی طبیعت متغییر آسیب پذیری­ها، فراهم کردن یک معیار رده بندی برای آن­ها را غیر ممکن می­کند.

گزارش­های آسیب پذیری، به طور پیوسته در پایگاه داده­های مختلف ثبت می­شوند. اطلاعات متنی آسیب پذیری­ها، به طور کامل توسط ابزارهای اتوماتیک موجود، مورد استفاده قرار نمی­گیرد. این پژوهش نشان داد که از اطلاعات موجود در متن­ها برای ساخت مدل­های پیش گو می­توان استفاده کرد. متن کاوی ابزاری مناسب برای به دست آوردن اطلاعاتی است که در اخذ تصمیمات مهم مدیریتی موثر می­باشند.

در زمینه پیش بینی بهره کشی با استفاده از متن کاوی، تاکنون فقط یک تحقیق انجام شده است. این تحقیق در KDD2010، با عنوان “فراتر از اکتشافی: آموزش برای، کلاس بندی آسیب پذیری و پیش بینی بهره کشی” ارائه شده است. این تحقیق به سوالات زیر، با استفاده از متن کاوی پاسخ داده است: آیا از آسیب پذیری بهره کشی خواهد شد؟ چه زمانی از آسیب پذیری موجود بهره کشی خواهد شد؟ این مقاله در مقایسه با CVSS(که یکی از متریک­های معروف آسیب پذیری است) به نتایج خوبی رسیده است. در این پژوهش به سوالات فوق و به سوالات جدید زیر دقت بالایی پاسخ داده شده است:

اگر سیستمی مورد بهره کشی قرار گرفته، چه زمانی این بهره کشی آغاز شده است؟ (دقت پاسخ­ها بین 94.5-84%)

اگر سیستمی آسیب پذیر است، چه زمانی بسته اصلاح شده آن از سوی سازندگان ارائه خواهد شد؟ (دقت پاسخ­ها بین 91-68%)

در زمینه خوشه بندی آسیب پذیری­ها، تاکنون تحقیقات زیادی انجام شده است. پایگاه داده OSVDB دارای دسته بندی­های مختلفی برای آسیب پذیری­ها می­باشد، اما هیچ یک از این دسته­ها بر اساس توصیف آسیب پذیری­ها نیست. در این تحقیق آسیب پذیری­ها با استفاده از توصیف­هایشان خوشه بندی شده­اند، که دسته­های حاصل عبارتند از: سرریز بافر، رد سرویس، دستکاری داده، کنترل از راه دور، پیکربندی نامناسب، شکاف در رمز عبور، دسترسی غیر مجاز به اطلاعات، و دسترسی غیر مجاز به سرویس. برای انتساب آسیب پذیری­ها به دسته­های مناسب به صورت دستی به تجربه نیروی انسانی نیاز است و انجام این کار بسیار ملال آور می­باشد. دسته بندی ارائه شده در این پژوهش، امکان ساخت نرم افزاری که بتواند آسیب پذیری­ها را به طور خودکار به دسته­های مناسب نسبت دهد، را فراهم می­کند.

در این پژوهش از دو پایگاه داده معروف آسیب پذیری­ها (OSVDB و CVE)، و اطلاعات تاریخ آسیب پذیری­ها که استفان فری در اختیارمان قرار داد، استفاده شده است. برای پیش بینی بهره کشی از کلاس بندی کننده ­های ماشین بردار پشتیبانی و جنگل تصادفی، و برای انجام خوشه بندی از روش نگاشت خود سازمانده نوخاسته استفاده شده است.

فصل اول: مقدمه

1-1- آسیب پذیری

در مباحث امنیت کامپیوتر، یک آسیب پذیری، ضعفی است که برای مهاجم امکان سوء استفاده از اطلاعات یک سیستم را فراهم می­کند. سالانه هزاران آسیب پذیری کشف و گزارش می­شوند و میلیون­ ها دلار در سرتاسر دنیا صرف مقابله با آسیب پذیری­ ها می­گردد. برای بهره کشی از آسیب پذیری یک سیستم عموماً به سه عامل نیاز است: حساسیت یا نقصی در سیستم، دسترسی مهاجم به نقص و توانایی مهاجم برای بهره کشی از نقص.

1-1-1- تعریف آسیب پذیری

آسیب پذیری از جمله مفاهیمی است که منابع مختلف تعاریف متفاوتی را برایش ارائه داده­اند. از جمله این تعاریف می­توان به موارد زیر اشاره کرد:

ISO 27005: ضعف یک دارایی یا گروهی از دارایی­ها که می­تواند توسط فرد یا گروهی از افراد مورد بهره کشی قرار گیرد . در این تعریف دارایی به معنای هر چیزی که برای سازمان ارزشی داشته باشد، است، برای مثال منابع اطلاعاتی مورد حمایت سازمان.

IETF RFC 2828: یک عیب یا ضعف در طراحی، پیاده سازی، عملکرد یا مدیریت سیستم، که می­تواند باعث بهره کشی، در جهت نقض سیاست امنیتی سیستم شود .

کمیته ملی سیستم­های امنیتی ایالات متحده آمریکا، در دستورالعمل CNSSشماره 4009، در تاریخ 26 آوریل 2010، واژه نامه تضمین اطلاعات ملی: آسیب پذیری ضعف در یک IS، روش­های امنیتی سیستم، کنترل­های داخلی یا پیاده سازی است، که می­تواند منجر به بهره کشی شود .

ENISA: وجود یک ضعف طراحی یا خطای پیاده سازی که بتواند منجر به رویداد غیر منتظره نامطلوبی شود، که این رویداد امنیت سیستم کامپیوتر، شبکه، برنامه یا پروتکل را به خطر اندازد .

گروه باز: حالتی که قدرت مهاجم بیش از قدرت مقاومت در برابر آن باشد .

تحلیل عاملی از خطر اطلاعات(FAIR): احتمال اینکه یک دارایی قادر به مقاومت در برابر عوامل خطر نباشد .

امنیت داده و کامپیوتر، فرهنگ لغات مفاهیم و لغات استاندارد، نویسندگان دنیس لانگلی و مایکل شین، استاکتون پرس، ISBN 0-935859-17-9:

  1. در امنیت کامپیوتر، ضعف کارکرد امنیتی سیستم­های خودکار شده، کنترل­های ناظران، کنترل­های اینترنت و غیره، که بتوانند بوسیله یک مهاجم با دسترسی غیر مجاز به اطلاعات، پردازش اطلاعات را مختل کنند.
  2. در امنیت کامپیوتر، یک ضعف در لایه فیزیکی، سازمان، کارکرد، کارکنان، مدیریت، سرپرستی، سخت افزار یا نرم افزار که امکان بهره کشی از آن­ها با هدف آسیب رساندن به سیستم یا فعالیت­ وجود داشته باشد.
  3. در امنیت کامپیوتر، هر ضعف یا نقص موجود در یک سیستم، حمله، رویداد مضر یا فرصت دسترسی برای یک عامل تهدید کننده، که امکان تهدید را برای عامل فراهم کند، را آسیب پذیری گویند.

2-1-1- کلاس بندی آسیب پذیری ها

آسیب پذیری­ها، براساس نوع دارایی به دسته­های زیر تقسیم می­شوند :

  • سخت افزار، برای مثال: حساسیت به رطوبت، حساسیت به گرد و غبار، استعداد ابتلا به ذخیره سازی محافظت نشده.
  • نرم افزار، برای مثال: تست ناکافی، فقدان پیگیری.
  • شبکه، برای مثال: خطوط ارتباطی محافظت نشده، معماری شبکه ناامن.
  • کارکنان، برای مثال: روند جذب ناکافی، آگاهی های امنیتی ناکافی.
  • مکان، برای مثال: منطقه مستعد سیل،منبع برق غیر قابل اعتماد.
  • سازمانی، برای مثال: عدم پیگیری منظم، عدم تداوم برنامه­ ها.

3-1-1- علت­های ایجاد آسیب پذیری­ها

 برخی از منابع و علت­ های ایجاد آسیب پذیری­ ها عبارتند از:

  • پیچیدگی سیستم: احتمال وجود نقص و نقاط دسترسی ناخواسته در سیستم­های بزرگ پیچیده، بیشتر است .
  • متعارف بودن سیستم: استفاده از کدها، نرم افزارها، سیستم عامل­ها یا سخت افزارهای معمول و معروف، احتمال اینکه یک مهاجم بتواند به دانش و ابزار، جهت بهره کشی از نقص موجود دسترسی پیدا کند، را افزایش می­دهد .
  • اتصال: اتصالات فیزیکی، امتیازات، پورت­ها، پروتکل­ها و سرویس­های بیشتر و افزایش مدت زمان هر یک از آن­ها، دسترسی پذیری به آسیب پذیری­ها را افزایش می­دهد .
  • نقص در مدیریت پسوردها: کاربران کامپیوتر از پسوردهای ضعیفی که با تلاش اندکی کشف می­شوند، استفاده می­کنند یا اینکه آن­ها را در برخی برنامه­ها ذخیره می­کنند، و این پسوردها بین بسیاری از برنامه­ ها و صفحات وب­ مشترک است .
  • نقص­های طراحی در سیستم عامل­ های اصلی: طراحان سیستم عامل ­ها، عموماً سیاست­ هایی که کمتر کاربر/مدیر سیستم را درگیر کنند را برمی­گزینند. برای مثال سیستم عامل­ها، سیاست­ هایی مثل پیش فرض­های اعطای مجوز به هر برنامه و دسترسی کامل کاربران به سیستم را دارند .این نقص­های سیستم عامل­ها، به ویروس­ها و بدافزارها، اجازه اجرای دستوراتی از طرف مدیر را می­دهد .
  • مرور وب­سایت­ های اینترنت: برخی وب سایت­ های اینترنتی دارای جاسوس­ها یا تبلیغات خطرناکی هستند، که می­توانند به صورت خودکار روی سیستم­ های کامپیوتری نصب شوند. بعد از بازدید از این وب سایت­ها سیستم ­ها آلوده می­شوند، اطلاعات شخصی جمع آوری شده و برای شخص ثالث فرستاده می شود .
  • اشکلات نرم افزاری: اشکلات قابل بهره کشی در بسیاری برنامه­ های نرم افزاری وجود دارد. اشکلات نرم افزاری ممکن است به مهاجمان اجازه سوء استفاده از برنامه را بدهند .
  • ورودی­ های کاربر کنترل نشده: برنامه­ها فرض می­کنندکه همه­ی ورودی­های کاربر امن است. برنامه­هایی که ورودی­ های کاربر را بررسی نمی­کنند، در واقع امکان اجرای مستقیم دستورات ناخواسته و دستکاری در پایگاه داده­ها را فراهم می­کنند .

4-1-1- شناسایی و حذف آسیب پذیری­ها

 تلاش­ های زیادی در جهت ساخت نرم افزارهایی با قابلیت کشف خودکار آسیب پذیری­های سیستم ­های کامپیوتری انجام شده است. اگرچه نرم افزارهای موجود می­توانند در برخی موارد دید کلی خوبی را نسبت به آسیب پذیری­ های سیستم فراهم کنند، اما نمی­توانند جایگزین بررسی انسانی روی آسیب پذیری­ها شوند. تکیه بر گزارشات اسکنرها، دید محدود همراه با تشخیص­های اشتباه زیاد، به همراه خواهد داشت. آسیب پذیری­ها در همه­ ی نرم افزارهای اساسی مثل سیستم عامل­ ها وجود دارند. گاهی اوقات تنها راه حل اساسی مقابله با آن­ها نصب بسته نرم افزاری اصلاح شده آن محصول است و در فاصله زمانی کشف تا ارائه بسته نرم افزاری با روش ­هایی مثل استفاده از دیوار آتش و یا نظارت مستقیم بر کنترل­های دسترسی توسط ناظران سیستم ­ها، می­توان جلوی سوء استفاده از سیستم را گرفت. لازم به ذکر است که روش­های نظارت مستقیم بر سیستم ها، هم از نظر مالی و هم از نظر نیروی انسانی بسیار هزینه بر هستند.

2-1- مفاهیم اولیه­ مورد نیاز

1-2-1- متن کاوی

مشکلی که دنیای امروز با آن رو به رو است، کمبود یا نبود اطلاعات نیست بلکه کمبود دانشی است که از این اطلاعات میتوان حاصل کرد. میلیون­ها صفحه­ وب، میلیون­ها کلمه در کتابخانه­های دیجیتال و هزاران صفحه اطلاعات در هر شرکت، تنها بخشی از این منابع اطلاعاتی هستند. اما نمی­توان به طور مشخص منبعی از دانش را در این بین معرفی کرد. دانش حاصلی است که از نتیجه گیری و فکر و تحلیل بر روی اطلاعات به دست می­آید. هدف داده کاوی مشخص کردن روابط میان داده­ های موجود در پایگاه داده­ها و استخراج دانش از میان آن­ها می­باشد. زمانی که داده­های موجود ساخت یافته باشند استفاده از روش­های داده کاوی و کسب دانش از آن­ها ساده است. اما امروزه بخش زیادی از اطلاعات به صورت متن نگهداری می­شود و متن­ ها داده­ هایی غیر ساخت یافته هستند. یک فرد برای دریافت دانش از اطلاعات یک متن، بایستی ابتدا آنرا درک کند، تا بفهمد چه معانی و مفاهیمی در آن موجود است و چه ارتباطی میان مفاهیم وجود دارد. با این حال عصر تکنولوژی به دنبال خودکارسازی است، حتی اگر این کار “درک معنی متن” باشد .

متن کاوی تمام فعالیت­ هایی که به نوعی به دنبال کسب دانش از متن هستند را شامل می‌گردد. تحلیل داده ­های متنی توسط روش­های یادگیری ماشین، بازیابی اطلاعات هوشمند، پردازش زبان طبیعی، همگی در دسته فعالیت­های متن کاوی قرار می‌گیرند. تصویر 1-1 مراحل متعارف متن کاوی را نشان می­دهد. اولین گام در متن کاوی استفاده از روش­هایی برای ساختارمند نمودن متن­ها است. متن از مجموعه­ای از کلمات و عبارات زبان طبیعی تشکیل شده است. عموماً روش­های متن کاوی ابتدا کلمات و عبارات، را از متن استخراج می­کنند و سپس آن­ها را مورد پردازش قرار می­دهند، برای مثال برخی کلمات مثل حروف اضافه و ضمایر حذف، و کلمات باقی مانده ریشه­ یابی می­شوند. سپس مشخصات استخراج شده از متن­ها به روش­های مختلفی مقداردهی می­شوند، از میان این روش­ها می­توان به مقداردهی دودویی (بیان­گر ظاهر شدن/ نشدن کلمه در متن است)، فراوانی کلمه در متن، وزن TF-IDFاشاره کرد .در این تحقیق از روش وزن­دهی TF-IDFاستفاده شده است، که در قسمت بعد درباره این روش توضیح داده خواهد شد. با استفاده از مقادیر به دست آمده بردارهای ویژگی برای داده­ها ساخته و از بین مجموعه­ی داده­ ها، داده­ های آموزش و تست کلاس بندی کننده انتخاب می­شوند. پس از آن یک روش کلاس بندی انتخاب می­شود. کلاس بندی کننده با استفاده از داده­ های آموزش، آموزش داده و با استفاده از داده ­های تست ارزیابی می­شود.



ادامه مطلب...
پایان نامه مدلی مبتنی بر نگاشت بیتی و تابع دستور جهت کنترل دسترسی در بانک اطلاعات XML

عنوان :مدلی مبتنی بر نگاشت بیتی و تابع دستور جهت کنترل دسترسی در بانک اطلاعات XML

تعداد صفحات : 111

چکیده

امروزه اطلاعات مستقر بر روی وب به سرعت در حال افزایش است و حجم بسیار زیادی از این اطلاعات در قالب XML ظاهر شده است. یکی از مزایای اصلی استفاده از XML ، نمایش داده‌های غیر ساختیافته است که قابلیت‌های بسیاری را در اختیار کاربران می‌گذارد. ویژگی غیر ساختیافته بودن اطلاعات و انعطاف‌پذیری XML باعث همه‌گیر شدن استفاده از آن شده و در بانک‌های اطلاعات نیز مورد توجه قرار گرفته است. بنابراین برقراری امنیت در مستندات XML یک نیاز و بحث کلیدی می‌باشد. داده‌ها به هر شکلی که ذخیره شوند باید از تهدیدهای ممکن (سرقت، خرابکاری، دستکاری و مواردی از این قبیل) محافظت گردند. برای جلوگیری از تهدیدها، روش‌ها و مدل‌هایی را در بانک‌های اطلاعات طرح‌ریزی و پیاده‌سازی نموده‌اند. مهمترین این مدل‌ها، مدل کنترل دسترسی می‌باشد. این مدل خود مبتنی بر روش‌های مختلفی می‌باشد که در بانک‌های اطلاعات گوناگون به کار گرفته می‌شوند. در این پایان‌نامه پس از بررسی روش‌های کنترل دسترسی، روشی جدید مبتنی بر نگاشت بیتی و تابع دستور جهت کنترل دسترسی در بانک اطلاعات XML پیشنهاد شده است. در روش پیشنهادی سعی بر این است که کلیه مشکلات و نواقص روش تابع دستور و نگاشت بیتی مرتفع گردد.

واژه‌های کلیدی: بانک اطلاعات XML، کنترل دسترسی، امنیت، نگاشت بیتی.

  • مقدمه

اکثر نرم‌افزارهای کاربردی تجاری، سیستم‌های تبادل داده، و شرکت‌های مختلف داده‌های ساختیافته‌ی خود را در بانک‌های اطلاعات رابطه‌ای نگهداری می‌کنند. بانک‌های اطلاعات رابطه‌ای نمونه خوبی از بانک‌های اطلاعات ساختیافته هستند. بانک‌های اطلاعات نیمه ساختیافته مشابه بانک‌های سنتی شِمای ثابتی ندارند. داده‌های نیمه ساختیافته، خود تعریف می‌باشند و می‌توانند مدل ناهمگون‌تری نسبت به داده‌های ساختیافته داشته باشند. زبان نشانه‌گذاری توسعه‌پذیر XML تکنیک مناسبی برای مدل‌سازی چنین داده‌هایی است ، هر چند داده‌های ساختیافته و غیرساختیافته نیز می‌تواند در قالب XML ذخیره شود. نمایش داده‌های غیر ساختیافته به صورت XML قابلیت‌های بسیاری را در اختیار کاربران می‌گذارد. ویژگی غیر ساختیافته بودن اطلاعات و انعطاف‌پذیری XML و همچنین همه‌گیر شدن استفاده از آن باعث شده است که در بانک‌های اطلاعات نیز مورد توجه قرار گیرد. در این میان دسترسی به اطلاعات و امنیت اطلاعات مبادله شده بسیار مورد توجه می‌باشد.

جهت برقراری امنیت در بانک اطلاعات XML مدل‌ها، مکانیزم‌ها و روش‌هایی وجود دارد. در حال حاضر تنها مدل‌هایی که در برقراری امنیت در بانک اطلاعات XML استفاده می‌شود مدل‌های کنترل دسترسی می‌باشند. مطابقت مدل‌های کنترل دسترسی با مستندات XML و نیز چگونگی استفاده از این مدل‌ها در بانک اطلاعات XML در این پایان‌نامه تشریح شده است.

بیشتر کنترل‌های دسترسی مرسوم شامل لیست‌های کنترل دسترسی ، لیست‌های قابلیت  و ماتریس‌‌های کنترل دسترسی هستند. هنگامی که درباره امنیت یک سیستم صحبت می‌شود “کنترل دسترسی” جنبه‌های بسیاری را شامل می‌شود. کنترل دسترسی باید رسا و قابل فهم باشد و بتواند امنیت دسترسی به داده‌های مستقر در یک مکان را پشتیبانی نماید. همچنین در بسیاری از سیستم‌ها همچون سیستم‌های تراکنشی تجاری و بایگانی‌های پزشکی که شامل داده‌های حساس می‌باشند، کنترل دسترسی در پایین‌ترین سطح (عنصر و یا صفت) مورد نیاز است.

کارهای بسیار زیادی برای توصیف کنترل دسترسی روی مستندات XML از چند سال قبل انجام شده است. برخی از این کوشش‌ها عبارتند از: تعریف و اجرای خط‌مشئ‌های کنترل دسترسی بر روی منابع XML ، کنترل دسترسی به مستندات XML توسط تعیین سطوح مجوزها و خط‌مشئ‌های انتشار مجوزها ، توصیف کنترل دسترسی برای اسناد XML که ارتباط معنایی با هم دارند  و تعریف یک سیستم کنترل دسترسی در پایین‌ترین سطح برای مستندات XML . کنترل دسترسی در پایین‌ترین سطح شامل توصیف موضوع‌های مجوز (کاربران یا گروه‌های کاربری و یا کامپیوترها)، اشیاء مورد دسترسی (المان‌ها و محتوای المان‌ها) و تعیین مجوزهای دسترسی می‌باشد. تمرکز در این کار عموماً بر روی توصیف یک زبان برای تعیین محدودیت‌های کنترل دسترسی به مستندات XML و همچنین توصیف انواع مختلف خصوصیات و خط‌مشئ‌های مرتبط با آن می‌باشد.

در این پایان‌نامه روشی جدید مبتنی بر نگاشت بیتی  و تابع دستور  جهت کنترل دسترسی در بانک اطلاعات XML پیشنهاد شده است. در روش پیشنهادی کنترل دسترسی را در پایین‌ترین سطح ایجاد می‌کنیم. همچنین در روش پیشنهادی سعی شده است که کنترل دسترسی بامعنی ایجاد گردد. کنترل دسترسی با معنی را با استفاده از الگوریتمی که نقش‌ها را به نگاشت بیتی تبدیل می‌کند مهیا می‌کنیم. در این روش تلاش شده است که مشکلات و نواقص روش تابع دستور و نگاشت بیتی مرتفع گردد.

در فصل اول این پایان‌نامه پس از معرفی اجمالی بانک اطلاعات XML ، به امنیت در بانک اطلاعات XML می‌پردازیم. در فصل دوم مدل‌های کنترل دسترسی که برای بانک اطلاعات XML معرفی شده‌اند را بررسی می‌کنیم. در فصل سوم روش پیشنهادی ارائه می‌گردد. در فصل چهارم به پیاده‌سازی و ارزیابی روش پیشنهادی می‌پردازیم، و مقایسه‌ای بین مدل‌های مختلف کنترل دسترسی و روش پیشنهادی جهت استفاده در بانک‌های اطلاعات XML انجام خواهد گرفت. در فصل پایانی به نتیجه‌گیری و کارهای آتی می‌پردازیم.

  • آشنایی با XML

زبان XML در سال 1997 توسط کنسرسیوم وب برای رفع محدودیت‌های موجود در HTML و اضافه کردن قابلیت‌های جدید بوجود آمد . تفاوت اصلی XML با HTML در این است که XML سعی دارد داده‌ها را طوری نشانه‌گذاری کند که معنای آنها حفظ شود و در حالیکه HTML داده‌ها را طوری نشانه‌گذاری می‌کند که قابل نمایش برای مرورگرها باشد. در واقع XML یک استاندارد باز می‌باشد و تاکید آن بر روی معنای داده‌هاست در حالیکه تأکید HTML بر نمایش داده می‌باشد. XML. یک استاندارد پایه است که وابستگی به رسانه‌ها، سیستم عامل‌ها و دیگر سیستم‌ها را ندارد. به منظور حفظ معنای داده‌ها، XML ابر داده که توصیف کننده داده می‌باشد را نیز همراه آنها ذخیره می‌کند.

XML زیر مجموعه ساده شده‌ای از زبان SGML می‌باشد. زبان SGML یک زبان عمومی و پیچیده برای نشانه‌گذاری داده‌هاست که در دهه 80 بوجود آمد و پدر زبان‌های نشانه‌گذاری محسوب می‌شود. قابلیت‌های زیاد این زبان آن را بیش از اندازه پیچیده کرده است، بطوری که کنسرسیوم وب آن را بعنوان جانشین HTML مناسب ندانسته و تصمیم گرفت زیر مجموعه ساده شده‌ای از آن را با نام XML جانشین HTML کند. زبان XML در واقع یک ابر زبان نامیده می‌شود. چرا که کاربر بسته به نیازهایی که دارد می‌تواند با استفاده از آن زبان نشانه‌گذاری جدیدی برای داده‌هایش ایجاد کند.

XML همچنین قادر است ساختار داده‌های ذخیره شده را نیز به‌همراه معنای آنها حفظ کند. این زبان دارای هیچ برچسب از پیش تعریف شده‌‌ای نیست و تمامی برچسب‌ها برحسب نیاز توسط کاربر تعریف می‌شوند. قابلیت‌های XML و اجزاء همراه آن، این زبان را به زبان قابل حمل و استاندارد برای کاربردهای مختلف تبدیل کرده است.

فایل‌های XML دارای قابلیت متنی هستند به‌طوری که می‌توان آنها را در ویرایشگرهای متنی ویرایش کرد. یک فایل در XML از دو قسمت متن و علائم نشانه‌گذاری تشکیل شده است که در قسمت متن داده‌های اصلی ذخیره می‌شود و در قسمت علائم نشانه‌گذاری، ابرداده‌ توصیف کننده متن قرار می‌گیرد. XML از یک سو با ذخیره فایل‌هایش در قالب متنی و استفاده از علائم نشانه‌گذاری‏ فهم معنای داده‌های ذخیره شده را برای انسان ممکن می‌سازد و از سوی دیگر با در اختیار قرار دادن این فایل‌ها در یک قالب ساختیافته برای برنامه‌ها، پردازش آن را برای کامپیوتر ساده می‌کند.

ادامه مطلب...
پایان نامه ارائه یک الگوریتم اجتماع مورچگان به منظور بهبود در زمان انجام کارها در محیط گرید

دانلود متن کامل پایان نامه مقطع کارشناسی ارشد رشته مهندسی کامپیوتر

عنوان : ارائه یک الگوریتم اجتماع مورچگان به منظور بهبود در زمان انجام کارها در محیط گرید

 

پایان نامه برای دریافت درجه کارشناسی ارشد “M.Sc”

تعداد صفحات :87

چکیده:

در این پایان نامه به ارایه یک روش جدید در پردازش شبکه ای با الگوریتم مورچگان پرداخته‌ایم. مدلی که در فضای شبکه ای استفاده کردیم حراج دو طرفه پیوسته می باشد. این مدل ها به دلیل سادگی و پویایی خود امروزه در بسیاری از الگوریتم های مورد استفاده برای کنترل منابع و زمان بندی کارها مورد استفاده قرار می گیرند. بسیاری از این مدل ها در زمان پاسخ گویی خود هنگام مدیریت منابع دچار ضعف می باشند. در مدل حراج, حراج کنندگان قیمت های مورد نظر خریداران را اعلام می کنند و خریداری که قیمت مناسب را اعلام کرده باشد منبع را بدست می گیرد. این مساله خود باعث می شود که زمان پاسخ گویی به دلیل درخواست خریداران افزایش یابد. در این پایان نامه ما روش جدیدی را به وسیله الگوریتم ژنتیک در سناریو حراج دو طرفه ارایه کردیم. در این روش با هوشمند سازی منابع, بسته های درخواست پیشنهادی را به سمتی سوق دادیم هر کدام از این محیط های شبکه ای را می توان به صورت یک سیستم توزیع شده در نظر گرفت که با شبکه های دیگر تعامل ندارد و حجم زیادی از داده را پوشش می دهد. یکی از فواید این روش نسبت به روش کلاسترینگ این است که منابع می تواند از لحاظ جغرافیایی در نقاط پراکنده و به صورت غیر متقارن قرار گیرد. با توجه به توزیع مجموعه های داده، انتخاب مجموعه منابع محاسباتی و منابع حاوی داده باید بطور مناسب صورت پذیرفته به گونه ای که سربار ناشی از انتقال این مجموعه ها روی گرید کمینه شود. در این تحقیق، مساله زمانبندی برنامه های نیازمند داده مورد توجه قرار می گیرد. با توجه به اینکه زمانبندی بهینه مستلزم انتخاب مجموعه منابع مناسب می باشد. در پردازش های شبکه ای ,محیط ها پویا می باشند به این معنا که ممکن است در یک زمان منابع روشن باشد و در زمانی دیگر همان منابع خاموش باشند

پیاده سازی های صورت گرفته در نرم افزار شبیه سازی GridSim مورد بررسی قرار گرفت و نتایج نشان داد که این روش جدید باعث بهبود زمان پردازش و کم شدن تعداد مراحل حراج می شود.

فصل اول: مقدمه

1-1- مقدمه

هدف اصلی این پایان نامه بهبود بازدهی در پردازش شبکه ای به وسیله الگوریتم مورچگان می باشد. این فصل با طرح مساله اصلی پردازش شبکه ای اغاز می شود و اهمیت آن شرح داده می شود. استفاده از الگوریتم مورچگان در بسیاری از مسایل باعث بهبود بازدهی و کاهش زمان پردازش شده است. این امر زمینه ای را فراهم می آورد تا از این الگوریتم در پردازشبکه ای نیز استفاده شود.

2-1- پردازش شبکه ای

پردازش شبکه ای به مجموعه ای از منابع که از چند نقطه مختلف برای انجام یک هدف اقدام به کار می کنند گویند. هر کدام از این محیط های شبکه ای را می توان به صورت یک سیستم توزیع شده در نظر گرفت که با شبکه ای های دیگر تعامل ندارد و حجم زیادی از داده را پوشش می دهد. یکی از فواید این روش نسبت به روش کلاسترینگ این است که منابع می تواند از لحاظ جغرافیایی در نقاط پراکنده و به صورت غیر متقارن قرار گیرد. . با توجه به توزیع مجموعه های داده، انتخاب مجموعه منابع محاسباتی و منابع حاوی داده باید بطور مناسب صورت پذیرفته به گونه ای که سربار ناشی از انتقال این مجموعه ها روی گرید کمینه شود. در این تحقیق، مساله زمانبندی برنامه های نیازمند داده مورد توجه قرار می گیرد. با توجه به اینکه زمانبندی بهینه مستلزم انتخاب مجموعه منابع مناسب می باشد. در پردازش های شبکه ای ,محیط ها پویا می باشند به این معنا که ممکن است در یک زمان منابع روشن باشد و در زمانی دیگر همان منابع خاموش باشند . همچنین در این پردازش ها ممکن است از لحاظ سخت افزاری و نرم افزاری با هم تفاوت داشته باشند.

پردازش شبکه ای دارای معماری های مختلفی می باشد که می توان به موارد زیر اشاره کرد:

– GT2

– OGSA

– GT3

3-1- الگوریتم مورچگان

الگوریتم مورچگان یک الگوریتم هیوریستیک با یک جستجوی محلی بهینه می باشد که برای مسایل ترکیبی مورد استفاده می گیرد. این روش از رفتار طبیعی مورچگان الهام گرفته است. در طبیعت مورچگان با ماده ای که از خود ترشع می کنند راه را به بقیه مورچگان نشان می دهند. در بسیاری از پژوهش ها از روش کلونی مورچگان برای حل مسایل NPسخت استفاده می شود. از این روش برای حل مسایلی مانند فروشنده دوره گرد, رنگ امیزی گراف و مسیر یابی استفاده می شود.

اجتماع مورچگان به مجموعه ای از مورچه های هوشمند گفته می شود که به صورت گروهی رفتار می کنند. این اجتماع در محیط جستجو می کنند تا جواب بهینه را پیدا کنند.

در مساله زمان بندی در محیط های شبکه ای, هر کدام از این کارها به منزله یک مورچه در نظر گرفته می شود. هر کدام از این مورچه ها به دنبال منابع مورد نظر خود حرکت می کنند.

در زیر شبه کد اجتماع مورچگان نشان داده شده است:

Procedure ACO

begin

Initialize the pheromone

while stopping criterion not satisfied do repeat for each ant do Chose next node by applying the state transition rate end for until every ant has build a solution Update the pheromone end while end

روش های متفاوتی برای اجتماع مورچگان وجود دارد که می توان به موارد زیر اشاره کرد :

– Max-Min Ant System

– Rank-based Ant System

– Fast Ant System

– Elitist Ant System

4-1- چالش های پردازش شبکه ای

از چالش مهم در پردازش های شبکه ای می توان به نحوه اولویت بندی و زمان بندی به پردازه ها اشاره کرد. مساله زمان بندی در پردازش های شبکه ای از سه بخش تشکیل می شود:

1- پیدا کردن منابع که شامل منابعی است قابلیت استفاده را دارند.

2- جمع اوری اطلاعات درباره این منابع و انتخاب بهترین مجموعه از منابع.

3- کارها در این مرحله انجام می شود.

مرحله پیدا کردن مجموعه بهترین منابع یکی از مسایل NP-Complete می باشد. در زمان بندی کارها دو هدف عمده وجود دارد:

1- بیشترین میزان کارایی را سیستم داشته باشد.

2- بیشترین خروجی را داشته باشد.

برای هدف اول, باید روشی ارایه شود که زمان پردازش را کاهش دهد و برای هدف دوم, باید روشی ارایه شود که زمان بندی را به مجموعه ای از کارهای مستقل از هم تقسیم کند. این کار باعث می شود که ظرفیت انجام کار سیستم در واحد زمان افزایش یابد.

برای حل این مشکل روش های متفاوتی ارایه شده است. یکی از این روش ها نگاشت این مساله به مساله فروشنده دوره گرد می باشد. در این روش مسیر هایی که منابع نسبت به هم دارند مهم می باشد. در پردازش شبکه ای به دلیل اینکه منابع در فواصل متفاوت و غیر متقارن نسبت به هم قرار دارند به همین دلیل در مواردی این روش می تواند مفید عمل کند.

در ادامه این پژوهش مطالب به صورت زیر ارائه گردیده است.

در فصل دوم به پیش زمینه های مربوطه پرداخته ایم و کلیات روش های زمانبندی به مورچه، ژنتیک و حراج پرداخته شده است.

در فصل سوم مهمترین الگوریتم ها و روشهای پیاده سازی شده در بسترۀ الگوریتم های زمان بندی ارائه گردیده است.

در فصل چهارم به ارائه روش پیشنهادی می پردازیم و نتایج شبیه سازی روش پیشنهادی (Acdanp) با روش قبلی مورد ارزیابی و مقایسه قرار می گیرد.

در فصل پنجم به ارائه پیشنهادات و کارهای آتی می پردازیم. ضمناً در پیوست الف کد سورس نوشته شده در محیطی Gridsim آورده شده است.

ادامه مطلب...

 

امکان پخش فایل های AVI - MPG - MPEG  - ASF

قابلیت بزرگ نمایی و کوچک نمایی

 افزایش ٬کاهش و قطع صدا

 با قابلیت تکرار

 امکان تمام صفحه کردن

قیمت  : ۶۰۰۰ تومان 

شماره تماس : ۰۹۳۶۰۰۷۸۵۰۳

 

زیورآلات

 

برای مشاهده تصویر و توضیحات مربوطه محصول روی نام آن کلیک کنید


گردنبند

گردنبند ماه تولد شما

گردنبند D and G

گردنبند مرمر

گردنبند puma 

گردنبند Gucci

گردنبند دلفين 

گردنبند SpiDer

گردنبند مادر

گردنبند الله+كتاب 

گردنبند مرمر

گردنبند حسين

گردنبند و ان يكاد

گردنبند خورشيد بولگاري

گردنبند آليس

گردنبند قلب و كليد 

گردنبند love 

گردنبند love 2 love

گردنبند فيروزه

گردنبند فروهر

گردنبند خدا 

گردنبند تخت جمشيد 

گردنبند مدل هيفا

گردنبند ورساچ VERsacE

گردنبند مدل اسپارك

گردنبند صدف واقعي

گردنبند LovE keY

گردنبند حروف

گردنبندمدل ده فرمان اصل

گردنبند موبايل

گردنبند پازل عشق

گردنبند پر

گردنبند مدل نانسي با 3 آويز

گردنبند حروف چيني

گردنبند پرسپوليس

گردنبند تمام استيل كورش كبير 

گردنبند آنجلينا

گردنبند مدل تيغ+ كتاب

گردنبند صليب اصل

گردنبند و دستبند لوجستيك

گردنبند پروانه اي

گردنبند هخامنشي

گردنبند سنگ تولد شما 

گردنبند دوربين

گردنبند نارنجك

گردنبند نگين دار پروانه اي

گردنبند سيب

گردنبند مدل Dance me

گردنبند مدل بتاB

گردنبند آلفا

گردنبند مرواريد

گردنبند منشور كوروش

گردنبند كپسول love

گردنبند 50

گردنبند عقيق + كتاب

گردنبند ZopPini

گردنبند ركسانه

گردنبند استقلال


حلقه 

حلقه versace


انگشتر

انگشتر تمام نگين سارينا

انگشتر ساعتي

انگشتر Eli 

انگشتر منشور كوروش 

انگشتر كريستال


گوشواره 

گوشواره سوسانو

گوشواره قفل و كليد

گوشواره مدل شكيرا 3 حلقه

گوشواره ماه تولد شما

گوشواره 3 حلقه+كتاب

گوشواره آراميس

گوشواره رويا + كتاب 

گوشواره مدل ماهواره اي


دستبند

دستبند مدل سارينا

دستبند چوبي

دستبند مرواريد نگين دار

دستبند JoJo

دستبند النگويي Nike

دستبند جاماييكا 

دستبند ياس

دستبند توپي

دستبند ماه تولد شما

دستبند انريكو 

دستبند جسيكا

دستبند فيگو

دستبند رابين هود

دستبند استخوان

دستبند استقلال


ساعت

ساعت سامورايي

ساعت بدون عقربه

BOSS ساعت

CHANEL ساعت

ساعت مدل شاتل

ساعت مدل كريستال

ساعت ويكتوريا

ساعت D and G  

ساعت Bijan 

ساعت Puma

ساعت ويكتوريا

ساعت اورجينال hayuxi

ساعت تاتيانا


ست

ست مرواريد عشق

ست Dior

نيم ست گل رز 

ست كامل دزيره

ست كامل ماكسي

نيم ست پارميدا+كتاب

ست Googooli


سایر

آويز ناخن

النگو Britney 

هر رويدادی که باعث شود CPU اجرای عادی يک برنامه را قطع کند وقفه ناميده می شود. يک برنامه نويس اسمبلی با صدور وقفه های نرم افزاری می تواند به طور موثری با دستگاه های جانبی ارتباط برقرار کند.

انواع وقفه
INT
جدول بردار وقفه
چند نمونه وقفه متعارف


گاهی اوقات جريان عادی اجرای يک برنامه برای پردازش رويدادی که نياز به پاسخ سريع دارد متوقف می شود. سخت افزار کامپيوتر برای مديريت اين رويدادها مکانيسمی به نام وقفه (interrupt) را دارد.

مثال. وقتی mouse حرکت می کند، سخت افزار mouse برنامه جاری را متوقف می کند تا حرکت mouse گرفته شود( برای حرکت مکان نمای mouse روی صفحه نمايش).

وقتی CPU يک سيگنال وقفه را تشخيص می دهد، فعاليت جاری خود را متوقف می کند و روتين خاصی را فراخوانی می کند که روتين وقفه (interrupt handler) نام دارد. اين روتين علت وقوع وقفه را تشخيص می دهد و عکس العمل مناسب را انجام می دهد.

بيشتر روتين های وقفه بعد از پايان يافتن کنترل اجرا را به برنامه متوقف شده بازمی گردانند. آنها کليه مقادير ثبات ها را به وضعيت قبل از توليد وقفه بر می گردانند. بنابراين برنامه متوقف شده به گونه ای به اجرا ادامه می دهد که هيچ اتفاقی نيافتاده است به جز اين که سيکل های CPU را از دست می دهند.

وقتی دو يا چند وقفه همزمان با هم اتفاق می افتند، CPU از سيستم الويت استفاده می کند و می تواند در طی اجرای بخش بحرانی يک برنامه وقفه ها را غيرفعال کند. وقتی دارد يک روتين وقفه را اجرا می کند کليه وقفه های با الويت کمتر يا، تا زمان خاتمه اجرای روتين، غير فعال هستند.


انواع وقفه

256 سطح الويت توسط پردازنده های 80x86 پشتيبانی می شود که می توان آنها را به سه گروه کلی تقسيم کرد:

• وقفه های داخلی سخت افزاری
• وقفه های خارجی سخت افزاری
• وقفه های نرم افزاری

وقفه های داخلی سخت افزاری

وقفه های داخلی سخت افزاری (internal hardware-interrupts) بدليل رخ دادن وضعيت معينی که درحين اجرای يک برنامه پيش آمده توليد می شوند(مانند تقسيم بر صفر).

وقفه هايی که در اثر خطا بوجود می آيد تله (trap) هم ناميده می شود. تله باعث سقط برنامه می شوند.

اين وقفه ها توسط سخت افزار اداره می شوند و امکان تغيير آنها وجود ندارد. اما با وجوديکه نمی توان آنها را مستقيما مديريت کرد، اين امکان وجود دارد که از اثر آن روی کامپيوتر به نحو مفيدی استفاده شود.

مثال. سخت افزار وقفه شمارنده ساعت کامپيوتر را چندبار در ثانيه فراخوانی می کند تا زمان را نگه دارد. می توان برنامه ای نوشت که مقدار شمارنده ساعت را خوانده آنرا به شکل قابل درک کاربر به صورت ساعت و دقيقه تبديل کند.

وقفه های خارجی سخت افزاری

وقفه های خارجی سخت افزاری (external hardware-interrupts) خارج از CPU و توسط دستگاه های جانبی ، مانند صفحه کليد، چاپگر، کارت های ارتباطی و يا کمک پردازنده توليد می شوند.

دستگاه های جانبی با ارسال وقفه به CPU خواستار قطع اجرای برنامه فعلی شده و CPU را متوجه خود می کنند. آنها به پايه (maskable interrupts) INTR يا (non maskable interrupts) NMI پردازنده متصل هستند.

وقفه های دستگاه ها می توانند از طريق مداری به نام PIC 8259A، که کارش منحصرا سروکار داشتن با اين نوع وقفه هاست، به پردازنده ارسال شوند. مدار (programmable interrupt controller) PIC که توسط CPU کنترل می شود سيگنال هايش را روی پايه INTR قرار می دهد و امکان فعال و غيرفعال کردن وقفه ها و تغيير سطح الويت را تحت نظارت يک برنامه می دهد.

دستورات STI و CLI می توانند برای فعال و غيرفعال کردن وقفه هایی که روی پايه INTR ارسال می شوند بکار روند که البته روی وقفه های NMI تاثيری ندارد.

وقفه های نرم افزاری

وقفه های نرم افزاری (software interruptions) در نتيجه دستورالعمل int در يک برنامه درحال اجرا توليد می شوند.

برنامه نويس می تواند با دادن دستور int يک وقفه نرم افزاری توليد کند. بدين طريق بلافاصله اجرای برنامه فعلی را متوقف می کند و CPU را به روتين وقفه هدايت می کند. برنامه نويس از طريق وقفه ها می تواند در برنامه با وسايل جانبی ارتباط برقرار کند. استفاده از وقفه ها باعث کوتاهتر شدن کد برنامه و درک آسانتر و اجرای بهترآن می شود.

روتين های وقفه نرم افزاری بخشی از سيستم عامل هستند. از اينرو وقفه های نرم افزاری را می توان به دو گروه تقسيم کرد؛ وقفه های سيستم عامل DOS و وقفه های BIOS. وقفه های DOS آسانتر استفاده می شوند اما از وقفه های BIOS که قسمتی از سخت افزار هستند کندتر هستند.

DOS اين نوع وقفه ها را برای اجرای (application programming interface) API خودش استفاده می کند. بيشتر سيستم عامل های جديد مانند Windows و Unix واسطه C-based را استفاده می کنند.


INT

دستورالعمل (interrupt) int يک روتين وقفه را فراخوانی می کند. فرم کلی آن به صورت زير است:

int n

n شماره وقفه موردنظر و مقداری بين 0 تا 255 است که اجازه فراخوانی 256 روتين مختلف وقفه را می دهد.

دستورالعمل int يک فراخوانی سيستمی را می سازد و شکل خاصی از دستورالعمل فراخوانی يک زيربرنامه (دستورالعمل call) است.

مشکل دستورالعمل int اين است که تنها 256 روتين وقفه را می تواند پشتيبانی کند. درحاليکه DOS به تنهايی دارای بيش از 100 سرويس مختلف وقفه و BIOS بيش از هزاران سرويس وقفه است. که اين تعداد بيش از کليه وقفه هايی است که توسط اينتل رزرو شده است. برای حل اين مشکل از يک شماره وقفه برای هر دسته از سرويس های وقفه و يک شماره تابع برای تعيين سرويس موردنظر استفاه می شود. شماره تابع توسط يکی از ثبات ها (اکثرا AH) هنگام فراخوانی وقفه ارسال به روتين وقفه می شود.


مثال. سيستم عامل DOS شماره وقفه 21h را بکار می گيرد. برای انتخاب يک تابع خاص، قبل از فراخوانی وقفه، کد تابع در ثبات AH قرار می گيرد. برای نمونه تابع 4Ch اين وقفه برای خاتمه برنامه و برگشت به محيط DOS فراخوانی می شود.

mov AH, 4Ch
int 21h


جدول بردار وقفه

هر سطح وقفه يک محل رزرو شده در حافظه دارد که بردار وقفه (interrupt vector) ناميده می شود. همه بردارهای وقفه در جدولی به نام جدول بردار وقفه (interrupt vector table) نگهداری می شوند. اين جدول از ابتدای حافظه اصلی يعنی آدرس 0000:0000 ذخيره شده است.

هر بردار وقفه 4 بايت طول دارد. دوبايت بالای آن آفست و دو بايت پايين آن سگمنت روتين وقفه را دربر می گيرند. چون 256 روتين های وقفه وجود دارد بنابراين اندازه جدول بردار وقفه 256×4=1024=1KB است.

شماره وقفه به عنوان انديسی برای جدول بردار وقفه استفاده می شود. آفست روتين وقفه شماره n در آدرس n×4 و آدرس سگمنت روتين وقفه شماره n در آدرس n×4+2 جدول قرار دارد.

يک ويژگی خوب اين سيستم اين است که می توان بردارها را برای اشاره به روتين ديگری تغيير داد. که اين همان کاری است که برنامه های TSR (Terminate and Stay Resident) انجام می دهند.

در برنامه هميشه توسط شماره وقفه به يک روتين وقفه مراجعه می شود بنابراين برنامه نيازی به دانستن آدرس واقعی در حافظه ندارد و آدرس روتين وقفه هنگام اجرا توسط CPU تعيين می شود.


مثال. آدرس های آفست و سگمنت روتين وقفه شماره 5 برابر با 5×4=0014h و 5×4+2=0016h می باشد.


چند نمونه وقفه متعارف

وقفه 21h

تابع 01h. يک کليد را از صفحه کليد می خواند.
کد کليد خوانده شده در ثبات AL برگردانده می شود.

mov AH, 0lh
int 21h
mov AL, character

تابع 02h. يک کاراکتر را روی صفحه نمايش نشان می دهد.
کد کاراکتر در ثبات DL بايد قرار داده شود.

mov AH, 02h
mov DL,character
int 21h

تابع 09h. يک رشته کاراکتری را روی صفحه نمايش نشان می دهد.
آدرس شروع رشته بايد در ثبات های DS:DX قرار بگيرد. انتهای رشته توسط کاراکتر ($) بايد تعيين شده باشد.

mov AH,09h
lea DX, string
int 21h

وقفه 10h

تابع 02h. مکان نما را روی صفحه نمايش به سطر و ستون خاصی منتقل می کند.

شماره صفحه در BH، شماره سطر در DH و شماره ستون در DL بايد قرار بگيرد. مختصات صفحه از نقطه 0 و 0 از گوشه بالای چپ صفحه نمايش شروع می شود.

mov AH, 02h
mov BH, page
mov DH, row
mov DL, column
int 10h

تابع 09h. يک کاراکتر را با رنگ معين چندبار نمايش می دهد.
کد کاراکتر در AL، شماره صفحه در BH، خاصيت رنگ کاراکتر در BL و تعداد تکرار کاراکتر در CX بايد قرار بگيرد.

mov AH, 09h
mov AL, character
mov BH, page
mov BL, attribute
mov CX, number
int 10h

زير برنامه (procedure) مجموعه ای از دستورات است که يکبار تعريف و به دفعات استفاده می شود. با بکارگيری زيربرنامه خوانائی برنامه بالاتر رفته و از تکرار دستورات مشابه جلوگيری می شود. علاوه براين اشکال زدائی و تغيير برنامه آسان تر انجام گيرد.

وقتی يک زيربرنامه فراخوانی می شود کنترل اجرای برنامه به زيربرنامه هدايت می شود. آدرس دستورالعمل بعدی در پشته ذخيره می شود بنابراين هنگامی که زيربرنامه اجرا شد کنترل اجرا قادر خواهد بود به خط بعد از فراخوانی زيربرنامه بر می گردد.


تعريف زيربرنامه

تعريف زيربرنامه بايد در سگمنت کد انجام بگيرد. از دو راهنمای proc و endp برای تعيين بلاک زيربرنامه استفاده می شود.

ProcedureName PROC [NEAR|FAR]
     ...
     RET
ProcedureName ENDP

Procedurename نام زيربرنامه است که قبل از راهنماهای proc و endp قرار می گيرد و بايد يکسان باشد. عملوند near يا far اختياری است. کلمه near به اسمبلر می گويد که زيربرنامه از نوع داخلی است. برای تعريف يک زيربرنامه خارجی از کلمه far به جای near استفاده می شود.

دستور ret باعث خروج از زيربرنامه و برگشت به فراخواننده می شود.


نکته. اگر عملوندی مقابل تعريف زيربرنامه قرار نگيرد از نوع near در نظر گرفته می شود.
نکته. اگرچه تعريف يک زيربرنامه که عملا داخلی است به صورت خارجی اشکالی ايجاد نمی کند ولی بهتر است اين کار را نکنيد.


مثال. زيربرنامه جمع دو عدد در AH و AL و نگهداری مجموع در ثبات BX.

Adding PROC near
     mov BX, AL
     add BX, AH
     ret
Adding ENDP

مثال: زيربرنامه Putc برای نمايش کاراکتری که در ثبات al قرار دارد.

Putc PROC
     mov DL,AL
     mov AH,02
     int 21h
     ret
Putc ENDP


زيربرنامه های near و far

دو نوع زيربرنامه وجود دارد داخلی (intrasegment) و خارجی (intersegment).

• زيربرنامه های داخلی در همان سگمنتی که تعريف شده اند قابل فراخوانی هستند و در تعريف آنها از صفت near استفاده می شود.
• زيربرنامه های خارجی روال هائی که در سگمنت ديگری قرار دارند و از ساير سگمنت ها قابل فراخوانی می باشند و در تعريف آنها از صفت far استفاده می شود. زيربرنامه های خارجی درفايل جداگانه ای قرار دارد و هنگام لينک کردن بايد به برنامه پيوند داده شوند. نتيجه کار بعد از لينک مانند زيربرنامه داخلی است.

فراخوانی از نوع near کنترل را درون همان سگمنت کد جابجا می کند وتنها مقدار IP در پشته ذخيره می شود. فراخوانی far کنترل را بين سگمنت های مختلف عبور می دهد. هر دو مقادير CS و IP در پشته قرار می گيرند.

نکته. دستورات call و ret نوع فراخوانی را مشخص نمی کنند بلکه عملوند near|far راهنمای proc به اسمبلر می گويد فراخوانی از کدام نوع است.


دستورات فراخوانی و بازگشت زيربرنامه

دودستورالعمل که پشته را استفاده می کنند و فراخوانی و برگشت زيربرنامه را انجام می دهند call و ret هستند. برای هدايت کنترل اجرا به زيربرنامه بايد آنرا فراخوانی کرد. زيربرنامه ها در هر کجای برنامه که به آن نياز داريم با دستور call فراخوانی می شوند. دستور call به صورت زير است:

call ProcedureName

دستورالعمل call باعث يک پرش غير شرطی به زيربرنامه می شود و آدرس دستورالعمل بعدی را در پشته ذخيره می کند. CPU در برخورد با دستور call به آدرس شروع زيربرنامه رجوع می کند و دستورات آنرا اجرا می نمايد. با برخورد به دستور ret به برنامه فراخوان بر می گردد و دستورات بعد از call را اجرا می نمايد.


مثال. فراخوانی زيربرنامه Putc.

call Putc

CPU در برخورد با دستور Call عمليات زير را انجام می دهد:

فراخوانی از نوع داخلی

1. مقدار ثبات IP (که حاوی آدرس دستور بعد از call است ) را در پشته ذخيره می کند.
2. آدرس ذکر شده مقابل دستور call را در ثبات IP قرار می دهد.

فراخوانی از نوع خارجی

1. مقدار ثبات CS را در پشته ذخيره می کند.
2. بخش سگمنت آدرس ذکر شده مقابل دستور call را در ثبات CS قرار می دهد.
3. مقدار ثبات IP را در پشته ذخيره می کند.
4. بخش آفست آدرس ذکر شده در جلوی دستور call را در ثبات IP قرار می دهد.

دستورالعمل ret آدرس ذخيره شده IP را از پشته بر می دارد و به برنامه اصلی بر می گردد. CPU در برخورد با دستور Ret عمليات زير را انجام می دهد:

بازگشت از زيربرنامه داخلی

1. مقدار ذخيره شده در پشته را در داخل ثبات IP قرار می دهد.

بازگشت از زيربرنامه خارجی

1. مقدار ذخيره شده در پشته را در داخل ثبات IP قرار می دهد.
2. مقدار ذخيره شده در پشته را در داخل ثبات CS قرار می دهد.

نکته. اگر دستور ret در انتهای زيربرنامه حذف شود کنترل اجرای برنامه به زيربرنامه بعدی می رود نه دستورالعمل بعدی در برنامه اصلی.
نکته. معمولا در ابتدای هر زيربرنامه بهتر است مقادير ثبات هائی که تغيير می کنند را در پشته ذخيره نمائيم و در انتهای زيربرنامه و قبل از دستور ret مقادير آنها را از پشته بازيابی کنيم. بايد توجه کنيم که دستورات pop متناظر با دستورات push باشند و کليه داده هائی که در زيربرنامه در پشته push شده اند بايد pop شوند وگرنه به با دستور ret به آدرس درست پرش نمی کند.


مثال. زيربرنامه برای نمايش 40 کاراکتر space. توجه کنيد زيربرنامه Putc درون زيربرنامه PrintSpaces فراخوانی شده است.

PrintSpaces PROC near
                push AX
                push CX
                mov AL, ' '
                mov cx, 40
PSLoop:   call putc
                loop PSLoop
                pop CX
                pop AX
                ret
PrintSpaces ENDP

در ابتدای زيربرنامه ثبات های AX و CX در پشته قرار می گيرند و در انتها به ترتيب عکس بازيابی می شوند. زيربرنامه فوق به صورت زير فراخوانی می شود.

call PrintSpaces


ارسال و دريافت پارمترها

پارامترها مقاديری هستند که می توانيد به زيربرنامه بدهيد يا بگيريد. برای ارسال يا دريافت پارامترها معمولا از ثبات، متغيرهای سراسری يا پشته استفاده می شود.

ارسال پارامتر از طريق ثبات

مثال. زيربرنامه زير طول يک رشته را محاسبه و در ثبات CX برمیگرداند. آدرس شروع رشته در ثبات SI قرار دارد.

StrLen PROC
           push SI
           mov CX,0
Whl:   cmp Byte Ptr[SI],'$'
           jc EndW
           inc CX
           inc SI
           jmp Whl
EndW: pop SI
           ret
StrLen ENDP

ارسال پارامتر از طريق پشته

پارامترهائی که به زيربرنامه داده می شوند را می توان قبل از فراخوانی زيربرنامه در پشته اضافه کرد. پارامترها در زيربرنامه pop نمی شوند بلکه مستقيما از پشته دسترسی می شوند زيرا قبل از دستور call در پشته اضافه شده اند و آدرس برگشتی بعد از آن اضافه می شود. علاوه براين چون ممکن است در چندين جای زيربرنامه استفاده شوند معمولا درون ثبات نگهداری نمی شوند و بهتر است در حافظه پشته باقی بمانند.

يک برنامه خارجی که يک پارامتر از طريق پشته را ارسال می کند در نظربگيريد. وقتی زيربرنامه درخواست می شود پارامتر می تواند با آدرس دهی غيرمستقيم [SP+4] دسترسی شود. اگر پشته هم در زيربرنامه برای ذخيره داده استفاده شود عدد بيشتری بايد به SP اضافه شود. ثبات BP را برای ارجاع به داده های درون پشته می توان به کار برد. ثبات SP با هر push و pop تغيير می کند اما BP ابتدا برابر با SP می شود و سپس ثابت می ماند در انتهای زيربرنامه مقدار اوليه BP بايد برگردانده شود. بعد از اينکه زيربرنامه تمام شد پارامترهائی که در پشته اضافه شده اند بايد حذف شوند.


مثال. تابع زير طول رشته را محاسبه و آدرس شروع رشته از طريق پشته به زيربرنامه ارسال می شود.

StrLen PROC
           push BP
           mov BP,SP
           mov SI,[BP+4]
           sub CX,0
Whl:   cmp byte ptr [SI],'$'
           jc Endw
           inc CX
           inc SI
           jmp Whl
EndW: pop BP
           ret
StrLen ENDP

مثال. محاسبه مجموع سه عدد که از طريق پشته به زيربرنامه ارسال شده اند.

 

يک متغير يک محل ذخيره داده نامگذاری شده در حافظه کامپيوتر است. شما در برنامه با استفاده از نام متغير به داده ذخيره شده در اين محل رجوع می کنيد.

نام متغير

هر متغير دارای يک نام است. در زبان C اسامی متغير ها بايد از قوانين زير پيروی کند:

• اسم می تواند شامل حروف، ارقام و کاراکتر زيرخط ( _ ) باشد.
• اولين حرف اسم متغير بايد يک حرف باشد. زير خط هم می تواند در ابتدای اسم متغير بکار برود ولی توصيه نمی شود.
• بزرگ و کوچک بودن حروف مهم است، بنابراين اسامی count و Count به دو متغير جداگانه اشاره دارند. برنامه نويسان اغلب از حروف کوچک برای متغير ها استفاده می کنند و اسامی با حروف بزرگ معمولا برا ثابت ها بکار می رود.
• کلمات کليدی نمی توانند به عنوان نام متغير استفاده شود.


مثال. چند نمونه از اسامی مجاز و غير مجاز در جدول زير ديده می شود:

مجازبودننام متغير
مجازPercent
مجازy2x5__fg7h
مجازannual_profit
مجاز، ولی توصيه نمی شود_1990_tax
غير مجاز، کاراکتر#savings#account
غيرمجاز، کلمه کليدیdouble
غيرمجاز، اولين کاراکتر رقمی9winter

در بعضی کامپايلرها نام متغير می تواند 31 کاراکتر (در ++C استاندارد 1024 کاراکتر) طول داشته باشد؛ يعنی کامپايلر تنها 31 کاراکتر اول نام را درنظر می گيرد. با اين طول می توان نامی برای متغير انتخاب کرد که معنی داده ذخيره شده در آن را منعکس کند.

نام متغير کمک به روشن شدن کاربرد آن برای کسی که source برنامه را نگاه می کند .


مثال. در برنامه ای که پرداخت های وام را محاسبه می کند مقدار بهره را می توان در متغير interest_rate ذخيره کرد.


مرسوم است از زيرخط برای جدا کردن متغيرهای چند کلمه ای استفاده شود. يا ازروش نام گذاری کوهانی (camel notation) که حرف اول هر کلمه بزرگ است پيروی می شود.


مثال. متغيری که بهره بانکی را ذخيره می کنذد می تواند به دو صورت interest_rate يا InterestRate تعريف شود.


نکته. نامهای توصيفی برای متغيرها انتخاب کنيد.
نکته. به سبکی که برای نامگذاری متغير ها انتخاب کرده ايد در کل برنامه وفادار بمانيد.
نکته. شروع نام متغير با زيرخط غير ضروری است.
نکته. نامگذاری متغير همگی با حروف بزرگ غير ضروری است.

در اين صفحه دستورات حلقه و نحوه پياده سازی ساختارهای حلقه های تکرار توضيح داده می شود.

LOOP
LOOPE/LOOPZ
حلقه های تکرار ديگر


LOOP

در زبان اسمبلی از دستور loop برای ساختن حلقه های شمارشی کاهشی با بدنه کوچک استفاده می شود. فرم کلی آن به صورت زير است:

loop target

دستورالعمل loop ثبات CX را يک واحد کم می کند سپس اگر مقدار جديد CX مخالف با صفر باشد به آدرس target پرش می کند. اگر CX برابر با صفر باشد دستور بعدی اجرا می شود.

ثبات CX به عنوان شمارنده عمل می کند و تعداد تکرار حلقه بايد ابتدا در ثبات CX قرار بگيرد.


مثال. دستورات زير مجموع اعداد 1 تا 10 را محاسبه و در ثبات AX ذخيره می کند.

      mov AX, 0
      mov CX, 10
lbl:
      add AX, CX
      loop lbl


توجه کنيد چون اين دستور ابتدا از CX يک واحد کم می کند، اگر CX قبلا حاوی صفر باشد بعد از کاهش برابر با مقدار 65535 می شود بنابراين حلقه 65536 بار تکرار خواهد شد.

دستورالعمل loop مشابه دستورات پرش کوتاه محدوده به 128 بايت است و برای حلقه با بدنه کوچک مناسب است. برای حلقه های تکرار با بدنه بيشتر می توانيد از دستورات پرش برای ساختن حلقه تکرار استفاده نمائيد.

اگرچه از نام دستورالعمل loop اينطور برمی آيد که حلقه تکرار ايجاد می کند اما به خاطر داشته باشيد که تمام کاری که انجام می دهد اين است که از ثبات CX يک واحد کم کرده اگر بعد از کاهش CX حای صفر نبود به آدرس مقصد پرش می کند.

دستورالعمل loop روی هيچکدام از ثبات ها تاثير ندارد.


LOOPE/LOOPZ

دستورالعمل های loopz و loope مشابه دستور loop می باشند با اين تفاوت که پرش در صورتی انجام می گيرد که CX مخالف با صفر و فلگ Z مساوی با يک باشد.

اين دستورات برای استفاده بعد از دستور cmp مفيد است.


مثال. دستورات زير اولين عنصر غيرصفر را در آ رايه 15 تائی Array جستجو می کند. اگر کليه عناصر آرايه صفر باشد بعد از اجرای حلقه به آدرس AllZero پرش می کند.

      lea SI, Array
      dec SI
      mov cx, 15
Search:
      inc SI
      cmp byte ptr [SI], 0
      loope Search
      je AllZero


حلقه های تکرار ديگر

از دستورات هم پرش می توان برای ساختن حلقه های تکرار استفاده کرد. به مثال های زير توجه کنيد.

مثال. دستورات زير مجموع اعداد 1 تا 10 را محاسبه و در ثبات AX ذخيره می کند.

       mov AX, 0
       mov CX, 1
For:
      cmp CX, 10
      jle Repeat
      jmp EndFor
Repeat:
      add AX, CX
      inc CX
      jmp For
EndFor:

مثال. دستورات زير کاراکترهائی را از کاربر گرفته و در يک آرايه ذخيره می کند تا وقتی که کليد enter وارد شود.

      lea SI, Array
Readkey:
      mov AH, 1
      int 21h           ;Get a character
      cmp AL, 13     ;Carriage return ASCII code
      je EndLoop
      mov [SI],AL    ;Save input character in Array
      inc SI
      jmp Readkey
EndLoop:

واحد پردازش مرکزی

پردازنده يا واحد پردازش مرکزی (Central Processing Unit) يا (CPU) از واحد کنترل و واحد محاسبات و منطق ساخته شده است. وظيفه آن خواندن و نوشتن محتويات سلول حافظه، انتقال داده بين سلول های حافظه و ثبات های خاص، رمزبرداری و اجرای دستورالعمل های ذخيره شده در حافظه اصلی است.

CPU هر دستورالعمل را در يک سری مراحل اجرا می کند و برای همگام کردن سيکل اجرای دستورالعمل از يک ساعت (Clock) استفاده می کنند. ساعت در يک فرکانس ثابت پالس می زند که سرعت ساعت ناميده می شود. اين ساعت دقيقه و ثانيه را نگه نمی دارد بلکه فقط در نرخ ثابتی ضربان دارد. مدارهای الکترونيکی کامپيوتر از اين ضربان ها برای انجام صحيح عمليات خود استفاده می کنند. تعداد ضربه ها يا اصطلاحا سيکل های مورد نياز يک دستورالعمل بستگی به نسل و مدل CPU دارد.


مثال. وقتی يک کامپيوتر 1.5GHz می خريد، 1.5 GHz فرکانس اين ساعت است. يعنی در هر ثانيه 1.5 ميليارد پالس می زند (گيگاهرتز GHz يا يک ميليارد سيکل در ثانيه است).


مجموعه دستورالعمل ها

مجموعه ای از تمام دستورالعمل هائی که يک نوع پردازنده می تواند اجرا می کند مجموعه دستورالعمل (Instruction Set) ناميده می شوند که درواقع زبان ماشين آن نوع پردازنده را شکل می دهد. دستورالعمل های زبان ماشين به صورت اعداد رمز می شوند و عموما ساده هستند. زيرا زبان ماشين با اين هدف طراحی می شود که پردازنده قادر باشد مقصود دستورالعمل را سريع کشف کند تا بتواند به طور موثر آن را اجرا کند..

هر پردازنده زبان ماشين منحصر بفرد خود را دارد. و مجموعه دستورالعمل از ماشينی به ماشين ديگر متفاوت است. به همين دليل مثلا برنامه های نوشته شده برای Mac نمی توانند روی يک IBM-PC اجرا شوند. برنامه های نوشته شده در زبان های ديگر بايد توسط کامپايلر به زبان ماشين پردازنده ای که روی آن اجرا می شود تبديل شود. معمولا عملکرد کامپايلرها بر روی ماشين با دستورالعمل کمتر آسان تر است.


مجموعه ثبات ها

دستورالعمل ها ممکن است نياز به داده ای داشته باشند تا روی آن عمل کند. هر پردازنده دارای يکسری سلول های حافظه است که داده های دستورالعمل را در خود ذخيره می کنند. اين سلول ها ثبات (register) ناميده می شوند و درون خود پردازنده قرار دارند. پردازنده می تواند به داده درون ثبات سريع تر از داده درون حافظه دسترسی پيدا کند. اغلب کامپيوترها مجموعه ای از ثبات ها را برای ذخيره موقت داده دارند. البته تعداد ثبات های پردازنده اندک است، بنابراين برنامه نويس ناچار است تنها داده های جاری را در ثبات ذخيره نمايد.


انواع پردازنده ها

پردازنده ها به گروه های زير دسته بندی می شوند:

1. Complex Instruction Set Computers - CISC
     • پردازنده هائی که مجموعه دستورالعمل کاملی با پشتيبانی سخت افزاری برای انواع وسيعی ازعمليات را دارند. در عمليات علمی، مهندسی و رياضی معمولا اکثر کارها را در کوتاهترين زمان انجام می دهند.
2. Reduced Instruction Set Computers - RISC
     • پردازنده هائی که مجموعه دستورالعمل فشرده و کوچکی دارند. در کاربردهای تجاری و برنامه هائی که توسط کامپايلر ايجاد شده اند معمولا اکثر کارها را در کوتاهترين زمان انجام می دهند.
3. Hybrid
     • پردازنده هائی که ترکيبی از روش CISC و RISC هستند و سعی دارند تعادلی بين مزايای هر دو روش برقرار کنند.
4. Special purpose
     • پردازند هائی که برای وظايف خاصی بهينه شده اند. Digital signal processors و انواع co-processors نوع متعارف اين دسته هستند.
5. Hypothetical
     • پردازنده هائی که هنوز وجود ندارند يا هرگز وجود نداشته اند. پردازنده هائی که در فاز طراحی هستند يا برای کارهای نظری درنظر گرفته شده اند. معروف ترين آنها MIX است که يک پردازنده فرضی آموزش ساخته شده توسط Donald E. Knuth برای ارائه الگوريتم های کامپيوتری است.

پايگاه داده

يک بانك اطلاعاتي يا پايگاه داده (database) مجموعه اي سازمان يافته و بدون افزونگي از داده های مرتبط به هم است که مي تواند توسط سيستم هاي کاربردي مختلف به اشتراک گذاشته شود و به راحتي دسترسی، مديريت و بهنگام شود.

وقتی داده به صورت پايگاه داده سازماندهی می شود، کاربر و برنامه نويس نيازي به دانستن جزئيات ذخيره سازي داده ندارند. علاوه براين داده مي تواند بدون تاثير روي اجزاي ديگر سيستم تغيير کند. برای مثال از اعداد حقيقي به صحيح، از يک ساختار فايل به ديگری يا از دستگاه ذخيره سازي نوري به مغناطيسي تغيير کند.


ويژگي هاي داده در پايگاه داده

ويژگی هائی که داده در پايگاه داده بايد داشته باشند در ليست زير آمده است:

1. اشتراکی شدن (shared)
      • داده در پايگاه داده بين چندين کاربر و برنامه کاربردی به اشتراک گذاشته می شود.
2. ماندگاري(persistence)
     • وقتي داده در پايگاه داده ذخيره شد پايدار است و از بين نمی رود، مگر آنکه توسط سيستم پايگاه داده تغيير کند.
3. امنيت (security)
      • داده در پايگاه داده از فاش شدن، تغيير و تخريب بدون مجوز محافظت می شود. مدير سيستم توسط سطوح دسترسي و قيدهای امنيتی نحوه دستيابی به داده را تعريف می کند و اطمينان می دهد که دستیابی از طريق مناسب انجام می شود.
4. اعتبار (validity)
      • يا جامعيت (integrity) و يا صحت(correctness) به درستی داده در پايگاه داده نسبت به موجوديت دنياي واقعي معتبر اشاره دارد. مثلا موجودی بانک نبايد منفی باشد.
5. سازگاری (consistency)
     • داده در پايگاه داده با مقدار واقعي داده در دنياي خارج سازگار است. وقتی يک فقره اطلاع در بيش از يک نقطه ذخيره شود و لازم باشد بهنگام شود، اگر بهنگام سازی در همه نقاط انجام نشود ناسازگاری ايجاد می شود.
6. کاهش افزونگی (non redundancy)
     • داده در پايگاه داده داراي حداقل افزونگي است. افزونگي به اين معناست که هيچ دو فقره داده در بانک معرف يک موجوديت در دنياي خارج نباشد.
7. استقلال (independence)
     • تغييردر نمايش فيزيکی، تکنيک های دستيابی و سازماندهی داده تاثيری روی برنامه های کاربردی ندارد.

ادامه مطلب...