30/01/1400 - 15:10
معماری هاروارد و ون نویمان چه تفاوت‌هایی با یکدیگر دارند؟
تمامی برنامه‌ها، سرویس‌ها، مدل‌های رایانشی و در کل هرگونه فعالیتی که با سامانه‌های کامپیوتری انجام می‌دهید برخواسته از دستورالعمل‌هایی است که توسط سخت‌افزارها و نرم‌افزارهای مختلف اجرا می‌شود. به بیان دقیق‌تر، این معماری است که اجازه می‌دهد برنامه‌ها و سرویس‌ها به گونه‌ای طراحی شده و به تبادل اطلاعات بپردازند که شما به عنوان یک کاربر بتوانید از آن‌ها استفاده کنید. در این زمینه معماری‌های مهمی نظیر هاروارد، ون نویمان و گردش داده‌ها وجود دارند که جایگاه خاصی دارند و در نظر داریم در این مقاله به‌طور اجمالی با آن‌ها آشنا می‌شویم.

معماری گردش داده چیست؟

پیش از پرداختن به مبحث معماری دو مدل یاد شده اجازه دهید ابتدا به بررسی این موضوع بپردازیم که معماری گردش داده چیست؟ معماری گردش داده (Dataflow Architecture) یک الگوی معماری کامپیوتر است که در معماری‌های پردازش موازی به کار می‌رود و کاملاً با روش کلاسیک فون نویمن یا کنترل گردش (Control Flow) در تضاد است. در معماری گردش داده، شمارنده برنامه (Program Counter) وجود ندارد، یا توانایی اجرا (Executability) و اجرای دستورها تنها بر اساس موجود بودن آرگومان‌های ورودی تشخیص داده می‌شود. اگرچه هیچ محصول تجاری موفقی در زمینه سخت‌افزارهای با اهداف کلی (General Purpose) از این روش استفاده نمی‌کند، اما اخیراً پیاده‌سازی‌های موفقی از آن در سیستم‌های تخصصی مثل پردازش سیگنال‌های دیجیتال، مسیریابی شبکه‌ها، پردازش گرافیکی و جدیدترین آن در انبارداری داده (Data Warehousing) استفاده می‌شود. این روش در بسیاری از معماری‌های نرم‌افزاری هم استفاده می‌شود مثل طراحی موتورهای پایگاه داده‌ای و چهارچوب‌های پردازش موازی. معماری‌های گردش داده همزمان (Synchronous Data Flow Architecture) وفق یافته‌اند تا بار کاری تحمیل شده توسط یک مسیرداده‌ای همزمان مثلاً سرعت یک سیم در پیش فرستادن بسته‌ها را میزان کند. معماری گردش داده‌ای به صورت طبیعی برنامه ریزان را قادر می‌سازد تا بتوانند کارهای پیچیده‌ای از جمله بالانس کردن بارپردازشی را به صورت همزمان انجام دهند، همچنین در این روش در دسترسی به منابع مشترک هم بسیار مؤثر عمل می‌کند.

معماری هاروارد

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

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

تفاوت معماری هاروارد با معماری هاروارد بهبود یافته

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

بهبود دیگر در این معماری، ایجاد یک مسیر بین حافظه دستورالعمل (مثل ROM یا حافظه flash) و CPU که باعث می‌شود کلمه‌های حافظه دستورالعمل، به صورت داده فقط خواندنی عمل کنند. این روش در برخی میکروکنترلرها از جمله Atmel AVR استفاده شده‌است. این روش اجازه می‌دهد که داده‌های ثابت مانند رشته‌های متنی یا جدول‌های تابعی، بدون داشتن کپی اولیه، برای جلوگیری از گرسنگی (و گرسنگی توان) داده‌های حافظه برای متغیرهای خواندنی/ نوشتنی، درحافظهٔ اصلی در دسترس قرارگیرند زبان‌های ماشین، دستورالعمل‌های خاصی دارند که داده را از حافظه دستورالعمل می‌خوانند. (این با دستورالعمل‌هایی که خودشان داده ثابت نهفته هستند، فرق دارد، اگرچه برای ثابت‌های مستقل، هردو مکانیزم برای یکدیگر قابل استفاده هستند)

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

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

استفاده مدرن از معماری هاروارد

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

پردازنده‌های سیگنال دیجیتال: معمولاً الگوریتم‌های کوچک و بسیار بهینه‌سازی شدهٔ پردازش صوت یا ویدیو را اجرا می‌کند آن‌ها از cache کردن اجتناب می‌کنند. چرا که رفتار آن‌ها باید بسیار تجدید پذیر باشد. دشواری کپی کردن با چندین فضای آدرس دهی نگرانی دوم برای افزایش سرعت اجرا است؛ بنابراین برخی از DSPها چندین حافظهٔ داده را در یک فضای آدرس دهی قرار می‌دهند تا SLMD و VLIW را تسهیل کنند. برای مثال پردازنده‌های C55x ،Texas Instruments TMS320، چندین bus دادهٔ موازی (دو bus خواندنی، دو bus نوشتنی) و یکbus دستورالعمل را استفاده می‌کنند.

میکروکنترلرها با داشتن مقدار کم حافظه برنامه (حافظه flash) و داده (SRAM) شناخته می‌شوند و از مزیت معماری هاروارد برای افزایش سرعت پردازش با همزمان سازی دسترسی به حافظه داده و دستورالعمل استفاده می‌کنند. محل ذخیره‌سازی جدا به معنای این است که حافظه داده و دستورالعمل‌ها ممکن است دارای عرض بیت مختلف باشند. مثلاً از دستورالعمل‌های ۱۶ بیتی و داده‌های ۸ بیتی استفاده کنند. همچنین به این معناست که پیش واکشی دستورالعمل می‌تواند به صورت موازی با سایر فعالیت‌ها انجام گیرد. مثلاً PIC توسط Microchip Technology Inc و AVR توسط Atmel crop (که در حال حاضر قسمتی کهMicrochip Technology است). درهر کدام از این نمونه‌ها، استفاده از دستورالعمل‌های خاص به منظور دسترسی به حافظه برنامه رایج است. مانند آنکه از داده، برای جدول‌های فقط خواندنی یا برنامه‌نویسی مجدد استفاده می‌شود. این پردازنده‌ها، پردازنده‌های با معماری بهبود یافته هاروارد هستند.

معماری ون نویمان

معماری ون نویمان (Von Neumann architecture)، یک مدل طراحی برای یک رایانه ارقامی است که از یک واحد پردازش مرکزی و یک حافظه مجزا مستقل برای نگه‌داری از اطلاعات و دستورالعمل‌ها استفاده می‌کند. این طراحی به خاطر جان فون نویمان (دانشمند علوم رایانه‌ای) نامگذاری شده ‌است. از این قبیل رایانه‌ها، کار یک ماشین تورینگ را انجام می‌دهند و یک معماری ترتیبی دارند. یک رایانه ارقامی با برنامه ذخیره شده به گونه‌ای است که دستورهای برنامه‌ریزی شده مانند داده‌ها را در حالت خواندنی-نوشتنی در حافظه دسترسی تصادفی نگه‌داری می‌کند.

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

کامپیوترهای اولیه دارای برنامه های مشخص و ثابتی بوده اند. برخی از کامپیوترهای امروزین برای سادگی و یا اهداف آموزشی هنوز از طراحی این کامپیوترها استفاده می کنند؛ مثلاً ماشین حساب های رومیزی (در اصل) نیز یک کامپیوتر برنامه ثابت محسوب می شود، چرا که تنها می تواند به پردازش اعداد و اِعمال عملگرهای ریاضیاتی بپردازد و از آن نمی توان برای اجرای یک برنامه ی پردازش واژه و یا بازی کردن استفاده کرد. تغییر برنامه چنین کامپیوترهایی نیاز به تغییر مدارهای آن و در کل تغییر ساختار و طراحی جدیدی دارد. کامپیوترهای اولیه آن قدر هم برای کار خاصی برنامه‌ریزی نشده بودند؛ یعنی غالباً طراحی آن ها به گونه ای بود که برای کار خاصی قابل استفاده باشد تا برنامه ی آن ها. برنامه‌ریزی دوباره یک کامپیوتر، اگر اصلاً ممکن هم بود، فرایند بسیار دشواری می طلبید؛ فرایندی که با فلوچارت ها و کاغذهای یادداشت شروع می شد و سپس با طراحی های جزئی و مهندسی-شده و کار طاقت فرسایی چون مداربندی دستی و بازسازی ماشین همراه می شد. نصب و رفع اشکال یک برنامه روی انیاک می توانست سه هفته زمان برد.

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

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

قابلیت‌ها

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

برخی از زبان های سطح بالا باعث ارتقای معماری فون نویمان شدند: با فراهم کردن روشی انتزاعی و مستقل ازماشین برای کنترل کد قابل اجرا در زمان اجرا شدن (مانند LISP) و یا با استفاده از اطلاعات زمانِ اجرا برای تنظیم کامپایل درجا (مانند زبان های میزبان در ماشین مجازی جاوا، یا زبان های مورد استفاده در مرورگرهای وب).

در مقیاس کوچک، می توان با تکنیک های کامپایل درجا، به بعضی از عملیات های تکرارشونده مانند بیت بلیت یا شیدرهای پیکسلی یا رأسی روی پردازنده های کلی سرعت بخشید. این یکی از قابلیت های کد خودتغییردهنده است که همچنان مورد استفاده قرار گرفته و محبوب می باشد.

تفاوت معماری فون نویمان و هاروارد

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

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

در معماری خالص فون نیومن، CPU می‌تواند در حال خواندن یک دستورالعمل یا خواندن – نوشتن داده از حافظه یا در آن باشد. هر دوی این‌ها نمی‌توانند در یک زمان اتفاق بیفتند چون دستورالعمل‌ها و داده‌ها از سیستم bus یکسانی استفاده می‌کنند. در یک کامپیوتر که از معماری هاروارد استفاده می‌کند، CPU بدون اینکه از حافظه cache استفاده کند، می‌تواند همزمان دو عمل خواندن دستورالعمل و دسترسی داشتن به یک داده حافظه را انجام دهد. به این ترتیب با یک پیچیدگی مداری یکسان، کامپیوتری با معماری هاروارد می‌تواند سریع تر باشد؛ چون واکشی دستورالعمل‌ها و دسترسی داده به مسیر حافظه‌ای یکسان نیاز ندارند. همچنین ماشین با معماری هاروارد دارای فضای آدرس دهی داده و کد مجزایی است: آدرس صفر دستورالعمل با آدرس صفر داده یکسان نیست. ممکن است یک مقدار ۲۴ بیتی را مشخص کند، درحالیکه آدرس صفر داده ممکن است به یک بایت اشاره کند که قسمتی از آن مقدار ۲۴ بیتی نیست.

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟