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

Operating System

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
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
We take content rights seriously. If you suspect this is your content, claim it here.
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