آدرس حافظه

از ویکیپدیا، دانشنامه آزاد
پرش به ناوبری پرش به جستجو
در رایانه ای که از حافظه مجازی استفاده می کند ، دسترسی به مکان مربوط به آدرس حافظه ممکن است سطوح مختلفی را شامل شود.

در محاسبات ، آدرس حافظه اشاره ای به یک مکان حافظه خاص است که در سطوح مختلف توسط نرم افزار و سخت افزار استفاده می شود. آدرس‌های حافظه دنباله‌ای از ارقام با طول ثابت هستند که به‌طور معمول به‌عنوان اعداد صحیح بدون علامت نمایش داده می‌شوند . چنین معنایی عددی مبتنی بر ویژگی‌های CPU است (مانند نشانگر دستورالعمل و رجیسترهای آدرس افزایشی )، و همچنین بر اساس استفاده از حافظه مانند آرایه‌ای که توسط زبان‌های برنامه‌نویسی مختلف تأیید شده است .

انواع

آدرس های فیزیکی

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

آدرس های منطقی

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

واحد تفکیک آدرس

اکثر کامپیوترهای مدرن قابل آدرس دهی بایت هستند . هر آدرس یک بایت ( هشت بیت ) از فضای ذخیره سازی را مشخص می کند. داده های بزرگتر از یک بایت ممکن است در دنباله ای از آدرس های متوالی ذخیره شوند. رایانه‌هایی با آدرس‌دهی کلمه وجود دارند که حداقل واحد ذخیره‌سازی آدرس‌پذیر دقیقاً کلمه پردازنده است . برای مثال، مینی کامپیوتر دیتا جنرال نوا ، و میکروکامپیوترهای Texas Instruments TMS9900 و National Semiconductor IMP-16 از کلمات 16 بیتی استفاده می کردند، و بسیاری از رایانه های اصلی 36 بیتی وجود داشت (مانند PDP-10). ) که از آدرس دهی کلمه 18 بیتی استفاده می کند ، نه آدرس دهی بایتی ، فضای آدرسی 2 18 کلمه 36 بیتی، تقریباً 1 مگابایت فضای ذخیره سازی را می دهد. کارایی آدرس‌دهی حافظه به اندازه بیت گذرگاه مورد استفاده برای آدرس‌ها بستگی دارد - هر چه بیت‌های بیشتری استفاده شود، آدرس‌های بیشتری در اختیار رایانه قرار می‌گیرد. به عنوان مثال، یک ماشین آدرس دهی 8 بیتی با یک گذرگاه آدرس 20 بیتی (مثلاً اینتل 8086 ) می تواند به 220 (1048576) مکان حافظه یا یک مگابایت حافظه آدرس دهی کند، در حالی که یک گذرگاه 32 بیتی (مثلاً Intel 80386 ) ) آدرس 2 32 (4,294,967,296) مکان یا 4 گیگابایتفضای آدرس در مقابل، یک ماشین آدرس دهی کلمه 36 بیتی با یک گذرگاه آدرس 18 بیتی تنها 2 18 (262،144) مکان 36 بیتی (9،437،184 بیت)، معادل 1،179،648 بایت 8 بیتی، یا 1152 KiB125، یا MiB1 را نشان می دهد . کمی بیشتر از 8086

برخی از رایانه‌های قدیمی (رایانه‌های اعشاری )، قابل آدرس دهی با رقم اعشاری بودند . به عنوان مثال، هر آدرس در حافظه هسته مغناطیسی IBM 1620 یک رقم اعشاری با کد دودویی شش بیتی را شناسایی می کند که از یک بیت برابری ، بیت پرچم و چهار بیت عددی تشکیل شده است. 1620 از آدرس های اعشاری 5 رقمی استفاده می کرد، بنابراین در تئوری بالاترین آدرس ممکن 99999 بود. در عمل، CPU از 20000 مکان حافظه پشتیبانی می‌کند و حداکثر دو واحد حافظه خارجی اختیاری می‌تواند اضافه شود که هر کدام از 20000 آدرس، در مجموع 60000 (00000-59999) پشتیبانی می‌کنند.

اندازه کلمه در مقابل اندازه آدرس

اندازه کلمه مشخصه معماری کامپیوتر است که نشان دهنده تعداد بیت هایی است که یک CPU می تواند در یک زمان پردازش کند. پردازنده‌های مدرن، از جمله سیستم‌های تعبیه‌شده ، معمولاً دارای اندازه کلمات 8، 16، 24، 32 یا 64 بیت هستند. اکثر کامپیوترهای همه منظوره فعلی از 32 یا 64 بیت استفاده می کنند. در طول تاریخ از اندازه های مختلفی استفاده شده است، از جمله 8، 9، 10، 12، 18، 24، 36، 39، 40، 48 و 60 بیت.

اغلب، زمانی که به اندازه کلمه یک رایانه مدرن اشاره می شود، اندازه فضای آدرس در آن رایانه نیز توصیف می شود. به عنوان مثال، رایانه ای که گفته می شود " 32 بیتی " است، معمولاً آدرس های حافظه 32 بیتی را نیز مجاز می کند. یک کامپیوتر 32 بیتی با آدرس دهی بایت می تواند 2 32 = 4,294,967,296 بایت حافظه یا 4 گیگابایت (GiB) آدرس دهی کند. این اجازه می دهد تا یک آدرس حافظه به طور موثر در یک کلمه ذخیره شود.

با این حال، این همیشه صادق نیست. کامپیوترها می توانند آدرس حافظه بزرگتر یا کوچکتر از اندازه کلمه خود داشته باشند. برای مثال، بسیاری از پردازنده‌های 8 بیتی ، مانند MOS Technology 6502 ، از آدرس‌های 16 بیتی پشتیبانی می‌کردند . اینتل 8088 16 بیتی و اینتل 8086 از آدرس دهی 20 بیتی از طریق تقسیم بندی پشتیبانی می کنند و به آنها امکان می دهد به جای 64 کیلوبایت حافظه به 1 مگابایت دسترسی داشته باشند. تمامی پردازنده‌های پنتیوم اینتل از زمان پنتیوم پرو دارای افزونه‌های آدرس فیزیکی هستند(PAE) که از نگاشت آدرس های فیزیکی 36 بیتی به آدرس های مجازی 32 بیتی پشتیبانی می کند. بسیاری از پردازنده های اولیه 2 آدرس در هر کلمه داشتند ، مانند پردازنده های 36 بیتی .

در تئوری، رایانه‌های 64 بیتی مدرن با آدرس‌دهی بایت می‌توانند به 264 بایت (16 اگزبی‌بایت ) آدرس دهی کنند، اما در عمل مقدار حافظه توسط CPU، کنترل‌کننده حافظه یا طراحی برد مدار چاپی (مثلاً تعداد فیزیکی ) محدود می‌شود. کانکتورهای حافظه یا مقدار حافظه لحیم شده).

محتویات هر مکان حافظه

هر مکان حافظه در یک کامپیوتر برنامه ذخیره شده دارای یک عدد باینری یا عدد اعشاری به نوعی است. تفسیر آن، به عنوان داده هایی از نوع داده یا به عنوان یک دستورالعمل، و استفاده از آن توسط دستورالعمل هایی تعیین می شود که آن را بازیابی و دستکاری می کند.

برخی از برنامه نویسان اولیه دستورالعمل ها و داده ها را در کلمات به عنوان راهی برای صرفه جویی در حافظه ترکیب کردند، زمانی که گران بود: Manchester Mark 1 در کلمات 40 بیتی خود فضایی برای ذخیره تکه های کوچک داده داشت - پردازنده آن بخش کوچکی را در وسط آن نادیده گرفت. یک کلمه - و اغلب به عنوان ذخیره اطلاعات اضافی مورد سوء استفاده قرار می گرفت. [ نیازمند منبع ] برنامه‌های خود-تکثیر شونده مانند ویروس‌ها گاهی خود را به عنوان داده و گاهی به عنوان دستورالعمل در نظر می‌گیرند. کد خودتغییر کننده عموماً منسوخ شده استامروزه، از آنجایی که تست و نگهداری را به طور نامتناسبی برای صرفه جویی در چند بایت دشوار می کند، و همچنین می تواند به دلیل فرضیات کامپایلر یا پردازنده در مورد وضعیت ماشین، نتایج نادرستی بدهد ، اما هنوز هم گاهی اوقات به عمد و با دقت فراوان استفاده می شود.

فضای آدرس در برنامه نویسی برنامه

در محیط چندوظیفه ای مدرن ، یک فرآیند برنامه معمولاً در فضای آدرس (یا فضاها) تکه هایی از حافظه از انواع زیر دارد:

برخی از بخش‌های فضای آدرس ممکن است اصلاً نقشه‌برداری نشده باشند.

برخی از سیستم ها دارای معماری حافظه "تقسیم" هستند که در آن کد ماشین، ثابت ها و داده ها در مکان های مختلف قرار دارند و ممکن است اندازه آدرس های متفاوتی داشته باشند. به عنوان مثال، میکروکنترلرهای PIC18 دارای یک شمارنده برنامه 21 بیتی برای آدرس دهی کدهای ماشین و ثابت ها در حافظه فلش، و رجیسترهای آدرس 12 بیتی برای آدرس دهی داده ها در SRAM هستند.

طرح های آدرس دهی

یک برنامه کامپیوتری می تواند به آدرسی که به صراحت داده شده است دسترسی پیدا کند - در برنامه نویسی سطح پایین معمولاً به آن آدرس می گویندآدرس مطلق ، یا گاهی اوقات یکآدرس خاص، ودر زبان های سطح بالاتر به عنوان نوع دادهاشاره گراما یک برنامه همچنین می تواند ازآدرس نسبیکه مکان را در رابطه با مکان دیگری ( آدرس پایه ) مشخص می کند. بسیاری دیگر وجود دارد حالت های آدرس دهیغیر مستقیم

نگاشت آدرس های منطقی به حافظه فیزیکی و مجازی نیز چندین سطح غیر جهت را اضافه می کند. زیر را ببینید.

مدل های حافظه

بسیاری از برنامه نویسان ترجیح می دهند حافظه را به گونه ای آدرس دهی کنند که هیچ تمایزی بین فضای کد و فضای داده (نگاه کنید به بالا )، و همچنین حافظه فیزیکی و مجازی (نگاه کنید به بالا ) وجود ندارد - به عبارت دیگر، اشاره گرهای عددی یکسان دقیقاً به همان بایت اشاره می کنند. رم.

با این حال، بسیاری از رایانه‌های اولیه از چنین مدل حافظه تخت پشتیبانی نمی‌کردند - به‌ویژه، ماشین‌های معماری هاروارد ، ذخیره‌سازی برنامه‌ها را به طور کامل از ذخیره‌سازی داده‌ها جدا می‌کنند. بسیاری از DSP های مدرن (مانند موتورولا 56000 ) دارای سه فضای ذخیره سازی جداگانه هستند - ذخیره سازی برنامه، ذخیره سازی ضریب و ذخیره سازی داده ها. برخی از دستورالعمل‌های رایج مورد استفاده از هر سه منطقه به طور همزمان واکشی می‌شوند - مناطق ذخیره‌سازی کمتر (حتی اگر کل بایت‌های ذخیره‌سازی یکسانی وجود داشته باشد) باعث می‌شود این دستورالعمل‌ها کندتر اجرا شوند.

مدل های حافظه در معماری x86

کامپیوترهای x86 اولیه از آدرس‌های مدل حافظه تقسیم‌بندی شده بر اساس ترکیبی از دو عدد استفاده می‌کنند: یک بخش حافظه و یک افست در آن بخش.

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

همچنین مشاهده کنید

منابع