System programing module 1

15
System programing Module 1

Transcript of System programing module 1

System programingModule 1

2

ПроцесПроцес - це програма, що виконується. Формально процес визначається як концепція рівня операційної системи, яка використовується для опису набору ресурсів (таких як зовнішні бібліотеки коду і головний потік) і необхідної пам'яті, що виділяється виконуваним додаткам. Для кожного завантаженого в пам'ять файлу *.exe операційна система створює окремий ізольований процес, який застосовується протягом усього часу життя.

Andrey Gladky [email protected]

3

ПроцесДані одного процесу не доступні безпосередньо іншим процесам, якщо тільки не використовується API-інтерфейс для програмування розподілених обчислень, подібний Windows Communication Foundation. З урахуванням цих моментів, процес можна розглядати як фіксовану і безпечну границю для виконуваних додатків.Кожному процесу Windows призначається унікальний ідентифікатор процесу (process identifier - PID) і він може незалежно завантажуватися і вивантажуватися операційною системою при необхідності (а також і програмно).

Andrey Gladky [email protected]

4

Взаємодія з процесами в .NETВ просторі імен Sуstem.Diagnostiсs визначено кілька типів, які дозволяють програмно взаємодіяти з процесами.

Andrey Gladky [email protected]

Тип ОписProcess Цей клас надає доступ до локальних і віддалених

процесів, а також дозволяє програмно запускати і зупиняти процеси

ProcessModule Цей тип представляє модуль (*.dll або *.exe), завантажений в певний процес. Важливо розуміти, що тип ProcessModule може представляти будь-який модуль, тобто двійкові збірки на основі COM, .NET або традиційного ‘C’

ProcessModuleCollection Цей тип надає строго типізовану колекцію об'єктів Process Module

5

Взаємодія з процесами в .NET

Andrey Gladky [email protected]

Тип ОписProcessStartInfo Цей тип дозволяє вказувати набір значень, які

використовуються при запуску процесу за допомогою методу Process.Start ()

ProcessThread Цей тип являє потік в заданому процесі. Слід мати на увазі, що тип ProcessThread застосовується для діагностики набору потоків процесу, але не для породження нових потоків виконання всередині процесу

ProcessThreadCollection Цей тип надає строго типізовану колекцію об'єктів ProcessThread

6

Основні методи класу Process

Andrey Gladky [email protected]

Метод ОписCloseMainWindow() Цей метод закриває процес, який має

користувацький інтерфейс, відправляючи його головному вікні повідомлення про закриття

GetCurrentProcess() Цей статичний метод повертає новий об'єкт Process, що представляє процес, який є активним в поточний момент

GetProcesses() Цей статичний метод повертає масив нових об'єктів Process, які виконуються на заданій машині

Kill() Цей метод негайно зупиняє заданий процесStart() Цей метод запускає процес

7

Домени додатків Домени додатків (Application Domain - AppDomain) - це логічні підрозділи всередині окремого процесу, в якому розміщується набір пов'язаних збірок .NET.

Кожен домен додатка, в свою чергу, ділиться на контекстні границі які використовуються для групування разом подібних об'єктів .NET.

Поняття контексту дозволяє середовищі CLR забезпечувати належну обробку об'єктів з особливими потребами часу виконання.

Один процес може містити кілька доменів додатків, кожен з яких обслуговує свій виконуваний файл .NET.

Andrey Gladky [email protected]

8

Домени додатків Таке додаткове розділення традиційного процесу Windows надає ряд переваг:

Домени додатків є ключовим аспектом нейтральної, по відношенню до операційних систем, природи платформи .NET

Домени додатків набагато менше використовують обчислювальних ресурсів і пам'яті в порівнянні з повноцінними процесами. Завдяки цьому середовище CLR здатне завантажувати і вивантажувати домени додатків набагато швидше, ніж формальні процеси, тим самим значно покращуючи масштабованість серверних додатків.

Домени додатків забезпечують більш глибокий рівень ізоляції при розміщенні завантажених додатків. У разі збою одного домена додатку всередині процесу інші домени додатків залишаються працездатними

Andrey Gladky [email protected]

9

Домени додатків З огляду на цей факт, дуже важливо розуміти, що додаток, що виконується в одному домені додатку, не може отримувати дані з іншого домену додатка, якщо тільки не буде використовуватися протокол розподіленого програмування (такий як WCF).

Процес операційної системи буде обслуговувати так званий стандартний домен додатка.

Цей специфічний домен додатка створюється автоматично середовищем CLR під час запуску процесу.

Після цього середовище CLR створює додаткові домени додатків в міру необхідності.Andrey Gladky

[email protected]

10

Клас System.AppDomain

Платформа .NET дозволяє програмно здійснювати моніторинг доменів додатків, створювати нові домени додатків (або вивантажувати їх) під час виконання, завантажувати збірки в домени додатків і вирішувати цілий ряд інших завдань із застосуванням класу AppDomain

Andrey Gladky [email protected]

11

Основні методи класу AppDomain

Andrey Gladky [email protected]

Метод ОписCreateDomain() Цей статичний метод дозволяє створювати новий

домен програми в поточному процесіCreateInstance() Цей метод дозволяє створювати екземпляр типу з

зовнішньої збірки після завантаження даної збірки в викликаючий домен додатки

ExecuteAssembly() Цей метод запускає збірку *. exe всередині домену додатки, отримавши її ім'я файлу

GetAssemblies() Цей метод отримує набір збірок .NET, які були завантажені в даний домен додатка (виконавчі збірки на основі СОМ і С ігноруються)

GetCurrentThreadId() Цей статичний метод повертає ідентифікатор активного потоку в поточному домені додатку

Load() Цей метод застосовується для динамічного завантаження збірки в поточний домен додатка

Unload() Цей статичний метод дозволяє вивантажити вказаний домен програми із заданого процесу

12

Вибрані властивості класу AppDomain

Andrey Gladky [email protected]

Властивість ОписBaseDirectory Ця властивість дозволяє отримати шлях до каталогу,

який розпізнавач збірок використовує для зондування збірок

CurrentDomain Це статична властивість дозволяє отримати домен програми, що використовується для поточного виконувалного потоку

FriendlyName Це властивість дозволяє отримати дружнє ім'я поточного домену додатки

MonitoringIsEnabled Це властивість дозволяє отримати або встановити значення, яке вказує, чи включений моніторинг ресурсів центрального процесора і пам'яті для поточного процесу. Після того, як моніторинг включений для процесу, відключити його неможливо

SetupInformation Це властивість дозволяє витягти деталі конфігурації для зазначеного домену додатка, які представлені у вигляді об'єкта AppDomainSetup

13

Вибрані події класу AppDomain

Andrey Gladky [email protected]

Подія ОписAssemblyLoad Ця подія виникає, коли збірка завантажується в пам'ять

AssemblyResolve Ця подія виникає, коли аналізатор збірок не може знайти місце розташування обов'язкової збірки

DomainUnload Ця подія виникає перед початком вивантаження домена додатку з розміщуваного процесу

FirstChanceException Ця подія дозволяє отримувати повідомлення про те, що в домені додатку було згенеровано виняток, перед тим як середовище CLR почне пошук відповідного оператора catch

ProcessExit Ця подія виникає в стандартному домені додатку тоді, коли його батьківський процес завершується

UnhandledException Ця подія виникає, коли виняток не було перехоплено оброблювачем винятків

14Andrey Gladky [email protected]

Демонстрація

15

Створення нових доменів додатківЄдиний процес здатний розміщувати безліч доменів додатків, що створюються за допомогою статичного методу AppDomain.CreateDomain().

Необхідність створення нових доменів додатка:

Створювані динамічні збірки повинні встановлюватися в спеціальний домен додатка.

Багато API-інтерфейсів, пов'язані з безпекою .NET, вимагають розуміння того, як конструювати нові домени додатків для ізоляції збірок на основі наданих облікових даних безпеки.

Andrey Gladky [email protected]