
- •"Програмне забезпечення автоматизованих систем"
- •1. Оперативна пам'ять
- •2. Регістри
- •3. Прапори
- •1. Переходи
- •2. Безумовні переходи
- •3. Умовні переходи
- •4. Команди керування циклом
- •1. Подання даних арифметичні операції
- •2. Цілі числа без знака
- •3. Цілі числа зі знаком
- •4. Особливості виконання арифметичних операцій
- •5. Подання символів і рядків
- •6. Подання адрес
- •7. Директиви визначення даних
- •1. Структура команд. Виконавчі адреси
- •2. Формати команд
- •3. Запис команд в masm
- •1. Сегменти пам’яті, сегментні регістри
- •2. Сегментні регістри по домовленості
- •3. Сегментування, базування й індексування адрес
- •4. Програмні сегменти. Директива assume
- •5. Початкове завантаження сегментних регістрів
- •6. Посилання вперед
- •1. Строкові операції
- •1. Стек
- •2. Основні стекові команди
- •1. Організація процедур та переривань
- •2. Передача параметрів процедурам через регістри, через стек, через таблиці, через глобальні області
- •3. Передача параметрів по ссылке
- •4. Передача параметрів по повернутому значенню
- •5. Передача параметрів в стеку
- •6. Локальні змінні
- •1. Процеси і потоки
- •1.1 Розподіл часу між потоками
- •1.2 Динамічна зміна рівня пріоритету потоку
- •2. Робота із процесами й потоками в Win32 api
- •1. Адресний простір процесу
- •2. Керування віртуальною пам'яттю. Vmm
- •3. Файли даних, що проектуються на згадку
- •4. Взаємодія процесів через загальну область даних. Когерентність
- •5. Купи
- •1. Визначення вікна. Компоненти й параметри вікон
- •2. Клас вікна
- •3. Ієрархія вікон
- •1. Обмін даними між процесами
- •2. Вилучений виклик процедур (rpc - Remote Procedure Call)
- •3. Синхронізація потоків
- •1. Загальний порядок обробки виключень
- •2. Фільтри й оброблювачі виключень
- •1. Загальна структура системного реєстру
- •2. Робота додатків із системним реєстром
- •1. Файлові структури
- •2. Робота з томами й каталогами
- •3. Синхронна робота з файлами
- •4. Асинхронна робота з файлами
- •1. Системні файли ntfs
- •2. Master File Table (mft)
- •3. Цілісність даних і здатність до самовідновлення.
- •4. Організація й керування дисками
5. Передача параметрів в стеку
Спочатку параметри заносяться в стек перед виловом процедури. Саме цей метод використовують мови високого рівня, такі як C, Pascal. Для читання параметрів із стеку використовують не команду POP, а регістр BP, в який заносять адресу вершини стеку після входу в процедуру.
Приклад:
Push parameter1 ; поместить параметр в стек
Push parameter2
Call procedure
Add sp,4 ; освободить стек
[……]
procedure proc near
push bp
mov bp, sp
(команди, які можуть використовувати стек)
mov ax, [bp+4] ; считать параметр 2
mov bx, [bp+6]
pop bp
ret
procedure endp
6. Локальні змінні
Дуже часто процедурам потрібні змінні які потім не будуть використовуватись в головної програмі. Такі змінні прийнято називати локальними. Існує декілька способів зберігання локальних змінних. Найбільш розповсюджений спосіб зберігати локальні перемінні в стеку.
Приклад:
Fob proc near
Fob_x equ [bp+8]
Fob_y equ [bp+6]
Fob_z equ [bp+4]
Fob_l equ [bp-2]
Fob_m equ [bp-4]
Fob_n equ [bp-6]
Push bp
Mov bp, sp
Sub sp,6
Mov ps, bp
Pop bp
Ret 6 ;Повернутися видаливши параметри із стека
Fob endp.
Лекція 10
Тема: Процеси і потоки
1. Процеси і потоки
Процес - завантажена на згадку й готова до виконання програма. Кожен процес має свій власний віртуальний адресний простір (4Gb). Процес складається з коду, даних й інших системних ресурсів, таких як відкриті файли, канали (pipes), що синхронізують об'єкти.
Потік(thread) – базовий об’єкт, якому операційна система розподіляє час центрального процесора. Виконання процесу починається зі стартового потоку. Надалі він може породжувати інші потоки. Ресурси процесу доступні всім його потокам. Кожен потік використає структуру даних, для збереження контексту виконання, у той час, коли в нього віднімається процесор. У контекст входять регістри процесора, змінні оточення, стеки ядра й користувача. Всі потоки одного процесу спільно використають його віртуальний адресний простір. Процесорний час розподіляється по черзі між потоками, а не між процесами. Тривалість кванта виділення часу становить близько 20 мс.
1.1 Розподіл часу між потоками
Процесорний час виділяється потокам відповідно до їх рівня пріоритету. Потоку з більше низьким пріоритетом не виділяється час, якщо на нього претендує потік з більше високим рівнем пріоритету. Більше того, процес із більше низьким пріоритетом переривається до витікання кванта часу, якщо на процесор претендує потік з більше високим рівнем пріоритету. Необхідно пам'ятати, що в середовищі Windows основна «робота» потоку складається чекаючи події й реагуванні на нього. Це дає шанс на виконання потокам з низьким рівнем пріоритету.
Рівні пріоритетів варіюються в діапазоні від 0 (нижчий) до 31 (вищий).
Рівень пріоритету кожного потоку складається із трьох складових
клас пріоритету процесу (простоюючий , нормального, високий, реального часу)
рівень пріоритету потоку усередині класу пріоритету процесу (нижній, нижче нормального, нормальний, вище нормального, вищий)
динамічно встановлений рівень пріоритету.
Клас пріоритету процесу
Таблиця 1.1
Клас |
Прапор у функції CreateProcess |
Числовий рівень |
Idle (простоюючий) |
IDLE PRIORITY CLASS |
4 |
Normal (нормальний) |
NORMAL PRIORITY CLASS |
7-9 |
High(високий) |
HIGH PRIORITY CLASS |
13 |
Real time(peanbHoro часу) |
REALTIME_PRIORITY_CLASS |
24 |
При запуску на виконання процесу йому призначається один із чотирьох класів пріоритету. Рівень Idle призначається процесу, що нічого не повинен робити у випадку активності інших процесів (наприклад, хоронитель екрана). Процесам, що запускає користувачем, привласнюється нормальний рівень. Користувач може запустити кілька процесів. Тому процесу, з яким користувач безпосередньо працює (а це може бути тільки один процес) рівень пріоритету піднімається на дві одиниці (7+2 - 9). Це робить спілкування із прикладною програмою більше «комфортабельним». Високий клас пріоритету призначається деяким системним процесам, які простоюють до виникнення певних подій й, тому, не заважають іншим процесам. Тільки в особливих випадках процес може ставитися до класу Real time.