طراحی سیستم های پیچیده نرم افزاری

سیستم های پیچیده نرم افزاری از طریق یک فرآیند توسعه که چرخه حیات سیستم نامیده میشود تهیه می شوند که این چرخه شامل مراحل زیر است :

۱- نیازمندی ها : همه پروژه های برنامه نویسی با مجموعه ای از مشخصات که هدف پروژه را مشخص میکند شروع میشوند.

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

۲- تجزیه و تحلیل : ما در این مرحله پس از مشخص شدن نیازمندی ها اقدام به تقسیم کردن مسئله به بخش های کوچکتر که قابلیت حل دارند می نماییم.

دو روش برای این کار وجود دارد یکی زوش بالا به پایین (top down) و دیگری روش پایین به بالا (bottom up). از آنجایی که برنامه نویس ها ای که دید کاملی از پروژه ندارند اغلب از روش پایین به بالا استفاده میکنند و همانند ساختمان سازی که با ایجاد قسمت های مختلف مانند دیوار ها ، سقف و غیره اقدام به ساخت و ساز میکنند در اینجا نیز برنامه ها با استفاده از قطعه های کوچک ساخته میشوند و توجه ای به هدف ایجاد ساختمان نمی شود !

بیشتر برنامه نویسان تازه کار باور دارند که با این روش می توانند برنامه های خالی از خطا بسازند و نیازی به دید کامل از مسئله و نقشه نیست. درحالی که در روش بالا به پایین با یک دید کلی از مسئله آن را به قسمت های کوچک و با جزئیات بیشتر تقسیم میکنیم که برای ایجاد سیستم های پیچیده ترجیح داده میشود.

۳- طراحی: در این فاز در ادامه کارهایی که در بخش تحلیل انجام دادیم اشیاء داده ای و عملیات هایی که روی آنها انجام خواهد گرفت را بررسی نموده که تحلیل داده ای باعث ایجاد انواع داده های انتزائی (Abstract Data Type) میشود و تحلیل عملیات ها باعث طراحی و پیاده سازی الگوریتم ها و روال های مخصوص آنها میشود.

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

۵- اعتبار سنجی : در این مرحله با استفاده از ورودی های متنوع صحت خروجی و کارکرد برنامه را بررسی نموده و خطا ها را برطرف میکنیم.

برای نشان دادن صحت عملکرد برنامه می توان از اثبات های ریاضی استفاده نمود اما معمولا این کار مشکل بوده لذا استفاده از الگوریتم هایی که قبلا درستی آنها اثبات شده است این کار را راحت تر میکند.

بیشتر بدانیم

کوکی ها و عملکرد آنها


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

Proxyو مفهوم آن

پِراکسی یک سیستم سخت افزاری یا برنامه کاربردی است که در شبکه، به عنوان واسطه ای میان رایانه کاربر و سرور عمل می کند. به عنوان مثال چنان چه کاربر اینترنت بخواهد درخواستی را با هدف مشاهده صفحه وب یا دریافت یک فایل برای سرور وب ارسال نماید، این درخواست ابتدا توسط پراکسی مورد رسیدگی قرار می گیرد و نتیجه حاصل از این رسیدگی برای کاربر فرستاده می شود.انگیزه اولیه از ایجاد پراکسی ها به اشتراک گذاردن اتصال اینترنت در یک شبکه داخلی بوده است به این معنی که مثلاً در شبکه یک شرکت تجاری، به جای آن که تک تک رایانه ها به صورت جداگانه به اینترنت متصل شوند، همگی از طریق یک دروازه متصل به اینترنت یعنی پراکسی با اینترنت ارتباط برقرار کنند.
با گذر زمان قابلیت های جدیدی فراتر از به اشتراک گذاردن ارتباط با اینترنت به پراکسی ها اضافه شد که از آن جمله می توان به موارد زیر اشاره کرد:
نظارت بر کاربران: با استفاده از پراکسی می توان درخواست های ارسال شده توسط کاربران را بررسی نمود و در صورت عدم تطابق آن ها با معیارهای تعیین شده، کاربر را از دسترسی به صفحات ومحتوای درخواست شد منع نمود.
Cacheکردن اطلاعات: با توجه به گران بودن هزینه ارتباط با اینترنت و محدودیت در پهنای باند مورد تقاضای کاربران، پراکسی قادر است صفحات وب و فایل هایی را که بیش ترین درخواست برای آنها وجود دارددر حافظه داخلی خود ذخیره (Cache) نماید. به این ترتیب در درخواست های بعدی، لزومی به دریافت محتوا از اینترنت نیست و پراکسی با مراجعه به حافظه داخلی خود به درخواست کاربران پاسخ می دهد. این قابلیت ضمن افزایش سرعت دسترسی کاربران به مطالب موردنظر، از هدر رفتن پهنای باند برای دریافت اطلاعات تکراری جلوگیری خواهد کرد.
افزایش امنیت شبکه:از آن جا که پراکسی به عنوان درواز های برای ارتباط شبکه داخلی با اینترنت عمل می کند، با ایجاد یک سیستم امنیتی قدرتمند می توان از نفوذ فایل های مخرب نظیرویروس، کرم، تروجان به درون شبکه داخلی پیشگیری نمود و رایانه های موجود در شبکه را از خطرنفوذگری و دسترسی های غیرمجاز در امان نگه داشت.

معرفی افزونه

افزونه برنامه کوچکی است که به یک نرم افزار بزرگ تر متصل می شود و قابلیت های جدیدی رابه آن اضافه می کند. وقتی از یک مرورگر وب استفاده می کنید ممکن است این مرورگر در حالتپیش فرض، قادر به اجرا یا نمایش برخی محتویات صفحه وب مانند فایل های فلش، اسنادpdf یا برخی فایل های ویدیویی نباشد. در این حالت شما با نصب افزونه مناسب، قابلیت اجرا و نمایش این فایل ها را به مرورگر اضافه نموده و در واقع کارایی مرورگر را بهبود می بخشید.

RSS

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

آشنایی با موتورهای جستجو

وب را می توان منبع بزرگی از اطلاعات دانست که برای اکثر پرسش های کاربران پاسخ های قابلقبولی را در خود جای داده است. امروزه با وجود میلیون ها وب سایت و میلیاردها صفحۀ وب و انبوهی از فایل ها و مستندات قابل دسترس، افراد گوناگون برای دریافت پاسخ پرسش های خود راهی بهترو سریع تر از مراجعه به اینترنت سراغ ندارد. اما سؤال اصلی این است که برای رسیدن به اطلاعات موردنظر باید به کدام وب سایت مراجعه نمود تا از میان انبوه اطلاعات موجود در اینترنت به صفحۀمطلوب رسید؟شاید اگر برای حل این معضل راه حل مناسبی ابداع نشده بود، استفاده عمومی از وبتا این حد گسترش پیدا نمی کرد.
تا مدت ها، کار دسته بندی صفحات وب به صورت دستی و بدون استفاده از نرم افزار خاصیانجام می شد تا این که کم کم ایده تولید موتورهای جستجو میان برنامه نویسان شکل گرفت و از سال۱۹۹۳ به تدریج نرم افزارهایی برای جستجو در محتوای صفحات وب تولید شد. در همین زمان بودکه مفهومی به نام Web Robot پا به دنیای فن آوری اطلاعات گذاشت؛ یعنی نر م افزاری که به صورت خودکار صفحات وب را احضار نموده و با بررسی محتوای صفحات، اقدام به نمایه سازی (Indexing) آنها می کند.

امروزه موتور جستجوی گوگل به مدد الگوریتم قدرتمندی که توسط یک دانشجوی جوان به نام لَری پیِج  نوشته شد توانسته در دنیای موتورهای جستجو به رقیب بلامنازع تبدیل شود و تقریباًٌ سایر رقبا را به حاشیه براند. هنگامی که کلید واژه ای را در یکی از موتورهای جستجو مثلyahoo.com ،google.com،bing.com  وارد می کنید، در کمتر از یک ثانیه، لیستی از نشانی وب سایت ها و صفحات حاوی کلیدواژه در اختیار شما قرار میگیرد و تعداد نتایج به دست آمده می تواند بین صفر تا چند میلیون نتیجه متغیر باشد. این سؤال ممکن است برای هر کاربر موتورهای جستجو پیش بیاید که یافتن این تعداد نتیجه در
این زمان کوتاه چگونه امکان پذیر است؟ برای پاسخ به این سؤال باید اجزاء تشکیل دهنده یک موتورجستجو را که در اغلب آنها مشترک است با هم مرور کنیم:

Robot یا Spider:


اسپایدر به صورت خودکار، به صفحات مختلف سر می زند،کد HTMLو محتوای آن را بررسی می کند و با دنبال نمودن پیوندها ٢، اطلاعات موردنیاز را در اختیار سایر بخش های موتور جستجو قرار می دهد.

Crawler:

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

Indexer:

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

Database:

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

Ranker:

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

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

SEO

هنگامی که کاربران، کلیدواژ ه های به کار رفته در محتوای وبسایت را از طریق موتورهای جستجو بررسی میکنند، نام وبسایت در رتبۀ بالاتری قرار میگیرد و طبیعتاً مراجعه به آن بیشتر خواهد شد. بهینه سازی و بسایت برای شناسایی توسط موتورهای جستجو که به اختصار (SEO   (Search Engine Optimization  نام دارد یکی از مهار تهایی است که طراحان وب باید بر آن مسلط باشند.

 

 

مفاهیم مقدماتی وب

وب یا World Wide Web که در منابع فارسی از آن با عنوان تار جهان گستر یاد می شود یکی از سرویس هایی است که دسترسی به اسناد متصل به هم را در بستر اینترنت امکان پذیر می سازد.
از آن جا که به جز وب، سرویسهای دیگری نظیر پست الکترونیک، انتقال فایل و … هم بر روی اینترنت به منظور دستیابیکاربران به اطلاعات موردنظر ارائه می شود لذا تصور عمومی در مورد یکسان بودن دو مفهوم وب و اینترنت نادرست است.
در واقع اینترنت سیستمی جهانی از شبکه هایی است که با به کارگیری مجموعه ای از قواعد مشترک که پروتکل نامیده می شوندبه هم مرتبط شده اند و میلیون ها کاربر را در سرتاسر دنیا به یکدیگر متصل نموده اند.در یک تعریف خلاصه می توان اینترنت را شبکه ای دانست که میلیون هاشبکه خصوصی، عمومی، تجاری و … را با استفاده از زیرساخت های مخابراتی و ارتباطی به یکدیگروصل نموده و حاوی مجموعه ای از منابع اطلاعاتی و ارائه دهنده سرویس های متنوع به کاربران است.

CLIENT ,SERVERو نحوه درخواست یک صفحه HTML
اگر در فضای اینترنت یک  سایتی را  درخواست  بدهیم این سایت  که بر روی یک کامپیوتر بسیار قدرتمند (server)قرار دارد پاسخ گوی ما خواهد بود  .
سرورهای وب، رایانه هایی با قدرت پردازش بالا  میزبان  یا  وب هستند که به صورت دائم به اینترنت متصل می باشند و روی آنها نرم افزارهایی خاص برای برقراری ارتباط با اینترنت، ارایه سرویس وب و نیز تأمین امنیت اطلاعات نصب شده است.
وب بر اساس مدل سرویس دهنده –  سرویس گیرنده بنا شده است. یعنی یک درخواست ازسرویس گیرنده (مثلاً رایانه شخصی شما) برای سرویس دهنده ( در این جا سرور وب) ارسال می شود.وقتی درخواستی به سرور بفرستیم به این عمل http request و پاسخ سرور به ما  را http response میگویندکه بعد از آن ما صفحه ای را در مرورگر خود میبینیم.
سرویس دهنده، درخواست رسیده را پردازش نموده و پاسخ مناسب را برای سرویس گیرنده ارسال میکند.در سرویس وب برای ارسال درخواستها و پاسخها، مجموعه ای از قواعد تحت عنوان قرارداد  انتقال ابرمتن یا به اختصار HTTPتعریف شده که قوانین انتقال فایل را در وب مشخص میکند. هنگام فراخوانی یک صفحه وب، درخواست HTTP کاربر در قالب یک درخواست برای سرویس دهنده ارسال  میشود . و در پاسخ به این درخواست یک فایل متنی به زبان HTMLبرای سرویس گیرنده فرستاده می شود.
client  یک کامپیوتر عادی است که ما از طریق ا ن درخواست خود را میفرستیم .
مرورگر وب  (web browser)   نرم افزاری برای دریافت و نمایش اطلاعات از وب است. این نرم افزار به صورت مفسر (interpreter) کار می کند که قابلیت تفسیر تگ ها و همچنین اسکریپت ها را دارد .شاید این سوال در ذهن شما پیش آمده  باشد که interpreter چه فرقی با compiler  دارد؟ پاسخ این است که کامپایلر ابتدا تمام دستورات برنامه را خوانده و در صورت صحیح بودن  همه آنها را اجرا میکند  اما مفسر ها رفتار متفاوتی دارند .مفسر ها هر خط برنامه را اجرا کرده و به خط بعدی میروند،در واقع اجرای هر خط همان لحظه خواندن خط اتفاق می افتد .اگر خطایی در خطی باشد آن را اعلام میکند و به کار خود ادامه میدهد .

بنابراین اگر برای نمایش صفحات وب از کامپایلر استفاده میشد  سرعت اجرا بسیار پایین بودو همچنین اگر کوچکترین خطایی در صفحه بود ،هیچ گاه نمیتوانستیم به آن صفحه  دسترسی داشته باشیم تا همه ایرادهای آن برطرف گردد.
حال می توانیم نحوه عملکرد مرورگر را به صورت کامل بررسی کنیم. هر صفحه وب در اینترنت دارای یک نشانی به صورت
http://www.websitename.com/test.htm است که در آن :
Hyper Text Transfer Protocol : http — قوانین انتقال ابر متن ،پروتکل برقراری ارتباط را تعیین میکند.
www : نشان میدهد که کاربر در حال استفاده از سرور وب است .
websitename.com : نام دامنه سایت است و در واقع نشان میدهد که درخواست باید برای کدام یک از سروهای وب موجود در اینترنت ارسال شود.
test.htm : صفحه وب مورد نظر را در وبسایت مذکور مشخص میکند.
وقتی بعد از وارد کردن آدرس اینتر را میزنیم  صفحه ای برای ما باز میشود که بر  روی یک سرور است . در واقع با وارد کردن آدرس ، آدرس همان کامپیوتر قدرتمند را وارد میکینم. آدرس کامپیوتر ها توسط ip  مشخص و تبدیل  به نام میشود.ip دردنیای اینترنت برای یک  کامپیوتر  منحصر به فرد است.

 

حال سوالی که پیش می آید این است که مرورگر از کجا میفهمد چه چیزی را نمایش دهد ؟ اینجا است که موضوع  html   مطرح میشود.

 

ویروس چیست ؟

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

یکی از مشهور ترین ویروس ها Love Bug نام دارد ، این ویروس در سال ۲۰۰۰ توسط ایمیلی با عنوان I love you به همراه یک ضمیمه به نام love-letter-for-you.txt.vbs ارسال می شد برخی از کاربران فریب خورده فکر می کردند که این یک فایل متنی هست درحالی که آن یک فایل vbs ( مخفف Visual basic script  ) بود. این ویروس حدود ۱۵ میلیون کامپیوتر را آلوده ساخت و حدود ۵ میلیارد دلار آسیب برجا گذاشت.

کاربران باید برای نحوه استفاده از ایمیل آموزش ببینند !

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

۱- boot sector

این نوع ویروس در خانه اول حافظه قرار می گیرد و وقتی کامپیوتر بوت شود به طور خودکار در حافظه قرار می گیرد

۲- Macro

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

۳- Program

فایل های اجرایی را آلوده می سازد

۴- Polymorphic

این ویروس ها در هر بار اجرا می توانند تغییر کنند برای اینکه شناسایی نشوند و ماهیت چند شکلی دارند .

۵- Armored

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

۶- Multipartite

یک ترکیب از ویروس های boot و program که ابتدا به boot sector و فایل های سیستم و سپس به سایر نقاط حمله میکند.

کرم های رایانه ای ! (Worms)

کرم ها بسیار شبیه ویروس ها هستند با این تفاوت که آنها به خودی خود تکثیر می یابند در حالی که ویروس ها اینگونه نیستند. ویروس ها از حفره های امنیتی و backdoor ها برای تکثیر استفاده می نمایند. آنها روی شبکه و اینترنت به دنبال سیستم  های مشابه می گردند و خود را در آن سیستم ها کپی می کنند. درباره worm ها ، لازم نیست کاربر به آنها دسترسی یافته یا آنها را اجرا کند. یک ویروس نیازمند گونه ای از ناقل می باشد تا آن را به مقصد برساند و به مراحل دقیقی نیازمند است تا اجرا شود یا اینکه باید توسط کاربر اجرا شود. یک کرم نیازمند این مراحل یا ناقل برای اجرا نیست.

یک نمونه مشهور از worm ها Nimda نام دارد (برعکس کلمه admin) ، که توسط اینترنت در مدت ۲۲ دیقه در سال ۲۰۰۱ گسترش یافت و خسارات وسیعی ایجاد نمود. آن توسط اشتراکهای شبکه ، ایمیل های گسترده و آسیب پذیری های سیستم عامل منتشر گشت

تروجان ها !

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

یک نمونه از تروجان ها می تواند فایلی درون برنامه ی دانلود شده مانند یک keygen باشد ، اگر یک کاربر از سرعت کم رایانه یا هشدار های پیاپی آنتی ویروس شکایت داشته باشد و به تازگی یک برنامه دانلود شده از اینترنت را نصب کرده باشد ، رایانه وی ممکن است توسط تروجان آلوده شده باشد.

تروجان های دسترسی از راه دور (RAT) شایع ترین نوع تروجان می باشند ، به عنوان نمونه Back Orifice ،  NetBus ، SubSeven . توانایی آنها در دادن دسترسی به حمله کننده بیش از کاربر باعث خطرناک بودن آنها شده است. این برنامه ها قابلیت اسکن دستگاه های محافظت نشده را دارند وی می توانند هر نوع تغییری را بعد از متصل شدن ایجاد نمایند .

چنین برنامه هایی لزوما برای اهداف خرابکارانه طراجی نشده اند اما ، یک کاربر به سادگی می تواند از آنها برای دستکاری سیستم استفاده نماید.

RAT ها همچنین می توانند با php کد نویسی شوند تا بتوان با آنها سایت ها را کنترل نمود. یک نمونه از اینها یک web Shell می باشد که انواع زیادی دارد و به حمله کننده این امکان را می دهد که از راه دور و بدون متوجه شدن کاربر اقدام به پیکربندی وب سرور نماید.

روت کیت ! (Rootkit)

یک روت کیت نوعی نرم افزار است که برای بدست آوردن سطح دسترسی مدیر (administrator) بر روی یک کامپیوتر بدون ردگیری شدن طراحی شده است. نام آن از ترکیب دو عبارت root  ( نام کاربری root در سیستم های Unix/Linux و یا نام کاربری administrator در سیستم های ویندوزی ) و kit ( کیت نرم افزاری) گرفته شده است. هدف اصلی این برنامه ها ایجاد فعالیت های خرابکارانه در زمان های آینده بدون اطلاع کاربر و مدیر سیستم می باشد.

روت کیت ها می توانند به Bios ، boot loader و kernel و غیره حمله کنند. یک مثال برای روت کیت های boot loader عبارت است از Evil Maid Attack . این حمله می تواند کلید های یک سیستم رمزنگاری دیسک را بدست آورد .

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

آشنایی با اورکلاکینگ

آشنایی با Hicookie

 

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

اورکلاک (overclock) چیست ؟

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

چرا اورکلاک کنیم ؟

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

برگرفته از آواژنگ avajang.com

خواندن داده ها در پايگاه داده به صورت سازگار و با قفل گذاري

خواندن سازگار بدون قفل گذاري يك خواندن سازگار بدين معني است كه اینودی‌بي از چند نسخه اي براي تهيه يك تصوير از پايگاه داده موقع اجراي پرس و جو استفاده مي كند و آن پرس و جو فقط تغييرات اعمال شده توسط تراكنش هاي اجرا شده قبل از آن نقطه از زمان را مي بيند و تغييرات اعمال شده توسط تراكنش هاي بعدي و يا آنهايي كه اعمال نشده اند را نمي تواند مشاهده كند. اما استثناي اين قانون اين است كه پرسجو تغييرات قبلي اعمال شده در همان تراكنش را مشاهده مي كند. اين استثنا باعث بوجود آمدن اين اختلاف مي شود كه ممكن است هنگامي كه يك تراكنش تعدادي از سطر ها را بروز رساني ميكند دستور Select علاوه بر تغييرات جديد اعمال شده نسخه هاي قديمي سطر ها را نيز ببيند و اگر نشست هاي ديگر نيز به طور پيوسته جدول را بروز رساني كنند ممكن است تراكنش نسخه اي از جدول را كه اكنون در پايگاه داده وجود ندارد را مشاهده كند. اگر سطح ايزوله سازي برابر با مقدار پيشفرض REPEATEABLE_READ باشد تمام خواندن هاي سازگار در يك تراكنش از يك تصوير ايجاد شده در اولين خواندن استفاده مي كنند و مي توانيد با اعمال تراكنش جاري و ايجاد يك پرس و جوي جديد تصاوير جديدتري ايجاد نماييد. با استفاده از سطح READ_COMMITED هر يك از خواندن هاي سازگار از تصوير جديد ايجاد شده براي خود استفاده مي كنند. خواندن سازگار بطور پيشفرض در اینودی‌بي براي پردازش SELECT در سطوح READ_COMMITED و REPEATED_READ استفاده مي شود. يك خواندن سازگار هيچ قفلي را روي جدول هاي مورد دسترسي خود ايجاد نمي كند و به همين دليل ساير نشست ها مجاز به تغيير آن جدول در هنگامي كه خواندن انجام مي شود هستند. فرض كنيد شما از حالت پيشفرض استفاده مي كنيد. در اين صورت با اجراي يك خواندن سازگار كه همان دستور SELECT معمولي هست يك نقطه زماني به تراكنش شما اعطا مي شود كه در آن نقطه پرس و جو پايگاه داده را مشاهده ميكند. اگر يك تراكنش ديگر بعد از آن نقطه زماني يك سطر جدول را حذف كند و تغييرات را اعمال كند شما آن سطر را نخواهيد ديد به همين طريق با دستور هاي بروزرساني و درج برخورد مي شود. تصوير وضعيت پايگاه داده براي دستور SELECT در تراكنش اعمال مي شود و نه الزاما براي دستور هاي DML. اگر شما سطر هايي را تغيير دهيد يا درج نماييد و آن تراكنش را اعمال كنيد يك دستور خواندن يا بروزرساني كه توسط يك تراكنش همزمان از نوع REPEATEABLE_READ صادر شده باشد سطر هاي جديد اعمال شده را تحت تاثير قرار مي دهد حتي اگر پرس و جو نتواند آنها را ببيند. اگر يك تراكنش سطر هاي اعمال شده توسط يك تراكنش ديگر را بروزرساني يا حذف كند آن تغييرات براي تراكنش جاري مشاهده پذير خواهند بود. به عنوان مثال ممكن است با يك موقعيت مانند آنچه در پايين اشاره شده مواجه شويد: SELECT COUNT(c1) FROM t1 WHERE c1 = ‘xyz’; — Returns 0: no rows match. DELETE FROM t1 WHERE c1 = ‘xyz’; — Deletes several rows recently committed by other transaction. SELECT COUNT(c2) FROM t1 WHERE c2 = ‘abc’; — Returns 0: no rows match. UPDATE t1 SET c2 = ‘cba’ WHERE c2 = ‘abc’; — Affects 10 rows: another txn just committed 10 rows with ‘abc’ values. SELECT COUNT(c2) FROM t1 WHERE c2 = ‘cba’; — Returns 10: this txn can now see the rows it just updated. شما مي توانيد نقطه زماني را با اعمال كردن تراكنش جاري و اجراي يك دستور مجدد مانند SELECT يا START_TRANSACTION_WITH_CONSISTENT_SNAPSHOT جلو ببريد. به اين عمل كنترل سازگاري چند نسخه اي مي گويند. در مثال زير نشست A سطر هاي درج شده توسط B را فقط در صورتي كه B آنها را اعمال كند و A نيز به همين صورت اعمال شود تا نقطه زماني آن جلو تر از زمان اعمالB برود ، مشاهده خواهد كرد. Session A Session B SET autocommit=0; SET autocommit=0; time | SELECT * FROM t; | empty set | INSERT INTO t VALUES (1, 2); | v SELECT * FROM t; empty set COMMIT; SELECT * FROM t; empty set COMMIT; SELECT * FROM t; ——————— | ۱ | ۲ | ——————— ۱ row in set اگر مي خواهيد جديد ترين تصوير پايگاه داده را ببينيد بايد يا از سطح READ_COMMITED و يا خواندن هاي با قفل گذاري استفاده كنيد. SELECT * FROM t LOCK IN SHARE MODE; با استفاده از سطح READ_COMMITED هر تراكنش با ايجاد يك تصوير جديد از پايگاه داده براي خود از آن براي خواندن استفاده مي كند. اما با ساتفاده از LOCK IN SHARE MODE يك قفل گذاري اتفاق مي افتد و دستور SELECT تا زماني كه تراكنش داراي جديد ترين تصوير به اتمام برسد مسدود مي شود. خواندن هاي سازگار روي برخي از دستورات DDL كار نمي كنند: • خواندن هاي سازگار روي DROP TABLE كار نميكنند چون كه ماي اسكيوال نمي تواند با جدول هاي Drop شده كار كند و اینودی‌بي آن جدول ها را پاك مي كند. • خواندن هاي سازگار روي ALTER TABLE كار نمي كند به اين دليل كه اين دستور يك كپي موقت از جدول تهيه مي كند و بعد از آن جدول اصلي را حذف ميكند. هنگامي كه يك دستور خواندن سازگار در يك تراكنش صادر شود سطر ها و جدول ها قابل مشاهده نيستند زيرا هنگامي كه تصوير تراكنش گرفته شده است وجود نداشته اند. در اين مورد يك خطا به صورت ER_TABLE_DEF_CHANGED برميگرداند. انواع خواندن براي دستور هاي SELECT متفاوت هست مانند INSERT INTO … SELECT ، UPDATE … SELECT ، و CREATE TABLE … SELECT كه در آنها FOR UPDATE يا LOCK IN SHARE MODE مشخص نشده است: • به صورت پيشفرض اینودی‌بي از قفل هاي قوي تر استفاده ميكند و SELECT نيز به صورت READ COMMITED استفاده مي شود. • براي استفاده از يك خواندن سازگار در اين شرايط بايد گزينه ي INNODB_LOCKS_UNSAFE_FOR_BINLOC را فعال نماييد و سطح ايزوله سازي را به يكي از حالت هاي READ UNCOMMITED ، READ COMMITED يا REPEATED READ تغيير دهيد و در اين صورت هيچ قفلي روي سطر هاي درحال خوانده شدن قرار نمي گيريد. خواندن با قفل گذاري اگر شما در يك ترامنش علاوه بر پرس و جوي داده ها اقدام به درج يا بروزرساني داده ها نماييد استفاده از دستور معمولي SELECT حفاظت كافي را ايجاد نمي كند و ساير تراكنش ها مي توانند سطر هايي را كه جستجو كرده ايد را بروزرساني يا حذف كنند . اینودی‌بي از دو نوع خواندن با قفل گذاري پشتيباني ميكند كه محافظت بيشتري را ارائه ميكنند: • دستور SELECT …. LOCK IN SHARE MODE يك قفل از نوع اشتراكي روي سطر ها هنگام خواندن ايجاد مي كند در اين صورت ساير تراكنش ها مي توانند آن سطر ها را بخوانند ولي نمي توانند تغييراتي را روي آن اعمال كنند تا زماني كه تراكنش شما به پايان برسد. همچنين در اين حالت اگر سطر هايي كه مي خواهيد بخوانيد توسط تراكنش ديگري تغيير كرده باشند تراكنش شما منتظر مي ماند تا آن تغييرات اعمال شوند و سپس از آخرين مقادير براي خواندن استفاده خواهد كرد. • براي ركورد هاي شاخص ،دستور SELECT …. FOR UPDATE سطر ها و تمامي شاخص هاي وابسطه را مانند هنگام بروزرساني قفل گذاري ميكند در اين صورت ساير تراكنش ها نمي توانند آن سطر ها را بروزرساني نموده يا دستور SELECT .. LOCK IN SHARE MODE را روي آن اجرا كنند. خواندن هاي سازگار تمامي قفل هاي موجود روي سطر ها را ناديده ميگيرند. اين نوع دستورات هنگام برخورد با داده هاي دختي يا گرافي در يك جدول يا به صورت جدا در چندين جدول مفيد خواهند بود. در اين صورت شما رائس هاي گراف يا برگ هاي درخت را پيمايش نموده و حق داريد به عقب برگشته و هر يك از اين اشاره گرها را تغيير دهيد. تمام قفل هاي تنظيم شده توسط LOCK IN SHARE MODE و FOR UPDATE زماني كه تراكنش ها اعمال شوند يا به عقب بازگردند آزاد خواهند شد. نكته : قفل كردن سطر ها براي بروزرساني با استفاده از SELECT FOR UPDATE زماني كه AUTOCOMMIT غير فعال باشد كار ميكنند و در صورتي كه AUTOCOMMIT فعال باشد سطر هاي مشخص شده قفل نخواهند شد.

مدل تراكنش ها و قفل گذاري در اینودی‌بي

مدل تراكنش ها و قفل گذاري

به جهت پياده سازي يك برنامه پايگاه داده اي در سطح بزرگ و با ترافيك بالا و قابليت اطمينان زياد و براي ورود يك كد جايگزين از يك سيستم پايگاه داده اي ديگر و همچنين براي افزايش كارايي ماي اسكيوال بايد با جزئيات تراكنش ها و قفل گذاري كه مربوط به اینودی‌بی مي شوند آشنا شويد.

هدف مدل تراكنش اینودی‌بی اين است تا ويژگي جديد چند نسخه اي را با ويژگي سنتي قفلگذاري دو مرحله اي تركيب كند. اینودی‌بي سطر ها را قفل گذاري ميكند و سپس پرس و جو ها را به صورت عمليات خواندن سازگار به شيوه اوراكل و به طور پيشفرض انجام ميدهد. اطلاعات مربوط به قفل ها به صورت بهينه ذخيره شده اند و نياز به اينكپسوله كردن آنها نمي باشد. معمولا چند كاربر به طور همزمان مي توانند يك سطر يا مجموعه اي از سطر ها را در اینودی‌بی قفلگذاري كنند بدون اينكه دچار مشكل حافظه شود.

در اینودی‌بي تمام فعاليت هاي يك كاربر در قالب يك تراكنش انجام مي شود و در صورتي كه گزينه ي autocommit فعال باشد هر دستور در قالب يك تراكنش جداگانه انجام مي شود. به طور پيشفرض ماي اسكيوال هر نشست را با گزينه autocommit فعال ايجاد ميكند و بدين ترتيب بعد از اجراي هر دستور اگر با خطا مواجه نشود تغييرات اعمال مي شوند و در صورتي كه با خطا مواجه شود نحوه اعمال و يا بازگشت به عقب به نوع خطا بستگي داد. يك نشست كه autocommit براي آن فعال باشد مي تواند يك تراكنش چند دستوري را به وسيله شروع كردن آن با start_transaction يا begin و خاتمه ي آن با commit يا rollback انجام دهد.

در صورتي كه براي يك نشست autocommit فعال نباشد آن نشست هميشه داراي يك تراكنش باز بوده و با اجراي دستور commit يا rollback آن تراكنش بسته شده و يك تراكنش جديد ايجاد مي شود.

دستور commitبه اين معني است كه تغييرات اعمال شده توسط يك تراكنش به صورت دائمي اعمال مي شوند و براي ساير نشست ها قابل مشاهده خواهند بود.

از جهت ديگر دستور rollback بدين معني است كه تغييرات اعمال نخواهند شد و همه تغييرات تراكنش جاري لغو مي شوند.

با اجراي هريك از دستوراتcommit و rollback تمام قفل هاي اعمال شده توسط تراكنش آزاد مي شوند.

 

بنا به تعريف سطوح ايزوله سازي در ماياسكيوال ۱۹۹۲ سطح پيشفرض در اینودی‌بي برابر REPEATEABLE_READميباشد. همچنين اینودی‌بي تمام چهار سطح پيشنهاد شده( READ_UNCOMMITED ، READCOMMITED ،‌ REPEATEABLE_READ و SERIALIZABLE. ) توسط استاندارد ماي اسكيوال را ارائه مي دهد.

كاربر مي تواند سطح ايزوله سازي يك تراكنش يا تراكنش هاي آتي را با استفاده از دستور SETTRANSACTION تعيين نمايد. براي تغيير دادن سطح ايزوله سازي سرور بايد از دستور –transaction-isolation در خط فرمان يا فايل پيكربندي استفاده نمود.

در سطح قفلگذاري سطر ها اینودی‌بي معمولا از روش قفل گذاري next-key استفاده مي كند. اين بدين معني است كه اینودی‌بي علاوه بر ركورد هاي شاخص مي تواند فضاي خالي قبل از آنها را نيز قفل گذاري نمايد تا از عمليات درج كه ممكن است توسط نشست هاي ديگر درآن فضا انجام شود جلوگيري نمايد.

يك قفل next-key بدين معني است كه يك ركورد شاخص و فضاي خالي قبل از آن قفل گذاري مي شود.

يك قفل gap به قفلي گفته مي شود كه فقط فضاي خالي بين ركورد ها را قفلگذاري ميكند.