پردازنده ها ، از هسته های مختلف ممکنه تشکیل شده باشن (خیلی وقته دیگه پردازنده ی تک هسته ای نداریم . امروز ، حداقل از دو هسته تشکیل شدن) که به این هسته ها ، physical core یا هسته ی فیزیکی میگن . اگه نمونه ی مثال میخوای ، مثل پردازنده ی Ryzen 3 1200 که از 4 هسته ی فیزیکی تشکیل شدش . همچنین ، مثل اغلب پردازنده های روز.
هر هسته ی فیزیکی ، میتونه یک نخ را (بصورت همزمان) پردازش کنه.بنابراین پردازنده ای که ۴ هسته ی فیزیکی داره (مثل پردازنده ی Ryzen 3 1200) ، همزمان میتونه فقط ۴ نخ را پردازش کنه.
البته ، این ، به این معنی نیست که اگه یه پروسه ای ، بصورت پیش فرض ، ۴ تا نخ را همزمان اجرا کرده باشه ، این نخ ها در ۴ هسته ی فیزیکی اجرا میشن پس بنابراین پردارشِ این ۴ نخ ، همزمان خواهد بود . در این باره (رابطه ی پروسه و نخ های اجرا شده ی در یک پروسه و همچنین نخ های اجرا شده توسط پروسه های مختلف) ، احتمالا در پست بعدی میگم.
همینطور اینکه بعضی از پردازنده ها ، هسته هاشون ، ممکنه از پردازنده ی مجازی یا همون logical core یا همون هسته ی منطقی تشکیل شده باشه که این هسته ی منطقی ، در شرایط محدودتری ، میتونن دو تا نخ (مثلا دو تا پروسه) را بصورت همزمان در هر هسته ی فیزیکی پردازش کنن .
اگه پردازنده ای ، تکنولوژی هسته ی منطقی (یا به اصطلاح ، تکنولوژی hyper threading) رو داشته باشه ، در این صورت ، هر هسته ی فیزیکی اش از دو هسته ی منطقی تشکیل میشه که هر هسته ی منطقی اش ، اگه شرایطش جور باشه ، (نه اینکه هر وقت دلش خواست) ، پردازش همزمان را انجام میده بنابراین ، هر هسته ی فیزیکی در این تکنولوژی ، اگه شرایطش جور باشه ، میتونن همزمان ۲ نخ را پردازش کنن. مثلا اگه پردازنده ی ۶ هسته ی فیزیکی با ۱۲ هسته ی منطقی باشه مثل Ryzen 5 3600 ، اگه شرایط جور باشه ، میتونه ۱۲ نخ را بصورت همزمان پردازش کنه. (البته این نوع پردازنده ها ، عموما به اشتباه ، ۶ هسته ۱۲ نخ شناخته میشن. حتی خودمم از این اصطلاح استفاده میکنم اما اگه سایت حرفه ای رو رجوع کنی ، هیچ وقت اصطلاح نخ برای پردازنده بکار نمیبره بلکه اصطلاح logical core را بکار میبره که درستش همینه) .
هسته های منطقی ، مثل هسته های فیزیکی نیستن که هر وقت که سیستم عامل ، نخ ای را به عهده شون قرار داد ، بتونا بدون هیچ مشکلی ، پردازش شون کنن . چون محدودیت دارن . محدودیت شون اینه که هر دو هسته ی منطقی (در یک هسته ی فیزیکی) ، قسمتی از حافظه ی مشترکی (شاید هم گذرگاه مشترکی) با هم دارن . حالا اینکه دقیقا چه حافظه ای از اینها مشترک هست رو باید از کسی که دستی توی معماری پردازنده یا ساختار پردازنده را میشناسه ، بپرسی (فعلا هم اینترنت بین الملل کار نمیکنه در این باره تحقیق کنم) . وقتی به قسمتی برسن که نیاز به استفاده ی همزمان از حافظه مشترک باشه ، هسته های منطقی (دو هسته ی منطقی در هر هسته) ، نمیتونن همزمان از یک حافظه بخونن یا همزمان توی اون حافظه ی مشترک ، بنویسن . بنابراین در این حالت ، یک هسته ی منطقی ، منتظر میمونه تا اون هسته ی منطقیِ دیگه ، عملیات خوندن یا نوشتن اش را انجام بده و بعد ، این هسته ی منطقی کارش را انجام بده اما در زمانی که نیاز به استفاده از حافظه ی مشترک نیست ، هر دو هسته ی منطقی ، کارشون را بصورت کاملا همزمان انجام میدن .
واسه ی همینه که تعداد هسته های فیزیکی ، مهمتر از هسته ی منطقی هستن . یعنی یه پردازنده ای که ۴ هسته ی فیزیکی داره ، قویتر از یه پردازنده ای که ۲ هسته ی فیزیکی و ۴ هسته ی منطقی داره ، عمل میکنه (بخاطر حافظه ی مشترک در هسته ی منطقی پردازنده و داستانی که گفتم) . البته به فرکانس و موارد دیگه هم بستگی داره.
این حافظه ی مشترک (در هسته های منطقی) ، احتمالا حافظه ی کش شاید باشه (دقیق نمیدونم) . چون حافظه ی رجیستری پردازنده ، عملیات اصلی را انجام میده و مشترک بودن شون ، ضربه ی سختی را به اجرای عملیات و پردازش در هسته های منطقی میزنه . حالا نمیدونم ، شاید حافظه ی رجیستری شون مشترک باشه . فعلا هم که اینترنت بین الملل وصل نیست ، جستجو کنم. از یه مطلع باید بپرسی .
درباره ی حافظه در پردازنده هم که دو نوع حافظه داریم . یکی کش و یکی هم رجیستری .
حافظه ی رجیستری که مهمترین و پر سرعت ترین حافظه در پردازنده هست ، در هر هسته ی فیزیکی ، حافظه ی رجیستری مجزایی وجود داره و عملیات های مهم پردازنده (مثل خوندن و نوشتن روی متغبیرها یا آدرس حافظه ی رم یا آدرس حافظه ی کش ای که قراره پردازنده از توی اون آدرس ، اطلاعات را بخونه یا توش بنویسه) توی این حافظه ی رجیستری ذخیره میشه .
حافظه ی رجیستری هم انواع مختلف داره که در مقاله ی زیر میتونی باهاش آشنا بشی :
https://hardware.tosinso.com/fa/arti...88%d8%aa%d8%b1
حافظه ی بعدی هم کش هست که فکر کنم نسبت به اینکه کش سطح l1 یا l2 یا l3 باشه ، میتونه بصورت اختصاصی در هر هسته ی فیزیکی ، بصورت مجزا استفاده بشه یا بصورت مشترکی برای تمام هسته های فیزیکی (کل پردازنده) استفاده بشه .
حافظه ی کش ، مثل حافظه ی رجیستری نیست که عملیات های مهم پردازنده ، بصورت مستقیم در اون ذخیره یا خونده بشه بلکه بخشی از اطلاعات رم رو که حس میکنه اخیرا بهش نیاز خواهد داشت رو توی خودش (حافظه ی کش) میریزه و اطلاعات خروجی و پردازش شده که در رجیستری ثبت شد ، در صورت نیاز ، در حافظه ی کش ذخیره میشه چون سرعت رم ، نسبت به حافظه ی کش ، خیلی پایین تره و بنابراین اگه این کار را نکنه ، پردازنده ، خیلی منتظر خوندن اطلاعات از رم میمونه . بعد هم هر هسته ی فیزیکی ، اطلاعات بسیار بسیار ضروری ای را که برای پردازش در همون لحظه احتیاج دارن را از حافظه ی کش ، به حافظه ی رجیستر مربوط به اون هسته ی فیزیکی برای پردازش ، منتقل میکنه .
در واقع ، 3 بار انتقال اطلاعات صورت میگیره . یکبار اطلاعات اساسی ای که لازم هست ، از هارد ، به حافظه ی رم منتقل میشه (چون خود هارد هم page file داره که اگه رم کم اومد ، در امتداد حافظه ی رم شناخته میشه و کار رم را انجام میده و سیستم عامل ، این page file را کنترل میکنه و اطلاعاتی که فعلا لازم نیست یا مقدار رم اگه کم باشه را در page file که در هارد هست ، ذخیره میکنه و هر وقت نیاز به این اطلاعات بود ، به حافظه ی رم منتقل میکنه) ؛ یکبار دیگه ، اطلاعات خیلی مهمتر (در همون لحظه بهش نیاز هست) ، از رم به حافظه ی کش پردازنده منتقل میشه و سر آخر که همه ی این انتقالات بخاطر اینه که اطلاعات زودتر در دسترس حافظه ی رجیستری قرار بگیره ، اطلاعاتی که دقیق در همون لحظه (شاید در همون میلی یا میکروثانیه . این میزان از زمان که گفتم ، ممکنه گاها بزرگتر هم بشه) نیاز هست ، به حافظه ی رجیستری در هر هسته ی فیزیکی منتقل میشه برای ثبت اطلاعاتی که برای پردازش نیاز هست (مثلا دو عدد را که میخواد جمع کنه ، اون دو عدد ، درون حافظه ی رجیستری ثبت میشن . پردازش که شدن ، نتیجه اش باز درون حافظه ی رجیستری ثبت میشه . چون رجیستری ، حافظه ی بسیار کوچیکی هست ، معمولا این نتیجه در اون بصورت دائم ذخیره نمیشه . فقط در این حد ذخیره میشه تا اون رو فورا در حافظه ی کش یا مخصوصا در حافظه ی رم ذخیره کنه . آدرس این حافظه از کش یا آدرس حافظه از رم که قراره این نتیجه در اونجا نوشته بشه هم در رجیستری ذخیره میشه) .
بنابراین ، هر وقت ، اگه حافظه ی رجیستری ، منتظر خوندن (یا نوشتن) اطلاعات از حافظه ی حتی کش یا مخصوصا رم بشه ، اون هسته ی فیزیکی ، در اون مدت ، منتظر و بیکار خواهد بود و کاری انجام نمیده .
درباره ی حافظه ی کش که گفتم ، حالا از کسایی که دقیق تر میدونن ، سئوال کن . ولی اطلاعات کلی اش ، احتمالا همینی هه که گفتم . اینترنت هم وصل نیست که اطلاعات دقیق تر بگیرم.،
بقیه هم در پست بعدی .
Bookmarks