وقفه‌ها

July 03, 2019

دو تا استاکر داریم. آلیس و بتی هر دو به کریس علاقه دارن و می‌خوان هر تغییری در شبکه‌های مجازی اون رو زیر نظر بگیرن تا بهش نزدیک بشن.

آلیس هر ۵ دقیقه همه شبکه‌های کریس رو چک می‌کنه تا ببینه آیا پست جدیدی گذاشته؟ آیا عکسش رو عوض کرده؟ و به طور کلی همه تغییرات رو زیر نظر می‌گیره.

بتی اما باهوش‌تره، به جای دستی چک کردن کریس، روی پروفایل‌هاش آلرت گذاشته. هر تغییری تو پروفایلش به طور اتوماتیک به نوتیفیکیشن تبدیل میشه.

اما چرا این داستان رو گفتم؟

تو ماشین‌های امروزی که همه از مدل‌سازی فان‌نیومن استفاده می‌کنن، دستورات خط به خط توی حافظه نوشته شده و پردازنده دونه دونه اون‌ها رو اجرا می‌کنه. حالا فرض کنیم پردازنده نیاز داره یک اطلاعاتی رو از خارج از محیط خودش و حافظه‌اش بگیره، مثلا ورودی کاربر رو باید چیکار کنه؟

دو راه مختلف داریم، اولی اینه که ماشین تو یک حلقه بیفته و انقدر ورودی رو بررسی کنه تا یه خبری بشه و چیزی که می‌خواد رو ببینه، یا این که بیاد از مفهوم وقفه استفاده کنه.

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

وقفه‌ها در جاهای مختلفی در برنامه‌نویسی سیستمی کاربرد دارند. یا از طریق سخت‌افزار و یا از طریق نرم‌افزار ممکنه به وجود بیان، مثال سخت‌افزاری ورودی کاربر یا اتصال دستگاه جدید هست و مثال نرم‌افزاری خطاهای اجرا، Breakpoint، یا پیام از سمت سیستم‌عامل می‌باشند.

به نظر شما کار آلیس درست‌تره یا کار بتی؟ تو پست‌های بعد بییشتر می‌نویسم.