Bios چیست؟
بطور کلی ios B به ورودی و خروجی مربوط می شود ، Bios شامل راه اندازها یا رابطهای نرم افزاری برای 5 ابزار سخت افزاری زیر می باشد : کنسول ( صفحه کلید و صفحه نمایش ) ، یک چاپگر عمومی ، ابزار کمکی ( پورت سری ) ، ساعت کامپیوتر و ابزار دیسک راه انداز . بخشی از Bios توسط سازندگان کامپیوتر در داخل هر کامپیوتر قرار داده می شود . این قسمت Bios بخش مقیم نام دارد که Bios Ram هم نامیده می شود چون در تراشه های حافظه فقط خواندنی قرار گرفته که در برد سیستم کامپیوتر جا می گیرد . Bios Ram به عنوان یک رابط با سخت افزار کامپیوتر عمل می کند که در آن ابزارهای سخت افزاری نصب شده و کامپیوتر را کنترل می کند ، همچنین یک رابط استاندارد شده با نرم افزار را ارائه می دهد . دومین بخش Bios غیر مقیم است که در هنگام راه اندازی کامپیوتر از روی دیسک به داخل حافظه انتقال می یابد و دستیابی تصادفی خوانده می شود . در Ms_dos این فایل io.sys نامیده می شود ؛ در Pc_dos آن IBMBIO.com نامیده می شود . علیرغم نامهای متفاوت اما هر دو یک وظیفه را انجام می دهند . این فایل صفات مخفی و سیستم را دارد و به این معناست که فایل را در لیست دایرکتوری تان نخواهید دید مگر اینکه Ms_dos ورژن 5 یا بالاتر داشته باشد و از سوئیچ /ah با فرمان Dir استفاده کنید یا از برنامه ای کمکی استفاده کنید که نام فایلهای مخفی را نشان می دهد .
سرویسهای Bios : یک رمز برنامه نویسی موفق روی خانواده های Pc در استفادة موثر از سرویسهای موجود در Bios می باشد . همان طور که گفتیم سرویسهای Bios بین سخت افزار و نرم افزارهای سطح بالاتر جای دارند که این نرم افزارها شامل زبانهای برنامه نویسی ، برنامه های کاربردی و هستة Ms_dos می باشد . سرویسهای Bios مستقیمأ با سخت افزار کامپیوتر و ابزارهای جانبی کار می کنند آنها بعضی از اساسی ترین وظایف سیستم کامپیوتر مانند مانند خواندن و نوشتن بایتهای منفرد از و به صفحه نمایش یا دیسک را انجام می دهند ، سرویسهای Ms_dos و سرویسهای برنامه هایتان را با دستیابی مستقیم به Bios بهبود بخشید در نتیجه به مجموعه واقعأ نیرومندی از ابزارها دست یافته اند و از کامپیوترتان به نحوی استفاده می کنید که IBM می خواهد آن طور باشد . به طوری که در هر مدل جدید که طراحی می شود IBM مطمئن است سرویسهای Bios آن کاملأ با اعضای دیگر خانواده سازگار هستند . تازمانیکه با استفاده از Bios کامپیوترتان را کنترل می کنید به صورت مستقیم یا غیر مستقیم از پیش آمدن هر گونه مشکل سازگاری مصون هستید . اگر Bios را کنار بگذارید و مستقیمأ به سخت افزار برنامه دهید نه اینکه فقط به مشکل می افتید بلکه شدیدأ محدودة عملکرد برنامه هایتان را محدود می کنید .
فلسفه Bios یا ( چگونگی عملکرد Bios ) : تمام سرویسهای Bios توسط وقفه هایی احضار می شوند . هر دستور عمل وقفة یک مدخل را در جدول بردار وقفه در حافظة پایین انتخاب می شود . آدرس های تمام روال های سرویس Bios در این جدول ذخیره می شود . این طرح برای برنامه این امکان را به وجود می آورد که بدون دانستن محل حافظه مشخص روال سرویس Bios ، سرویس را درخواست کند . همچنین اجازه می دهد تا سرویسها تغییر مکان دهند ، وسعت یا وفق یابند ، بدون اینکه بر برنامه ای که از سرویسها استفاده می کند اثر بگذارد . اگر چه IBM سعی کرده است محل های حافظة بعضی بخشهای Bios را ثابت نگه دارد اما درست نیست که از این آدرس ها در برنامه استفاده شود چون آنها ممکن است در آینده تغییر کنند روش استاندارد ، ارجع و معتبر تر برای احضار یک سرویس Bios این است که به جای آدرس مطلقش از وقفة آن استفاده کنید . سرویسهای Bios می تواند توسط یک کارگردان وقفة اصلی نظارت شوند اما در مقابل آنها به دو طبقه بندی موضوعی تقسیم می شوند و هر طبقه کارگردان وقفة خودش را دارد . این طرح اجازه می دهد هر کارگردان وقفه به راحتی جایگزین می شود . به عنوان مثال اگر سازندة سخت افزار ، یک صفحه نمایش تصویری کاملأ متفاوتی را ایجاد کند که تحت برنامة Bios کاملأ جدیدی عمل می نماید آنگاه سازنده باید همراه با سخت افزار ، برنامة Bios جدیدی را طراحی کند . برنامة جدید Bios می تواند در Ram به عنوان یک راه انداز قابل نصب در Rom به عنوان تراشه های Rom در یک کارت آداپتور ذخیره شود . وقتی که آدرس روال سرویس جدید در محل مناسب در جدول بردار وقفه درج شود آنگاه روال جدید بطور مؤثری با بخشی از Bios اصلی که با سخت افزار قدیمی به کار می رفت جایگزین شود . IBM با پیمانه ای کردن Bios توانسته است آن را برای بهبود و گسترش قابلیتهای کامپیوتریش راحت تر سازد .
زنجیره های ارتباطی Bios : Bios در سیستم هایی با CPU 80286 یا بالاتر تعدادی زنجیرة ارتباطی را فراهم می کند . این زنجیره های ارتباطی تحت سرویسهای وقفهh 15 پیاده سازی می شود اما برای استفاده از آنها باید یک کارگردان وقفه h15 بنویسید که فقط این سرویسها را پردازش کند و سایر درخواستهای سرویس وقفة h15 را به Bios عبور دهد . این ترتیب اجازه می دهد که مؤلفه های مختلفی از Bios در یک روش سازگار با یکدیگر و باسیستم عامل و برنامه های نوشته شده توسط کاربر ارتباط برقرار کنند . زنجیره های Bios در ابتدا جهت استفاده در سیستم عاملها یا برنامه های نوشته شده برای تکمیل سیستم عامل یا توابع Bios در نظر گرفته شدند اما Ms_dos و Dsl2 از این زنجیره های Bios استفاده نمی کنند و فقط چند برنامة کاربردی هستند که به دلائل به خصوصی از آنها استفاده می کنند.
مدیریت فایل در Bios : Bios چگونه با نیازهای یک سیستم مدیریت فایل برخورد می کند ؟ در هر دیسکت فرمت شده دو ناحیه با اهمیت بیشتر مربوط به این بحث وجود دارد . یکی از آنها جدول تخصیص فایل ( fat ) و ناحیه دیگر فهرست یا ( Dir ) است . محل این دو فضا روی دیسکت در جدول زیر مشخص شده است . Fat بلافاصله بعد از رکورد راه انداز می آید و مشاهده می شود که 4 سکتور را اشغال می کند . لکن چنین بر می آید که در واقع دو کپی از یک Fat هر یک شامل دو سکتور ، موجود می باشد و Dir بلافاصله بعد از Fat می آید و هفت سکتور را اشغال می کند . Fat دو نیاز اساسی برای یک سیستم مدیریت را برآورده می کند اولأ به ما می گوید کدام سکتور ها اشغال می شوند و کدام سکتور ها خالی هستد . ثانیأ به ما می گوید کدام سکتورهاجهت تشکیل یک فایل به هم بسته می شوند . Fat عملا پیرامون واحدی سازمان می یابد که می تواند شامل یک سکتور یا بیشتر ، بسته به نوع درایو دیسک باشد . در چگالی دو برابر استاندارد ، درایو دو طرفه ، گروهها از دو سکتور متوالی ساخته می شوند که Fat میتواند نشان دهد که کدام گروهها به هم وابسته اند . Dir چیزهای دیگر را از جمله آنکه کدام فایلها روی دیسک نگهداری می شوند ، و کدام گروه ،گروه شروع یک فایل مخصوص می باشد را نشان می دهد
( محل Fat و دایرکتوری )
رکورد راه رنداز سکتور 1
Fat ( اولین کپی ) سکتور 2
Fat ( ادامة کپی اول ) سکتور 3
Fat ( کپی دوم ) سکتور 4
سکتور فهرست 2 سکتور7
سکتور فهرست 3 سکتور 8
طرف 1 ، شیار 0
سکتور فهرست 5 سکتور 1
سکتور فهرست 6 سکتور 2
سکتور فهرست 7 سکتور 3
به روز آوری Bios : در مادربوردهای قدیمی Bios در یک Rom قرار گرفته و سیستم فقط قادر به خواندن آن می باشد . در صورت پیشرفت تکنولوژی نیاز به Bios احساس شد که بتوان در صورت نیاز آنها را تغییر داد و به روز کرد . اکثر مادربوردهای جدید این امکان را دارند یعنی Bios آنها از نوع Flash می باشد که می توان با انجام یک سری عملیات ، فایل جدیدی را در آن نوشت . مراحل انجام این کار در هر یک از مادربوردها با دیگری متفاوت است . در اینجا مراحل به روز آوری Bios در مادربوردهای A_trend مدل ATC_6150 توضیح داده می شود . این مادربوردها مجهز به یک دیسک به روز آوری Bios می باشد و در هر زمان نیز می توان نسخه جدیدی از آن تهیه کرد . روش این کار به صورت زیر است : 1 ـ سیستیم را در Dos بوت کنید . 2 ـ دیسک Update را که مخصوص به روز آوری Bios است در درایو A قرار دهید . 3 ـ مسیر کاری را به A تغییر دهید . 4 ـ برنامه به روز آوری Bios را که عمومأ Owd flash می باشد اجرا کنید . 5 ـ نام فایل به روز آوری Bios را که از جنس باینری است نوشته و Enter بزنید . 6 ـ هنگامی که پیام Do you want to save bios ? ظاهر شد اگر نمی خواهید Bios قدیمی ذخیره شود بنویسید N و Enter بزنید . 7 ـ در پاسخ به پیغام Are you sure to program ? بنویسید Y و Enter بزنید . 8 ـ مراحل را انجام دهید تا آخر کار فلاپی را از درایو خارج نکرده یا سیستم را خاموش نکنید . 9 ـ سیستسم را پس از اتمام کار خاموش کرده و اطلاعات Cmos را با استفاده از Jps پاک کنید . 10 ـ پس از روشن کردن سیستیم ، محتویات Cmos را به شکل مورد نیاز تنظیم کنید . دقت داشته باشید که هر چند استفاده از Flash Bios باعث افزایش توانایی در استفاده از سیستم می باشد اما خطر تخریب سیستم را توسط ویروس افزایش می دهد . بعضی از انواع ویروس ها مانند چرنویل قادر هستند محتویات Bios را پاک کنند در نتیجه سیستم قادر به عملکرد درست نمی باشد .
بایت وضعیت Bios : اغلب توابع Int 13h در صورت موفقیت پرچم نقلی را صفر و در صورت عدم موفقیت پرچم نقلی را یک می کنند و یک کد وضعیت به ثبات Ah بر می گرداند . Bios اطلاعاتی راجع به هر ابزار وضعیت آن در ناحیه دادة حوزه نگه می دارد . بایت وضعیت در شکل زیر نشان داده شده است که بازتابی از بیتهای ظاهر شده در ناحیه داده Bios در 40 : 41h برای ناحیه دادة دیسک درایو و در 40 : 47h برای ناحیه داده دیسک سخت می باشد . در صورت بروز خطا در عملیات دیسک ، یک ادغام مشخص برنامه ، تنظیم مجدد دیسک ( تابع 00H ) و سه مرتبه سعی مجدد در انجام عملیات می باشد . اگر هنوز خطایی وجود دارد برنامه یک پیغام را نمایش می دهد و به عنوان یک راه حل مشکل ، برای کاربر امکان تغییر دیسک را فراهم می آورد .
code Status
00H No error
01H Bad command . not not recognized by the controller
02H Adders mark no disk not found
03H Writingon protected disk attempted
04H Invailed track / sector
05H Reset operation failed
06H Diskette removed since last access
07H Draive prameters wrong
08H Direct memory access ( dma ) overrun ( data accessed too fast to enter )
09h Dma across a 64 k boundary attemped on read /write
10H Bad crc on a read encountered ( error check indicated corruted data )
20H contoroler Failed ( hardware failure )
40H Seek operation failed ( hardware failure )
80H Device failed to respond ( diskette : drive door open or no diskette ; hard Disk : time out )
AAH Drive not ready
BBH undefined error
CCH Write fault
ناحیه داده Bios : Bios ، ناحیه داده 256 بایتی خودش را در حافظه پایانی با شروع از آدرس سگمنت 40H با فیلدها یی شامل داده هایی به ترتیب بایت معکوس دستکاری می کند . این فیلدها شامل ناحیه داده درگاه سریال ، ناحیه داده درگاه موازی ، ناحیه داده تجهیزات سیستم، ناحیه داده متفرقه ، ناحیه داده حافظه ، ناحیه داده درایو دیسک ، ناحیه داده ویدئو ، ناحیه داده سیستم ، ناحیه داده دیسک سخت ، ناحیه داده مربوط به اوقات جانبی و ناحیه داده ساعت زمان حقیقی می باشد .
خارجی Rom سطح پایین سطح بالا کاربر
رابطة Bios : Dos : در ماژول سیستم ، Io.sys و Msdos.sys استفاده از Bios را سهولت می بخشد . چون این ماجولها بسیاری از پردازشهای مورد نیاز را فراهم می سازند ، عملیات Dos عمومأ ساده تر از نسخه Bios خود است و عمدتأ وابستگی کمتری به ماشین دارد . Io.sys یک رابط سطح پایین برای Bios است که خواندن داده از ابزارهای خارجی به حافظه و نوشتن داده از حافظه به ابزار خارجی را سهولت می بخشد . Msdos.sys شامل یک مدیریت فایل است و برخی سرویسها را نیز فراهم می سازد . برای مثال وقتی کاربر برنامه Int21H را تقاضا می کند ، برنامه اطلاعات را بر طبق محتویات ثباتها به Msdos.sys ارائه می دهد . برای تکمیل درخواست Msdos.sys ممکن است اطلاعات را به یک یا چند فراخوانی به Io.sys منتقل کند ، که به نوبت Bios را فرا میخواند . شکل زیر این ارتباط را نشان می دهد .
درخواست برنامه برای I/OMsdos . sysIO.sysBiosابزار
بافر صفحه کلید در محدودة داده های Bios : رویه وقفه 9 کداسکن را از صفحه کلید می گیرد و آن را در چند محل حافظه در محدوده داده های Bios ذخیره می کند . به این محل حافظه بافر صفحه کلید گفته می شود . این بافر در محدوده داده های Bios نباید با بافر صفحه کلید که سرزیری آن باعث ایجاد بوق بلندگو می شود اشتباه می شود . اگر کد اسکی وجود دارد وقفة 9 کد اسکی را نیز برای کلید در بافر صفحه کلید ذخیره می کند در غیر این صورت صفر به جای آن قرار می دهد .
بافر صفحه کلید : مجموعأ 32 بایت ( 16 کلمه ) از حافظه در محدوده دایره های Bios برای بافر صفحه کلید در نظر گرفته می شود که از آدرس 0043dh :0041eh میباشد . هر دو محل متوالی برای یک کاراکتر در نظر گرفته می شود . یکی برای کد اسکن و دیگری برای کد اسکی کاراکتر چنانچه وجود داشته باشد . دو اشاره گر به بافر صفحه کلید وجود ارد که اشاره گر سر بافر و اشاره گر دنباله بافر نام دارد .
آدرس اشاره گر ابتدای بافر آدرس اشاره گر انتهای بافر بافر صفحه کلید
41B,41A 41D,41C 41E تا 43D
( محدوده BIOS استفاده شده توسط بافر صفحه کلید )
اشاره گر دنباله بافر : آدرس های 0040 : 001ch و 0040 : 001dh حافظه ، آدرس دنبالة بافر صفحه کلید را نگه می دارند . و این به این معنی که در هر لحظه آدرسهای 0041dh , 0041ch حافظه شامل آدرسی هستند که وقفه 9 در آن آدرس ، کاراکتر بعدی را ذخیره می کند . کار وقفه 9 قرار دادن کاراکتر در بافر صفحه کلید و جلو بردن دنباله با افزودن محتوای محل 0041ch حافظه می باشد .
اشاره گر ابتدای بافر : وقفه 16h آدرس کاراکتر بعدی را از محلهای 41bh , 41ah حافظه یعنی محل اشاره گر به سر بافر بدست می آورد . به محض اینکه وقفه 16h هر کاراکتر را از بافر صفحه کلید می خواند اشاره گر سر بافر را به جلو می برد . بحث فوق می تواند به صورت زیر خلاصه شود . وقتی وقفة 9 کاراکتر را داخل بافر صفحه کلید قرار می دهند دنبالة بافر را پیش می برد و وقتی وقفه 16h کاراکتر را از بافر صفحه کلید می خواند ابتدای بافر را پیش می برد . وقتی آنها به انتهای بافر می زسند هر دو می چرخند و به این ترتیب یک حلقه 16 کلمه ای را ایجاد می کنند که ابتدای بافر به صورت مستمر و انتهای بافر را تعقیب می کند . اگر بافر صفحه کلید خالی باشد آدرس ابتدای بافر برابر با آدرس انتهای بافر می باشد . وقتی که وقفه 9 کاراکتر را داخل بافر قرار می دهد دنباله را جلو می برد و اگر بافر به وسیله وقفه 16h خوانده نشد بافر پر شده و سبب می شود که دنباله درست پشت ابتدای بافر باشد .
وقفه رخدادی است که پردازنده را وادار می سازد تا فعالیتهای جاری را متوقف کند و به اجرای وقفه مورد نظر بپردازد . اعمال روزمره ما در طول شبانه روز دستخوش وقفه های فراوان می شود . در مورد ریز پردازنده هم عملی مشابه رخ می دهد . وقفه جهت جلب توجه پردازنده رخ می دهد وقفه ممکن است مثلا جهت تحریک یک سیستم محافظتی در زمان باز شدن یک پنجره استفاده گردد در یک کامپیوتر شخصی وقفه ها جهت ثبت زمان ، خواندن از صفحه کلید ، عملیات گرداننده دیسک و دسترسی به سیستم عامل دیسک استفاده می گردند . دو نوع وقفه د ر دسترس می باشد : نرم افزاری و سخت افزاری . وقفه های سخت افزاری به وسیله تغییر سطح منطقی یکی از ورودی های وقفه پردازنده ایجاد می گردند . این ورودی ها عبارتند از NMI ( وقفه های غیر قابل پوشش ) و INTR ( در خواست وقفه ) . INTR می تواند فعال یا غیر فعال شود که این عمل به صورت نرم افزاری و به کمک اجرای دستورات STI و CLI صورت می گیرد . مفهوم این امر آن است که NMI در مکانیزم وقفه نیاز به یک لبه بالا رونده پالس ساعت داریم و نیز INTR حساس به سطح است و نیاز به سطح منطقی مثبت جهت وقفه دادن به پردازنده دارد . در هنگام فعال کردن NMI در نظر گرفته شده است اشاره می نماید . INTR در صورتیکه فعال باشد یک سیکل پذیرش وقفه را تولید می کند که به منظور خواندن شمارة بردار وقفه و یا نوع وقفه از گذرگاه داده پردازنده به کار می رود . وقفه های نرم افزاری مستقیمأ توسط برنامه ها تولید می گردند . این نوع از وقفه ها نیز Exception ( استناء ) نیز خوانده می شود بعضی از دستور العمل ها مانند INT یا Into پس از اجرا باعث بروز وقفه می شود . بقیة دستور العمل ها زمانی که شرطی خاص ارضاء شوند تولید وقفه می نمایند . به عنوان مثال Div و Idiv وقفه نوع صفر را زمانی که تقسیم بر صفر رخ می دهد تولید می کنند . اگر یک وقفة سخت افزاری و یک وقفة نرم افزاری به طور همزمان تولید شوند پردازنده در زمان برخورد چنین مواردی وقفه ها را اولویت بندی می کند . وقف های اولویت بندی شده به صورت زیر است :
Interrupet priority
Int , Into
NMI
INTR
Single _step lowest
تمام وقفه ها اعم از سخت افزاری و نرم افزاری پس از پس از اجرای یک ورودی خاص از جدول بردار وقفه پردازنده اشاره می نماید . این جدول مجموعه ای از آدرسهای 4 بایتی که دو بایت برای CS و دو بایت برای IP است می باشد که بیانگر آدرس محلی است که پردازنده بایستی جهت اجرای روال سرویس وقفه متناسب با آن به این محل جهش نماید . از آنجا که 256 نوع وقفه در دسترس می باشد بزرگی جدول بردار وقفه 1024 بایت است بلوک 1 کیلو بایتی که جهت ذخیره کردن این جدول رزرو می شود از آدرس 00000 تا 003ffh بایت است . بعضی پردازنده های اولیه به طور خودکار پس از راه اندازی مجدد اولین دستور العمل خود را از آدرس 0000 بازیابی می نمودند . پینتیوم اولین دستور خود را از محل FFFF0H واکنشی می نماید . این مطلب بیانگر آن است که ما قادریم اجرای برنامه خود را بدون دستکاری جدول بردار وقفه اجرا نماییم . ساختار جدول بردار وقفه در زیر نمایش داده شده است . بعضی از این مقادیر از پیش تعریف شده می باشد . بردار جهت انتخاب وقفه خطایی تقسیم در نظر گرفته شده است . بردار 1 در پیاده سازی عملیات تک مرحله ای استفاده می شود . بردار 2 در مواقعی که NMI فعال شود به کار گفته می شود . بردار 3 به عنوان نقطة توقف در هنگام اشکال زدایی برنامه ها کار برد دارد . بردار 4 به منظور استفاده از عملیات Into در نظر گرفته شده است . بردار 5 در مواقعی که دستور العمل Bound خبر خارج از محدوده بودن اندیسها را می دهد به کار برده می شود و بردارهای 6 تا 18 اجرای وظایف مدیریت حافظه را دارند .
بردارهای 10 ، 11، 14 در حالت حفاظت شده کاربرد دارند . جدول زیر مکانیزم بردارهای ذکر شده را نشان می دهد .
ترتیب اجرای وقفه
وقفه های نرم افزاری در حین اجرا و در آغاز کار مقادیر پرچم ها و آدرس بازگشت را که در ثباتهای IP و CS قرار دارند ذخیره می نمایند عملیاتی مشابه با این اعمال در وقفه سخت افزاری NMI که به طور خود کار وقفة نوع دو را تولید می کند ترتیب اجرای INTR در صورت فعال بودن وقفه کمی تفاوت دارد . زیرا پردازنده بایستی در ابتدا از شماره وقفه را از گذرگاه داده بخواند . زمانیکه وقفه ها توانا باشند INTR باعث می شود که پردازنده سیکل تصدیق را اجرا نماید . کلیات این پروسه به ترتیب زیر می باشد :
دریافت شمارة بردار : پردازنده شمارة وقفه را به سه طریق میتواند به دست آورد : 1ـ شمارة وقفه ممکن است در یکی از دستور عملهای INT ذکر شود 2ـ پردازنده می تواند به طور خودکار شماره را تشخیص دهد که این عمل در وقفه های INTO و NMI و خطای تقسیم قابل اجر است . 3ـ می توان شمارة وقفه را پس از دریافت INTR از گذرگاه داده خواند .
ذخیرة اطلاعات پردازنده : که پس از شناخت شمارة وقفه ، پردازنده ثبات پرچم را در پشته ذخیره می نماید . این عمل جهت نگهداری وضعیت داخلی پینتیوم در لحظه وقوع وقفه اجرا می شود .
پس از ذخیرة مقدار پرچم های پردازنده توانا ساز وقفه را پاک می نماید سپس محتوای IP و CS در لحظة وقوع وقفه در پشته ذخیره می شود .
واکنش اشاره گر جدید دستور العمل : پس از آنکه آدرس بازگشت ذخیره شده پردازنده می تواند مقدار جدید CS و IP را از جدول بردار وقفه استخراج نموده و روال سرویس وقفه را آغاز نماید . آدرس تولید شده به وسیلة شمارة وقفه جهت خواندن آدرس دو کلمه ای ISR در حافظه استفاده می شود .
وقفه های چند گانه :
در مرحلة اجرای برنامه احتمال دارد که وقفه در یک زمان تقاضای سرویس دهی از پردازنده نماید . به عنوان مثال درست در هنگامی که یک وقفه تقسیم بر صفر در هنگام اجرای یک برنامه بروز نماید NMI نیز فعال شود پردازنده نیاز به گشودن این گره در زمان تشخیص اولین وقفه دارد با توجه به این که وقفه تقسبم بر صفر اولویتی بالاتر از NMI دارد بنابراین در این مثال وقفه تقسیم بر صفر زودتر تشخیص داده می شود و پس از آن مراحل زیر اجرا خواهید شد : 1ـ تشخیص خطاهای تقسیم 2ـ ذخیره سازی 3ـ ذخیره سازی آدرس جاری IP و CS 4 ـ پاک کردن فعال ساز وقفه و پرچم ردیابی 5 ـ NMI تشخیص داده می شود 6 ـ ذخیره سازی پرچم های جدید 7 ـ ذخیره سازی آدرس بازگشت جدید 8 ـ پاک شدن توانا ساز وقفه و پرچم ردیابی 9 ـ اجرای روال سرویس وقفه NMI 10 ـ بازیابی آدرس بازگشت جدید 11 ـ بازیابی مقادیر دوم پرچم ها 12 ـ اجرای روال وقفه سرویس وقفه خطای تقسیم 13ـ بازیابی آدرس بازگشت اول 14 ـ بازیابی مجموعه اول پرچم ها 15 ـ اجرای برنامه از دستور العملی که از محل آن وقفه رخ داده است .
مسئله بسیار متداول در وقوع وقفه ها چند گانه زمانی پیش می آید که پرچم ردیابی پردازنده 1 باشد پردازنده را به حالت تک مرحله ای هدایت می کند که در این صورت پس از اتمام هر دستور العمل وقفه نوع 1 تولید خواهد شد . اگر دستور العمل جاری INT یا Into باشد دو وقفه نیاز به سرویس دهی دارد : INT یا Into و وقفة تک مرحله ای یا ( single _ step ) که اجرای تک مرحله ای و پرچم ردیابی در اشکال زدایی برنامه ها بسیار مفید می باشد .
وقفه های خاص :
در اینجا عملکرد چند وقفه که ممکن است کاربردهای زیادی داشته باشد مورد بررسی قرار می دهیم . تک مرحله ای یا ( single _ step ) : اساس کار این وقفه یک نمودن مقدار پرچم ردیابی درثبات پرچم میباشد هنگامی که پرچم ردیابی یک باشد پینتیوم وقفه نوع 1 پس از اجرای هر دستور العمل اجرا می نماید . با توجه به این که در ترتیب روال پردازش وقفه ها پس از ذخیره سازی محتوای پرچم ردیابی را پاک می نماید و این عمل موجب می شود که اجرای تک مرحله ای در طی اجرای این وقفه غیر فعال شود . با بکارگیری روال سرویس وقفه ردیابی می توان ابزاری مفید جهت اشکال زدایی برنامه طراحی می نمود . این خطایاب تک مرحله ای می تواند به نحوی طراحی شود که محتوای ثباتهای پردازنده و حالت پرچم ها و اطلاعات مفید دیگر را پس از اجرای هر دستور العمل در برنامه نشان دهد .
NMI : از آنجا که Nmi نمی تواند از طرف پردازنده نادیده گرفته شود در مواقعی که رفتارهای خارجی باید مورد توجه پردازنده قرار گیرد بسیار مفید می باشد . یکی از این وقایع خطیر در تغذیه سیستم می باشد . پردازنده در هر صورت پس از قطع جریان برق ، داده های موجود در ثباتها و پرچم خود را از دست می دهد . بنابراین هیچ امکانی جهت بازگشت به اجرای برنامه پس از وصل جریان برق وجود ندارد . یک راه جهت جلوگیری از این اتفاق و فراهم ساختن امکان بازگشت پردازنده به اجرای برنامة استفاده بافر وقفه Nmi جهت وقفه دادن به پردازنده در لحظة وقوع خطا در تغذیه می باشد . از آنجا که منبع تغذیه کامپیوتر تنها چند هزارم ثانیه پس از قطع جریان برق قادر به ثابت نگه داشتن سطح ولتاژ در سطح نرمال می باشد . پردازنده در این زمان کوتاه بایستی فقط به اجرای برنامه های حیاتی خود بپردازد . تصور یک سیستم کنید حجم محدودی از حافظة دائمی دارد . این نوع حافظه داده های خود را پس از قطع برق نیز حفظ می کند و مانند یک Ram در هنگام وصل بودن جریان برق عمل می کند . بنابراین در هنگام وقوع خطا در جریان برق Isr مربوط به وقفة Nmi بایستی محتوای همة ثباتهای پردازنده را در حافظه دائمی ذخیره نماید . این مقادیر پس از وصل شدن جریان برق مجددأ بازیابی می شود در این صورت بدون از دست دادن اطلاعات خطای فوق را ترمیم نماییم .
نقطة توقف یا (break point ) : این وقفه یک وقفة نوع 3 می باشد ، ولی در یک بایت کد می شود که این عمل قابلیت کاربرد آن را بالا می برد . نقطة توقف به طریق زیر به اشکال زدایی در برنامه ها کمک می نماید . در برنامه ای که در حال اشکال زدایی می باشد اولین بایت یکی از دستور العمل های آن با کد نقطة توقف تعویض می گردد . هنگامی که پردازنده به این دستور العمل ها رسید وقفة نوع 3 را تولید می نماید . Isr مربوط به نقطه توقف مشابه با Isr و ردیابی می باشد و بایستی که قادر باشد که محتوی ثباتهای پردازنده و آدرس محلی که در آن محل نقطه توقف رخ داده است نشان دهد . قبل از انکه نقطه توقف به پایان برسد بایستی بایت جایگزین شده را به مقدار اصلی ان تبدیل نماید .
Intr : تا زمانیکه پرچم توانا ساز وقفه 1 نباشد هیچ وقفه ای به وسیلة Intr تولید نخواهد شد . این عمل را می توان به کمک استفاده از دستور العمل Sti انجام داد . Intr بایستی تا زمان نمونه برداری پردازنده از آن فعال باقی بماند . بر خلاف Nmi که نیاز تنها به یک لبة بالا رونده داشت بنابراین لازم است که در هنگام استفاده از Intr به آن اجازه داده شود فقط تا زمان آغاز سیکل تصدیق وقفه از طرف پردازنده در حال فعال باقی بماند . مدار خارجی وقفه می تواند سیکل تصدیق وقفه را به کمک برسی حالت سیگنالهای کنترلی پینتیوم تشخیص دهد . هنگامی که سیگنالهای M/IO ( حافظه / ورودی ـ خروجی ) ، D/C ( داده /کد ) ، W/R ( خواندن / نوشتن ) همچنین سیگنالهای ADS نیز صفر باشد تصور پینتیوم آن است که سیکل گذرگاه فعلی یک سیکل تصدیق واقعه می باشد .
روالهای سرویس وقفه :
روال سرویس وقفه متشکل از مجموعه کدهایی باشد که وظیفه آن اجرای وقفه های خاص می باشد . Isr مربوط به خطای تقسیم بطور یقین با Isr طراحی شده جهت بکارگیری نقطة توقف و یا Nmi متفاوت است . هنگامی که یک وقفه رخ می دهد پینتیوم مقدار پرچمها و آدرس بازگشت را قبل از آدرس دهی Isr به وسیلة بردارها در پشته ذخیره می نماید نیز Isr داده های موجود در ثباتها را حین پردازش وقفه تغییر می دهد . از آنجا که هدف آن است که پس از اتمام سرویس دهی به وقفه اجرای برنامه را از همان محل که وقفه در آنجا رخ داده است آغاز کنیم لازم است که تمامی داده های مورد نیاز در برنامه حفظ گردند تا در برنامه نویسی و اجرای آن خللی حاصل نیاید . شکل زیر نحوة اجرای عملیات ذخیرة اطلاعات حیاتی را نشان می دهد .
پالس ساعت NMI : این روال ساده جهت نگه داری زمان به صورت هوشمند است . در این کاربرد روی Nmi پردازنده به منبع ساعت با فرکانس 60 مگاهرتز متصل شده است . بنابراین به پینتیوم در هر ثانیه 60 مرتبه وقفه داده می شود . وظیفة روال سرویس وقفة nmitime کاهش یک شمارنده تا زمان صفر شدن و سپس از آن فراخوانی روال از نوع far و Onesec می باشد . بنابراین Onesec در هر ثانیه یکبار فراخوانده می شود . شمارنده پس از دریافت هر سیگنال Nmi یکبار کاهش می یابد . دستور Count DB 60 جهت قرار دادن مقدار 60 در شمارنده مورد نیاز است که این عمل هر بار که شمارنده صفر می شود صورت می گیرد . همچنین نرم افزار تنظیم کنندة اولیه باید مقدار 60 را در Count و نیز آدرس Isr را در جدول بردار وقفه قرار دهد .
روال مراقبت ازخطای تقسیم : این روال جهت مراقبت وقوع تقسیم بر صفر به کار می رود از آنجا که ثباتهای AX و DX ممکن است به عنوان نتیجه ای از تقسیم بر صفر تعریف نشده باشد Diverr مقدار غیر صفر را در AX و مقدار D را در DX قرار می دهد این روش تضمین کنندة آن است که تقسیم 8 یا 16 بیتی نتیجه ای غیر از صفر دارد Diverr روالی خاص به نام Dispmsg را فرا خوانی می نماید که یک پیغام خروجی متنی را روی صفحة نمایش کامپیوتر نشان دهد . این پیغام Asci بایستی با علامت « $» پایان یابد .
Isr با توابع چند گانه : این روال سرویس وقفه جهت اجرای چهار نو ع عملیات مورد استفاده قرار می گیرد . Isr به وسیلة یک دستور 2oh Snt فراخوانی می شود و ثبات Ah به منظور تشخیص این که چه عملی باید انجام شود بعد از ورود دستور Isr مورد بررسی قرار می گیرد . چنانچه Ah=0 باشد مقادیر Bl و AL با یکدیگر جمع می شوند و سپس در Al قرار می گیرند چنانچه Ah=1 باشددو ثبات از یکدیگر کم می شود ، چنانچه Ah=2 باشد ضرب دو ثبات صورت می گیرد و چنانچه ah=3 باشد تقسیم انجام خواهد شد . هر مقدار دیگری که در Ah باشد باعث می شود که دستور Isr بدون تغییر محتوای هیچ ثباتی بازگشت کند . این روش نیز هنگام نوشتن برنامه هایی که جهت عملیات مدیریت دیسک استفاده می شوند به کار می رود .
وقفه ها و استثناءهای حالت حفاظت شده :
وقفه در پاسخ به در خواست سخت افزاری روی ورودی های Intr و یا Nmi رخ می دهد و استثناء در بخشی از اجرا رخ می دهد به عنوان مثال حظای تقسیم یک استثناء هست که زمانی که دستور العمل Div و یا Idiv در مقسوم علیه صفر اجرا شوند تولید می گردد . توصیف گرهای این وقفه ها و استثناء ها به صورت زیر می باشند :
بردار صفر : حظای تقسیم . این استثناء زمانی که دستور العمل های Div یا Idiv حظای تقسیم رخ دهد تولید می گردند .
بردار 1 : استثناء اشکال زدایی . این استثناء در طول اشکال زدایی چندین کاربرد دارد که کاربرد آن در نقاط شکست تک مرحله ای ، دستور العمل داده و انتقال وظیفه می باشد .
بردار 2 : وقفه غیر قابل پوشش ( Nmi ) این وقفه در صورت اعمال لبه پایین رونده به ورودی Nmi در پنتیوم ایجاد می گردد .
بردار 3 : نقطة توقف . این دستور العمل یک بایتی را می توان جهت راه اندازی روال اشکال زدایی کمک تعویض مقدار اولین بایت دستور العمل در Ram به کار برد . Handler نقطة توقف پاسخ به این تغییر می باشد .
بردار 4 : سرریز . این دستور در زمانی که دستور العمل Into اجرا می شود . ( به همراه یک بودن پرچم سرریز ) فراخوانی می گردد .
بردار 5 : کنترل محدوده . دستور العمل Bounds زمانی که خارج از محدوده بودن یک آرایه را کشف نماید این استثناء رافراخوانی می کند .
بردار 6 : کد عمل غیر معتبر. هر کد غیر قابل تشخیص به وسیلة کد گشاء دستور العمل ، استفاده از اندازة نادرست عملوند و یا استفاده از پیشوند Lock به همراه دستور العمل نادرست باعث تولید این استثناء می گردد .
بردار 7 : وسیله جانبی در دسترس نیست . دستور العمل Esc و Wait این استثناء را تولید می کند و دو بیت ( Em و Mp ) جهت کنترل آن به کار می روند .
بردار 8 : خطاهای دوگانگی . هنگامی که دو استثناء به ترتیب رخ می دهند بعضی تلفین ها باعث ایجاد خطای دو گانگی میگردند این استثناء ها در اکثر ترتیب های سرویس دهنده از جمله خطاهای صفحه که پس از خطای یک صفحه دیگر می آید رزرو شده اند . در صورتی که در حین اجرای یک خطای دو گانگی ، یک استثناء دیگر تولید شود پردازنده وارد حالت Shat down می شود .
بردار 9 : Reserved . این بردار قبلا در حین انتقال عملوند های کمک پردازنده 387 جهت اعمال سیگنال صفحه به کار می رفت که در پنتیوم در دسترس نیست .
بردار 10 : Tss غیر معتبر. این استثناء بسته به نوع خطای استثناء زمانی که در حین انتقال وظیفة مسئله ای کشف می گردد .
بردار 11 : سگمنت حاضر نیست . این استثناء ذمانی که بیت Present در توصیف گر جاری پاک شده باشد تولید می گردد و مشخص کنندة آن است که سگمنت در حافظه وجود ندارد و بایستی مجددأ از دیسک به حافظه آورده شود و در پیاده سازی سیستم های مجازی مفید است .
بردار 12 : خطای پشته . دستور العمل که از Ss استفاده می نماید و یا از Bp جهت مراجعه به حافظه استفاده می کنند نیز در صورت رسیدن به حرف های تولید کنندة خطا ی پشته می نمایند . همچنین خطای پشته زمانی که بیت Present یک توصیف گر جدید در Ss پاک شود ایجاد می گردد .
بردار 13 : حفاظت عمومی . این استثناء ممکن است در بسیاری از وضعیتهای زیر رخ دهد :
1ـ تجاوز از محدودة سگمنت 2ـ خواندن از یک سگمنت کد 3ـ نوشتن در سگمنت داده 4ـ باردهی ثبات سگمنت با انتخاب گر سگمنت نادرست 5 ـ انتقال وضعیت به وظیفه مشمول 6 ـ تجاوز از اولویت 7 ـ تجاوز از طول مجاز دستور العمل 8 ـ بار دهی Cr0 با تلفیق ناصحیح Pe/ Pg 9 ـ استفاده از Handler نادرست وقفه در هنگام خروج از حالت 8086 مجازی
بردار 14 : خطای صفحه . استثناء خطا زمانی رخ می دهد که پردازنده قصد دسترسی به صفحه دارد که در حافظه اصلی نیست . همچنین زمانی که سطح اولویت صفحه نادرست باشد نیز ممکن است زخ دهد .
بردار 16 : خطای ممیز شناور . این استثناء زمانی که بیت Ne و Cr0 یک بوده و دستور العملی در Fpu با خطا مواجه شود رخ می دهد .
بردار 17 : کنترل صفحه بندی . این استثناء زمانی که عملوند حافظه بزرگتر از یک بایت از آدرس فرد آغاز گردد و یا زمانی که آدرس مضرب صحیحی از 2 ، 4، یا 8 یا ... نباشد رخ می دهد .
بردار 18 : کنترل ماشین . این استثناء ممکن است وجود داشته باشد و یا موجود نباشد که این امر متکی بر مدل Cpu دارد .
وقفه های (32 تا 255 ) وقفه های غیر قابل پوشش نامیده میشوند . این وقفه ها ممکن است به طور داخلی و به صورت نرم افزاری به کمک دستور العمل های 255 تا 32 int تولید شوند و یا به طور خارجی به کمک یک شماره بردار 8 بیتی که در سخت افزار INTR پیش بینی شده است ایجاد گردند که میتوان این وقفه های سخت افزاری را ناتوان ساخت .
vector Descriptin Error code
2 Nmi interrupt No
3 Breakpoint No
4 Overflow No
5 Bounds check No
6 Invailid opcode No
10 Invalid tss Yes
11 Segment not present Yes
12 Stack fault Yes
13 General protection Yes
14 Page fault Yes
16 Floating - point error No
17 Aligment check Yes
18 Machine check Depend on cpu model
19- 31 Reserved ---
32- 255 Maskable interrupts No
وقفه ها و ثبات پرچم :
دو بیت از ثبا ت نشان مربوط به وقفه است . بیت نهم If ( نشان فعال کنندة وقفه ) ، بیت هشتم یا Tf ( نشان تک مر حله ای ) به اضافه Of ( نشان سرریزی ) می تواند توسط وقفه استفاده شوند . نشان وقفه برای غیر فعال کردن هر وقفه سخت افزاری که ممکن است از طریق پایه Intr رخ دهد به کار می رود . اگر If=0 باشد همة وقفه های سخت افزاری که از طریق پایه Intr فعال می شوند در نظر گرفته نمی شوند . این نشان روی وقفه هایی که توسط پایة Nmi یا دستور Intnn فعال می شوند تأثیر ندارد . دستور Cli نشان وقفة ( If ) را صفر می کند که برای اجازة وقوع مجدد وقفه باید نشان If توسط دستور Sti برابر یک گردد .
CF U PF U AF U ZF SF TF IF DF OF R R R R : R رزرو شده : SF نشان علامت : U تعریف نشده : ZF نشان صفر : OF نشان سرریزی : AF نشان رقم نقلی کمکی : DF نشان جهت : PF نشان پریتی : IF نشان وقفه : CF نشان رقم نقلی : TF نشان تک مرحله ای
پردازش وقفه ها :
وقتی پردازنده 8086 هر وقفه ای را چه نرم افزاری و چه سخت افزاری پردازش می کند مراحل زیر انجام می شود :
1 ـ ثبات نشان را داخل پشته منتقل می کند و ثبات Sp را دو عدد کاهش می دهد زیرا ثبات نشان یک ثبات دو بایتی است .
2 ـ نشان فعال کنندة وقفه و نشان تک مرحله ای هر دو پاک می شوند ( If=0, Tf=0 ) ، این عمل باعث می شود که درخواستهای وقفة بعدی از پایة Intr در نظر گرفته نشود و حالت اجرای تک مرحله ای غیر فعال گردد . وقتی پردازندة رویة سرویس وقفه را اجرا می کند ، بسته به طبیعت رویة وقفه برنامه نویس می تواند پایة Intr را به وسیلة دستور العمل Sti فعال سازد .
3 ـ ثبات Cs جاری در پشته ذخیره می شود و ثبات Sp دو عدد کاهش می یابد .
4 ـ ثبات Ip و دستور العمل جاری در پشته ذخیره می شود و ثبات Sp دو عدد کاهش می یابد . 5 ـ برای واکنش Cs وIp مر بوط به رویة سرویس به وقفه ، شماره وقفه در چهار ضرب میشود تا به آدرس فیزیکی محلی در داخل بردار وقفه که Cs وIp در آنجا نگهداری میشوند اشاره میکنند .
6 – پردازنده با Cs وIp جدید شروع به واکشی و اجرای دستورالعمل متعلق به رویه سرویس به وقفه میکند .
7 – دستورالعمل پایانی رویه سرویس به وقفه باید دستور Iret باشد تا ثباتهای Cs، Fr ,Ip را از پشته بر داشته و به پردازنده بر گرداند و پردازنده برنامة اصلی را از مکانی که متوقف شده بود ادامه دهد .
وقفه های فعال شونده با لبه و سطح :
این وقفه ها بیشتر در تراشة 8259 وابسته به نحوة برنامه ریزی ، برای فعال کردن و ورودی وقفه IP0 است که یکی حالت حساس به سطح و دیگری حالت حساس به لبه می باشد .
حالت فعال شونده با سطح ( Level trigger ) : در این حالت ، 8259 وجود ولتاژسطح یک روی ورودی های Irq را به عنوان در خواست وقفه تشخیص خواهد داد . این درخواست بر روی خط Irq باید تا زمانی که اولین پالس Inta فرستاده می شود همچنان در ولتاژ سطح یک باقی بماند . در آن موقع است که باید ولتاژ سطح یک فوراً از وروی Irq برداشته شود . اگر بعد از اینکه فرمان انتهای وقفه ( EOI ) ارسال شد ورودی در خواست وقفه همچنان در ولتاژ سطح یک باقی مانده باششد ، 8259 یک وقفة دیگر از همان درخواست خواهد کرد . بنابراین برای دوری کردن از تولید چند وقفه قبل از اینکه فرمان انتهای وقفه ارسال شود باید روی ورودی IRQ ولتاژ سطح صفر قرار گیرد .
حالت فعال شونده با لبه ( Edge Trigger ) : در این حالت نیز 8259 فقط وقتی یک پالس از ولتاژ سطح صفر به ولتاژ سطح یک روی ورودی درخواست وقفه ، 8259 در خواست وقفه را با فعال کردن INTA خواهد پذیرفت و ورودی سطح یک روی ورودی درخواست وقفه ، 8259 درخواست وقفه را با فعال کردن INTA خواهد پذیرفت و ورودی سطح یک حتی بعداز اینکه فرمان انتهای وقفه ارسال شد وقفه های بیشتری را تولید نخواهد کرد ، بنابراین طراحان احتیاجی ندارند که نگران برداشتن سریع ولتاژ سطح یک از روی ورودی درخواست شود ورودی IRQ باید به ولتاژ سطح صفر برگردانده شود . با ید توجه داشت که در هر دو حالت باید IRQ نیز در ولتاژ سطح یک باقی بماند تا بعد از پایین آمدن اولین لبة INTA که بیانگر پذیرش وقفه است به سطح صفر برگردد .
دسته بندی وقفه ها :
INT nn یک دستور 2 بایتی است که اولین بایت برای کد دستورالعمل و دومین بایت برای شمارة وقفه میباشد . این بدان معنی است که میتوان حداکثر 256 وقفه داشت . از این 256 وقفه تعدادی برای وقفه های نرم افزاری و تعدادی برای وقفه های سخت افزاری استفاده می شود . وقفه هایی Bios در 5 گروه قرار می گیرند : وقفه هایی که در ابزارهای جانبی خاص سرویس می دهند ، وقفه هایی که با سرعت بلادرنگ کار می کند ، وقفه هایی که عمل چاپ صفحه را انجام می دهند و وقفه هایی که عملیات فعال کردن Ram bios یا روال شروع به کار سیستم را انجام می دهند .