logo

.NET Common Language Runtime (CLR)

.NET CLR — це середовище виконання, яке керує та виконує код, написаний будь-якою мовою програмування .NET. CLR — це компонент віртуальної машини платформи .NET. Компілятор цієї мови компілює вихідний код додатків, розроблених за допомогою мов, сумісних з .NET, у проміжну мову CLR під назвою MSIL, тобто код проміжної мови Microsoft. Цей код не залежить від платформи. Це можна порівняти з байт-кодом у Java. Метадані також генеруються під час компіляції та коду MSIL і зберігаються у файлі, відомому як файл маніфесту. Ці метадані зазвичай стосуються членів і типів, необхідних CLR для виконання коду MSIL. Компонент своєчасного компілятора CLR перетворює код MSIL у власний код машини. Цей код залежить від платформи. CLR керує пам'яттю, потоками, винятками, виконанням коду, безпекою коду, перевіркою та компіляцією.

1 мільйон скільки 0

На наступному малюнку показано перетворення вихідного коду у рідний код.

Net Common Language Runtime

Наведена вище фігура перетворює код у рідний код, який ЦП може виконати.

Основними компонентами CLR є:

  • Система загального типу
  • Специфікація загальної мови
  • Збирач сміття
  • Just in Time Compiler
  • Метадані та збірки
Net Common Language Runtime

1. Система загального типу:

CTS надає вказівки щодо оголошення, використання та керування типами даних під час виконання. Він пропонує міжмовне спілкування. Наприклад, VB.NET має тип даних integer, а C# має тип даних int для керування цілими числами. Після компіляції Int32 використовується обома типами даних. Отже, CTS надає типи даних за допомогою керованого коду. Система загального типу допомагає писати незалежний від мови код.

Він надає дві категорії типів.

    Тип значення:Тип значення зберігає дані в пам’яті, виділеній у стеку або вбудованій структурі. Ця категорія типу містить каталог даних. Якщо значення однієї змінної копіюється в іншу, обидві змінні зберігають дані незалежно. Це можуть бути вбудовані типи, визначені користувачем або типи перерахувань. Вбудовані типи — це примітивні типи даних, такі як числові, логічні, char і дата. Користувачі у вихідному коді створюють визначені користувачем типи. Перерахування відноситься до набору перерахованих значень, представлених мітками, але збережених як числовий тип.
    Net Common Language Runtime Тип посилання:Тип Reference зберігає посилання на значення адреси пам’яті та розміщується в купі. Пам'ять купи використовується для динамічного розподілу пам'яті. Тип посилання не містить фактичних даних безпосередньо, але містить адресу даних. Щоразу, коли створюється об’єкт посилального типу, він копіює адресу, а не фактичні дані. Тому дві змінні будуть посилатися на ті самі дані. Якщо дані одного об’єкта Reference Type змінено, те саме відобразиться на іншому об’єкті. Посилальні типи можуть бути типами, що описують себе, типами покажчиків або типами перешкод. Типи з самоописом можуть бути типами рядків, масивів і класів, які зберігають метадані про себе.

2. Специфікація загальної мови (CLS):

Специфікація загальної мови (CLS) містить набір правил, яких повинні дотримуватися всі мови, що підтримуються NET. Загальні правила полегшують реалізацію мовної інтеграції та допомагають у міжмовному успадкуванні та налагодженні. Кожна мова, яку підтримує NET Framework, має власні правила синтаксису. Але CLS забезпечує взаємодію між програмами, розробленими з використанням мов NET.

3. Вивіз сміття:

Збирач сміття — це компонент CLR, який працює як автоматичний менеджер пам’яті. Це допомагає керувати пам’яттю шляхом автоматичного розподілу пам’яті відповідно до вимог. Він виділяє об’єктам пам’ять купи. Коли об’єкти не використовуються, він повертає виділену їм пам’ять для майбутнього використання. Він також забезпечує безпеку об’єктів, не дозволяючи одному об’єкту використовувати вміст іншого об’єкта.

4. Компілятор Just in Time (JIT):

Компілятор JIT є важливим компонентом CLR. Він перетворює код MSIL у власний код (тобто код, специфічний для машини). Програма .NET компілюється явно або неявно. Розробник або програміст викликає певний компілятор для компіляції програми під час явної компіляції. При неявній компіляції програма компілюється двічі. Вихідний код компілюється в Microsoft Intermediate Language (MSIL) під час першого процесу компіляції. Код MSIL перетворюється на власний код під час другого процесу компіляції. Цей процес називається JIT-компіляцією. Існує три типи компіляторів JIT - Pre, Econo та Normal. Pre JIT-компілятор компілює весь код MSIL у власний код перед виконанням. Компілятор Econo JIT компілює лише ті частини коду MSIL, які потрібні під час виконання, і видаляє ті частини, які більше не потрібні. Звичайний компілятор JIT також компілює лише ті частини коду MSIL, які потрібні під час виконання, але поміщає їх у кеш для подальшого використання. Він не вимагає повторної компіляції вже використаних частин, оскільки вони були розміщені в кеш-пам'яті.

5. Метадані:

Метадані — це двійкова інформація про програму, яка зберігається у портативному виконуваному файлі CLR (PE) разом із кодом MSIL або в пам’яті. Під час виконання MSIL метадані також завантажуються в пам'ять для належної інтерпретації класів і пов'язаних з ними. Інформація, яка використовується в коді. Таким чином, метадані допомагають реалізувати код у мовно-нейтральний спосіб або досягти мовної сумісності.

6. Збірки:

Збірка є фундаментальною одиницею групування фізичного коду. Він складається з маніфесту складання, метаданих, коду MSIL і набору ресурсів, таких як файли зображень. Він також вважається основним блоком розгортання, керування версіями, повторного використання, дозволів безпеки тощо.

Функції .NET CLR

Нижче наведено функції CLR.

  • Він перетворює програму на рідний код.
  • Обробляє винятки
  • Забезпечує типову безпеку
  • Управління пам'яттю
  • Забезпечує безпеку
  • Покращена продуктивність
  • Мова незалежна
  • Незалежний від платформи
  • Вивіз сміття
  • Надає такі функції мови, як успадкування, інтерфейси та перевантаження для об’єктно-орієнтованих програм.

Код, який виконується з CLR, називається керованим кодом, тоді як код поза CLR називається некерованим кодом. CLR також забезпечує рівень взаємодії, який дозволяє керованим і некерованим кодам взаємодіяти.

1. Керований код:

Будь-яка мова, написана в рамках .NET, є керованим кодом. Керований код використовує CLR, який піклується про ваші програми, керуючи пам’яттю, обробляючи безпеку, дозволяючи міжмовне налагодження тощо. Процес керованого коду показано на малюнку:

Net Common Language Runtime

2. Некерований код:

Код, розроблений поза межами .NET Framework, відомий як некерований код. Програми, які не працюють під керуванням CLR, називаються некерованими. Певні мови, такі як C++, можна використовувати для написання таких програм, як-от функції низькорівневого доступу операційної системи. Прикладами некерованого коду є фонова сумісність із VB, ASP і COM. Цей код виконується за допомогою класів-огорток. Процес некерованого коду показано нижче:

Net Common Language Runtime

Версії .NET CLR

CLR час від часу оновлюється, щоб забезпечити кращу продуктивність.

Версія .NET Версія CLR
1.0 1.0
1.1 1.1
2.0 2.0
3.0 2.0
3.5 2.0
4 4
4.5 4
4.6 4
4.6 4

Структура .NET CLR

Нижче наведено структуру компонентів Common Language Runtime.

Net Common Language Runtime

Підтримка бібліотеки базових класів

Це бібліотека класів, яка підтримує класи для програми .NET.

Підтримка потоків

Він керує паралельним виконанням багатопоточної програми.

COM Маршалер

Він забезпечує зв'язок між об'єктами COM і програмою.

Система безпеки

Він забезпечує дотримання обмежень безпеки.

Механізм налагодження

Це дозволяє налагоджувати різні типи програм.

Перевірка типу

Він перевіряє типи, які використовуються в програмі, і перевіряє їх відповідність стандартам, наданим CLR.

Менеджер коду

Він керує кодом під час виконання.

Збирач сміття

Він звільняє невикористану пам’ять і виділяє її новій програмі.

Обробник винятків

Він обробляє виняток під час виконання, щоб уникнути збою програми.

Завантажувач класів

Він використовується для завантаження всіх класів під час виконання.