موضوع مقاله: معماری هاروارد بهبودیافته | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # معماری هاروارد بهبودیافته | مقدمه: معماری هاروارد بهبود یافته نوعی از معماری هاروارد است که بر خلاف معماری خالص هاروارد، امکان دسترسی به محتویات حافظه را به عنوان داده فراهم می‌کند. | ## بخش 1: معماری هاروارد بهبودیافته | اکثر کامپیوترهایی که به عنوان معماری هاروارد ثبت شده‌اند، در واقع دارای معماری هاروارد بهبودیافته هستند. CPU دستورالعمل بعدی را دریافت و داده‌ها را به‌طور هم‌زمان و مستقل بارگیری یا ذخیره می‌کند. این امر برخلاف کامپیوتر معماری فون نویمان است که در آن دستورالعمل‌ها و داده‌ها در یک سیستم حافظه ذخیره می‌شوند و بدون پیچیدگی حافظه نهان CPU باید به آنها دسترسی داشت. جداسازی فیزیکی دستورالعمل‌ها و حافظهٔ داده‌ها در بعضی مواقع به عنوان ویژگی متمایز رایانه‌های معماری مدرن هاروارد شناخته می‌شود. به کار بردن فناوری‌های حافظه مختلف برای دستورالعمل‌ها (مثلاً حافظه فلش) و داده‌ها (معمولاً حافظه خواندن/نوشتن) در ماشین‌های فون نویمان با استفاده میکروکنترلرها (سیستم‌های کامپیوتری یکپارچه شده روی یک تراشه) رواج یافته‌است. تمایز آن با ماشین هاروارد این است که دستورالعمل و حافظهٔ داده فضاهای آدرس متفاوتی را اشغال می‌کنند. برخلاف ماشین فون نیومن، یک آدرس حافظه به‌طور منحصر به فرد مکان ذخیره‌سازی را شناسایی نمی‌کند و هم‌چنین باید فضای حافظه (دستورالعمل یا داده) را که آدرس به آن تعلق دارد، بداند. معماری فون نویمان رایانه‌ای با معماری فون نویمان نسبت به ماشین‌های هاروارد خالص دارای مزیت‌هایی مثل دسترسی به کدها و برخورد کردن با آن‌ها مانند داده‌ها و بالعکس است. به عنوان مثال، اجازه می‌دهد تا داده‌ها از دیسک گردان به حافظه خوانده شوند و سپس به عنوان کد اجرا شوند، یا سیستم‌های نرم‌افزاری خودبهینه شونده با استفاده از فناوری‌هایی مانند کامپایل به موقع برای نوشتن کد ماشین در حافظهٔ خود و سپس اجرای آن مثال‌هایی از این قبیل هستند. یکی از معایب این روش مربوط به حفاظت از فضای اجرایی است که خطرات ناشی از بدافزار و نقص نرم‌افزار را افزایش می‌دهد. علاوه بر این، در این سیستم‌ها، مستندسازی جریان کد بسیار دشوار است و هم‌چنین می‌تواند اشکال‌زدایی را بسیار دشوارتر کند. معماری هاروارد بهبودیافته بر این اساس، برخی از ماشین‌های هاروارد خالص محصولات تخصصی هستند. این اصلاحات، راه‌های مختلفی برای از بین بردن جدایی دقیق بین کد و داده‌است، در حالی که هم‌چنان از داده‌های هم‌زمان با کارایی بالاتر و دسترسی دستورالعمل‌های معماری هاروارد پشتیبانی می‌کنند. معماری Split-cache (یا تقریباً فون نویمان) متداول‌ترین اصلاح، سلسله مراتب حافظه را با حافظه پنهان CPU جداگانه برای دستورالعمل‌ها و داده‌ها در سطوح پایین‌تر سلسله مراتب ایجاد می‌کند. | ## بخش 2: معماری هاروارد بهبودیافته | یک فضای آدرس برای دستورالعمل‌ها و داده‌ها وجود دارد که مدل فون نویمان را ارائه می‌کند، اما CPU دستورالعمل‌ها را از کش دستورالعمل واکشی می‌کند و داده‌ها را از کش داده‌ها واکشی می‌کند. اکثر برنامه نویسان هرگز نیازی به این واقعیت ندارند که هسته پردازنده معماری هاروارد (اصلاح شده) را پیاده‌سازی می‌کند، اگرچه از مزایای سرعت آن سود می‌برند. فقط برنامه نویسانی که دستورالعمل‌ها را تولید و در حافظه ذخیره می‌کنند، باید از مسائلی مانند انسجام حافظه نهان آگاه باشند؛ اگر حافظه یک نسخهٔ کش‌شدهٔ دستورالعمل را در کش دستورالعمل اصلاح یا باطل نکند. معماری حافظه دستورالعمل به عنوان داده تغییر دیگر ماهیت «فضای آدرس جداگانه» یک ماشین هاروارد را حفظ می‌کند، اما عملیات ماشین ویژه‌ای را برای دسترسی به محتویات حافظه دستورالعمل به عنوان داده فراهم می‌کند. از آن‌جایی که داده‌ها مستقیماً به عنوان دستورالعمل قابل اجرا نیستند، چنین ماشین‌هایی همیشه به عنوان معماری «تغییریافته» هاروارد دیده نمی‌شوند: دسترسی خواندن: مقادیر دادهٔ اولیه را می‌توان در هنگام شروع برنامه از حافظهٔ دستورالعمل در حافظهٔ داده کپی کرد. اگر قرار نیست داده‌ها اصلاح شوند (ممکن است یک مقدار ثابت باشد، مانند pi یا یک رشته متنی)، می‌توان توسط برنامه در حال اجرا مستقیماً از حافظهٔ دستورالعمل بدون اشغال فضای حافظه داده به آن دسترسی داشت که اغلب با مجاز می‌باشد. دسترسی نوشتن: به‌طور کلی قابلیت برنامه‌ریزی مجدد مورد نیاز است و تعداد کمی از رایانه‌ها صرفاً مبتنی بر رام هستند. به عنوان مثال، یک میکروکنترلر معمولاً عملیاتی برای نوشتن روی فلش مموری که برای نگه‌داری دستورالعمل‌های آن استفاده می‌شود، دارد. معماری حافظه داده به عنوان دستورالعمل چند پردازندهٔ معماری هاروارد، مانند MAXQ، می‌توانند دستورالعمل‌های واکشی‌شده از هر بخش حافظه را اجرا کنند؛ برخلاف پردازندهٔ اصلی هاروارد، که فقط می‌تواند دستورالعمل‌های واکشی‌شده از بخش حافظهٔ برنامه را اجرا کند. چنین پردازنده‌هایی، مانند دیگر پردازنده‌های معماری هاروارد – و برخلاف معماری خالص فون نویمان – می‌توانند یک دستورالعمل و یک مقدار داده را، اگر در بخش‌های حافظه مجزا باشند به‌طور هم‌زمان بخوانند، زیرا پردازنده (حداقل) دو بخش حافظهٔ جداگانه یا مستقل دارد. مقایسه‌ها سه ویژگی ممکن است برای تشخیص ماشین‌های هاروارد اصلاح‌شده از ماشین‌های هاروارد و فون نویمان خالص استفاده شود: حافظه‌های دستورالعمل و حافظه‌های داده فضاهای آدرس متفاوتی را اشغال می‌کنند. برای ماشین‌های هاروارد خالص، یک آدرس «صفر» در فضای دستورالعمل وجود دارد که به یک مکان ذخیره دستورالعمل اشاره دارد و یک آدرس جداگانه «صفر» در فضای داده که به یک مکان ذخیرهٔ دادهٔ مشخص اشاره دارد. در مقابل، فون نویمان و ماشین‌های هاروارد اصلاح‌شده با حافظهٔ پنهان، دستورالعمل‌ها و داده‌ها را در یک فضای آدرس واحد ذخیره می‌کنند، بنابراین آدرس «صفر» تنها به یک مکان اشاره دارد و این‌که آیا با نحوه نگارش برنامه، الگوی باینری در آن مکان به عنوان یک دستورالعمل تفسیر می‌شود یا داده تعریف می‌شود. با این حال، درست مانند ماشین‌های هاروارد خالص، ماشین‌های هاروارد بهبود یافته با حافظه دستورالعمل‌ها به‌عنوان داده دارای فضاهای آدرس جداگانه‌ای هستند، بنابراین آدرس‌های جداگانه‌ای «صفر» برای فضای آموزشی و داده‌ها دارند، بنا بر این، این نوع ماشین‌های هاروارد اصلاح‌شده را از هاروارد خالص متمایز نمی‌کند. | ## بخش 3: معماری هاروارد بهبودیافته | حافظه‌های دستورالعمل و داده دارای مسیرهای سخت‌افزاری مجزا به واحد پردازش مرکزی (CPU) هستند. این نکته مربوط به ماشین‌های هاروارد خالص یا بهبودیافته است و دلیل هم‌زیستی آن‌ها با معماری انعطاف‌پذیرتر و عمومی‌تر فون نویمان، مسیرهای حافظه جداگانه به CPU امکان واکشی دستورالعمل‌ها و دسترسی به داده‌ها را به‌طور هم‌زمان فراهم می‌کند و توان عملیاتی را بهبود می‌بخشد. ماشین‌های هاروارد اصلاح‌شده با حافظهٔ پنهان دارای چنین مسیرهای دسترسی جداگانه‌ای برای حافظه‌های پنهان CPU یا دیگر حافظه‌های متصل به هم هستند، اما یک مسیر دسترسی یکپارچه بقیه سلسله مراتب حافظه را پوشش می‌دهد. از دیدگاه یک برنامه‌نویس، یک پردازنده هاروارد اصلاح شده که در آن حافظه‌های دستوری و داده‌ها یک فضای آدرس را به اشتراک می‌گذارند، تا زمانی که انسجام حافظهٔ پنهان به یک مشکل تبدیل شود، مانند کدهای خود اصلاح شده و بارگذاری برنامه معمولاً به عنوان یک ماشین فون نویمان در نظر گرفته می‌شود. این می‌تواند گیج‌کننده باشد؛ اما چنین مسائلی معمولاً فقط برای برنامه نویسان سیستم و یکپارچه سازان قابل مشاهده است. دیگر ماشین‌های هاروارد بهبود یافته از این نظر مانند ماشین‌های هاروارد خالص هستند. ماشین اصلی هاروارد، Mark I، دستورالعمل‌ها را روی یک نوار کاغذ پانچ‌شده و داده‌ها را در شمارنده‌های الکترومکانیکی ذخیره می‌کرد. امروزه یک ماشین هاروارد مانند میکروکنترلر PIC ممکن است از حافظه فلش ۱۲ بیتی برای دستورالعمل‌ها و ۸ بیتی SRAM گسترده برای داده‌ها استفاده کند. استفاده‌های مدرن از معماری اصلاح شده هاروارد خارج از برنامه‌هایی که به DSP یا میکروکنترلر بدون کش نیاز است، اکثر پردازنده‌های مدرن یک حافظه پنهان CPU دارند که دستورالعمل‌ها و داده‌ها را تقسیم‌بندی می‌کند. هم‌چنین پردازنده‌هایی وجود دارند که با دقیق‌ترین تعریف، ماشین‌های هاروارد هستند (این برنامه و حافظه داده فضای آدرس متفاوتی را اشغال می‌کنند)؛ و فقط به معنای ضعیفی که عملیات خواندن یا نوشتن حافظه برنامه به عنوان داده وجود دارد، اصلاح شده‌اند. از آن‌جایی که اجرای دستورالعمل‌ها هنوز به فضای آدرس برنامه محدود می‌شوند، این پردازنده‌ها بسیار متفاوت با ماشین‌های فون نویمان هستند. داشتن فضای آدرس جداگانه مشکلاتی را در زبان‌های سطح بالا که مستقیماً از این جدول‌ها داده‌های فقط خواندنی که ممکن است در فضای آدرسی متفاوت از داده‌های قابل نوشتن معمولی باشند پشتیبانی نمی‌کند ایجاد می‌کند (بنابراین باید با استفاده از دستورالعمل‌های مختلف خوانده شوند). | ## جمع‌بندی | زبان برنامه‌نویسی C می‌تواند چندین فضای آدرس را از طریق پسوندهای غیر استاندارد یا از طریق پسوندهای استاندارد شده برای پشتیبانی از پردازنده‌های تعبیه‌شده پشتیبانی کند.