چگونه ویندوز پردازنده های چند هسته ای (CPU) را مدیریت می کند؟
هنگامی که کامپیوتر را روشن می کنید ، قبل از اینکه سیستم عامل حتی لود شود ، پردازنده ( CPU ) و مادربرد فعال می شوند . پردازنده (پردازنده چیست و چه وظیفه ای در سیستم دارد) شما اطلاعات مشخصی را در مورد ویژگی های عملکردی خود به مادربرد منتقل می کند ، و سپس از این اطلاعات برای آمادهسازی مادربرد و بوت شدن سیستم استفاده می کند.
حتما برای شما هم سوال شده است که:
چگونه ویندوز (و شاید همه سیستم عامل) از قابلیت چند هسته ای پردازنده استفاده می کند؟ از طرف دیگر ، اگر این عملکرد در سختافزار ساخته شده باشد ، چگونه هسته ها میدانند کدام برنامه ها را باید اجرا کنند و چه زمانی؟ تصور می کنم هسته های بیشتر بهتر هستند ، اما دقیقا چگونه این کار می کند؟
در علوم رایانه ، یک ترد [ thread ] به عنوان کوچکترین واحد اجرایی که توسط برنامه ریز سیستم عامل مدیریت می شود تعریف شده است. اگر می خواهید بیشتر متوجه شوید ، می توانید ترد ها را با یک مرحله در یک خط مونتاژ مقایسه کنید.
مشکل: پردازنده ها فقط می توانند یک پردازش را همزمان انجام دهند. هر فرآیند در آخر به یک موضوع نیاز دارد. چگونه عملکرد کامپیوتر را بهبود بخشیم؟
راه حل: انتخاب پردازنده هایی با سرعت ساعت سریعتر.
مدیریت پردازنده های چند هسته ای در ویندوز
برای ده ها سال ، قانون مور اعلام کرد ما قادر خواهیم بود ترانزیستورها را در یک فضای کوچکتر و کوچکتر قرار دهیم ، اما Dennard Scaling همان چیزی است که به آنها امکان می دهد با ولتاژهای پایینتر ، سرعت ساعت های بالاتر و بالاتری داشته باشند.
اگر کامپیوتر به اندازه کافی سریع کار کند ، عدم توانایی آن برای رسیدگی به بیش از یک موضوع در یک زمان بسیار کمتر می شود. در حالی که مجموعه ای از پردازش ها وجود دارد که در کمتر از کسری از ثانیه پردازش می شوند.
با سریعتر شدن سیستم ها ، توسعه دهندگان نرم افزارهای پیشرفته تری ایجاد کردند. سادهترین شکل multithreading ، که در آن سیستم عامل به جای منتظر ماندن در انتظار نتایج محاسبات ، به ترد دیگری تغییر می کند ، تا پردازش ها صورت بگیرد.
این مسئله در دهه ۱۹۸۰ اهمیت پیدا کرد ، هنگامی که پردازنده و حافظه رم شروع به جداسازی کردند و سرعت حافظه و پهنای باند هر دو بسیار کندتر از سرعت ساعت پردازند بود . به همین دلیل حافظه پنهان ارائه شده که به معنای این است که پردازنده می تواند مجموعه های کوچکی از دستورالعمل ها را برای پردازش کردن فوری در نزدیکی خود نگه دارد .
نکته مهم: هر آنچه ما تاکنون بحث کرده ایم مربوط به پردزنده های تک هسته ای است. در ادامه ، اصطلاحات multithreading و multiprocessing اغلب به صورت محاوره ای به معنای همان چیز استفاده می شود ، اما همیشه اینطور نبود. پردازنده های چند هسته ای متقارن [ Multiprocessing Symmetric ]و تردهای متقارن [ Symmetric Multithreading ] دو چیز متفاوت هستند، به عبارت ساده:
Symmetric Multithreading یا SMT :
پردازنده می تواند بیش از یک پردازش را به طور همزمان با برنامه ریزی ترد دیگری اجرا کند که می تواند از واحدهای اجرایی استفاده کند که در حال حاضر توسط ترد اول استفاده نمی شود. اینتل این فناوری را Hyper-Threading (تکنولوژی Hyper Threading چیست) را می نامد ، AMD فقط آن را SMT می نامد.
هم اکنون شرکت های AMD و Intel از تکنولوژی SMT برای تقویت عملکرد پردازنده ها استفاده می کنند. هر دو شرکت از لحاظ تاریخی آنرا به صورت استراتژیک مستقر کرده اند و آن را در برخی از محصولات ارائه می دهند اما در همه محصولات نه.
این روزها ، اکثر پردزپازنده های هر دو شرکت از فناوری SMT پشتیبانی می کنند. در سیستم های مصرف کننده ، این بدان معنی است که شما به عنوان مثال از تعداد هسته پردازنده * ۲ ترد یا ۸ هسته با ۱۶ ترد پشتیبانی می کنید.
Symmetric Multiprocessing یا SMP :
SMP = پردازنده چنده هسته متقارن. پردازنده شامل بیش از یک هسته پردازنده (یا از مادربرد چند سوکت استفاده می کند). هر هسته پردازنده فقط یک ترد را اجرا می کند. تعداد ترد هایی که می توانید در هر چرخه ساعت اجرا کنید به تعداد هسته های شما محدود می شود. به صورت ۶ هسته با ۶ ترد نوشته شده است.
چند ترد در پردازنده های تک هسته ای به این معنی است که “پردازنده چقدر سریع می تواند بین ترد ها تغییر کند” ، ولی به معنی “آیا پردازنده می تواند بیش از یک ترد را همزمان اجرا کند؟” نیست.
بهینهسازی پردازش های سیستم عامل
پردازنده کدی را که سیستم عامل برای آن ارسال می کند ، اجرا می کند ، اما سیستم عامل هیچ ارتباطی با اجرای واقعی جریان دستورالعمل ندارد، این کار توسط پردازنده داخلی صورت می گیرد. پردازنده های مدرن x86 هر دو دستورالعمل دریافت شده را دوباره تبدیل می کنند و آن دستورالعمل های x86 را به میکرو آپشن های کوچکتر مانند RISC تبدیل می کنند.
اختراع OoOE به مهندسان کمک می کند تا سطح کارایی خاصی را بدون تکیه کامل برنامه نویسان برای نوشتن کد کامل تضمین کنند. اجازه دادن به پردازنده برای ترتیب مجدد دستورالعمل های خاص خود ، حتی در یک زمینه تک هسته ای به عملکرد چند رشته ای نیز کمک می کند.
به یاد داشته باشید ، پردازنده دائماً بین پردازش ها جابجا می شود ، تا بتواند همزمان چند برنامه اجرا بماند. با این حال پردازنده هیچ برنامه ریزی خاصی را انجام نمی دهد. این کاملاً به سیستم عامل بستگی دارد.
پشتیبانی از اجرای پردازنده چند هسته ای ، به سیستم عامل نیاز دارد تا همه کارهای مدیریت حافظه و تخصیص منابع را برای جلوگیری از مشکل دار شدن سیستم عامل ، از برنامه های مختلف ، با استفاده از باند اضافی محافظت کند تا منابع پردازنده هدر نشوند.
یک پردازنده چند هسته ای مدرن دارای یک [ واحد زمانبندی اصلی یا master scheduler unit ] نیست که کار را به همه هسته ها اختصاص می دهد یا در غیر اینصورت پردازش ها را توزیع کند، این نقش سیستم عامل را دارد.
آیا می توان ویندوز را تنظیم کرد تا از هسته ها بهتر استفاده کند؟
به عنوان یک قاعده کلی ، خیر. موارد خاصی وجود دارد که در آن ویندوز برای بهرهگیری از قابلیت های داخل یک پردازنده جدید ، باید به روزرسانی شود ، اما این همیشه کاری بود که مایکروسافت مجبور بود به تنهایی انجام دهد.
پردازنده های جدید گاهی اوقات به منظور بروزرسانی سیستم عامل از ویژگی های سختافزار برای روزرسانی سیستم عامل نیاز دارند. در این حالت ، واقعاً یک گزینه دستی وجود ندارد ، مگر اینکه منظور شما نصب دستی به روزرسانی باشد.
AMD 2990WX از این قاعده مستثنی است. این پردازنده در شرایط ویندوز بسیار ضعیف عمل می کند زیرا مایکروسافت فکر نمی کند وجود یک پردازنده با بیش از یک گره دسترسی به حافظه یک نواخت [ NUMA ] را در نظر داشته باشد و از منابع 2990WX به خوبی استفاده نکند.
در پردازنده 3990X ، از آنجا که ویندوز ۱۰ گروه های پردازنده را به ۶۴ ترد محدود می کند ، نمی توانید بیش از ۵۰ درصد از منابع پردازنده 3990X را به یک پردازش مخصوص اختصاص دهید ، مگر اینکه برنامه نویسی برنامه ریزی سفارشی را اجرا کند. به همین دلیل است که در واقع پردازنده 3990X برای اکثر برنامه ها توصیه نمی شود .