پیش‌نویس:معماری کامپیوتری زبان سطح بالا

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

این مقاله در حال ترجمه از ویکی انگلیسی است لطفا حذف نشود.

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

بر این اساس به آن طراحی کامپیوتری مبتنی بر زبان نیز گفته میشود که عمدتاً در دهه های 1960 و 1970 ابداع شد و مورد استفاده قرار میگرفت.

معماری کامپیوتر با زبان سطح بالا در دهه های 1960 و 1970 رایج بود، اما در دهه 1980 استفاده از این نوع معماری تا حد زیادی کاهش یافت.

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

بررسی با جزیی ها بیشتر و نقد دقیق تر را می توان در 1980 یافت.


قدمت معماری کامپیوتر با زبان سطح بالا تقریباً به اوایل آن می رسد، در سیستم های بزرگ بارز (1961)، که در سال 1960 برای 60 مورد ، یکی از اولین مورد ها طراحی شده بودند.

از شناخته شده ترین ها میتوان ماشین های منبع را نام برد که در دهه های 1970 و 1980 برای زبان طراحی شدند.

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

یک معماری نسبتا جدید در این زمینه، معماری سیستم ناهمگن (2012) است که لایه میانی مجموعه دستورالعمل‌هایی را برای ویژگی‌هایی مانند استثناها و توابع مجازی پشتیبانی می‌کند.

در این روش از روش جدید برای اطمینان از عملکرد استفاده می کند.

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

سیستم های بسیار متنوعی تحت این عنوان وجود دارند.

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

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

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

این موردها معمولاً فقط فرضی هستند، اگرچه در دهه 1970 از آنها حمایت می شد.

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

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

این روش در سال 1979 یافت شد و در حال حاضر توسط پردازنده های جاوا استفاده می شود.

به زبان ساده، یک زبان برنامه نویسی سطح بالا ممکن است به طور ساده یک معماری کامپیوتری همه منظوره با برخی ویژگی های خاص برای پشتیبانی از یک یا چند زبان برنامه نویسی سطح بالا داده شده باشد.

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

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

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

در آن زمان از آن به عنوان "طراحی زبان محور" یاد می شد. سیستم‌های متوسط باروز (1966) برای پشتیبانی از ابزارها برای کاربردهای تجاری طراحی شدند.

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

همه اینها پردازنده های مرکزی بودند.

سری 2200 با یک مورد پایه در ریزکد طراحی شده بودند

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

این امر بر گسترش و توسعه های بعدی ماشین های جاوا و جاوا تأثیرگذار بود.

ماشین‌های (دهه‌های 1970 و 1980) یک گروه شناخته شده و تأثیرگذار از معماری کامپیوتر با زبان سطح بالاها بودند.

در 1981برای پشتیبانی از منبع طراحی شده بود. این اولین طراحی پردازنده 32 بیتی اینتل بود و قرار بود خانواده اصلی پردازنده های اینتل برای دهه 1980 باشد، اما از نظر تجاری شکست خورد.

(اواسط دهه 1980) یک سیستم جزئی بود که برای پشتیبانی از برنامه نویسی شی گرا و زبان برنامه نویسی در سخت افزار طراحی شده بود و از بازگشت در سطح مجموعه دستورالعملها پشتیبانی می کرد، از این رو این نام برای آن انتخاب شد.

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

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

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

پروژه نیکولاس ریث شامل یک سی پی یو سفارشی برای زبان بود.

فرستنده ابزار برای پشتیبانی از برنامه نویسی همزمان با استفاده از ابزار طراحی شده بود .

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

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

اریکسون ECMP را توسعه داد، پردازنده ای که برای اجرا طراحی شده بود.

هرگز به صورت تجاری تولید نشد.

لایه میانی از معماری سیستم ناهمگن (2012) یک مجموعه از دستورالعملهای مجازی برای انتزاع از موردهای زیرین ارائه می دهد و از ویژگی هایی مانند استثناها و توابع مجازی پشتیبانی می کند و شامل پشتیبانی اشکال زدایی نیز می شود.

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

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

نمونه‌ های رادیکال‌تر از معماری غیر فون نویمان استفاده می‌کنند، اگرچه اینها معمولاً فقط پیشنهادها فرضی هستند، نه پیاده‌سازی واقعی.

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

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

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

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

فهرست مفصلی از مزایای احتمالی در1980.

HILLCA ها به طور مستقیم جذاب هستند، زیرا در اصل کامپیوتر را می توان برای یک زبان سفارشی کرد، که امکان پشتیبانی بهینه از زبان را فراهم می کند و نوشتن کامپایلر را ساده می کند.

این می تواند به طور بومی از چندین زبان به سادگی با تغییر میکروکد پشتیبانی کند.

مزایای کلیدی برای توسعه دهندگان عبارتند از: کامپایل سریع و اشکال زدایی نمادین دقیق از دستگاه.

مزیت دیگر این است که یک پیاده سازی زبان را می توان با به روز رسانی ریزکد (سختافزار) بدون نیاز به کامپایل مجدد کل سیستم به روز کرد.

این مشابه به روز رسانی یک مترجم برای یک زبان تفسیر شده است.

مزیتی که پس از سال 2000 دوباره ظاهر می شود ایمنی یا امنیت است.

جریان اصلی تا حد زیادی به زبان هایی با ایمنی نوع و یا حافظه برای اکثر برنامه ها منتقل شده است.

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

آسیب پذیری های زیادی در چنین کدهایی یافت شده است.

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

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

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

نقد و بررسی :

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

بسیاری از بهینه سازی های کامپایلر نیاز به تجزیه و تحلیل پیچیده و تنظیم مجدد کد دارند، بنابراین کد ماشین بسیار متفاوت از کد منبع اصلی است.

به دلیل پیچیدگی و سربار، اجرای این بهینه‌سازی‌ها در ریزکد غیرممکن یا غیرعملی است.

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

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

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

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

بنابراین اطلاع ها اشکال زدایی ارائه شده به عنوان یک بخش اساسی از زبان برنامه نویسی سطح بالا ها یا به شدت پیاده سازی را محدود می کند یا سربار قابل توجهی را در استفاده معمولی اضافه می کند.

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

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

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

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

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

از دهه 1980، تمرکز تحقیق و پیاده‌سازی در معماری‌های کامپیوتری همه منظوره عمدتاً در معماری‌های ریسک مانند بوده است، معمولاً معماری‌های ذخیره‌سازی بار-ذخیره‌ای غنی از ثبت داخلی، با موردهای نسبتاً پایدار و غیر اختصاصی زبان، دارای چندین ثب ها، خط لوله. و اخیراً سیستم های چند هسته ای، به جای زبان خاص.

پشتیبانی زبان بر روی کامپایلرها و زمان اجرا آنها و مفسرها و ماشین های مجازی آنها (به ویژه ماشین ها) با پشتیبانی مستقیم سخت افزاری کمی متمرکز شده است.

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

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

با این حال، مزایای سرعت رایانه‌های جدید در دهه 1980 عمدتاً به دلیل پذیرش زودهنگام حافظه پنهان روی تراشه و فضایی برای ثب های بزرگ بود، نه مزایای ذاتی. .

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

 

خواندن بیشتر[ویرایش]