کنار هم گذاشتنش: از دوبار کلیک تا برنامهی در حال اجرا
یه برنامه رو از لحظهای که روش دوبار کلیک میکنی دنبال کن، از دیسک و رم و سیستمعامل و پردازنده، تا اولین چیزی که روی صفحهت میکشه.
از کلیک تا کد توی رم
- ۱. ورودی (درس ۱۰)
دوبار کلیکت بهشکل یه وقفهی سختافزاری به پردازنده میرسه. سیستمعامل میفهمه که روی آیکون برنامه کلیک کردی.
- ۲. پیدا کردن فایل (درس ۹)
سیستم فایل اسم برنامه رو توی جدولش پیدا میکنه و میفهمه کدوم بلوکهای اساسدی نگهش داشتن.
- ۳. ساختن پردازه (درسهای ۱۰ و ۱۱)
کرنل یه پردازهی جدید با یه PID، یه جدول صفحهی خالیِ مخصوص خودش و یه فضای آدرس خصوصی میسازه.
- ۴. بارگذاری (درسهای ۷، ۹ و ۱۱)
کد ماشین و دادهی برنامه توی اون فضای آدرس قرار میگیرن. صفحهها از اساسدی به رم کپی میشن، اغلب فقط وقتی اولین بار بهشون دست زده بشه، از طریق خطای صفحه. این مرحلهی دیسک معمولاً کندترین بخش باز شدن یه برنامهست.
خودت رو امتحان کن
کدوم ترتیب برای باز شدن یه برنامه درسته؟
- ساختن پردازه، تنظیم PC روی نقطهی ورود، پیدا کردن فایل روی اساسدی، کپی کد به رم
- پیدا کردن فایل روی اساسدی، ساختن پردازه، کپی کد به رم، تنظیم PC روی نقطهی ورود
- کپی کد به رم، پیدا کردن فایل روی اساسدی، تنظیم PC روی نقطهی ورود، ساختن پردازه
- تنظیم PC روی نقطهی ورود، کپی کد به رم، ساختن پردازه، پیدا کردن فایل روی اساسدی
جواب رو ببین
پیدا کردن فایل روی اساسدی، ساختن پردازه، کپی کد به رم، تنظیم PC روی نقطهی ورود
درسته. چیزی رو که پیدا نکردی نمیتونی بار کنی، برای بار کردن یه پردازه لازم داری، و شمارندهی برنامه فقط میتونه به کدی اشاره کنه که از قبل توی حافظهست.
نقطهی ورود (Entry Point)
آدرس اولین دستور یه برنامه، که توی فایل برنامه نوشته شده. وقتی کد بار شد، کرنل شمارندهی برنامهی پردازهی جدید رو روی همین آدرس میذاره و زمانبند بهش یه برش زمانی میده (درس ۱۰). از اون لحظه همون حلقهی درس ۶ـه: واکشی، رمزگشایی، اجرا؛ رجیسترها و واحد حساب درس ۴ کد ماشین درس ۵ رو اجرا میکنن، و کشهای درس ۸ کمکم گرم میشن.
توی انیمیشن، پردازهی جدید PID 42 ـه و نقطهی ورودش 0x1000، پس پردازنده با PC = 0x1000 شروع میکنه.
رسیدن به صفحه
فراخوانی سیستمی و درایور دستگاه
یه برنامهی در حال اجرا نمیتونه خودش صفحه رو رنگ کنه؛ مثل هر پردازهی دیگه دسترسیش محدوده. برای نشون دادن یه پنجره فراخوانی سیستمی میکنه و از کرنل میخواد این کار رو بکنه. داخل کرنل، درایورهای دستگاه (Device Driver)، یعنی کدی که بلده با یه قطعهی سختافزاری خاص حرف بزنه، کار رو به تراشهی گرافیک میسپرن، و اون تبدیلش میکنه به پیکسل، که هر کدوم فقط چند بایت رنگه (درس ۲). همین مسیر برای ورودی برعکس کار میکنه: فشار یه کلید یه وقفهست، یه درایور میخونتش و کرنل اون رو به پردازهی درست میده.
یه برنامه میخواد کلمهی Hi رو نشون بده. از کرنل یه پنجره میخواد؛ درایور گرافیک و تراشهش پیکسلهایی رو که حرفها رو میسازن روشن میکنن.
خودت رو امتحان کن
یه برنامهی در حال اجرا چطور پنجرهش رو روی صفحه میآره؟
- خودش پیکسلها رو مستقیم توی تراشهی گرافیک مینویسه
- با فراخوانی سیستمی از کرنل میخواد؛ درایورهای دستگاه و سختافزار گرافیک اون رو به پیکسل تبدیل میکنن
- واحد حساب پردازنده مستقیم پیکسلها رو میکشه
- پنجره رو روی اساسدی ذخیره میکنه و صفحه از اونجا میخونتش
جواب رو ببین
با فراخوانی سیستمی از کرنل میخواد؛ درایورهای دستگاه و سختافزار گرافیک اون رو به پیکسل تبدیل میکنن
درسته. برنامهها مستقیم به سختافزار دست نمیزنن. از کرنل میخوان، و درایورهای کرنل و تراشهی گرافیک کشیدن رو انجام میدن.
قدمبهقدم ببین

دوبار کلیک بهشکل یه وقفه به سیستمعامل میرسه بالا سمت راست یه صفحهست با آیکون یه برنامه و یه نشونهی کلیک روش. یه فلش با برچسب IRQ ازش به جعبهی OS میره: دوبار کلیکت بهشکل یه وقفه به سیستمعامل میرسه. اساسدی، رم و پردازنده پایین منتظرن و هنوز درگیر نشدن.

پیدا کردن برنامه، ساختن پردازهی ۴۲، کپی کدش سیستمعامل برنامه رو توی جدول سیستم فایل پیدا میکنه و یه ردیف چشمک میزنه. بلوکها از اساسدی به رم میرن و یه جعبهی جدید، PID 42، توی رم ظاهر میشه: سیستم یه پردازهی جدید با شمارهی ۴۲ ساخته و کدش رو توی حافظه کپی کرده.

PC = 0x1000: واکشی، رمزگشایی، اجرا شروع میشه PC=0x1000 روی پردازنده ظاهر میشه: شمارندهی برنامه روی نقطهی ورود برنامه، یعنی اولین دستورش، تنظیم شده. حلقهی F، D، E از درس ۶ شروع به چرخیدن میکنه، و فلشها بین رم و پردازنده رفتوبرگشت میکنن، چون دستورها واکشی و اجرا میشن.

یه فراخوانی سیستمی، و Hi روی صفحه یه فلش با برچسب syscall از PID 42 به OS میره، بعد یکی دیگه از OS به صفحه، که روش یه پنجره با Hi ظاهر میشه. برنامه از سیستم خواست که بکشه، و اولین پنجرهش روی صفحهته.
خودت رو امتحان کن
باز شدن یه برنامهی بزرگ چند ثانیه طول میکشه. معمولاً کدوم مرحله کندترینه؟
- وقفهی دوبار کلیک
- ساختن پردازه و PIDش
- خوندن برنامه از ذخیرهسازی به رم
- تنظیم شمارندهی برنامه روی نقطهی ورود
جواب رو ببین
خوندن برنامه از ذخیرهسازی به رم
درسته. وقفه، پردازهی جدید و تنظیم PC همه کارهای سریع کرنلن. خوندن چندین مگابایت از دیسکی که حدوداً هزار برابر کندتر از رمه، جاییه که وقت میره.
بعد از اولین پنجره
- ۵. اجرا (درسهای ۴، ۵، ۶، ۸، ۱۰)
پردازه به نوبت روی یه هسته کار میکنه، کد ماشین رو واکشی، رمزگشایی و اجرا میکنه، و کشها کمکم پر میشن.
- ۶. خروجی (درس ۲)
هر بار که لازمه چیزی بکشه، فراخوانی سیستمی میکنه، و درایورها و تراشهی گرافیک اون رو به پیکسل تبدیل میکنن، هر کدوم چند بایت.
- ۷. ادامه (درس ۱۰)
بیشتر وقتها برنامه منتظره. هر فشار کلید یه وقفهست، و زمانبند هسته رو با بقیهی چیزها تقسیم میکنه.
- ۸. بستن (درس ۱۱)
وقتی میبندیش، کرنل صفحههای پردازه رو آزاد میکنه و حذفش میکنه. چیزی ازش توی رم نمیمونه، جز چیزی که خود سیستم تصمیم بگیره نگه داره.
خودت رو امتحان کن
نازنین یه ویرایشگر عکس رو میبنده و یه دقیقه بعد دوباره بازش میکنه. دفعهی دوم سریعتر باز میشه، بیشتر به این دلیل که سیستمعامل دادهی فایل برنامه رو توی رم کش کرده بود، پس لازم نبود دوباره همهش رو از اساسدی بخونه.
جواب رو ببین
درست
درسته. کندترین مرحلهی باز شدن، خوندن از ذخیرهسازیه. اگه سیستم هنوز اون داده رو توی کش دیسکش توی رم داشته باشه، باز شدن دوم بیشتر خوندنهای دیسک رو رد میکنه.
از کلید تا برنامه
- بیتها و گیتها: کلیدهایی که روشن یا خاموشن و به گیتهایی وصل شدن که میتونن جمع کنن (درسهای ۲ و ۳).
- پردازنده: رجیسترها، یه واحد حساب و یه واحد کنترل که کد ماشین رو، دستور به دستور، با واکشی، رمزگشایی، اجرا اجرا میکنن (درسهای ۴ تا ۶).
- حافظه: جعبههای شمارهدار رم، کشهایی که دادهی داغ رو نزدیک نگه میدارن، و دیسکی که بدون برق هم یادش میمونه (درسهای ۷ تا ۹).
- سیستمعامل: پردازههایی که هستهها رو تقسیم میکنن، هر کدوم با حافظهی خصوصی خودش، و برای هر کاری که به سختافزار ربط داره از کرنل میخوان (درسهای ۱۰ و ۱۱).
خودت رو امتحان کن
هر لحظه از باز شدن یه برنامه رو به بخشی که انجامش میده وصل کن
جواب رو ببین
- رسیدن دوبار کلیکت → یه وقفهی سختافزاری
- پیدا کردن بلوکهای برنامه روی اساسدی → سیستم فایل
- دادن حافظهی خصوصی به برنامهی جدید → جدول صفحهش
- دونستن اینکه اجرا از کجا شروع بشه → نقطهی ورود
- تبدیل درخواست کشیدن به پیکسل → درایور و تراشهی گرافیک
مرور درس
- دوبار کلیک بهشکل یه وقفه به سیستمعامل میرسه.
- سیستم فایل برنامه رو روی اساسدی پیدا میکنه، و کرنل یه پردازهی جدید با جدول صفحهی خودش میسازه.
- کد برنامه به رم کپی میشه، اغلب صفحه به صفحه از طریق خطای صفحه؛ این مرحلهی دیسک معمولاً کندترین بخشه.
- کرنل شمارندهی برنامه رو روی نقطهی ورود میذاره و واکشی، رمزگشایی، اجرا کار رو دست میگیره.
- برای کشیدن، برنامه فراخوانی سیستمی میکنه؛ درایورها و تراشهی گرافیک اون رو به پیکسل تبدیل میکنن.
- باز شدن دوم اغلب سریعتره، چون سیستمعامل دادهی فایل رو توی یه کش دیسک توی رم نگه داشته.