معماری رایانه با زبان سطح بالا

از ویکی‌پدیا، دانشنامهٔ آزاد

معماری رایانه با زبان سطح بالا یا به اختصار (HLLCA) یک نوع معماری رایانه است که به جای اینکه معماری توسط ملاحظه‌ها سخت‌افزاری اجرا شود، توسط یک زبان برنامه‌نویسی سطح بالاطراحی شده‌است.

بر این اساس به آن طراحی کامپیوتری مبتنی بر زبان نیز گفته می‌شود که عمدتاً در دهه‌های ۱۹۶۰ و ۱۹۷۰ ابداع شد و مورد استفاده قرار می‌گرفت. معماری کامپیوتر با زبان سطح بالا در دهه‌های ۱۹۶۰ و ۱۹۷۰ رایج بود، اما در دهه ۱۹۸۰ استفاده از این نوع معماری تا حد زیادی کاهش یافت. کمرنگ شدن استفاده از این نوع معماری به دلیل شکست چشمگیر اینتل ۴۳2 (1981) و ظهور کامپایلر بهینه‌ساز و رایانه کم دستورها کاهش یافته و معماری کامپیوتر با مجموعه دستورات پیچیده شبیه به آن، و توسعه کامپایلرهایی با قابلیت کامپایل در لحظه برای زبان برنامه‌نویسی سطح بالا‌ها اتفاق افتاد.

بررسی با جزییات بیشتر و نقد دقیق تر را می‌توان در ۱۹۸۰ یافت. قدمت معماری کامپیوتر با زبان سطح بالا تقریباً به اوایل آن می‌رسد، در سیستم‌های بزرگ بارز (۱۹۶۱)، که در سال ۱۹۶۰ برای ۶۰ مورد، یکی از اولین موردها طراحی شده بودند. از شناخته شده‌ترین‌ها می‌توان ماشین‌های منبع را نام برد که در دهه‌های ۱۹۷۰ و ۱۹۸۰ برای زبان طراحی شدند.

در حال حاضر محبوب‌ترین معماری کامپیوتر با زبان سطح بالاها، پردازنده‌های جاوا، برای زبان جاوا هستند، و اینها یک موفقیت دارای صلاحیت هستند که برای کاربردهای خاص استفاده می‌شوند. یک معماری نسبتاً جدید در این زمینه، معماری سیستم ناهمگن (۲۰۱۲) است که لایه میانی مجموعه دستورالعمل‌هایی را برای ویژگی‌هایی مانند استثناها و توابع مجازی پشتیبانی می‌کند. در این روش از روش جدید برای اطمینان از عملکرد استفاده می‌کند.[۱]

تعریف[ویرایش]

سیستم‌های بسیار متنوعی تحت این عنوان وجود دارند. بیشترین مثال یک زبان مستقیم اجرا شده‌است که در آن معماری مجموعه دستورها کامپیوتر با دستورالعمل‌های زبان برنامه‌نویسی سطح بالا برابر است و کد منبع مستقیماً با کمترین میزان پردازش قابل اجرا است.

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

برای زبان‌های مرسوم‌تر، دستورها یزبان برنامه‌نویسی سطح بالا در دستورالعمل و آرگومان‌ها گروه‌بندی می‌شوند و ترتیب به ترتیب پیشوند یا پسوند تبدیل می‌شود.

این موردها معمولاً فقط فرضی هستند، اگرچه در دهه ۱۹۷۰ از آنها حمایت می‌شد. در مثال‌های ساده‌تر، کد منبع ابتدا به بایت کد تجزیه می‌شود، که کد نهایی ماشین است که به پردازنده ارسال می‌شود.

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

این در ماشین‌های منبع از دهه ۱۹۷۰ به بعد یافت شد، که پردازنده‌های همه منظوره را با عملی‌ها که به‌طور خاص برای پشتیبانی از منبع طراحی شده بودند، تقویت کردند.[۲]

مثال‌ها[ویرایش]

سیستم‌های بزرگ باروز (۱۹۶۱) اولین معماری کامپیوتر با زبان سطح بالا یا به اختصار بودند که برای پشتیبانی از (۱۹۵۹)، یکی از اولین موردها طراحی شد. در آن زمان از آن به عنوان «طراحی زبان محور» یاد می‌شد. سیستم‌های متوسط باروز (۱۹۶۶) برای پشتیبانی از ابزارها برای کاربردهای تجاری طراحی شدند. سیستم‌های کوچک باروز (اواسط دهه ۱۹۷۰، طراحی شده از اواخر دهه ۱۹۶۰) برای پشتیبانی از چندین مورد توسط یک فروشگاه کنترل قابل نوشتن طراحی شدند. همه اینها پردازنده‌های مرکزی بودند. سری ۲۲۰۰ با یک مورد پایه در میکرو کد طراحی شده بودند.

ریزموتور پاسکال (۱۹۷۹) برای شکل پاسکال پاسکال طراحی شده بود، و مورد استفاده کد پی(کامپایلر بایت کد پاسکال) به عنوان کد ماشین آن قرار می‌گرفت. این امر بر گسترش و توسعه‌های بعدی ماشین‌های جاوا و جاوا تأثیرگذار بود.

ماشین‌های (دهه‌های ۱۹۷۰ و ۱۹۸۰) یک گروه شناخته شده و تأثیرگذار از معماری کامپیوتر با زبان سطح بالاها بودند. در ۱۹۸۱برای پشتیبانی از منبع طراحی شده بود. این اولین طراحی پردازنده ۳۲ بیتی اینتل بود و قرار بود خانواده اصلی پردازنده‌های اینتل برای دهه ۱۹۸۰ باشد، اما از نظر تجاری شکست خورد. (اواسط دهه ۱۹۸۰) یک سیستم جزئی بود که برای پشتیبانی از برنامه‌نویسی شی گرا و زبان برنامه‌نویسی در سخت‌افزار طراحی شده بود و از بازگشت در سطح مجموعه دستورالعملها پشتیبانی می‌کرد، از این رو این نام برای آن انتخاب شد.

تعدادی از پردازنده‌ها و کمک پردازنده‌ها که برای پیاده‌سازی مستقیم‌تر در نظر گرفته شده بودند، در اواخر دهه ۱۹۸۰ و اوایل دهه ۱۹۹۰ طراحی شدند. همچنین تعدادی طراحی شبیه‌سازی شده وجود داشت که به‌عنوان روش سخت‌افزاری مبتنی بر مورد برای طراحی یک پردازنده، یک کمک پردازنده برای ابررساناها تولید نشدند.

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

پروژه نیکولاس ریث شامل یک سی پی یو سفارشی برای زبان بود. فرستنده ابزار برای پشتیبانی از برنامه‌نویسی همزمان با استفاده از ابزار طراحی شده بود. پردازنده که از طرحی به نام پردازنده مجموعه دستورها کاهش‌یافته زبان ناشی می‌شود، برای اجرای کد بهینه‌سازی شده بود.

در اواخر دهه ۱۹۹۰، سایر شرکت‌ها برنامه‌هایی برای ساخت سی پی یوهایی داشتند که مستقیماً (یا از نزدیک) ماشین مجازی جاوا مبتنی بر پشته را پیاده‌سازی می‌کردند. در نتیجه چندین پردازنده جاوا ساخته و استفاده شدند.

لایه میانی از معماری سیستم ناهمگن (۲۰۱۲) یک مجموعه از دستورالعملهای مجازی برای انتزاع از موردهای زیرین ارائه می‌دهد و از ویژگی‌هایی مانند استثناها و توابع مجازی پشتیبانی می‌کند و شامل پشتیبانی اشکال زدایی نیز می‌شود.[۳]

پیاده‌سازی[ویرایش]

زبان برنامه‌نویسی سطح بالا اغلب از طریق یک ماشین پشته پیاده‌سازی می‌شود (مانند سیستم‌های باروز بزرگ و اینتل ۴۳۲)، و از طریق میکروکد در پردازنده پیاده‌سازی می‌شود (مانند سیستم‌های کوچک) معماری‌های برچسب‌گذاری شده اغلب برای پشتیبانی از انواع استفاده می‌شوند (مانند سیستم‌های بزرگ و ماشین‌های منبع). نمونه‌های رادیکال‌تر از معماری غیر فون نویمان استفاده می‌کنند، اگرچه اینها معمولاً فقط پیشنهادها فرضی هستند، نه پیاده‌سازی واقعی.

کاربرد[ویرایش]

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

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

انگیزه[ویرایش]

مزیتی که پس از سال ۲۰۰۰ دوباره ظاهر می‌شود ایمنی یا امنیت است. جریان اصلی تا حد زیادی به زبان‌هایی با ایمنی نوع ویا حافظه برای اکثر برنامه‌ها منتقل شده‌است. نرم‌افزارهایی که از سیستم‌عامل گرفته تا ماشین‌های مجازی به آن‌ها وابسته هستند، از کدهای بومی بدون محافظت استفاده می‌کنند. آسیب‌پذیری‌های زیادی در چنین کدهایی یافت شده‌است. یک راه حل این است که از یک پردازنده سفارشی ساخته شده برای اجرای یک زبان سطح بالا ایمن یا حداقل درک انواع آن استفاده کنید. حفاظت در سطح کلمه پردازنده، کار مهاجمان را در مقایسه با ماشین‌های سطح پایین که هیچ تمایزی بین داده‌های اسکالر، آرایه‌ها، اشاره گرها یا کد نمی‌بینند، دشوار می‌کند. دانشگاهیان همچنین در حال توسعه زبان‌هایی با ویژگی‌های مشابه هستند که ممکن است در آینده با پردازنده‌های سطح بالا ادغام شوند. نمونه ای از هر دوی این روند است. سیستم‌های مبتنی بر زبان را مقایسه کنید، جایی که نرم‌افزار (مخصوصاً سیستم‌عامل) بر پایه یک زبان سطح بالا و ایمن است، اگرچه سخت‌افزار لازم نیست: «پایه مورد اعتماد» ممکن است همچنان به زبان سطح پایین‌تری باشد.

معایب[ویرایش]

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

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

یک مشکل عمیق‌تر، هنوز یک منطقه فعال توسعه تا تاریخ ۲۰۱۴، این است که ارائه اطلاع‌ها اشکال زدایی زبان برنامه‌نویسی سطح بالا از کد ماشین بسیار دشوار است، اساساً به دلیل سربار اطلاع‌ها اشکال زدایی، و ماهرانه تر به این دلیل که کامپایل (به ویژه بهینه‌سازی) باعث می‌شود که تعیین منبع اصلی برای دستورالعمل ماشین کاملاً دخیل باشد؛ بنابراین اطلاع‌ها اشکال زدایی ارائه شده به عنوان یک بخش اساسی از زبان برنامه‌نویسی سطح بالا‌ها یا به شدت پیاده‌سازی را محدود می‌کند یا سربار قابل توجهی را در استفاده معمولی اضافه می‌کند.

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

مزایای زبان برنامه‌نویسی سطح بالا را می‌توان به روش‌های جایگزین در سیستم‌های کامپیوتری (سیستم‌های مبتنی بر زبان) به‌دست‌آورد، عمدتاً از طریق کامپایلر یا مفسر: سیستم همچنان در یک زبان برنامه‌نویسی سطح بالا نوشته می‌شود، اما یک پایگاه قابل اعتماد در نرم‌افزاری که بر روی سیستم‌های پایین‌تر اجرا می‌شود وجود دارد. معماری سطح این رویکرد تقریباً از سال ۱۹۸۰ دنبال شده‌است: به عنوان مثال، یک سیستم جاوا که در آن خود محیط زمان اجرا به زبان سی نوشته شده‌است، اما سیستم عامل و برنامه‌های کاربردی به زبان جاوا نوشته شده‌است.[۴]

جایگزین، گزینه‌ها[ویرایش]

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

در معماری کامپیوتر، رویکرد بسیار محبوب و موفق بوده‌است و در مقابل زبان برنامه‌نویسی سطح بالا‌ها قرار دارد و بر معماری مجموعه دستورها بسیار ساده تأکید دارد. با این حال، مزایای سرعت رایانه‌های جدید در دهه ۱۹۸۰ عمدتاً به دلیل پذیرش زودهنگام حافظه پنهان روی تراشه و فضایی برای ثب‌های بزرگ بود، نه مزایای ذاتی.[۵]

منابع[ویرایش]

  1. Wortman, David Barkley (1972). A Study of Language Directed Computer Design (PhD). Department of Computer Science, Stanford University.
  2. Keirstead, Ralph E. (March 1968). "R68-8 Language Directed Computer Design" (PDF). IEEE Transactions on Computers. 17 (3): 298. doi:10.1109/TC.1968.229106. S2CID 41983403. – review.
  3. Keirstead, Ralph E. (March 1968). "R68-8 Language Directed Computer Design" (PDF). IEEE Transactions on Computers. 17 (3): 298. doi:10.1109/TC.1968.229106. S2CID 41983403. – review.
  4. Chu, Yaohan (December 1977). "Direct-execution computer architecture". ACM SIGARCH Computer Architecture News. 6 (5): 18–23. doi:10.1145/859412.859415. S2CID 10241380.
  5. Ditzel, David R. ; Patterson, David A. (1980). Retrospective on High-Level Language Computer Architecture (PDF). ISCA '80 Proceedings of the 7th annual symposium on Computer Architecture. ACM. pp. 97–104. doi:10.1145/800053.801914. Retrieved 2014-11-18.