0% found this document useful (0 votes)
2 views

Operating System

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Operating System

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 32

‫بسمه تعالی‬

‫جزوه مباحث حفظی‬

‫سیستم عامل‬
‫الگوریتم اخیرا استفاده نشده )‪(Not Recently Used / NRU‬‬
‫مقدمه‬

‫جایگزینی صفحه‪ :‬مکانیزمی در سیستمعاملها برای مدیریت حافظه وقتی که یک فرآیند به صفحات بیشتری‬ ‫•‬

‫نسبت به آنچه در حافظه فیزیکی )‪ (RAM‬موجود است نیاز دارد‪.‬‬

‫هدف‪ :‬حداقل کردن خطاهای صفحه و حداکثر کردن عملکرد سیستم با مدیریت کارآمد استفاده از حافظه‪.‬‬ ‫•‬

‫مقدمهای بر ‪NRU‬‬

‫)‪ :Not Recently Used (NRU‬الگوریتم جایگزینی صفحهای که صفحات را بر اساس تاریخچه استفاده‬ ‫•‬

‫تقسیمبندی میکند‪.‬‬

‫مفهوم اساسی‪ :‬صفحات به چهار دسته تقسیم میشوند بر اساس اینکه آیا به آنها ارجاع داده شده و تغییر داده‬ ‫•‬

‫شدهاند )‪ (dirty‬یا خیر‪.‬‬

‫دستهبندی صفحات‬

‫‪ .1‬دسته ‪ :۰‬نه ارجاع داده شده‪ ،‬نه تغییر داده شده )‪(NRU = 00‬‬

‫‪ .2‬دسته ‪ :۱‬نه ارجاع داده شده‪ ،‬تغییر داده شده )‪(NRU = 01‬‬

‫‪ .3‬دسته ‪ :۲‬ارجاع داده شده‪ ،‬نه تغییر داده شده )‪(NRU = 10‬‬

‫‪ .4‬دسته ‪ :۳‬ارجاع داده شده‪ ،‬تغییر داده شده )‪(NRU = 11‬‬

‫عملکرد ‪NRU‬‬

‫سیستمعامل بهطور دورهای بیتهای مرجع تمام صفحات را بازنشانی میکند (معموالً در فواصل زمانی منظم)‪.‬‬ ‫•‬

‫وقتی که به جایگزینی صفحه نیاز است‪:‬‬ ‫•‬

‫سیستمعامل یک صفحه را از یکی از چهار دسته انتخاب میکند‪.‬‬ ‫‪o‬‬

‫اولویت دستهها برای انتخاب به شکل زیر است‪:‬‬ ‫‪o‬‬


‫دسته ‪) ۰‬بهترین انتخاب‪ ،‬کمارزشترین(‬ ‫▪‬

‫دسته ‪۱‬‬ ‫▪‬

‫دسته ‪۲‬‬ ‫▪‬

‫دسته ‪) ۳‬بدترین انتخاب‪ ،‬باارزشترین(‬ ‫▪‬

‫اگر صفحات موجود در دسته ‪ ۰‬وجود نداشته باشند‪ ،‬الگوریتم به دسته بعدی میرود تا صفحهای برای جایگزینی‬ ‫•‬

‫پیدا کند‪.‬‬

‫بیت مرجع‬

‫بیت مرجع‪ :‬یک بیت منفرد مرتبط با هر صفحه که نشان میدهد آیا صفحه از آخرین بار بازنشانی به آن ارجاع‬ ‫•‬

‫داده شده است (خوانده یا نوشته شده)‪.‬‬

‫سیستمعامل میتواند این بیت را پس از دسترسی به ‪ ۱‬تنظیم کند و بهطور دورهای (مثالً در هر ضربه ساعت) آن‬ ‫•‬

‫را بازنشانی کند‪.‬‬

‫مزایای ‪NRU‬‬

‫‪ .1‬سادگی‪ :‬این الگوریتم پیادهسازی و درک آسانی دارد‪.‬‬

‫‪ .2‬کارایی‪ :‬از یک پرچم بیت ساده برای تعیین ارزشمندی یک صفحه استفاده میکند‪.‬‬

‫‪ .3‬سازگار‪ :‬به الگوهای دسترسی متغیر سازگار است زیرا بیتهای مرجع را بهطور دورهای بازنشانی میکند‪.‬‬

‫معایب ‪NRU‬‬

‫‪ .1‬غیرقطعی‪ :‬انتخاب تصادفی صفحات میتواند منجر به عملکرد ضعیف در موارد خاص شود‪.‬‬

‫‪ .2‬گرسنگی‪ :‬صفحات موجود در دسته ‪ ۳‬ممکن است بهطور نامحدود حفظ شوند اگر همواره ارجاع داده و تغییر داده‬
‫شوند که منجر به استفاده ناکارآمد از حافظه میشود‪.‬‬

‫‪ .3‬بار اضافی‪ :‬بازنشانی دورهای بیتهای مرجع مقداری بار اضافی را معرفی میکند‪ ،‬بهویژه در سیستمی با تعداد‬
‫زیادی صفحه‪.‬‬
‫مالحظات پیادهسازی‬

‫جدول صفحه‪ :‬هر صفحه در جدول صفحه باید یک بیت مرجع و ممکن است یک بیت تغییر )‪ (modified‬داشته‬ ‫•‬

‫باشد تا نشان دهد آیا صفحه تغییر کرده است‪.‬‬

‫بازنشانی دورهای‪ :‬یک وقفه تایمری میتواند برای بازنشانی دورهای بیتهای مرجع استفاده شود‪ .‬فرکانس این‬ ‫•‬

‫بازنشانی باید بین بار اضافی و نیازهای عملکرد تعادل برقرار کند‪.‬‬

‫ارزیابی عملکرد‬

‫نسبت برخورد)‪ : (Hit Ratio‬کارایی الگوریتم ‪ NRU‬میتواند با تجزیه و تحلیل نسبت برخورد‪ ،‬که نسبت‬ ‫•‬

‫صفحات دسترسی موفق به مجموع دسترسیها است‪ ،‬ارزیابی شود‪.‬‬

‫تحلیل مقایسهای‪ NRU :‬میتواند تحت بارهای مختلف با سایر الگوریتمهای جایگزینی صفحه )مانند ‪،FIFO‬‬ ‫•‬

‫‪ LRU‬و ‪ (Optimal‬مقایسه شود تا عملکرد آن ارزیابی گردد‪.‬‬

‫نتیجهگیری‬

‫الگوریتم جایگزینی صفحه )‪ Not Recently Used (NRU‬یک استراتژی ساده و مؤثر برای مدیریت حافظه‬ ‫•‬

‫در سیستمعاملها ارائه میدهد‪.‬‬

‫درک ‪ NRU‬به فهم مفاهیم وسیعتر مدیریت حافظه‪ ،‬استراتژیهای جایگزینی صفحه و بهینهسازی عملکرد کمک‬ ‫•‬

‫میکند‪.‬‬

‫مثال ‪ )۱‬سوال زیر را با روش ‪ NRU‬حل کنید‪.‬‬

‫تعداد قابها‪۴ :‬‬ ‫•‬

‫درخواستهای صفحه‪7, 0, 1, 2, 3, 0, 4, 0, 1, 3, 5, 0, 6, 1, 2, 7, 4, 5, 3, 2 :‬‬ ‫•‬

‫وضعیت قاب حافظه‬ ‫نوع دسته‬ ‫عمل‬ ‫شماره درخواست‬

‫]‪[7, -, -, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪1‬‬


‫]‪[7, 0, -, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪2‬‬

‫]‪[7, 0, 1, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪3‬‬

‫]‪[7, 0, 1, 2‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪4‬‬

‫]‪[3, 0, 1, 2‬‬ ‫‪2‬‬ ‫جایگزینی صفحه‬ ‫‪5‬‬

‫]‪[3, 0, 1, 2‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪6‬‬

‫]‪[3, 0, 1, 4‬‬ ‫‪2‬‬ ‫جایگزینی صفحه‬ ‫‪7‬‬

‫]‪[3, 0, 1, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪8‬‬

‫]‪[3, 0, 1, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪9‬‬

‫]‪[3, 0, 1, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪10‬‬

‫]‪[5, 0, 1, 4‬‬ ‫‪2‬‬ ‫جایگزینی صفحه‬ ‫‪11‬‬

‫]‪[5, 0, 1, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪12‬‬

‫]‪[5, 6, 1, 4‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪13‬‬

‫]‪[5, 6, 1, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪14‬‬

‫]‪[5, 6, 1, 2‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪15‬‬

‫]‪[7, 6, 1, 2‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪16‬‬

‫]‪[7, 6, 4, 2‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪17‬‬

‫]‪[7, 6, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪18‬‬

‫]‪[3, 6, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪19‬‬

‫]‪[3, 2, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪20‬‬

‫تعداد خطاهای صفحه‪14 :‬‬


‫مثال ‪ )۲‬سوال زیر را با روش ‪ NRU‬حل کنید‪.‬‬

‫تعداد قابها‪۴ :‬‬ ‫•‬

‫درخواستهای صفحه‪1, 2, 3, 1, 2, 4, 5, 1, 2, 3, 4, 0, 1, 2, 6, 7, 3, 4, 5, 1 :‬‬ ‫•‬

‫وضعیت قاب حافظه‬ ‫نوع دسته‬ ‫عمل‬ ‫شماره درخواست‬

‫]‪[1, -, -, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪1‬‬

‫]‪[1, 2, -, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪2‬‬

‫]‪[1, 2, 3, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪3‬‬

‫]‪[1, 2, 3, -‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪4‬‬

‫]‪[1, 2, 3, -‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪5‬‬

‫]‪[1, 2, 3, 4‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪6‬‬

‫]‪[5, 2, 3, 4‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪7‬‬

‫]‪[5, 1, 3, 4‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪8‬‬

‫]‪[5, 1, 2, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪9‬‬

‫]‪[5, 1, 2, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪10‬‬

‫]‪[5, 1, 2, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪11‬‬

‫]‪[0, 1, 2, 4‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪12‬‬

‫]‪[0, 1, 2, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪13‬‬

‫]‪[0, 1, 2, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪14‬‬

‫]‪[0, 1, 2, 6‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪15‬‬

‫]‪[0, 1, 2, 7‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪16‬‬

‫]‪[3, 1, 2, 7‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪17‬‬


‫]‪[4, 1, 2, 7‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪18‬‬

‫]‪[5, 1, 2, 7‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪19‬‬

‫]‪[5, 1, 2, 1‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪20‬‬

‫تعداد خطاهای صفحه‪12 :‬‬

‫مثال ‪ )۲‬سوال زیر را با روش ‪ NRU‬حل کنید‪.‬‬

‫تعداد قابها‪۴ :‬‬ ‫•‬

‫درخواستهای صفحه‪2, 3, 4, 5, 1, 2, 3, 1, 0, 1, 2, 3, 4, 5, 1, 2, 0, 3, 4, 5 :‬‬ ‫•‬

‫وضعیت قاب حافظه‬ ‫نوع دسته‬ ‫عمل‬ ‫شماره درخواست‬

‫]‪[2, -, -, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪1‬‬

‫]‪[2, 3, -, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪2‬‬

‫]‪[2, 3, 4, -‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪3‬‬

‫]‪[2, 3, 4, 5‬‬ ‫‪2‬‬ ‫قرار دادن صفحه‬ ‫‪4‬‬

‫]‪[1, 3, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪5‬‬

‫]‪[1, 3, 4, 5‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪6‬‬

‫]‪[1, 3, 4, 5‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪7‬‬

‫]‪[1, 3, 4, 5‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪8‬‬

‫]‪[0, 3, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪9‬‬

‫]‪[0, 1, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪10‬‬

‫]‪[0, 1, 2, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪11‬‬


‫]‪[0, 2, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪12‬‬

‫]‪[0, 2, 4, 5‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪13‬‬

‫]‪[0, 2, 4, 5‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪14‬‬

‫]‪[1, 2, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪15‬‬

‫]‪[1, 0, 4, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪16‬‬

‫]‪[1, 0, 3, 5‬‬ ‫‪0‬‬ ‫جایگزینی صفحه‬ ‫‪17‬‬

‫]‪[1, 0, 3, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪18‬‬

‫]‪[1, 0, 3, 5‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪19‬‬

‫]‪[1, 0, 3, 4‬‬ ‫‪2‬‬ ‫ارجاع به صفحه‬ ‫‪20‬‬

‫تعداد خطاهای صفحه‪12 :‬‬

‫زمان تعویض متن در زمانبندی ‪(Context Switching Time) CPU‬‬


‫تعویض متن یک مفهوم اساسی در سیستمعاملها‪ ،‬بهویژه در زمانبندی ‪ CPU‬است‪ .‬این فرآیند به ذخیرهسازی وضعیت‬
‫یک فرایند یا رشته در حال اجرا اشاره دارد تا بتوان بعداً آن را از سر گرفت و بارگذاری وضعیت فرایند یا رشته بعدی که‬
‫قرار است اجرا شود‪ .‬این مکانیزم برای محیطهای چندوظیفهای ضروری است و به اشتراکگذاری کارآمد زمان ‪ CPU‬بین‬
‫چندین فرایند کمک میکند‪.‬‬

‫تعریف تعویض متن‬

‫تعویض متن‪ :‬عمل ذخیرهسازی وضعیت (زمینه) یک فرایند یا رشته ‪ CPU‬در حال اجرا و بارگذاری وضعیت‬ ‫•‬

‫فرایند یا رشته دیگری برای اجرا‪ .‬این شامل بهروزرسانی چندین ثبات‪ ،‬شمارندههای برنامه و اطالعات مدیریت‬
‫حافظه است‪.‬‬
‫اهمیت تعویض متن‬

‫امکان چندوظیفهای‪ :‬اجازه میدهد تا چندین فرایند بهطور همزمان اجرا شوند و این توهم را ایجاد میکند که‬ ‫•‬

‫همزمان در حال اجرا هستند‪.‬‬

‫اشتراک منابع‪ :‬با تغییر بین فرایندها بر اساس وضعیت آنها (آماده‪ ،‬در انتظار‪ ،‬در حال اجرا) حداکثر استفاده از‬ ‫•‬

‫‪ CPU‬را بهدست میآورد‪.‬‬

‫پاسخگویی‪ :‬با اطمینان از اینکه فرایندهای با اولویت باال میتوانند بهموقع به ‪ CPU‬دسترسی پیدا کنند‪،‬‬ ‫•‬

‫پاسخگویی سیستم را بهبود میبخشد‪.‬‬

‫مکانیزم تعویض متن‬

‫‪ .1‬ذخیره وضعیت فرایند‬

‫هنگام وقوع یک تعویض متن‪ ،‬سیستمعامل وضعیت فعلی فرایند در حال خارجشدن را ذخیره میکند‪.‬‬ ‫‪o‬‬

‫این شامل‪:‬‬

‫ثباتهای ‪ :CPU‬ثباتهای عمومی‪ ،‬اشارهگر دستور‪ ،‬اشارهگر پشته‪.‬‬ ‫▪‬

‫اطالعات مدیریت حافظه‪ :‬جدولهای صفحه‪ ،‬ثباتهای بخش‪.‬‬ ‫▪‬

‫بلوک کنترل فرایند )‪ PCB :(PCB‬تمام اطالعات مربوط به یک فرایند را شامل میشود‪ ،‬از‬ ‫▪‬

‫جمله وضعیت آن‪ ،‬شمارنده برنامه و اطالعات زمانبندی ‪.CPU‬‬

‫‪ .2‬بارگذاری وضعیت فرایند‬

‫سیستمعامل وضعیت فرایند بعدی که قرار است اجرا شود را بارگذاری میکند که شامل‪:‬‬ ‫‪o‬‬

‫بازیابی ثباتهای‪CPU.‬‬ ‫▪‬

‫بارگذاری اطالعات مدیریت حافظه‪.‬‬ ‫▪‬

‫تنظیم وضعیت فرایند به «در حال اجرا» و بهروزرسانی ‪ PCB‬آن‪.‬‬ ‫▪‬

‫‪ .3‬مراحل تعویض متن‬

‫‪ .1‬اختالل رخ میدهد‪ :‬یک اختالل زمانبندی یا یک رویداد باعث میشود که فرایند فعلی ‪ CPU‬را ترک‬
‫کند‪.‬‬
‫‪ .2‬ذخیره زمینه فعلی‪ :‬سیستمعامل وضعیت فعلی فرایند در حال اجرا را در ‪ PCB‬آن ذخیره میکند‪.‬‬

‫‪ .3‬انتخاب فرایند بعدی‪ :‬زمانبند فرایند بعدی برای اجرا را بر اساس الگوریتم زمانبندی )مانند ‪،FCFS‬‬
‫‪ (Round Robin ،SJF‬انتخاب میکند‪.‬‬

‫‪ .4‬بارگذاری زمینه بعدی‪ :‬سیستمعامل زمینه فرایند انتخاب شده را از ‪ PCB‬آن بارگذاری میکند‪.‬‬

‫‪ .5‬ادامه اجرا‪ :‬فرایند انتخاب شده به اجرای خود ادامه میدهد‪.‬‬

‫زمان تعویض متن‬

‫تعریف‬

‫زمان تعویض متن‪ :‬زمان کلی الزم برای انجام یک تعویض متن‪ .‬این شامل زمان صرف شده برای ذخیره‬ ‫•‬

‫وضعیت فرایند فعلی و بارگذاری وضعیت فرایند بعدی است‪.‬‬

‫عوامل مؤثر بر زمان تعویض متن‬

‫سرعت سختافزار‪CPU :‬ها و حافظههای سریعتر میتوانند زمان تعویض متن را کاهش دهند‪.‬‬ ‫•‬

‫اندازه وضعیت فرایند‪ :‬هرچه دادههای بیشتری باید ذخیره شود (مانند مجموعههای بزرگ ثبات‪ ،‬نقشههای‬ ‫•‬

‫حافظه)‪ ،‬زمان تعویض متن طوالنیتر خواهد بود‪.‬‬

‫طراحی سیستمعامل‪ :‬ساختارها و الگوریتمهای کارآمد در سیستمعامل میتوانند زمان تعویض متن را به‬ ‫•‬

‫حداقل برسانند‪.‬‬

‫کشینگ‪ :‬استفاده مؤثر از کشهای ‪ CPU‬میتواند بازیابی دادههای فرایند را تسریع کند‪.‬‬ ‫•‬

‫اندازهگیری‬

‫زمان تعویض متن میتواند بهصورت چرخههای ‪ CPU‬یا زمان (میلیثانیه) اندازهگیری شود‪ .‬معموالً در دامنه‬ ‫•‬

‫چند میکروثانیه تا چند میلیثانیه بسته به معماری سیستم و بار کاری قرار دارد‪.‬‬
‫تأثیر تعویض متن بر عملکرد‬

‫سربار‬

‫تعویض متنهای مکرر می توانند منجر به سربار قابل توجهی شوند و عملکرد کلی سیستم را کاهش دهند‪.‬‬ ‫•‬

‫این سربار شامل‪:‬‬

‫زمان صرف شده برای تعویض متن بهجای اجرای فرایندهای کاربری‪.‬‬ ‫‪o‬‬

‫افزایش عدم تطابق کش به دلیل سوئیچ کردن فرایندها‪ ،‬که منجر به کاهش کارایی کش میشود‪.‬‬ ‫‪o‬‬

‫تجارت‬

‫باید تعادلی بین پاسخگویی (کاهش زمان انتظار برای فرایندهای تعاملی) و سربار (کاهش فراوانی تعویض‬ ‫•‬

‫متن) برقرار شود‪.‬‬

‫الگوریتمهای زمانبندی‬

‫الگوریتمهای زمانبندی مختلف دارای ویژگیهای تعویض متن متفاوتی هستند‪:‬‬ ‫•‬

‫‪ :Round Robin‬میتواند منجر به تعویض متنهای زیاد اگر زمانهای کوچک باشد‪.‬‬ ‫‪o‬‬

‫زمانبندی پیشبینیپذیر‪ :‬شامل تعویض متن بهمحض اینکه یک فرایند با اولویت باالتر آماده میشود‪،‬‬ ‫‪o‬‬

‫که میتواند فراوانی تعویض متن را افزایش دهد‪.‬‬

‫مثال ‪ )۱‬سوال زیر را با زمانبندی )‪ FCFS (First-Come, First-Served‬و زمان تعویض متن گفته شده حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Context‬‬
‫‪Process‬‬ ‫‪BurstTime‬‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Switching Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪4‬‬ ‫‪0‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪6‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪6‬‬ ‫‪9‬‬ ‫‪3‬‬ ‫‪12‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪12‬‬ ‫‪17‬‬ ‫‪1‬‬ ‫‪18‬‬


‫میانگین زمان پایان‪:‬‬

‫میانگین زمان پایان{‪=6+12+183=12\text‬میانگین زمان پایان = }‪} = \frac{6 + 12 + 18}{3‬‬


‫‪12‬میانگین زمان پایان‪=36+12+18=12‬‬

‫مثال ‪ )۲‬سوال زیر را با زمانبندی ‪ SJF‬و زمان تعویض متن گفته شده حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪8‬‬ ‫‪0‬‬ ‫‪8‬‬ ‫‪1‬‬ ‫‪9‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪4‬‬ ‫‪9‬‬ ‫‪13‬‬ ‫‪2‬‬ ‫‪15‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪15‬‬ ‫‪17‬‬ ‫‪1‬‬ ‫‪18‬‬

‫مثال ‪ )۳‬سوال زیر را با زمانبندی ‪ Round Robin‬و زمان تعویض متن گفته شده حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪5‬‬ ‫‪0‬‬ ‫‪9‬‬ ‫‪2‬‬ ‫‪11‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪9‬‬ ‫‪12‬‬ ‫‪1‬‬ ‫‪13‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪8‬‬ ‫‪12‬‬ ‫‪20‬‬ ‫‪2‬‬ ‫‪22‬‬

‫مثال ‪ )۴‬سوال زیر را با زمانبندی ‪ Priority‬و زمان تعویض متن گفته شده حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪6‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪11‬‬ ‫‪2‬‬ ‫‪13‬‬


‫‪P3‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪13‬‬ ‫‪15‬‬ ‫‪1‬‬ ‫‪16‬‬

‫مثال ‪ )5‬سوال زیر را با زمانبندی ‪ MultiLevel Queue‬و زمان تعویض متن گفته شده حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪1‬‬ ‫‪7‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪4‬‬ ‫‪7‬‬ ‫‪11‬‬ ‫‪2‬‬ ‫‪13‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪13‬‬ ‫‪16‬‬ ‫‪1‬‬ ‫‪17‬‬

‫مثال ‪ )6‬سوال زیر را با زمانبندی ‪ FCFS‬و زمان تعویض متن ‪ ۲‬میلیثانیه حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪4‬‬ ‫‪0‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪6‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪6‬‬ ‫‪9‬‬ ‫‪2‬‬ ‫‪11‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪11‬‬ ‫‪16‬‬ ‫‪2‬‬ ‫‪18‬‬

‫مثال ‪ )7‬سوال زیر را با زمانبندی ‪ SJF‬و زمان تعویض متن ‪ ۲‬میلیثانیه حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪2‬‬ ‫‪8‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪4‬‬ ‫‪8‬‬ ‫‪12‬‬ ‫‪2‬‬ ‫‪14‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪14‬‬ ‫‪16‬‬ ‫‪2‬‬ ‫‪18‬‬


‫مثال ‪ )8‬سوال زیر را با زمانبندی ‪ Round Robin‬و زمان تعویض متن ‪ ۲‬میلیثانیه حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪5‬‬ ‫‪0‬‬ ‫‪9‬‬ ‫‪2‬‬ ‫‪11‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪11‬‬ ‫‪14‬‬ ‫‪2‬‬ ‫‪16‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪16‬‬ ‫‪20‬‬ ‫‪2‬‬ ‫‪22‬‬

‫مثال ‪ )9‬سوال زیر را با زمانبندی ‪ Priority‬و زمان تعویض متن ‪ ۲‬میلیثانیه حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪5‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫‪11‬‬ ‫‪2‬‬ ‫‪13‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪13‬‬ ‫‪15‬‬ ‫‪2‬‬ ‫‪17‬‬

‫مثال ‪ )۱۰‬سوال زیر را با زمانبندی ‪ MultiLevel Queue‬و زمان تعویض متن ‪ ۲‬میلیثانیه حل کنید‪.‬‬

‫‪Arrival‬‬ ‫‪Burst‬‬
‫فرایند‬ ‫زمان شروع‬ ‫زمان پایان‬ ‫زمان تعویض زمینه‬ ‫زمان کل‬
‫‪Time‬‬ ‫‪Time‬‬
‫‪P1‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪2‬‬ ‫‪8‬‬

‫‪P2‬‬ ‫‪1‬‬ ‫‪4‬‬ ‫‪8‬‬ ‫‪12‬‬ ‫‪2‬‬ ‫‪14‬‬

‫‪P3‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪14‬‬ ‫‪17‬‬ ‫‪2‬‬ ‫‪19‬‬


‫دسترسی غیر یکنواخت به حافظه )‪(NUMA‬‬

‫مقدمهای بر ‪NUMA‬‬

‫تعریف‪ :‬دسترسی غیر یکنواخت به حافظه )‪ (NUMA‬طراحی حافظهای است که در معماریهای چندپردازندهای‬ ‫•‬

‫استفاده میشود‪ ،‬جایی که زمان دسترسی به حافظه بسته به موقعیت حافظه نسبت به پردازنده متغیر است‪.‬‬

‫مقابل با ‪ :UMA‬در معماریهای دسترسی یکنواخت به حافظه )‪ ، (UMA‬تمام پردازندهها یک فضای حافظه‬ ‫•‬

‫مشترک دارند و زمانهای دسترسی به حافظه یکنواخت است‪ .‬در ‪ ،NUMA‬زمانهای دسترسی به حافظه تحت‬
‫تأثیر نزدیکی حافظه به پردازندهای است که به آن دسترسی دارد‪.‬‬

‫نمای کلی معماری‬

‫سیستمهای چندپردازندهای‪ NUMA :‬معموالً در سیستمهای چندپردازندهای مورد استفاده قرار میگیرد‪ ،‬جایی‬ ‫•‬

‫که چندین ‪ CPU‬به حافظه مشترک دسترسی دارند‪.‬‬

‫سازماندهی حافظه‪ :‬حافظه به نودها تقسیم میشود که هر نود شامل یک یا چند ‪ CPU‬و یک حافظه محلی‬ ‫•‬

‫است‪ .‬پردازندهها میتوانند به حافظه محلی خود سریعتر از حافظه متصل به پردازندههای دیگر دسترسی پیدا‬
‫کنند‪.‬‬

‫ویژگیهای کلیدی ‪NUMA‬‬

‫دسترسی به حافظه محلی و از راه دور‪:‬‬ ‫•‬

‫دسترسی به حافظه محلی‪ :‬دسترسی سریع به حافظهای که به صورت فیزیکی در همان نود به عنوان‬ ‫‪o‬‬

‫‪ CPU‬قرار دارد‪.‬‬

‫دسترسی به حافظه از راه دور‪ :‬دسترسی کندتر به حافظهای که بخشی از نود دیگری است‪.‬‬ ‫‪o‬‬

‫مقیاسپذیری‪ :‬معماریهای ‪ NUMA‬نسبت به ‪ UMA‬مقیاسپذیری بیشتری دارند و اجازه میدهند تعداد‬ ‫•‬

‫بیشتری از پردازندهها بدون کاهش قابل توجهی در عملکرد اضافه شوند‪.‬‬

‫مزایای ‪NUMA‬‬
‫بهبود عملکرد‪ :‬با فراهم کردن دسترسی سریعتر به حافظه محلی‪ NUMA ،‬میتواند عملکرد برنامههای چند‬ ‫•‬

‫رشتهای را به طور قابل توجهی بهبود بخشد‪.‬‬

‫بهینهسازی بهتر منابع‪ :‬میتواند حافظه و منابع ‪ CPU‬را بهتر به کار گیرد‪ ،‬زیرا پردازندههای مختلف میتوانند بر‬ ‫•‬

‫روی حافظه محلی خود بدون تداخل کار کنند‪.‬‬

‫چالشهای ‪NUMA‬‬

‫پیچیدگی مدیریت حافظه‪ :‬سیستمعاملها باید تکنیکهای مدیریت حافظه پیچیدهای را پیادهسازی کنند تا‬ ‫•‬

‫الگوهای دسترسی را بهینهسازی کنند‪.‬‬

‫مسائل تاخیر‪ :‬پیچیدگی افزایش یافته میتواند منجر به مسائل تاخیر هنگام دسترسی به حافظههای دور شود‪.‬‬ ‫•‬

‫تعادل بار‪ :‬اطمینان از تعادل بار در بین پردازندهها و نودهای حافظه میتواند چالشبرانگیز باشد‪.‬‬ ‫•‬

‫پشتیبانی سیستمعامل از ‪NUMA‬‬

‫سیاستهای تخصیص حافظه‪:‬‬ ‫•‬

‫تخصیص مبتنی بر محلیّت‪ :‬حافظهای را به گونهای تخصیص میدهد که رشتهها تا حد ممکن به حافظه‬ ‫‪o‬‬

‫محلی اختصاص یابند‪.‬‬

‫متناوبسازی‪ :‬صفحات حافظه را در بین نودها توزیع میکند تا بارهای دسترسی به حافظه را متعادل‬ ‫‪o‬‬

‫کند‪.‬‬

‫زمانبندی رشتهها‪:‬‬ ‫•‬

‫زمانبندی با وابستگی‪ :‬رشتهها را به پردازندههای خاص اختصاص میدهد‪ ،‬ترجیحاً آنهایی که بهترین‬ ‫‪o‬‬

‫دسترسی به حافظه مورد نیاز را دارند‪ ،‬تا تاخیر را به حداقل برساند‪.‬‬

‫الگوریتمهای تعادل بار‪ :‬الگوریتمهایی را پیادهسازی میکند که هم بار ‪ CPU‬و هم بارهای حافظه را در‬ ‫‪o‬‬

‫نظر میگیرد تا زمانبندی فرآیندها به صورت کارآمد انجام شود‪.‬‬

‫سیستمهایعامل آگاه از ‪ :NUMA‬سیستمهایعامل مدرن‪ ،‬مانند لینوکس و ویندوز‪ ،‬به پشتیبانی از مدیریت‬ ‫•‬

‫حافظه آگاه از ‪ NUMA‬پرداختهاند که به آنها اجازه میدهد بهینهترین روشهای دسترسی به حافظه را مدیریت‬
‫کنند‪.‬‬
‫مالحظات برنامهنویسی ‪NUMA‬‬

‫برنامههای آگاه از ‪ :NUMA‬توسعهدهندگان میتوانند برنامهها را برای ‪ NUMA‬بهینهسازی کنند با‪:‬‬ ‫•‬

‫استفاده از ‪ API‬هایی که کنترل بر تخصیص حافظه را فراهم میکنند )مانند )(‪،numa_alloc‬‬ ‫‪o‬‬

‫)(‪ numa_free‬در لینوکس(‪.‬‬

‫ساختاردهی دادهها برای به حداقل رساندن دسترسی به حافظههای دور‪.‬‬ ‫‪o‬‬

‫پیادهسازی تنظیمات وابستگی رشتهها برای بستن رشتهها به پردازندهها و نودهای حافظه خاص‪.‬‬ ‫‪o‬‬

‫معیارهای عملکرد ‪NUMA‬‬

‫تاخیر حافظه‪ :‬زمان صرف شده برای دسترسی به حافظه محلی نسبت به حافظه دور را اندازهگیری کنید‪.‬‬ ‫•‬

‫نرخ انتقال‪ :‬مقدار دادههای پردازششده در یک بازه زمانی مشخص برای هر دو نوع دسترسی محلی و دور را‬ ‫•‬

‫ارزیابی کنید‪.‬‬

‫استفاده از‪ : CPU‬تجزیه و تحلیل کنید که چگونه به طور مؤثر منابع ‪ CPU‬با توجه به دسترسیهای حافظه‬ ‫•‬

‫استفاده میشود‪.‬‬

‫برنامههای ‪NUMA‬‬

‫محاسبات با عملکرد باال )‪ : (HPC‬غالباً در ابررایانهها و مراکز دادهای که محاسبات بزرگ مقیاس نیاز به‬ ‫•‬

‫بهینهسازی دسترسی به حافظه دارند‪ ،‬استفاده میشود‪.‬‬

‫سیستمهای پایگاه داده‪ NUMA :‬میتواند عملکرد برنامههای پایگاه داده را که نیاز به دسترسی سریع به مجموعه‬ ‫•‬

‫دادههای بزرگ دارند‪ ،‬بهبود بخشد‪.‬‬


‫مجازیسازی )‪(Virualization‬‬
‫مقدمهای بر مجازیسازی‬

‫تعریف‪ :‬مجازیسازی تکنیکی است که اجازه میدهد چندین سیستم عامل به طور همزمان بر روی یک ماشین‬ ‫•‬

‫فیزیکی اجرا شوند‪ ،‬با ایجاد انتزاع از منابع سختافزاری‪.‬‬

‫هدف‪ :‬بهبود استفاده از منابع‪ ،‬ایزوالسیون‪ ،‬امنیت و مدیریت بارهای کاری‪.‬‬ ‫•‬

‫انواع مجازیسازی‬

‫مجازیسازی سختافزاری‪:‬‬ ‫•‬

‫شرح‪ :‬ماشینهای مجازی )‪ (VMs‬ایجاد میکند که به نظر میرسد مانند کامپیوترهای مستقل عمل‬ ‫‪o‬‬

‫میکنند و هر کدام سیستمعامل خاص خود را اجرا میکنند‪.‬‬

‫مثالها‪ :‬هایپر وایزرها (نوع ‪ ۱‬و نوع ‪.)۲‬‬ ‫‪o‬‬

‫مجازیسازی سطح سیستمعامل‪:‬‬ ‫•‬

‫شرح‪ :‬نمونههای ایزولهشده در فضای کاربری (کانتینرها) از همان هسته سیستمعامل استفاده میکنند‪.‬‬ ‫‪o‬‬

‫مثالها‪ :‬داکر‪ LXC) ،‬کانتینرهای لینوکس(‪.‬‬ ‫‪o‬‬

‫مجازیسازی برنامه‪:‬‬ ‫•‬

‫شرح‪ :‬برنامهها در محیطهای ایزوله اجرا میشوند که به آنها اجازه میدهد مستقل از سیستمعامل‬ ‫‪o‬‬

‫زیرین عمل کنند‪.‬‬

‫مثالها‪ :‬سیتریکس‪VMware ThinApp. ،‬‬ ‫‪o‬‬

‫مجازیسازی ذخیرهسازی‪:‬‬ ‫•‬

‫شرح‪ :‬منابع فیزیکی ذخیرهسازی را انتزاع میکند تا نمایی منطقی واحد ایجاد کند‪.‬‬ ‫‪o‬‬

‫مثالها‪) SAN :‬شبکه ذخیرهسازی(‪) NAS ،‬ذخیرهسازی متصل به شبکه(‪.‬‬ ‫‪o‬‬

‫مجازیسازی شبکه‪:‬‬ ‫•‬

‫شرح‪ :‬منابع شبکه سختافزاری و نرمافزاری را به یک شبکه مجازی واحد ترکیب میکند‪.‬‬ ‫‪o‬‬
‫مثالها‪) VLANs :‬شبکههای محلی مجازی(‪) SDN ،‬شبکهسازی تعریفشده توسط نرمافزار(‪.‬‬ ‫‪o‬‬

‫تکنولوژیهای مجازیسازی‬

‫هایپر وایزرها‪:‬‬ ‫•‬

‫نوع‪ : (Bare-metal) ۱‬مستقیماً بر روی سختافزار اجرا میشود )مثالً ‪،VMware ESXi‬‬ ‫‪o‬‬
‫‪(Microsoft Hyper-V‬‬
‫نوع‪ : (Hosted) ۲‬بر روی یک سیستمعامل میزبان اجرا میشود )مثالً ‪،VMware Workstation‬‬ ‫‪o‬‬
‫‪.(Oracle VirtualBox‬‬
‫کانتینرها‪:‬‬ ‫•‬

‫سبک و کارآمدتر از ‪ VMs‬هستند و از هسته سیستمعامل میزبان استفاده میکنند‪.‬‬ ‫‪o‬‬

‫تکنولوژیهای مثال‪ :‬داکر‪ ،‬کوبرنتیس‪.‬‬ ‫‪o‬‬

‫ناظر ماشین مجازی )‪:(VMM‬‬ ‫•‬

‫الیهای است که اجازه میدهد چندین نمونه سیستمعامل بهطور مستقل عمل کنند و اجرای ‪ VMs‬را‬ ‫‪o‬‬

‫مدیریت میکند‪.‬‬

‫مزایای مجازیسازی‬

‫استفاده بهینه از منابع‪ :‬استفاده مؤثر از سختافزار فیزیکی با تجمیع بارهای کاری‪.‬‬ ‫•‬

‫ایزوالسیون‪ :‬ماشینهای مجازی ایزوالسیون فرآیند را فراهم میکنند و امنیت و ثبات را افزایش میدهند‪.‬‬ ‫•‬

‫قابلیت مقیاسپذیری‪ :‬آسانی افزایش یا کاهش منابع بهعنوان نیاز‪.‬‬ ‫•‬

‫بازیابی از فاجعه‪ :‬سادهسازی فرآیندهای پشتیبانگیری و بازگردانی‪.‬‬ ‫•‬

‫صرفهجویی در هزینه‪ :‬کاهش هزینههای سختافزاری از طریق تجمیع سرورها‪.‬‬ ‫•‬

‫چالشهای مجازیسازی‬

‫بار اضافی عملکرد‪ :‬مجازیسازی ممکن است باعث تأخیر به دلیل انتزاع منابع شود‪.‬‬ ‫•‬
‫پیچیدگی‪ :‬مدیریت محیطهای مجازیسازی میتواند پیچیده باشد و به مهارتهای تخصصی نیاز دارد‪.‬‬ ‫•‬

‫مجوزدهی و رعایت قوانین‪ :‬مسائل مربوط به مجوزهای نرمافزاری در محیطهای مجازی‪.‬‬ ‫•‬

‫ریسکهای امنیتی‪ :‬پتانسیل آسیبپذیریهای هایپر وایزر و حمالت متقابل ‪.VM‬‬ ‫•‬

‫مدیریت مجازیسازی‬

‫مدیریت هایپر وایزر‪ :‬ابزارهایی برای ایجاد‪ ،‬پیکربندی و مدیریت( ‪ VMs‬مثالً‪Hyper-V Manager). ، vCenter‬‬ ‫•‬

‫مدیریت کانتینر‪ :‬ابزارهایی برای مدیریت کانتینرها در مقیاس( مثالً کوبرنتیس‪Docker Swarm). ،‬‬ ‫•‬

‫مجازیسازی و سیستمهای عامل‬

‫تغییرات هسته‪ :‬برخی از تکنولوژیهای مجازیسازی به تغییراتی در هسته سیستمعامل برای پشتیبانی از‬ ‫•‬

‫مجازیسازی نیاز دارند( مثالً‪KVM).‬‬

‫درایورهای دستگاه مجازی‪VMs :‬و کانتینرها با سختافزار مجازی شده از طریق درایورهای خاص تعامل میکنند‪.‬‬ ‫•‬

‫فراخوانیهای سیستمی‪ :‬مجازیسازی اغلب شامل درک فراخوانیهای سیستمی برای مدیریت مؤثر منابع است‪.‬‬ ‫•‬

‫روندهای آینده در مجازیسازی‬

‫محاسبات بدون سرور‪ :‬مدیریت زیرساخت را انتزاع میکند و بر روی استقرار برنامهها بدون مدیریت سرورها تمرکز‬ ‫•‬

‫میکند‪.‬‬

‫محاسبات لبه‪ :‬گسترش مجازیسازی به دستگاههای لبه برای پردازش دادهها نزدیک به منبع‪.‬‬ ‫•‬

‫هوش مصنوعی و یادگیری ماشین‪ :‬بهبود تخصیص منابع و نظارت بر عملکرد در محیطهای مجازیسازی‪.‬‬ ‫•‬

‫دیمنهای سیستم )‪(System Daemons‬‬


‫در سیستمعاملها‪ ،‬دیمن )‪ (Daemon‬یک فرایند پسزمینه است که بهطور مداوم اجرا میشود و وظایف سیستم یا‬
‫برنامهها را بدون تعامل مستقیم کاربر مدیریت میکند‪ .‬دیمنها برای مدیریت خدمات سیستم‪ ،‬پردازش رویدادها و انجام‬
‫وظایف نگهداری بسیار حائز اهمیت هستند و اطمینان حاصل میکنند که خدمات مختلف همیشه برای برنامهها یا کاربران‬
‫در دسترس هستند‪.‬‬

‫ویژگیهای کلیدی دیمنها‬

‫اجرا در پسزمینه‪ :‬دیمنها در پسزمینه اجرا میشوند و از جلسات کاربری تعاملی جدا هستند‪ .‬آنها معموالً هیچ‬ ‫•‬

‫رابط کاربری ندارند‪.‬‬

‫فرایندهای بلندمدت‪ :‬آنها بهگونهای طراحی شدهاند که در زمان راهاندازی سیستم شروع شوند و تا زمان خاموشی‬ ‫•‬

‫سیستم ادامه یابند‪.‬‬

‫ارائه خدمات‪ :‬دیمن ها اغلب خدمات خاصی مانند مدیریت اتصاالت شبکه‪ ،‬پردازش وظایف چاپ یا نگهداری‬ ‫•‬

‫گزارشهای سیستم را ارائه میدهند‪.‬‬

‫قواعد نامگذاری‪ :‬بسیاری از دیمنها دارای نامهایی هستند که با حرف '‪ 'd‬خاتمه مییابند‪ ،‬مانند ‪( httpd‬برای‬ ‫•‬

‫سرور وب آپاچی) و ‪( sshd‬برای سرور ‪.)SSH‬‬

‫انواع دیمنها‬

‫‪ .1‬دیمنهای سیستم‪ :‬این دیمنها بخشی از سیستمعامل هستند و وظایف سطح سیستم را مدیریت میکنند‪.‬‬
‫نمونهها شامل‪:‬‬

‫‪ :init/systemd‬اولین فرایندی که پس از بارگذاری هسته شروع میشود و مسئول راهاندازی و‬ ‫‪o‬‬

‫مدیریت خدمات سیستم است‪.‬‬

‫‪ :cron‬دیمنی که دستورات زمانبندی شده را در فواصل مشخص اجرا میکند‪.‬‬ ‫‪o‬‬

‫‪ :syslogd‬دیمنی برای ثبت پیامهای سیستم‪.‬‬ ‫‪o‬‬

‫‪ .2‬دیمنهای کاربردی‪ :‬این دیمنها خدماتی به برنامهها ارائه میدهند‪ .‬نمونهها شامل‪:‬‬

‫‪ :mysqld‬دیمن سرور پایگاه داده ‪.MySQL‬‬ ‫‪o‬‬

‫‪ :apache2‬دیمن سرور وب آپاچی‪.‬‬ ‫‪o‬‬


‫چرخه زندگی یک دیمن‬

‫‪ .1‬راهاندازی‪ :‬دیمنها معموالً در زمان بوت سیستم راهاندازی میشوند‪ ،‬یا از طریق اسکریپتهای راهاندازی یا از طریق‬
‫یک مدیر خدمات مانند ‪.systemd‬‬

‫‪ .2‬حالت اجرایی‪ :‬پس از شروع‪ ،‬دیمن به حالت اجرایی وارد میشود‪ ،‬جایی که منتظر رویدادها یا درخواستها برای‬
‫پردازش است‪.‬‬

‫‪ .3‬پایان‪ :‬دیمنها میتوانند بهطور محترمانه (در زمان خاموشی یا راهاندازی مجدد سیستم) یا بهطور ناگهانی (اگر‬
‫کشته شوند یا خراب شوند) خاتمه یابند‪.‬‬

‫ایجاد یک دیمن‬

‫برای ایجاد یک دیمن‪ ،‬توسعهدهندگان معموالً مراحل زیر را دنبال میکنند‪:‬‬

‫‪ .1‬فرک کردن‪ :‬فرایند یک فرایند فرزند ایجاد میکند که در پسزمینه اجرا میشود و در حالی که فرایند والد خارج‬
‫میشود‪.‬‬

‫‪ .2‬رهبر جلسه‪ :‬فرایند فرزند از )(‪ setsid‬برای تبدیل شدن به رهبر جلسه استفاده میکند و از ترمینال کنترل‬
‫جدا میشود‪.‬‬

‫‪ .3‬تغییر دایرکتوری کاری‪ :‬دیمن معموالً دایرکتوری کاری خود را به ریشه )‪ (/‬تغییر میدهد تا از نگهداشتن هر‬
‫دایرکتوری در حال استفاده جلوگیری کند‪.‬‬

‫‪ .4‬هدایت توصیفگرهای فایل استاندارد‪ :‬ورودی‪ ،‬خروجی و خطای استاندارد به ‪/dev/null‬یا به فایلهای گزارش‬
‫هدایت میشوند تا از تعامل دیمن با ترمینال جلوگیری شود‪.‬‬

‫ارتباط بین فرایندها )‪(IPC‬‬

‫دیمنها معموالً از روشهای مختلف ‪ IPC‬برای ارتباط با سایر فرایندها استفاده میکنند‪:‬‬

‫سوکتها‪ :‬برای دیمنهای مبتنی بر شبکه‪ ،‬آنها بر روی پورتهای خاصی برای اتصاالت ورودی گوش میدهند‪.‬‬ ‫•‬

‫لولهها‪ :‬برای ارتباط با سایر فرایندها در همان ماشین‪.‬‬ ‫•‬

‫صفهای پیام‪ :‬برای نیازهای ارتباطی پیچیدهتر‪.‬‬ ‫•‬


‫مدیریت دیمنها‬

‫سیستمعاملها ابزارهای مختلفی برای مدیریت دیمنها فراهم میکنند‪:‬‬

‫مدیران خدمات‪ :‬ابزارهایی مانند ‪systemd‬یا ‪init.d‬برای شروع‪ ،‬متوقف کردن و راهاندازی مجدد دیمنها مدیریت‬ ‫•‬

‫میشوند‪.‬‬

‫گزارشگیری‪ :‬دیمنها معموالً فعالیتهای خود را به فایلهای گزارش سیستم ثبت میکنند که میتوانند برای‬ ‫•‬

‫عیبیابی و تحلیل عملکرد مورد استفاده قرار گیرند‪.‬‬

‫فایلهای پیکربندی‪ :‬دیمنها معموالً فایلهای پیکربندی را میخوانند که رفتار آنها را تعیین میکند‪ ،‬مانند اینکه‬ ‫•‬

‫بر روی کدام پورتهای شبکه گوش دهند یا چند وقت یکبار وظایف را انجام دهند‪.‬‬

‫مالحظات امنیتی‬

‫تفکیک امتیاز‪ :‬بسیاری از دیمنها با امتیازات کاهشیافته اجرا میشوند تا تأثیر یک نقض امنیتی را محدود کنند‪.‬‬ ‫•‬

‫بهعنوان مثال‪ ،‬یک دیمن سرور وب ممکن است بهعنوان یک کاربر غیر ریشه اجرا شود‪.‬‬

‫محصورسازی‪ :‬تکنیکهایی مانند زندانهای ‪ chroot‬یا کانتینرها میتوانند دیمنها را از بقیه سیستم جدا کنند‪.‬‬ ‫•‬

‫مثالهای رایج دیمنها‬

‫‪ :cron‬دستورات زمانبندی شده را اجرا میکند‪.‬‬ ‫•‬

‫‪ :sshd‬دسترسی به شل امن به سیستمهای از راه دور را فراهم میکند‪.‬‬ ‫•‬

‫‪ :httpd‬محتوای وب را از طریق ‪ HTTP/HTTPS‬ارائه میدهد‪.‬‬ ‫•‬

‫‪ :ntpd‬زمان سیستم را با سرورهای پروتکل زمان شبکه همگامسازی میکند‪.‬‬ ‫•‬

‫شبیهسازی )‪(Emulation‬‬
‫شبیهسازی فرآیندی است که در آن رفتار یک سیستم (سختافزار یا نرمافزار) بر روی یک سیستم دیگر تقلید میشود‪.‬‬
‫این امکان را فراهم میکند که سیستمی نرمافزار یا دستورات طراحیشده برای یک معماری متفاوت را اجرا کند‪.‬‬
‫اهداف‬

‫ایجاد سازگاری بین سیستمهایی با معماریهای متفاوت‪.‬‬ ‫•‬

‫تسهیل آزمایش نرمافزارها در پلتفرمهای مختلف‪.‬‬ ‫•‬

‫حفظ نرمافزارهای قدیمی از طریق اجرای آنها روی سختافزارهای مدرن‪.‬‬ ‫•‬

‫انواع شبیهسازی در سیستمعامل‬

‫‪ .1‬شبیهسازی سختافزاری‪:‬‬

‫شبیهسازی اجزای سختافزاری به کمک نرمافزار‪.‬‬ ‫‪o‬‬

‫مثال‪ :‬ماشینهای مجازی که محیط سختافزاری را شبیهسازی میکنند‪.‬‬ ‫‪o‬‬

‫موارد استفاده‪:‬‬ ‫‪o‬‬

‫آزمایش تنظیمات سختافزاری‪.‬‬ ‫▪‬

‫اجرای نرمافزارهای طراحیشده برای سختافزارهای قدیمی یا غیرقابل دسترس‪.‬‬ ‫▪‬

‫‪ .2‬شبیهسازی نرمافزاری‪:‬‬

‫شبیهسازی محیطهای نرمافزاری یا ‪ API‬ها‪.‬‬ ‫‪o‬‬

‫مثال‪(Wine :‬شبیهساز ویندوز) برای اجرای برنامههای ویندوز در لینوکس‪.‬‬ ‫‪o‬‬

‫موارد استفاده‪:‬‬ ‫‪o‬‬

‫آزمایش نرمافزارها در پلتفرمهای مختلف‪.‬‬ ‫▪‬

‫ارائه سازگاری با نسخههای قدیمی‪.‬‬ ‫▪‬

‫‪ .3‬شبیهسازی معماری مجموعه دستورالعملها )‪:(ISA‬‬

‫تقلید مجموعه دستورالعملهای پردازنده یک معماری روی معماری دیگر‪.‬‬ ‫‪o‬‬

‫مثال‪QEMU :‬که معماریهای مختلفی مثل ‪ ARM‬روی ‪ x86‬را شبیهسازی میکند‪.‬‬ ‫‪o‬‬

‫موارد استفاده‪:‬‬ ‫‪o‬‬


‫اشکالزدایی و آزمایش سیستمهای توکار‪.‬‬ ‫▪‬

‫اجرای برنامههای توسعهیافته برای معماریهای پردازشی متفاوت‪.‬‬ ‫▪‬

‫مفاهیم کلیدی در شبیهسازی‬

‫‪ .1‬ترجمه دودویی‪(Binary Translation):‬‬

‫تبدیل کد ماشین از یک معماری به معماری دیگر در زمان اجرا یا قبل از آن‪.‬‬ ‫‪o‬‬

‫تکنیکها‪:‬‬ ‫‪o‬‬

‫ترجمه ایستا )‪ : (Static Translation‬تبدیل کل فایل باینری پیش از اجرا‪.‬‬ ‫▪‬

‫ترجمه پویا )‪ : (Dynamic Translation‬تبدیل دستورات در زمان اجرا‪.‬‬ ‫▪‬

‫مثال ‪ :Rosetta‬در ‪ macOS‬که برنامههای ‪ x86‬را به دستورات ‪ ARM‬تبدیل میکند‪.‬‬ ‫‪o‬‬

‫‪ .2‬هزینه عملکرد )‪:(Performance Overhead‬‬

‫شبیهسازی به دلیل نیاز به تفسیر یا ترجمه دستورات‪ ،‬هزینه عملکرد دارد‪.‬‬ ‫‪o‬‬

‫راهکارهای بهینهسازی‪:‬‬ ‫‪o‬‬

‫کامپایل همزمان )‪ (JIT‬برای کاهش تأخیر در ترجمه‪.‬‬ ‫▪‬

‫ذخیره کدهای پرکاربرد‪.‬‬ ‫▪‬

‫‪ .3‬دقت در مقابل سرعت‪:‬‬

‫بین دقت در شبیهسازی سیستم اصلی و سرعت اجرای آن‪ ،‬تعادلی وجود دارد‪.‬‬ ‫‪o‬‬

‫دقت باال ممکن است به هزینه عملکرد بیشتر منجر شود‪.‬‬ ‫‪o‬‬

‫موارد استفاده از شبیهسازی در سیستمعامل‬

‫‪ .1‬اجرای نرمافزارهای چندپلتفرمی‪:‬‬

‫اجرای نرمافزار یک سیستمعامل روی سیستمعامل دیگر (مانند اجرای برنامههای اندروید روی ویندوز با‬ ‫‪o‬‬

‫استفاده از ‪.)Bluestacks‬‬
‫‪ .2‬مجازیسازی سیستم‪:‬‬

‫شبیهسازی چند سیستمعامل روی یک ماشین فیزیکی‪.‬‬ ‫‪o‬‬

‫ابزارها‪VirtualBox. ،VMware :‬‬ ‫‪o‬‬

‫‪ .3‬حفظ سیستمهای قدیمی‪:‬‬

‫اجرای نرمافزارهای قدیمی روی سیستمهای مدرن( مانند شبیهسازهای بازیهای کنسولهای قدیمی‬ ‫‪o‬‬

‫مثل ‪ NES‬یا‪PlayStation).‬‬

‫‪ .4‬توسعه و آزمایش‪:‬‬

‫آزمایش نرمافزار یا نسخههای سیستمعامل در محیط شبیهسازیشده پیش از استقرار‪.‬‬ ‫‪o‬‬

‫‪ .5‬ابزارهای آموزشی‪:‬‬

‫آموزش مفاهیم سیستمعامل یا سختافزار از طریق امکان آزمایش با سیستمهای شبیهسازیشده‪.‬‬ ‫‪o‬‬

‫ابزارها و مثالهایی از شبیهسازی‬

‫‪QEMU: .1‬‬
‫یک شبیهساز رایگان و متنباز که از شبیهسازی سختافزاری و مجازیسازی پشتیبانی میکند‪.‬‬ ‫‪o‬‬

‫ویژگیها‪:‬‬ ‫‪o‬‬

‫پشتیبانی از ترجمه دودویی پویا‪.‬‬ ‫▪‬

‫امکان شبیهسازی کل ماشینها یا فقط‪ CPU‬ها‪.‬‬ ‫▪‬

‫‪Wine: .2‬‬
‫اجرای برنامههای ویندوزی روی سیستمهای شبیه یونیکس‪.‬‬ ‫‪o‬‬

‫تمرکز بر شبیهسازی‪ API‬ها بهجای شبیهسازی کل سیستم‪.‬‬ ‫‪o‬‬

‫‪Bluestacks: .3‬‬
‫شبیهساز اندروید برای اجرای برنامههای موبایلی روی دسکتاپ‪.‬‬ ‫‪o‬‬

‫‪ .4‬شبیهسازهای سیستمهای قدیمی‪:‬‬


‫‪ :DOSBox‬شبیهسازی سیستمهای‪DOS.‬‬ ‫‪o‬‬

‫‪ :PCSX2‬شبیهسازی بازیهای‪PlayStation 2.‬‬ ‫‪o‬‬

‫چالشهای شبیهسازی‬

‫‪ .1‬گلوگاههای عملکردی‪:‬‬

‫تقاضای محاسباتی باال برای شبیهسازی در زمان واقعی‪.‬‬ ‫‪o‬‬

‫‪ .2‬مشکالت سازگاری‪:‬‬

‫همه ویژگیها یا دستورات ممکن است بهطور کامل شبیهسازی نشوند‪.‬‬ ‫‪o‬‬

‫‪ .3‬ریسکهای امنیتی‪:‬‬

‫شبیهسازی سیستمهای غیرقابلاعتماد یا اجرای نرمافزارهای قدیمی میتواند آسیبپذیریهایی ایجاد‬ ‫‪o‬‬

‫کند‪.‬‬

‫‪ .4‬پیچیدگی‪:‬‬

‫شبیهسازی دقیق محیطهای سختافزاری یا نرمافزاری پیشرفته ممکن است چالشبرانگیز باشد‪.‬‬ ‫‪o‬‬

‫تفاوت بین شبیهسازی و مجازیسازی‬

‫مجازیسازی‬ ‫شبیهسازی‬ ‫ویژگی‬


‫اشتراک منابع سختافزاری فیزیکی‪.‬‬ ‫تقلید کامل سختافزار‪/‬نرمافزار‪.‬‬ ‫تعریف‬
‫سریعتر به دلیل استفاده مستقیم از منابع‪.‬‬ ‫معموالً کندتر‪.‬‬ ‫عملکرد‬
‫اجرای چند سیستمعامل روی یک سختافزار‪.‬‬ ‫اجرای نرمافزار برای معماریهای مختلف‪.‬‬ ‫موارد استفاده‬
‫‪VirtualBox. ،VMware‬‬ ‫‪DOSBox. ،QEMU‬‬ ‫ابزارها‬

‫مزایای شبیهسازی‬

‫امکانپذیر کردن سازگاری و انعطافپذیری‪.‬‬ ‫•‬


‫مفید برای حفظ نرمافزارهای قدیمی‪.‬‬ ‫•‬

‫تسهیل توسعه و اشکالزدایی در پلتفرمهای مختلف‪.‬‬ ‫•‬

‫معایب شبیهسازی‬

‫هزینه عملکرد باال‪.‬‬ ‫•‬

‫ممکن است نتواند تمام قابلیتهای سختافزار‪/‬نرمافزار را کامالً بازتولید کند‪.‬‬ ‫•‬

‫پشتیبانی محدود از ویژگیهای مدرن در سیستمهای قدیمی‪.‬‬ ‫•‬

‫بررسی سناریوهای واقعی‬

‫‪ .1‬اجرای نرمافزارهای قدیمی‪:‬‬

‫استفاده از ‪ QEMU‬یا ‪ DOSBox‬برای اجرای برنامههای قدیمی در سیستمهای جدید‪.‬‬ ‫‪o‬‬

‫چالشها‪ :‬عملکرد و سازگاری‪.‬‬ ‫‪o‬‬

‫‪ .2‬توسعه میانمعماری‪:‬‬

‫مثال‪ :‬توسعه برنامههای ‪ ARM‬روی ماشین‪x86.‬‬ ‫‪o‬‬

‫ابزارهایی مانند ‪ QEMU‬محیط ‪ ARM‬را شبیهسازی میکنند‪.‬‬ ‫‪o‬‬

‫‪ .3‬شبیهسازهای بازی‪:‬‬

‫چالشها در شبیهسازی قابلیتهای ‪ GPU‬سیستمهای قدیمی‪.‬‬ ‫‪o‬‬

‫اسپین الک )‪(SpinLock‬‬


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

‫اسپین الک الکی است که از روش چرخش )‪ (spinning‬برای انتظار برای آزاد شدن الک استفاده میکند‪ .‬برخالف‬
‫الکهای سنتی که یک نخ را در حین انتظار به خواب میفرستند‪ ،‬یک نخ بهطور مداوم بررسی میکند (یا "چرخش"‬
‫میکند) تا ببیند آیا الک در دسترس است یا خیر‪ .‬وقتی الک در دسترس میشود‪ ،‬نخ آن را بهدست میآورد و ادامه‬
‫میدهد‪.‬‬

‫ویژگیهای اسپین الکها‬

‫چرخش فعال‪ :‬نخها بهطور فعال در انتظار میمانند و به بررسی در دسترس بودن الک میپردازند که باعث مصرف‬ ‫•‬

‫چرخههای ‪ CPU‬میشود‪.‬‬

‫دستیابی به الک‪ :‬برای بخشهای بحرانی کوتاه و با رقابت کم‪ ،‬سریع و سبک است‪.‬‬ ‫•‬

‫بدون تعویض متن‪ :‬از آنجا که نخها به خواب نمیروند‪ ،‬هیچ هزینهای مرتبط با بیدار کردن آنها وجود ندارد‪.‬‬ ‫•‬

‫پیادهسازی ساده‪ :‬معموالً با استفاده از عملیات اتمیک پیادهسازی میشود‪.‬‬ ‫•‬

‫مزایا‬

‫هزینه کم‪ :‬بهویژه برای بخشهای بحرانی کوتاه که رقابت برای الک نادر است‪ ،‬سودمند است‪.‬‬ ‫•‬

‫قابل پیشبینی‪ :‬اسپین الکها زمان اجرای قابل پیشبینی دارند زیرا نخها هیچ هزینهای برای تعویض متن‬ ‫•‬

‫نمیپردازند‪.‬‬

‫ساختار بدون الک‪ :‬میتوانند در پیادهسازی ساختارهای داده بدون الک استفاده شوند که در آن نخها بهطور‬ ‫•‬

‫مستقل عمل میکنند‪.‬‬

‫معایب‬

‫اتالف منابع ‪ : CPU‬اگر یک نخ برای مدت طوالنی در انتظار بماند‪ ،‬منابع ‪ CPU‬را هدر میدهد که میتواند‬ ‫•‬

‫توسط نخهای دیگر استفاده شود‪.‬‬


‫ اسپین الکها میتوانند‬،‫ اگر رقابت باال باشد یا بخش بحرانی طوالنی باشد‬:‫نامناسب برای زمانهای انتظار طوالنی‬ •

.‫به شدت عملکرد سیستم را کاهش دهند‬

‫ اسپین الکها به مسائل چرخش اولویت نمیپردازند که میتواند منجر به مسدود شدن کارهای‬:‫چرخش اولویت‬ •

.‫با اولویت باال توسط کارهای با اولویت پایین شود‬

‫پیادهسازی‬

‫یک پیاده سازی معمول از اسپین الک شامل استفاده از عملیات اتمیک برای اطمینان از اینکه دستیابی و رهاسازی الک‬
:‫ در اینجا یک مثال کد شبهزبان آورده شده است‬.‫بهصورت امن و بدون تداخل انجام میشود‬

using System;
using System.Threading;

public class SpinLock


{
private int _lockState = 0; // 0 means unlocked, 1 means locked

/// <summary>
/// Acquires the lock. Busy-waits until the lock is available.
/// </summary>
public void Lock()
{
while (true)
{
// Try to acquire the lock atomically
if (Interlocked.CompareExchange(ref _lockState, 1, 0) == 0)
{
// Successfully acquired the lock
return;
}

// Optionally, yield to reduce CPU usage in a busy-wait loop


Thread.Yield();
}
}

/// <summary>
/// Releases the lock.
/// </summary>
public void Unlock()
{
// Set the lock state to 0 (unlocked)
Interlocked.Exchange(ref _lockState, 0);
}
}

// Example usage
class Program
{
private static SpinLock spinLock = new SpinLock();
private static int sharedCounter = 0;

static void Main(string[] args)


{
Thread t1 = new Thread(IncrementCounter);
Thread t2 = new Thread(IncrementCounter);

t1.Start();
t2.Start();

t1.Join();
t2.Join();

Console.WriteLine($"Final Counter Value: {sharedCounter}");


}

static void IncrementCounter()


{
for (int i = 0; i < 1000; i++)
{
spinLock.Lock();
try
{
sharedCounter++;
}
finally
{
spinLock.Unlock();
}
}
}
}

‫کاربردها‬

:‫اسپین الکها معموالً در سناریوهای زیر استفاده میشوند‬

.‫ جایی که همزمانسازی در سطح پایین ضروری است‬،‫ در سیستمعاملها‬:‫برنامهنویسی هسته‬ •

.‫ موقعیتهایی که زمان انتظار پیشبینیشده کم و رقابت حداقل است‬:‫بخشهای بحرانی کوتاه‬ •

.‫ برای محافظت از ساختارهای داده مشترک زمانی که پیشتوقف غیرمجاز است‬:‫مدیران وقفه‬ •

‫انواع اسپین الکها‬


‫اسپین الک ساده‪ :‬پیادهسازی اولیه که در باال توضیح داده شده است‪.‬‬ ‫•‬

‫اسپین الک تطبیقی‪ :‬نسخهای پیشرفتهتر که در صورت رقابت باال‪ ،‬چرخش را کاهش میدهد و اگر الک بالفاصله‬ ‫•‬

‫بهدست نیاید‪ ،‬پردازنده را رها میکند و در نتیجه از اتالف چرخههای ‪ CPU‬جلوگیری میکند‪.‬‬

‫مقایسهها‬

‫اسپین الک در مقابل ‪ : mutex‬در حالی که هر دو برای همزمانسازی استفاده میشوند‪mutex ،‬ها نخ را مسدود‬ ‫•‬

‫میکنند و در صورت عدم دسترسی به الک آن را به خواب میفرستند‪ ،‬در حالی که اسپین الکها نخ را فعال نگه‬
‫میدارند‪ .‬اسپین الکها معموالً برای زمانهای انتظار کوتاه کارآمدتر هستند‪ ،‬در حالی که‪ mutex‬ها برای‬
‫زمانهای انتظار طوالنیتر بهتر عمل میکنند‪.‬‬

‫بهترین شیوهها‬

‫محدود کردن استفاده‪ :‬از اسپین الکها تنها برای بخشهای بحرانی کوتاه و بدون رقابت استفاده کنید‪.‬‬ ‫•‬

‫اجتناب از استفاده در فضای کاربر‪ :‬به دلیل اتالف‪ ، CPU‬برای برنامههای فضای کاربر بهتر است از‪ mutex‬ها یا‬ ‫•‬

‫متغیرهای شرطی استفاده شود‪.‬‬

‫ترکیب با استراتژیهای پسزمینه‪ :‬هنگام استفاده از اسپین الکها در سناریوهای با رقابت باال‪ ،‬استراتژیهای‬ ‫•‬

‫پسزمینه را برای کاهش بار ‪ CPU‬پیادهسازی کنید‪.‬‬

You might also like