Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

з курсу ОПЕРАЦІЙНІ СИСТЕМИ до ЛАБОРАТОРНОЇ РОБОТИ 4 ldquo;Багатопотокове програмування в сучасних ОС

Работа добавлена на сайт samzan.net:


PAGE  3

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»

МЕТОДИЧНІ ВКАЗІВКИ

з курсу «ОПЕРАЦІЙНІ СИСТЕМИ»

до ЛАБОРАТОРНОЇ РОБОТИ 4

 Багатопотокове програмування в сучасних ОС”.

для студентів спеціальностей:
6.170101 «Безпека інформаційних і комунікаційних систем»
,
6.170103 «Управління інформаційною безпекою»

Львів 2013

Методічні вказівки до лабораторної роботи №4 за курсом «Операційні системи» для студентів спеціальностей: 6.170101 «Безпека інформаційних і комунікаційних систем», 6.170103 «Управління інформаційною безпекою». / Укл. А.Е. Лагун, Ю.М. Костів, С.С. Войтусік   - Львів: НУ «ЛП», 2013р.

Укладачі: А.Е. Лагун – к.т.н., доцент кафедри «Безпеки інформаційних технологій»;

      Ю.М. Костів – асистент кафедри «Безпеки інформаційних технологій» ;

С.С. Войтусік  – к. ф. – м. н., ст. викл. Кафедри «Безпеки інформаційних технологій».


Мета: ознайомлення з поняттям багатопотоковості в сучасних операційних системах,  

отримання практичних навичок створення багатопотокових застосувань в середовищі Visual Studio C#.

Теоретичні відомості

 Як відомо [1] потоком (потік керування, нитка, thread) називають набір послідовно виконуваних команд процесора, які використовують загальний адресний простір процесу. Оскільки в системі може одночасно бути багато потоків, завданням ОС є організація перемикання процесора між ними і планування їхнього виконання. У багатопроцесорних системах код окремих потоків може виконуватися на окремих процесорах.

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

Розглянемо яким чином можна оптимізувати програми, використовуючи багатопоточність.

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

Потоки не повинні заважати один одному і повинні використовувати ефективно ресурси системи, в якій вони працюють.

Управління багатопотоковістю.

Управління багатопотоковістю здійснює планувальник потоків, цю функцію CLR зазвичай делегує операційній системі. Планувальник потоків гарантує, що активним потокам виділяється відповідний час на виконання, а потоки, які очікують або блоковані, наприклад, на очікуванні ексклюзивної блокування, або користувача введення - не споживають часу CPU.

На однопроцесорних комп'ютерах планувальник потоків використовує квантування часу - швидке перемикання між виконанням кожного з активних потоків. Це призводить до непередбачуваного поведінки, коли кожна послідовність виконання потоків відповідає кванту часу, виділеного потоку. У Windows XP типове значення кванта часу - десятки мілісекунд - вибрано як суттєво більшу, ніж витрати CPU на перемикання контексту між потоками (декілька мікросекунд).

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

Кажуть, що потік витісняється, коли його виконання призупиняється через зовнішні фактори типу квантування часу. У більшості випадків потік не може контролювати, коли і де він буде витіснений.

Потоки і процеси.

Всі потоки однієї програми логічно містяться в межах процесу - модуля операційної системи, в якому виповнюється додаток.

У деяких аспектах потоки і процеси схожі - наприклад, час поділяється між процесами, що виконуються на одному комп'ютері, так само, як між потоками одного C #-додатки. Ключове відмінність полягає в тому, що процеси повністю ізольовані один від одного. Потоки поділяють пам'ять (купу) з іншими потоками цього ж додатка. Завдяки цьому один потік може постачати дані у фоновому режимі, а інший - показувати ці дані по мірі їх надходження.

Використання потоків.

Типовий додаток з багатопоточністю виконує тривалі обчислення у фоновому режимі. Головний потік продовжує виконання, в той час як робочий потік виконує фонову задачу. У додатках Windows Forms, коли головний потік зайнятий тривалими обчисленнями, він не може обробляти повідомлення клавіатури і миші, і додаток перестає відгукуватися. З цієї причини слід запускати віднімають багато часу завдання в робочому потоці, навіть якщо головний потік в цей час демонструє користувачеві модальний діалог з написом "Працюю ... Будь ласка, чекайте ", так як програма не може перейти до наступної операції, поки не закінчена поточна. Таке рішення гарантує, що програма не буде позначено операційною системою як "Не відповідає", спокушаючи користувача з горя прикінчити процес. Знову ж, у цьому випадку модальний діалог може надати кнопку "Скасувати", так як форма продовжує отримувати повідомлення, поки завдання виконується у фоновому потоці. Клас BackgroundWorker напевно стане в нагоді при реалізації такої моделі. У разі додатків без UI, наприклад, служб Windows, багатопотоковість має сенс, якщо виконувана завдання може зайняти багато часу, оскільки потрібно очікування відповіді від іншого комп'ютера (сервера додатків, сервера баз даних або клієнта). Запуск такого завдання в окремому робочому потоці означає, що головний потік негайно звільняється для інших завдань.

Інше застосування багатопотоковість знаходить в методах, що виконують інтенсивні обчислення. Такі методи можуть виконуватися швидше на багатопроцесорних комп'ютерах, якщо робоче навантаження рознесена по декількох потоках (кількість процесорів можна отримати через властивість Environment.ProcessorCount).

Додаток, створений на C # можна зробити багатопотоковим двома способами: або явно створюючи додаткові потоки і керуючи ними, або використовуючи можливості неявного створення потоків .NET Framework - BackgroundWorker, пул потоків, потоковий таймер, Remoting-сервер, Web-служби або додаток ASP.NET. У двох останніх випадках альтернативи багатопотоковості не існує. Однопотоковий web-сервер не просто поганий, він просто неможливий! На щастя, у випадку серверів додатків, що не зберігають стан (stateless), багатопотоковість реалізується зазвичай досить просто, складності можливі хіба що в синхронізації доступу до даних в статичних змінних.

Недоліки багатопотоковості.

Багатопотоковість разом з перевагами має і свої недоліки. Самий головний з них - значне збільшення складності програм. Складність збільшують не додаткові потоки самі по собі, а необхідність організації їх взаємодії. Від того, наскільки ця взаємодія є навмисною, залежить тривалість циклу розробки, а також кількість важко вловимих помилок у програмі. Таким чином, потрібно або підтримувати дизайн взаємодії потоків простим, або не використовувати багатопотоковість взагалі.

Крім того, надмірне використання багатопотоковості забирає ресурси і час CPU на створення потоків і перемикання між потоками. Зокрема, коли використовуються операції читання / запису на диск, більш швидким може виявитися послідовне виконання завдань в одному або двох потоках, ніж одночасне їх виконання в декількох потоках. Далі буде описана реалізація черги Постачальник / Споживач, що надає таку функціональність.

Засоби роботи з багатопотоковістю.

Для роботи з багатопотоковістю середовище .NET надає нам цілий простір імен System.Threading. У даному просторі імен міститься велика кількість різних типів. Для початку нам вистачить класу Thread, який якраз і знаходиться в даному просторі імен. У даного класу є багато корисних для роботи з потоками методів і властивостей, наприклад:

Start() - починає виконання потоку

Suspend() - призупиняє потік

Resume() - відновлює работу потоку

Priorityвластивість, що визначає приорітет потоку

Для того що б почати працювати з потоками створимо в середовищі Visual Studio C# консольне застосування, підключимо простір імен System.Threading, додавши в початок файлу з кодом наступну директиву:

using System.Threading;

 Таким чином виконання наступного коду буде виводити на консоль напис «Тестовий потік №1»  до тих пір поки не буде перерване натисканням будь-якої клавіші.

class ThreadClass

{

   public void writestring()

   {

       while (true)

       {

           Console.WriteLine("Тестовий потік №1");

       }

   }

}

 class Program

{

    static void Main(string[] args)

    {

        ThreadClass tc = new ThreadClass();

        Thread firstthread = new Thread(new ThreadStart(tc.writestring));

        firstthread.Start();

    }

}

Рис.1.

Таким чином метод writestring() працює в окремому потоці.

В методі main() створюється екземпляр класу ThreadClass. Далі ми створюємо об'єкт типу Thread і передаємо йому як параметр делегат ThreadStart що містить посилання на метод writestring(). Роботу з делегатам можна нагадати розглянувши наступні джерела [2,3]. Ну і останньою строчкою у нас запускається потік за допомогою методу Start(). 

У наведеному прикладі ми не бачимо наочно роботи потоку, але змінивши приклад наступним чином а саме, додавши ще один потік, який буде виводити рядок " Тестовий потік №2":

  class ThreadClass

   {

       public void writestring()

       {

           while (true)

           {

               Console.WriteLine("Тестовий потік №1");

               Thread.Sleep(1000);

           }

       }

       

       public void writestring2()

       {

           while (true)

           {

               Console.WriteLine("Тестовий потік №2");

               Thread.Sleep(1000);

           }

       }

   }

   class Program

   {

       static void Main(string[] args)

       {

           ThreadClass tc = new ThreadClass();

           Thread firstthread = new Thread(new ThreadStart(tc.writestring));

           Thread secondthread = new Thread(new ThreadStart(tc.writestring2));

           firstthread.Start();

           secondthread.Start();

       }

   }

Рис.2.

В даному лістінгу додали ще один метод writestring2(). Необхідно звернути увагу на рядок "Thread.Sleep (1000)", який з'явився в обох методах. Метод Sleep() "призупиняє" потік для наочносі на час вказаний в якості параметра (в мілісекундах). У прикладі ми призупиняємо потік на 1 секунду. У методі main() теж відбулися деякі зміни пов'язані з запуском нового потоку. Запустивши програму, ви побачите, що на екрані з'являється то рядок " Тестовий потік №1", то " Тестовий потік №2", причому в досить довільному порядку. Довільність пов'язана з тим, що на вашому комп'ютері запущена не тільки ваша програма, а багато інших, тому процесору доводиться "відволікатися" і на виконання інших завдань.  Приорітет виконання потоку можна змінити за допомогою наступної стрічки:

 Thread.CurrentThread.Priority = ThreadPriority.Highest;

Зі зміною приоритету треба бути уважним, так як необережне його підвищення може «підвісити систему».  Додаткову інформацію по програмуванню багатопотокових задач в C# можна знайти в  [2-4].

 

Послідовність виконання роботи

  1.  Вивчити теоретичний матеріал, що стосується методів та засобів багатопотоковості в C#. 
  2.  Побудувати алгоритм програми, яка вирішує завдання оптимізації виконання певних операцій над матрицями з використанням багатопотоковості. Завдання наведені в таблиці відповідно до варіанту.
  3.  Використовуючи засоби Visual Studio (C#, C++, …) створіть програму, що вирішує дане завдання (в консольному чи WinForms режимі).
  4.  Проведіть тестування створеної програми. 
  5.  Для 10-х варіантів довільних даних проведіть обчислення.
  6.  Результати обчислення наведіть у висновку .
  7.  В звіті по лабораторній роботі відобразити теоретичний огляд, зміст завдання, блок-схему алгоритму, текст програми та у вигляді таблиці результати роботи для 10-ти варіантів даних.  

Табл.1 Варіанти завдань

№ вар.

Кількість потоків

Завдання

1

2

Сума 2-х матриць (9х9).

2

3

Сума 2-х матриць (3х3).

3

3

Добуток 2-х матриць (3х3).

4

4

Добуток 2-х матриць (3х3).

5

3

Добуток 2-х матриць (4х4).

6

2

Добуток 2-х матриць (4х4).

7

5

Добуток 2-х матриць (5х5).

8

7

Сума 2-х матриць (7х7).

9

4

Сума 2-х матриць (7х7).

10

3

Сума 2-х матриць (3х3).

11

2

Сума 2-х матриць (3х3).

12

5

Добуток 2-х матриць (7х7).

13

4

Добуток 2-х матриць (3х3).

14

7

Добуток 2-х матриць (4х4).

15

5

Добуток 2-х матриць (4х4).

16

7

Добуток 2-х матриць (5х5).

17

4

Сума 2-х матриць (7х7).

18

5

Сума 2-х матриць (7х7).

19

8

Сума 2-х матриць (3х3).

20

4

Добуток 2-х матриць (3х3).

21

7

Добуток 2-х матриць (9х9).

Контрольні запитання

  1.  Дайте характеристику ефективності запропонованої в завданні схеми операцій над матрицями.
  2.  Яка кількість потоків найефективніше б вирішувала дане завдання. Відповідь обгрунтуйте
  3.  Яка кількість потоків в варіантах програм рис.1 та рис.2?
  4.  Дайте визначення поняття потоку.
  5.  Дайте визначення поняття процесу.
  6.  У яких випадках багатопотоковість дає найкращий ефект?
  7.  В яких задачах криптології слід використовувати багатопотоковість?  
  8.  Які потоки називають недетермінованими?
  9.  Опишіть основні проблеми взаємодії потоків.

Література.

1. Современные операционные системы: [пер. с англ.] Эндрю С. Таненбаум Издательский дом "Питер", 2011 - 1115 стор.

2.     http://blog.nguen.net/post251-multythreading.html

3.     http://msdn.microsoft.com/ru-ru/library/ms173178%28v=vs.100%29.aspx

4.     http://rsdn.ru/article/dotnet/CSThreading1.xml




1. Globalisierung l~sst kleine Sprachen aussterbe
2. тематике типа С4 различными способами
3. И К Айвазовский Девятый ва
4. эмпирической практической деятельности начинает строить теоретические модели с использованием абстрактн
5. Тема 4 Бухгалтерські рахунки та подвійний запис Тема 4
6. Тема- Союзные сложные предложения
7. Стилистика текста
8. С программалау тілі туралы ма~л~маттар Си тілі ~ткен ~асырды~ 70жылдары басында А~Шта Bell Telephon Lbortories компа
9. Становление экономической теории.html
10. тема Microsoft Windows 9x ME 2000 XP 2003; ~ частота процессора не ниже 233 МГц; ~ оперативной памяти не менее 64 Мб рекомен
11. План занятий по дисциплине народная художественная культура
12. майор міліції С
13. Учебные издания Омского университета ISBN 9785777907851 Кратко изложены теоретические основы современной ан.
14. тема- а гарантирует всем участникам равные права на труд и доход; б удовлетворение запросов тех кто м
15. практикум 6 Грузоподъемные и такелажные приспособления
16. Пошив. 2
17. Организации производства на предприятиях питания
18. плеврит Для евакуації ексудату була призначена плевральна пункція
19. 1 Нормативно ~ правовое регулирование учета денежныхсредств в кассе предприятия 6 1
20. Глава XXXДЖОН ДЬЮИ Общепризнано что Джон Дьюи род