1   2   3   4   5   6   7   8   9   10
Ім'я файлу: 1-126.pdf
Розширення: pdf
Розмір: 1940кб.
Дата: 12.12.2021
скачати
55. „Нитки” (потоки), призначення та застосування.
Багатозадачність — найважливіша властивість ОС. Для підтримки цієї властивості ОС визначає і створює для себе ті внутрішні одиниці роботи, між якими і буде розділятись процесор і інші ресурси комп‘ютера. Наприклад, в ході виконання задачі відбувається звертання до зовнішнього пристрою і на час цієї операції можна не блокувати повністю виконання процесу, а продовжити виконання іншої „гілки‖ процесу. Для цього пропонується механізм багато-ниткової обробки (multithreading). Вводиться нове поняття „нитка‖ (thread). Мультипрограмування тепер реалізується на рівні ниток. Наприклад: якщо електронна таблиця була розроблена з врахуванням можливостей багатониткової обробки, то користувач може запросити перерахунок своєї таблиці і одночасно продовжувати її заповнювати. Багато-нитковий сервер може паралельно виконувати запити одразу декількох клієнтів. Оскільки всі нитки одного процесу завжди належать одній прикладній програмі, між ними досить легко організувати тісну взаємодію. Програміст може завчасно продумати роботу множини ниток процесу таким чином, щоби вони могли взаємодіяти, а не боротись за ресурси.
Нитки в багатьох відношеннях потрібні процесам, але в рамках одного процесу не є такими незалежними, як процедури: - всі нитки мають один адресний простір; - вони розділяють одні і ті самі глобальні змінні;
- кожна нитка має доступ до довільної віртуальної адреси, але одна нитка може використовувати стек іншої; - між нитками немає повного захисту, всі нитки розділяють один набір відкритих файлів, таймерів, сигналів і т. ін. Таким чином нитки мають власні: - програмний лічильник; - стек; - регістри; - нитки-нащадки; - стани.
Нитки розділяють: - адресний простір; - глобальні змінні; - відкриті файли; - таймери;
- семафори; - статистичну інформацію. Приклад. Керування сигналами, наприклад, переривання з клавіатури (delete або break). Замість обробки сигналу переривання одна нитка призначається для постійного очікування надходження сигналів. Таким чином, нитки можуть скоротити необхідність в перериваннях рівня користувача.

56. Завантажувані модулі. COM – файли, призначення та використання.
Програми, що призначені для виконання в середовищі операційної системи DOS називаються завантажуваними модулями та містяться у файлах, що мають розширення
COM або EXE.
Файли COM – програми, що завантажуються безпосередньо. Для них не потрібно фактично ніякої підготовки для запуску їх після завантаження в ОЗП засобами DOS.
Проводиться лише формування спеціальної сегмент-приставки, необхідної для всіх програм, що завантажуються ОС, і встановлення регістрів сегментів МП (їм присвоюються стандартні значення), після чого керування передається програмі, що завантажена в ОЗП. Файли типу СОМ завантажуються в ОЗП відразу ж після системної області (в нижню частину доступної пам‘яті)
Формат програм в файлах типу СОМ компактніший та простіший. СОМ-файл – вміщує тільки машинні команди та дані, без заголовку, таблиці переадресації або відлагоджувальної інформації. Максимальний розмір файлу – 64 Кбайти.
Завантажувач працює з СОМ-файлом таким чином: - відводить максимально можливий блок вільної пам‘яті, будує префікс програмного сегменту (Program
Segment Prefix - PSP) на початку блоку; - читає СОМ-файл в пам‘ять відразу за PSP і передає керування на перший байт програми. Формат СОМ-файла скопіювали з формату виконуваних модулів ОС СР/М Digital Research для 8080, 880. тому вони незахищені. Можна присвоїти довільному файлу розширення СОМ і з командного рядка завантажити його в DOS.

57. Завантажувані модулі. EXE – файли, призначення та використання.
Програми, що призначені для виконання в середовищі операційної системи DOS називаються завантажуваними модулями та містяться у файлах, що мають розширення
COM або EXE. При завантаженні файлів ЕХЕ в ОС, необхідно провести спеціальну підготовку. Основа підготовки – переміщення, яке здійснюється завантажувачем командного процесора і заключається в налагодженні адрес в програмі в залежності від місця її завантаження в ОЗП. Інформація, необхідна для переміщення, зберігається в файлі типу ЕХЕ починаються двобайтовою міткою (її значення 4D5AH).
ЕХЕ-файл – складається з трьох основних компонентів: - заголовок файлу, - таблиця переадресацій, - власне код та дані програми. Заголовок – містить кілька
інформаційних блоків: - двобайтну сигнатуру MZ (Марк Збиковськи); - розміри заголовку, таблиці переадресації і файлу в цілому; - початкові значення CS:IP і SS:SP в момент запуску програми; - контрольна сума; - деякі вказівки з розподілу пам‘яті для завантажувача DOS. Максимальний розмір ЕХЕ-файлу не обмежений. До його складу можна включити відлагоджувальну інформацію, дописавши цю інформацію в кінець файлу та залишивши без змін його розмір, вказаний в заголовку. Завантажувач DOS цю інформацію проігнорує. Головний недолік ЕХЕ-файлів – вони не зберігають
інформацію про окремі сегменти програми; коли компоновщик (linker) формує ЕХЕ- файл, він збирає всі заявлені у вихідному тексті сегменти в один величезний об‘єм із спільною таблицею переадресації.
58. Особливості планування потоків у ОС Windows.
Системний алгоритм керування послідовністю виконання потоків та розподілу процесорного часу між ними називають плануванням потоків. У Windows реалізовано підсистему витискуючого планування потоків на основі рівнів пріоритету, у якій завжди виконується готовий до виконання потік з найбільшим пріоритетом[3]. Але вибір потоку для виконання може бути обмежений набором процесорів, на яких вона може працювати. Це явище називають прив'язкою до процесорів (processor affinity). За замовчуванням потік виконується на будь-якому доступному процесорі, але можна змінити прив'язку до процесорів через функції планування.
Обраний для виконання потік працює протягом певного періоду, який називають квантом. Квант визначає, скільки часу буде виконуватися потік, поки не настане черга іншого потоку з тим же пріоритетом (або вищим). Тривалість квантів залежить від трьох факторів: конфігураційних параметрів системи (довгі або короткі кванти), статусу процесу (активний або фоновий) і використання об'єкту «завдання» для зміни тривалості квантів. Однак потік може не повністю використати свій квант.
Оскільки у Windowsреалізовано витискуючій планувальник, то відбувається наступне.
Щойно інший потік з вищим пріоритетом готовий до виконання, поточний потік витискується, навіть якщо його квант ще не минув. Тому потік може бути обраний для виконання і тут же витиснений, не скориставшись своїм квантом.

59. Складові елементи потоку в ОС Windows.
Потік містить такі важливі елементи:

завантажений для виконання код;

вміст набору регістрів процесора, що відображають стан процесора;

два стеки, один із яких використовується потоком при виконанні в режимі ядра, а інший — у користувацькому режимі;

закриту область пам'яті, яку називають локальною пам'яттю потоку (thread-local storage, TLS); вона використовується підсистемами, бібліотеками виконуваних систем (run-time libraries) і DLL;

унікальний ідентифікатор потоку;

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

60. Структури даних потоку в ОС Windows.
Потік у Windows ХР складається з таких елементів:

вмісту набору регістрів, який визначає стан процесора;

двох стеків — один використовують для роботи в режимі користувача, інший — у режимі ядра; ці стеки розміщені в адресному просторі процесу, що створив цей потік;

локальної пам'яті потоку (TLS);

унікального ідентифікатора потоку (thread id, tid), який вибирають із того самого простору імен, що й ідентифікатори процесів.
Сукупність стану процесора, стеків і локальної пам'яті потоку становить контекст потоку. Кожний потік має власний контекст. Усі інші ресурси процесу (його адресний простір, відкриті файли тощо) спільно використовуються потоками.
Розрізняють два види потоків: потоки користувача і потоки ядра, які у Windows ХР називають системними робочими потоками — system worker threads. Перші з них створюють у режимі користувача й тільки за необхідності перемикають у режим ядра.
Інші створюють в ядрі під час його ініціалізації і виконують у режимі ядра протягом усього часу їхнього існування.
У режимі користувача доступним є блок оточення потоку (thread environment block,
ТЕВ), який перебуває в адресному просторі процесу, що створив потік.
Неважко помітити, що кожній структурі даних потоку відповідає структура даних процесу (блоки EPROCESS, KPROCESS і РЕВ).
Керуючий блок потоку містить базову інформацію про потік, зокрема:

блок потоку ядра;

ідентифікатор процесу, до якого належить потік, і покажчик на керуючий блок цього процесу (EPROCESS);

стартову адресу потоку, з якої почнеться виконання його коду;

інформацію для підсистеми безпеки.

61. Створення потоків у ОС Windows.
Життєвий цикл потоку починається при його створенні програмою. Запит на створення потоку надходить виконавчій системі Windows, диспетчер процесів виділяє пам'ять для об'єкта "потік" і викликає ядро для ініціалізації блоку потоку. Нижче перераховані основні етапи створення потоку функцією API CreateThread (вона міститься в Kernel32.dll)[4]:
1. Створення стеку користувацького режиму в адресному просторі процесу.
2. Ініціалізація апаратного контексту потоку, специфічного для конкретної архітектури процесора.
3. Для створення об'єкта «потік» виконавчої системи викликається NtCreateThread.
CreateThread повідомляє підсистему Windows про створення нового потоку і та виконує підготовчі операції.
4. Викликаючому коду повертаються дескриптор і ідентифікатор потоку, згенерований на попередньому етапі.
5. Виконання потоку відновлюється і йому може бути виділено процесорний час
(якщо він не був створений із прапорцем CREATE_SUSPENDED).
Функція CreateThread оголошена так (визначення за допомогою мови Delphi)[1]: function CreateThread( lpThreadAttributes: Pointer; // Атрибути безпеки потоку dwStackSize: DWORD; // Размір стеку для потоку lpStartAddress: TFNThreadStartRoutine; // Функція потоку lpParameter: Pointer; // Аргумент для нового потоку dwCreationFlags: DWORD; // Прапорці створення var lpThreadId: DWORD // Ідентифікатор потоку
): THandle; // Дескриптор потоку
Ключовим параметром цієї функції є вказівник lpStartAddress, який вказує на функцію потоку. Саме у ній міститься виконуваний код потоку. Як правило, це адреса функції, яка приймає єдиний 32-бітний вказівник у ролі аргумента та повертає 32-бітний вихідний код.

62. Планування потоків у ОС Windows: пріоритети.
Системний алгоритм керування послідовністю виконання потоків та розподілу процесорного часу між ними називають плануванням потоків. У Windowsреалізовано підсистему витискуючого планування потоківна основі рівнів пріоритету, у якій завжди виконується готовий до виконання потік з найбільшим пріоритетом
У Windows передбачено 32 рівні пріоритету — від 0 до 31. Ці значення групуються так:

шістнадцять рівнів реального часу (16-31);

п'ятнадцять динамічних рівнів ( 1-15);

один системний рівень (0), зарезервований для потоку обнулення сторінок пам'яті (zero page thread).
В межах кожного класу пріоритету можуть бути наступні рівні пріоритету потоків[1]:

THREAD_PRIORITY_IDLE,

THREAD_PRIORITY_LOWEST,

THREAD_PRIORITY_BELOW_NORMAL,

THREAD_PRIORITY_NORMAL,

THREAD_PRIORITY_ABOVE_NORMAL,

THREAD_PRIORITY_HIGHEST,

THREAD_PRIORITY_TIME_CRITICAL.
За замовчуванням потоки створюються із значенням пріоритету
THREAD_PRIORITY_NORMAL. Значення рівнів пріоритету потоків
THREAD_PRIORITY_ABOVE_NORMAL та THREAD_PRIORITY_HIGHEST найчастіше використовуються у потоках, що призначені для взаємозв'язку з користувачами. Фонові потоки, які не потребують значних процесорних ресурсів, можуть мати пріоритет THREAD_PRIORITY_BELOW_NORMAL або
THREAD_PRIORITY_LOWEST.
Рівні пріоритету потоку призначаються з урахуванням двох різних точок зору —
Windows API і ядра Windows. Windows API спочатку впорядковує процеси за класами пріоритету, призначеними при їхньому створенні (Realtime (реального часу), High
(високий), Above Normal (вище звичайного), Normal (звичайний), Below Normal
(нижче звичайного) і Idle (простоюючий)), а потім — за відносним пріоритетом
індивідуальних потоків у межах цих процесів (Time-critical (критичний за часом),
Highest (найвищий), Above Normal (вище звичайного), Normal (звичайний), Below
Normal (нижче звичайного), Lowest (найменший) і Idle (простоюючий)).
Базовий пріоритет кожного потоку у Windows API встановлюється, виходячи із класу пріоритету її процесу й відносного пріоритету самого потоку.

63. Планування потоків у ОС Windows: вибір кванту часу.
Обраний для виконання потік працює протягом певного періоду, який називають квантом. Квантвизначає, скільки часу буде виконуватися потік, поки не настане черга іншого потоку з тим же пріоритетом (або вищим). Тривалість квантів залежить від трьох факторів: конфігураційних параметрів системи (довгі або короткі кванти), статусу процесу (активний або фоновий) і використання об'єкту «завдання» для зміни тривалості квантів. Однак потік може не повністю використати свій квант.
Оскільки у Windowsреалізовано витискуючій планувальник, то відбувається наступне.
Щойно інший потік з вищим пріоритетом готовий до виконання, поточний потік витискується, навіть якщо його квантще не минув. Тому потік може бути обраний для виконання і тут же витиснений, не скориставшись своїм квантом.
64. Планування потоків у ОС Windows: динамічна зміна пріоритету та кванту
часу.
Windows може динамічно підвищувати значення поточного пріоритету ниті в одному з таких випадків:

після завершення операцій вводу-виводу;

після закінчення очікування на події або семафорі виконавчої системи;

після закінчення операції очікування нитями активного процесу;

при пробудженні GUI-нитей через операції з вікнами;

якщо нить, готова до виконання, затримується через нестачу процесорного часу.
Динамічне підвищення пріоритету призначене для оптимізації загальної пропускної здатності й чутливості системи, а також для усунення потенційно "несправедливих" сценаріїв планування, при яких одній ниті виділяється значно більше процесорного часу, ніж іншим. Але, як і будь-який інший алгоритм планування, динамічне підвищення пріоритету не завжди може вирішити всі проблеми планування, і від нього виграють не всі програми.
Windows ніколи не збільшує пріоритет нитей у діапазоні реального часу. Тому планування таких нитей стосовно інших завжди передбачуване.
Коли нить витратить свій квант процесорного часу, Windows повинна вирішити, чи знижувати її пріоритет і під’єднати до процесора іншу нить. Знизивши пріоритет ниті,
Windows шукає доркчну для виконання нить (такою є будь-яка нить із черги готових, пріоритет якої вищий нового пріоритету поточної ниті). Якщо
Windows не змінює пріоритет ниті і в черзі готових нитей є інші з тим же пріоритетом, вона вибирає із черги наступну нить з таким же пріоритетом, а нить, що виконувалася до цього, переміщає у хвіст черги (задаючи їй нову величину кванта й переводячи її зі стану
Running у стан Ready). Якщо жодна нить з тим же пріоритетом не готова до виконання, активній ниті виділяється ще один квант процесорного часу.

65. Механізми синхронізації потоків у ОС Windows.
Практично в кожній багатонитевій програмі потрібно узгоджувати між собою роботу нитей. Такі дії називають синхронізацією нитей. Необхідність у цьому може виникнути при доступі до спільних змінних (як демонструє останній приклад). В
іншому випадку нить не повинна продовжувати роботу, поки інша нить не досягне певного етапу свого виконання. Завжди потрібно бути впевненим, що кілька нитей одночасно не записують дані в одну і ту ж ділянку пам’яті.
Для запобігання помилкам, які можуть виникати при узгодженні роботи кількох нитей у Windows, використовують засоби синхронізації: критичні секції, м’ютекси, семафорита події. Об’єкти синхронізації забезпечують доступ до системних ресурсів, які можуть перебувати під керуванням одного чи кількох процесів. Об’єкт синхронізації може перебувати у двох станах: сигнальному та несигнальному. Коли об’єкт перебуває у стані зайнятості, або несигнальному стані, очікуюча нить не може працювати. Сигнальний стан об’єкта синхронізації дозволяє продовжити роботу ниті.
Для очікування на сигнальний стан об'єкта синхронізації використовують функції очікування[3]. Функції очікування (синхронізації) — це набір функцій API, які зупиняють виконання ниті, доки не буде досягнуто заданих умов. Такі функції перевіряють стан об’єктів синхронізації, і якщо вони перебувають у сигнальному стані, робота ниті відновлюється. В іншому випадку функція призупинить нить, постійно опитуючи об’єкт синхронізації, поки він не перейде у сигнальний стан або не закінчиться заданий час очікування.

66. База реєстрації даних у ОС Windows (системний реєстр).
Реєстр Windows (англ. Windows Registry) — база даних, що зберігає параметри і налаштування для операційних систем Microsoft Windows 32-бітних версій, 64-бітних версій та Windows Mobile. Він містить інформацію і налаштування для всіх апаратних засобів, програмного забезпечення, користувачів тощо. Кожен раз, коли користувач змінює будь-які параметри в «Панелі керування», зміни відбуваються у реєстрі.
Реєстр Windows було введено, щоб відмовитись від використання файлів INI, що використовувалися для збереження параметрів конфігурації програм Windows раніше
(тобто кожна програма зберігала свої налаштування в окремому файлі). Тому ці файли мали тенденцію бути розкиданими по всій системі, що утруднювало спостереження і контроль за ними.
Ключ реєстру — це група розділів, підрозділів і параметрів реєстру, з якою пов'язано групу допоміжних файлів, де містяться резервні копії всіх цих даних. У Windows NT
4.0, Windows 2000, Windows XP, Windows Server 2003 та Windows Vista допоміжні файли для всіх ключів, окрім HKEY_CURRENT_USER, містяться в папці %SystemRoot%\System32\Config. Допоміжні файли для HKEY_CURRENT_USER розташовані в папці %SystemRoot%\Profiles\Username[джерело?].
Реєстр в тому вигляді, як його використовує Windows і як бачить його користувач в процесі використання програм роботи з реєстром, деяким чином «ніде не зберігається». Щоб вийшло те, що бачить користувач, коли редагує реєстр, відбувається наступне:

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

потім, в процесі кожного завантаження системи, а так само в процесі кожного входу і виходу кожного з користувачів, формується якась віртуальна сутність, що називається «реєстром». Дані для формування «реєстру» беруться з тих самих файлів і з інших місць.
Тобто частина даних реєстру зберігається у файлах, а частина даних породжується в процесі завантаження Windows. Для редагування, перегляду і вивчення реєстру стандартними засобами Windows (програми regedit.exe і regedt32.exe) доступні саме гілки реєстру. Після редагування реєстру і внесення до нього змін ці зміни відразу записуються у файли.
Проте, є програми сторонніх розробників, які дозволяють працювати безпосередньо з файлами. Наприклад, програми від Paullee і програми Registry Reanimator. Програми оптимізації реєстру, твікери, а так само інсталятори і деінсталятори програм працюють через спеціальні функції роботи з реєстром.


1   2   3   4   5   6   7   8   9   10

скачати

© Усі права захищені
написати до нас