پردازهها: یه پردازنده، چند تا برنامه (Process)
با سیستمعامل و پردازه آشنا شو، و ببین زمانبند چطور یه هسته رو اونقدر سریع بین برنامهها جابهجا میکنه که انگار همه همزمان اجرا میشن.
مدیر ماجرا
سیستمعامل و هستهش
سیستمعامل (ویندوز، مکاواس، لینوکس، اندروید، iOS) برنامهایه که سختافزار رو برای همهی برنامههای دیگه مدیریت میکنه. بخش اصلیش، یعنی کرنل (Kernel)، با کنترل کامل روی دستگاه اجرا میشه. برنامهها با دسترسی محدود اجرا میشن: نمیتونن مستقیم به دیسک، شبکه یا صفحه دست بزنن. بهجاش از کرنل میخوان این کار رو براشون بکنه، و به این درخواست میگن فراخوانی سیستمی (System Call).
وقتی یه برنامهی یادداشت یه فایل رو ذخیره میکنه، خودش روی اساسدی نمینویسه. یه فراخوانی سیستمی میکنه، «این بایتها رو توی notes.txt بنویس»، و بقیهش با کرنله.
خودت رو امتحان کن
یه برنامهی موسیقی میخواد یه فایل آهنگ رو از دیسک بخونه. این کار رو چطور میکنه؟
- خودش مستقیم به اساسدی دستور میفرسته
- یه فراخوانی سیستمی میکنه و از کرنل میخواد فایل رو براش بخونه
- صبر میکنه تا کرنل خاموش بشه
- اول خودش رو توی کرنل کپی میکنه
جواب رو ببین
یه فراخوانی سیستمی میکنه و از کرنل میخواد فایل رو براش بخونه
درسته. برنامهها با دسترسی محدود اجرا میشن، پس برای هر کاری که به سختافزار ربط داره، مثل خوندن یه فایل، با یه فراخوانی سیستمی از کرنل میخوان.
پردازه (Process)
یه برنامهی در حال اجرا: کد ماشینش، حافظهی مخصوص خودش، و وضعیت ذخیرهشدهی رجیسترهاش، از جمله شمارندهی برنامهش. کرنل به هر پردازه یه شماره میده، PID (شناسهی پردازه). یه برنامه اگه دو بار باز بشه، میتونه دو تا پردازهی جدا باشه. Task Manager توی ویندوز و Activity Monitor توی مک فهرستشون رو نشون میدن، و یه کامپیوتر معمولی صدها تا ازشون داره.
یه مرورگر، یه پخشکنندهی موسیقی و یه ویرایشگر متن که با هم اجرا میشن، سه تا پردازهن، مثلاً با PIDهای ۱۰۱، ۱۰۲ و ۱۰۳.
برنامه یا پردازه؟
برنامه (Program)
یه فایل روی دیسک، پر از کد ماشین.
خودش بهتنهایی هیچ کاری نمیکنه؛ فقط اونجا نشسته.
مثال: برنامهی ویرایشگر متن توی پوشهی برنامههات.
پردازه (Process)
یه نسخهی در حال اجرای همون برنامه، بارگذاریشده توی رم، با حافظه و رجیسترهای خودش.
ویرایشگر رو دو بار باز کنی، ممکنه دو تا پردازه از یه برنامه داشته باشی.
ببندیش، پردازه از بین میره؛ فایل برنامه میمونه.
خودت رو امتحان کن
سینا دو تا پنجرهی جدا از یه ویرایشگر متن باز میکنه. هر کدوم میتونه یه پردازهی جدا باشه، با حافظهی خودش و PID خودش.
جواب رو ببین
درست
درسته. پردازه یه نسخهی در حال اجرای برنامهست، پس یه برنامه میتونه همزمان چند تا پردازه داشته باشه، هر کدوم با حافظه، رجیسترهای ذخیرهشده و PID خودش. (بعضی برنامهها ترجیح میدن همهی پنجرهها رو توی یه پردازه نگه دارن، ولی ایده همینه.)
قدمبهقدم ببین

سه تا پردازه، یه هسته سمت چپ سه تا پردازه توی صف منتظرن: P101 مرورگره، P102 پخشکنندهی موسیقی و P103 ویرایشگر، هر کدوم با یه تراشهی کوچیک که رجیسترها و شمارندهی برنامهی ذخیرهشدهش توشه. سمت راست یه هستهی خالی پردازندهست، و پایین یه خط زمان از ۰ تا ۶۰ میلیثانیه. زمانبند باید این یه هسته رو بین هر سه تقسیم کنه.

P101 یه برش ۱۰ میلیثانیهای میگیره زمانبند مرورگر، یعنی P101، رو انتخاب میکنه و میذارتش روی هسته. ده میلیثانیهی اولِ خط زمان با رنگ مرورگر پر میشه. این برش زمانیشه: چند میلیثانیه کار واقعی قبل از اینکه نوبت یکی دیگه بشه.

وقفهی تایمر: ذخیرهی P101، بارگذاری P102 یه تایمر سختافزاری یه وقفه میفرسته، که با IRQ نشون داده شده، و هسته میپره توی کرنل. کرنل رجیسترها و شمارندهی برنامهی مرورگر رو توی تراشهی P101 ذخیره میکنه، و رجیسترهای ذخیرهشدهی پخشکنندهی موسیقی رو از تراشهی P102 بار میکنه. از ۱۰ تا ۲۰ میلیثانیه، خط زمان با رنگ P102 پر میشه و موسیقی دقیقاً از همونجایی که مونده بود ادامه پیدا میکنه.

دور و دور: ۱۰۱، ۱۰۲، ۱۰۳، ۱۰۱، ۱۰۲، ۱۰۳ الگو تکرار میشه: ۱۰۱، ۱۰۲، ۱۰۳، بعد دوباره ۱۰۱، ۱۰۲، ۱۰۳، و خط زمان تا ۶۰ میلیثانیه پر میشه. یه نشانگر روش جلو میره، و هر پردازهای که زیرشه میره توی هسته. توی یه ثانیه هر پردازه دهها بار نوبت میگیره، خیلی سریعتر از اینکه تو متوجه بشی، پس انگار هر سه با هم اجرا میشن.
خودت رو امتحان کن
وقتی وقفهی تایمر مرورگر (P101) رو متوقف کرد، کرنل چی رو باید ذخیره میکرد تا مرورگر بعداً دقیقاً از همونجا ادامه بده؟
- کل فایل برنامهی مرورگر رو، که به دیسک برگردونده بشه
- رجیسترهای مرورگر، از جمله شمارندهی برنامهش
- هیچی، چون مرورگر دوباره از اولین دستورش شروع میکنه
- فقط آدرس سایتی که باز بود
جواب رو ببین
رجیسترهای مرورگر، از جمله شمارندهی برنامهش
درسته. رجیسترها و شمارندهی برنامه کل دید پردازنده از اینن که یه برنامه کجاست و چی دستشه. ذخیرهشون کنی، پردازه بعداً میتونه از وسط کارش ادامه بده. به این ذخیره و بارگذاری میگن تعویض زمینه (Context Switch).
سازوکار
وقفهها، تعویض زمینه و انتظار
وقفه (Interrupt) سیگنالیه که باعث میشه پردازنده کارش رو ول کنه و یه تکه کد از کرنل رو اجرا کنه. تایمر هر چند میلیثانیه یکی میفرسته، و زمانبند (Scheduler) اینجوری فرصت جابهجا کردن پیدا میکنه. ذخیرهی رجیسترهای یه پردازه و بار کردن رجیسترهای یکی دیگه یعنی تعویض زمینه (Context Switch)؛ یه کم وقت میبره، در حد میکروثانیه. دستگاهها هم وقفه میفرستن: فشار یه کلید یا رسیدن یه بسته از شبکه باعث میشه کرنل فوراً جواب بده. و بیشتر پردازهها بیشتر وقتها منتظرن، منتظر یه کلید، دیسک یا شبکه، پس زمانبند تا وقتی کاری نداشته باشن ازشون رد میشه.
از صدها پردازهی روی یه لپتاپ، معمولاً توی هر لحظه فقط چند تاشون واقعاً پردازنده رو لازم دارن.
خودت رو امتحان کن
هر اصطلاح رو به معنیش وصل کن
جواب رو ببین
- کرنل → بخش اصلی سیستمعامل، با کنترل کامل روی دستگاه
- پردازه → یه برنامهی در حال اجرا با حافظه و رجیسترهای ذخیرهشدهی خودش
- برش زمانی → چند میلیثانیهای که یه پردازه قبل از جابهجایی روی هسته میگیره
- تعویض زمینه → ذخیرهی رجیسترهای یه پردازه و بار کردن رجیسترهای یکی دیگه
- فراخوانی سیستمی → درخواست یه برنامه از کرنل برای انجام یه کار
چیزی که باید یادت بمونه
- یه هستهی تنها توی هر لحظه فقط یه رشته دستور اجرا میکنه؛ نوبت گرفتنِ سریعه که باعث میشه بیشتر به نظر بیاد.
- هر نوبت یه برش زمانی (Time Slice) چند میلیثانیهایه؛ یه وقفهی تایمر تمومش میکنه.
- تعویض زمینه رجیسترها و شمارندهی برنامه رو ذخیره میکنه، پس بین نوبتها هیچی گم نمیشه.
- با چند تا هسته (Core)، چند تا پردازه واقعاً توی یه لحظه اجرا میشن، و زمانبند همهی هستهها رو تقسیم میکنه.
خودت رو امتحان کن
- یه لپتاپ قدیمی با یه هسته، یه مرورگر، یه پخشکنندهی موسیقی و یه ویرایشگر رو اجرا میکنه. زمانبند به هر کدوم به نوبت حدود ۱۰ میلیثانیه میده، و همهچیز روون به نظر میرسه.
- یه لپتاپ جدیدتر با چهار هسته همون سه تا برنامه رو اجرا میکنه. هر کدوم روی هستهی خودش نشسته و بدون قطع شدن بهخاطر اون دو تای دیگه کار میکنه.
فرق واقعی این دو تا لپتاپ چیه؟
- هیچی: هر دو هر سه برنامه رو دقیقاً توی یه لحظه اجرا میکنن
- روی یه هسته برنامهها اونقدر سریع نوبت میگیرن که همزمان به نظر میان؛ روی چهار هسته واقعاً توی یه لحظه اجرا میشن
- لپتاپ تکهستهای هر بار فقط یه برنامه رو میتونه باز نگه داره
- لپتاپ چهارهستهای به سیستمعامل نیازی نداره
جواب رو ببین
روی یه هسته برنامهها اونقدر سریع نوبت میگیرن که همزمان به نظر میان؛ روی چهار هسته واقعاً توی یه لحظه اجرا میشن
دقیقاً. یه هسته یعنی نوبت گرفتن، برشهای چند میلیثانیهای، اونقدر سریع که گولت بزنه. هستهی بیشتر یعنی کار موازی واقعی، و زمانبند باز هم هستهها رو تقسیم میکنه.
مرور درس
- سیستمعامل سختافزار رو مدیریت میکنه؛ کرنلش کنترل کامل داره و برنامهها با فراخوانی سیستمی ازش چیزی میخوان.
- پردازه یه برنامهی در حال اجراست با حافظه، رجیسترهای ذخیرهشده و یه PID؛ برنامه فقط فایل روی دیسکه.
- زمانبند به هر پردازهی آماده یه برش زمانی چند میلیثانیهای روی یه هسته میده.
- یه وقفهی تایمر هر برش رو تموم میکنه؛ کرنل رجیسترهای یه پردازه رو ذخیره و رجیسترهای یکی دیگه رو بار میکنه، یعنی تعویض زمینه.
- نوبت گرفتن دهها بار در ثانیه باعث میشه برنامهها روی یه هسته همزمان به نظر بیان؛ با چند هسته واقعاً همزمانن.