х двох проблем породжує конфлікти DLL, коли установка однієї програми може порушити функціональність іншого через те, що знову встановлений компонент несумісний з попередньою версією. При виникненні такої ситуації у ОС немає засобів виявлення та усунення проблеми.
ОС Windows частково вирішує проблему за допомогою двох прийомів:
1) Windows дозволяє розміщувати допоміжні бібліотеки DLL в тій же папці, що і виконуваний файл. Такі компоненти відшукуються першими, і тому інші версії ігноруються.
2) Windows блокує файли, які поміщаються в системну папку System32 при установці ОС, і не дозволяє іншим програмам заміщати їх.
Для вирішення проблем сумісності версій збірки роблять наступне.
· Дозволяють розробникові вказувати версійні правила взаємодії між різними компонентами;
· Реалізують інфраструктуру підтримки версійності;
· Реалізують можливість паралельного виконання різних компонентів.
Паралельне виконання об'єктів і додатків означає, що CLR дає додатком кошти виклику тієї чи іншої версії DLL для використання її специфічних можливостей. CLR дозволяє паралельне виконання довільної кількості різних версій одного об'єкта одночасно в рамках однієї збірки.
7.4 Домени додатків
Паралельно запускаються на одному комп'ютері програми всіляко ізольовані один від одного. Додатки ізольовані насамперед через те, що адресні покажчики залежать від процесу. Покажчик, переданий з однієї програми іншому, ніяк не може в ньому використовуватися. Більш того, не можна з одного процесу звернутися безпосередньо до іншого. Замість цього доводиться застосовувати механізм представників, які реалізують непрямі виклики.
Домени додатків реалізують безпечний процес, який дозволяє CLR ізолювати додатки. Можна запускати різні домени в рамках єдиного процесу з рівнем ізоляції, який існує між окремими процесами, і не піклуватися про перехресних зверненнях і перемиканнях. Можливість запуску безлічі додатків в єдиному процесі істотно підвищує масштабованість серверів.
Ізоляція додатків важлива також для безпеки програм. Наприклад, можна запускати додатки з веб-додатки в єдиному процесі браузера так, що додатки не матимуть доступ до інших даних і ресурсів.
Код, що виконується в одному додатку, не має безпосереднього доступу до коду або ресурсу іншого застосування. CLR забезпечує ізоляцію шляхом запобігання викликів між об'єктами в різних доменах додатків. Об'єкти, якими обмінюються домени, можуть бути копіями або передаватися через представників. Якщо об'єкт - копія, то його виклик є локальним. Це означає, що і одержувач об'єкта, і сам об'єкт знаходяться в одному домені. Якщо об'єкт отриманий через представника, то цей об'єкт - віддалений. У цьому випадку одержувач і об'єкт знаходяться в різних доменах. Як наслідок, доступ до метаданих об'єкта повинні мати обидва домени, щоб забезпечити правильну роботу вбудованого компілятора для виклику методів.
Перед запуском програми збірка завантажується в домен. Запуск типового додатки викликає завантаження різних збірок в програмний домен. За замовчуванням CLR завантажує збірку в домен, який містить посилання на неї. Таким чином, код і дані збірки ізолюються від використовує їх додатки.
. 5 Компілювання програми
. 5.1 Компілювання в проміжний мову CIL
При створенні керованого коду компілятор мови програмування, підтримуючого .NET, переводить вихідний код в набір машинно-незалежних інструкцій мови CIL. Ці інструкції можуть потім легко транслюватися в машинно-залежні. Мова CIL включає інструкції для завантаження, збереження, ініціалізації об'єктів, виклику їх методів, а також для логічних і арифметичних операцій, операцій управління потоками, прямого доступу до пам'яті, підтримки винятків та ін.
Одночасно з CIL-інструкціями виробляються метадані. СIL і метадані містяться в виконуваному файлі формату РЕ. Цей файловий формат, який об'єднує CIL-код і метадані, надає операційній системі комп'ютера всю необхідну інформацію для створення CLR-об'єктів. Присутність в CIL-кодах метаданих дозволяє кодом описувати самого себе і, таким чином, відмовитися від бібліотек типів і мови IDL. CLR знаходить і витягує метадані з РЕ-файлу у міру потреби в ході прогону.
7.5.2 Компілювання CIL-інструкцій в машинні інструкції
Перед виконанням CIL-коду він повинен бути перетворений в машинні інструкції. У процесі компіляції підраховуються також ті фрагменти коду, які можуть ніколи не викликатися. Компілятор перетворить CIL-інструкції в міру потреби і встав...