حالت واقعی

حالت واقعی، همچنین حالت آدرس واقعی نیز نامیده می‌شود، حالت عملیاتی تمام پردازنده‌های سازگار با x۸۶ است. حالت واقعی با یک فضای آدرس حافظه ۲۰ بیتی (دقیقا ۱ مگابایت از حافظه آدرس دهی) و دسترسی نرم‌افزارهای نامحدود به تمام حافظه قابل آدرس دهی، آدرس‌های I / O و سخت‌افزار محیطی مشخص می‌شود. حالت واقعی هیچ پشتیبانی از حفاظت از حافظه، چند وظیفه ای، یا سطح امتیاز کد را فراهم نمی‌کند.

قبل از انتشار ۸۰۲۸۶ که حالت حفاظت را معرفی کرد، حالت واقعی تنها حالت موجود برای پردازنده‌های x۸۶ بود؛ و برای سازگاری با عقب، تمام پردازنده‌های x۸۶ در هنگام بازنشانی در حالت واقعی شروع می‌شوند، هر چند ممکن است هنگام اجرای سایر حالت‌ها، حالت واقعی را در سیستم‌های دیگر شبیه‌سازی کنید.

تاریخچه 
معماری ۲۸۶ حالت محافظت شده را معرفی کرد، که امکان حفاظت از حافظه در سخت‌افزار را فراهم می‌آورد. با این حال، با استفاده از این ویژگی‌های جدید، سیستم عامل جدیدی که به‌طور خاص برای حالت محافظتی طراحی شده بود مورد نیاز بود. از آنجا که یک مشخصه اولیه طراحی ریز پردازنده‌های x۸۶ این است که آن‌ها به‌طور کامل با نسخه‌های قبلی نرم‌افزار نوشته شده برای تمام تراشه‌های x۸۶ سازگار است، تراشه ۲۸۶ برای شروع در حالت واقعی ساخته شده بود - یعنی در این، به طوری که می‌تواند سیستم عامل‌های نوشته شده برای ۸۰۸۶ و ۸۰۸۸ را اجرا کند. از سال ۲۰۱۸، پردازنده‌های x۸۶ فعلی (از جمله پردازنده‌های x۸۶–۶۴) قادر به بوت کردن سیستم عامل‌های واقعی هستند و می‌توانند نرم‌افزارهایی را که برای تقریباً هر تراشه قبلی x۸۶ ساخته شده‌اند را بدون شبیه‌سازی یا مجازی سازی اجرا کنند.

BIOS PC که IBM معرفی کرد در حالت واقعی عمل می‌کند، همانند سیستم عامل‌های DOS (MS-DOS , DR-DOS و غیره). نسخه‌های اولیه مایکروسافت ویندوز در حالت واقعی اجرا می‌شود. ویندوز / ۳۸۶ امکان استفاده از حالت محافظت شده را فراهم کرد و این به‌طور کامل در ویندوز ۳٫۰ مورد استفاده قرار گرفت که می‌توانست در هر حالت واقعی اجرا شود یا به شیوه ویندوز / ۳۸۶ از حالت محافظت شده‌استفاده کند. ویندوز ۳٫۰ در واقع حالت‌های مختلف داشت: حالت واقعی، حالت استاندارد و حالت ارتقاء ۳۸۶، دوم نیاز به برخی از ویژگی‌های مجازی سازی پردازنده ۸۰۳۸۶ داشت و بنابراین در ۸۰۲۸۶ اجرا نمی‌شد. ویندوز ۳٫۱ پشتیبانی از حالت واقعی را حذف کرد و اولین محیط عملیاتی اصلی بود که نیاز به حداقل یک پردازنده ۸۰۲۸۶ داشت. معماری ویندوز ۹۵ یک تکامل در حال بهبود حالت ویندوز 386 Workgroup است. هیچ‌کدام از این نسخه‌ها نمی‌توانند یک سیستم عامل مدرن x۸۶ در نظر گرفته شوند، زیرا آن‌ها فقط برای عملکردهای خاص به حالت محافظت شده تبدیل شده‌اند. (یونیکس، لینوکس، OS / 2، ویندوز NT 3.x و نسخه‌های بعدی، و غیره به عنوان سیستم عامل مدرن در نظر گرفته شده‌است؛ آن‌ها CPU را در هنگام راه اندازی به حالت محافظت شده تغییر می‌دهند، هرگز به حالت واقعی بازنمی‌گردند و تمام مزایای حالت حفاظت شده در طول زمان را فراهم می‌کنند) سیستم عامل‌های ۶۴ بیتی از این تنها به عنوان مرحله ای دیگر برای رسیدن به حالت طولانی استفاده می‌کنند. شایان ذکر است که حالت محافظت شده ۸۰۲۸۶ بسیار ابتدایی تر از حالت بهبود یافته با ۸۰۳۸۶ است؛ دومی گاهی اوقات ۳۸۶ حالت حفاظت شده نامیده می‌شود و این حالتی است که سیستم عامل‌های مدرن ۳۲بیتی x۸۶ در آن اجرا می‌شود.

ظرفیت آدرس دهی 
۸۰۸۶، ۸۰۸۸و ۸۰۱۸۶ دارای یک گذرگاه آدرس ۲۰ بیتی هستند، اما در طرح تصمیم‌گیری غیرمعمول جداگانه ای اینتل تصمیم گرفت که در واقع این پردازنده‌ها آدرس‌های مؤثر را تولید کند که ۲۱ بیت قابل توجه داشته باشند. این طرح یک شماره قطعه ۱۶ بیتی چهار بیت (ایجاد یک شماره ۲۰ بیت با چهار بیت صفر کم ارزش) را قبل از اضافه کردن به یک متن ۱۶ بیتی شیفت می‌دهد. حداکثر مقدار زمانی رخ می‌دهد که هر دو بخش و افست 0xFFFF باشند، و 0xFFFF0 + 0xFFFF = 0x10FFEF تولید می‌شود. در ۸۰۸۶، ۸۰۸۸و ۸۰۱۸۶، نتیجهٔ یک آدرس مؤثر که ۲۰ بیت را سرریز می‌کند این است که آدرس «اطراف» را به انتهای صفر محدوده آدرس می‌برد، یعنی آن را به صورت مدول ۲ ^ ۲۰(۲ ^ ۲۰ = ۱۰۴۸۵۷۶ = ۰x۱۰۰۰۰۰) با این حال، ۸۰۲۸۶ دارای ۲۴ بیت آدرس و آدرس‌های مؤثر را به ۲۴ بیت حتی در حالت واقعی محاسبه می‌کند؛ بنابراین، برای بخش 0xFFFF و افست (offset) بیشتر از 0x000F ۸۰۲۸۶ در حقیقت دسترسی به ابتدای دوم مگابایت حافظه را در اختیار شما قرار می‌دهد، در حالی که ۸۰۱۸۶ و قبل از این به یک آدرس برابر [offset] -0x10 که در شروع اولین مگابایت است دسترسی پیدا می‌کند. (توجه داشته باشید که در ۸۰۱۸۶ و قبل از آن، اولین kibibyte فضای آدرس، با شروع از آدرس ۰، محل دائمی، مکان ثابت جدول بردار وقفه است) بنابراین، مقدار واقعی حافظه توسط پردازنده‌های ۸۰۲۸۶ و بعد x۸۶ در حالت واقعی ۱ MiB + ۶۴ KiB - ۱۶ B = ۱۱۱۴۰۹۶ B می‌باشد.

خط A20 
برخی از برنامه‌های پیش از ۸۰۲۸۶ به منظور استفاده از رفتار آدرس دهی حافظه (مدول) طراحی شده‌اند، بنابراین ۸۰۲۸۶ مشکل سازگاری با نسخه‌های قبلی را ارائه می‌دهد. مجبور کردن ۲۱ خط آدرس (سیگنال منطقی واقعی خارج از تراشه می‌آید) به پایین منطق، نشان دهنده یک صفر است، در نتیجه یک اثر modulo-۲^ ۲۰ برای مطابقت ریاضی آدرس پردازنده‌های قبلی، اما ۸۰۲۸۶ هیچ ظرفیت داخلی برای انجام این کار ندارد. هنگامی که IBM از ۸۰۲۸۶ در IBM PC / AT استفاده کرد، آن‌ها این مشکل را با استفاده از یک دروازه قابل تنظیم برای فعال یا غیرفعال کردن خط صفر A۲۰، بین پین A۲۰ در ۸۰۲۸۶ و گذرگاه سیستم، حل کردند. این به Gate-A۲۰ (دروازه A۲۰) شناخته شده‌است و هنوز هم در چیپ ست‌های PC تا به امروز اجرا می‌شود. اکثر نسخه‌های HIMEM.SYS مموری درایور(memory driver) گسترده برای IBM- / MS-DOS پس از بارگذاری پیام نمایش داده می‌شود که آن‌ها یک "A20 handler" که یک قطعه نرم‌افزاری برای کنترل Gate-A۲۰ و هماهنگ‌کردن آن با نیازهای برنامه‌ها را نصب کرده‌اند. در حالت محافظت شده خط A۲۰ باید فعال شود، یا دیگر خطاهای آدرس دهی فیزیکی رخ خواهد داد، احتمالاً منجر به سقوط سیستم می‌شود.

تبدیل به حالت واقعی 
اینتل حالت حفاظت شده را به خانواده x۸۶ معرفی کرد با این هدف که سیستم عامل‌هایی که از آن استفاده می‌کنند، به‌طور کامل در حالت جدید اجرا می‌شوند و تمام برنامه‌های تحت سیستم عامل محافظت شده در حالت محافظت شده نیز اجرا خواهند شد. به دلیل تفاوت‌های قابل توجهی بین حالت واقعی و حتی حالت محدود محافظت شده ۲۸۶، برنامه‌های نوشته شده برای حالت واقعی نمی‌توانند در حالت محافظت شده بدون بازنویسی اجرا شوند؛ بنابراین، با پایه گسترده‌ای از برنامه‌های موجود در حالت واقعی که کاربران وابسته به آن هستند، رها کردن حالت واقعی مشکلاتی را برای صنعت ایجاد می‌کند، و برنامه نویسان به دنبال راهی برای جابه جایی بین حالت‌ها هستند. با این حال، اینتل، با اهداف خود برای استفاده از پردازنده سازگار است، راه آسان برای تغییر حالت محافظت شده در ۸۰۲۸۶ را فراهم می‌کند، اما راهی آسان برای بازگشت به حالت واقعی وجود ندارد. قبل از ۳۸۶ تنها راه برای تغییر حالت محافظت شده به حالت واقعی، تنظیم مجدد پردازنده بود؛ پس از بازنشانی آن همیشه در حالت واقعی شروع می‌شود تا با پردازنده‌های قبلی x۸۶ به ۸۰۸۶ سازگار باشد. بازنشانی پردازنده رم سیستم را پاک نمی‌کند، بنابراین این، در حالی که ناخوشایند و ناکارآمد است، در واقع امکان‌پذیر است. از حالت محافظت شده، وضعیت پردازنده در حافظه ذخیره می‌شود، سپس پردازنده بازنشانی می‌شود، در حالت واقعی دوباره راه اندازی می‌شود، و برخی از حالت‌های واقعی را اجرا می‌کند تا وضعیت ذخیره شده را از حافظه بازگرداند. پس از آن می‌توانید برنامه دیگر حالت واقعی را اجرا کنید تا برنامه آماده شود تا به حالت حفاظت شده بازگردد. سوئیچ به حالت واقعی از لحاظ زمان گران است، اما این روش به برنامه‌های محافظت شده امکان می‌دهد از خدماتی نظیر BIOS استفاده کند که کاملاً در حالت واقعی اجرا می‌شود (که در ابتدا برای مدل IBM Computer Personal Computer مبتنی بر ۸۰۸۸ طراحی شده‌است. (نوع دستگاه) ۵۱۵۰) این روش سوئیچینگ هم چنین توسط DPMI (تحت واقعی، غیر شبیه‌سازی شده، DOS)استفاده شده و توسعه دهنده DOS مانند DOS / 4GW برای اجازه برنامه‌های حالت حفاظت تحت DOS اجرا می‌شود؛ سیستم DPMI یا توسعه دهنده DOS به حالت واقعی برای فراخوانی DOS یا تماس BIOS سوئیچ می‌کند و سپس به برنامه بازگشتی که در حالت محافظت شده اجرا می‌شود، بازگشت می‌کند.

کاهش می‌یابد 
تغییر به سمت هسته NT باعث شد سیستم عامل به DOS برای بوت شدن کامپیوتر نیاز نداشته باشد و همچنین قادر به استفاده از آن نیست. نیاز به راه اندازی مجدد کامپیوتر در حالت واقعی MS-DOS پس از ویندوز 3.1x کاهش یافت تا زمانی که دیگر در ویندوز ME پشتیبانی نمی‌شد. تنها راه در حال حاضر برای برنامه‌های در حال اجرا DOS که نیاز به حالت واقعی از درون نسخه‌های جدیدتر ویندوز را دارند استفاده از شبیه‌سازها مانند محصولات DOSBox یا مجازی سازی x86 است.

جستارهای وابسته 
 حالت غیر واقعی
 ۸۰۳۸۶
 IA-32
 زبان مونتاژ x86
 حافظه متعارف

منابع

پیوند به بیرون 
 

پیاده‌سازی زبان برنامه‌نویسی
صفحات با ترجمه بازبینی‌نشده