Файл tema2_3

advertisement
Тема 2. Управление процессами. Файл 147331784
С. 1 из 12
3. Алгоритмы планирования процессов и потоков
3.1. Планирование и диспетчеризация
Планирование процессов включает в себя решение следующих задач:
 определение момента времени для смены выполняемого процесса;
 выбор процесса на выполнение из очереди готовых процессов.
Различные алгоритмы планирования могут преследовать различные цели и обеспечивать разное
качество мультипрограммирования. Например, алгоритм должен гарантировать, что ни один процесс не будет занимать процессор дольше определенного времени; другой обеспечивает максимально быстрое выполнение «коротких» задач; третий обеспечивает преимущественное право на
процессорное время интерактивным приложениям. Именно особенности планирования процессов
в наибольшей степени определяют специфику ОС.
В большинстве ОС универсального назначения планирование осуществляется динамически (online), то есть решения принимаются во время работы системы на основе анализа текущей
ситуации. ОС не имеет никакой предварительной информации о задачах, которые появляются в
случайные моменты времени.
Статический тип планирования используется в специализированных системах, где набор
одновременно выполняемых задач определен заранее (например, в системах реального времени).
Здесь решение о планировании принимается заранее (off-line).
Диспетчеризация заключается в реализации найденного в результате планирования решения, т.е.
в переключении процессора с одного потока на другой, и сводится к следующему:
 сохранение контекста текущего процесса;
 загрузка контекста нового процесса;
 запуск нового процесса.
В отличие от планирования, осуществляемого программными средствами ОС, диспетчеризация
реализуется совместно с аппаратными средствами процессора.
Примечание. В различных ОС компоненты, занимающиеся планированием, могут называться поразному: scheduler – распорядитель, или планировщик, – в Unix; dispatcher – в Windows.
3.2. Вытесняющие и невытесняющие алгоритмы планирования
С самых общих позиций – по принципу освобождения процессора активным процессом –
существует два основных типа процедур планирования процессов: вытесняющие и невытесняющие.
Невытесняющая многозадачность (non-preemptive multitasking) – способ планирования процессов, при котором активный процесс выполняется до тех пор, пока он сам, по собственной инициативе, не отдаст управление планировщику операционной системы для того, чтобы тот выбрал из
очереди другой готовый к выполнению процесс.
При невытесняющем программировании механизм планирования распределен между ОС и прикладными программами, что создает проблемы как для пользователей, так и для разработчиков
приложений, хотя и может быть преимуществом при решении некоторого фиксированного набора
задач 1.
Вытесняющая многозадачность (preemptive multitasking) – способ, при котором решение о переключении процессора с выполнения одного процесса на выполнение другого принимается операционной системой, а не самой активной задачей.
При вытесняющем мультипрограммировании
сосредоточены в операционной системе.
функции
планирования
процессов
целиком
Почти во всех современных операционных системах, ориентированных на высокопроизводительное выполнение приложений (Unix, Windows NT/2000, OS/2, VAX/VMS), реализованы вытесняющие
алгоритмы планирования процессов, в которых механизм планирования задач целиком сосредоточен в операционной системе. Программист пишет свое приложение, не заботясь о том, что оно
Примером эффективного использования невытесняющего планирования являются файл-серверы NetWare
3.x и 4.x, в которых благодаря такому планированию достигнута высокая скорость выполнения файловых
операций.
1
Тема 2. Управление процессами. Файл 147331784
С. 2 из 12
будет выполняться параллельно с другими задачами. Операционная система определяет момент
снятия с выполнения активной задачи, запоминает ее контекст, выбирает из очереди готовых задач следующую и запускает ее на выполнение, загружая ее контекст.
3.3. Алгоритмы, основанные на квантовании (классификация по принципу смены активного
процесса во времени)
В соответствии с алгоритмами, основанными на квантовании, смена активного процесса происходит, если исчерпан квант процессорного времени, отведенный данному процессу (или процесс
перешел в состояние ожидания, или произошла ошибка, или процесс завершился и покинул систему).
Процесс, который исчерпал свой квант, переводится в состояние готовности и ожидает, когда ему
будет предоставлен новый квант процессорного времени, а на выполнение в соответствии с определенным правилом выбирается новый процесс из очереди готовых. Это – концепция разделения
времени. Ниже изображен граф состояний процесса, соответствующий описанному алгоритму.
Видно, что это частный случай графа рис. 2.4.
Процесс завершен
или произошла ошибка
Выполнение
Процессу
предоставлен квант
Процесс инициировал
Процесс исввод-вывод
черпал квант
Готовность
Ожидание
Ввод-вывод завершен
Рис. 2.6. Граф состояний процесс в системе с квантованием
Выделяемые кванты могут быть одинаковыми для всех процессов или различными. Кванты,
выделяемые одному процессу, могут быть фиксированной величины или изменяться в разные
периоды жизни процесса.
 Случай, когда всем процессам предоставляются кванты одинаково длины (рис. 2.7).
Время ожидания процессом 1 следующего кванта: q(n-1)
1
2
q
…..
3
q
q
n-1
q
n
Очередь
процессов
q
q
Процессор
Рис. 2.7. Режим разделения времени. Иллюстрация расчета времени ожидания в очереди
Приведем некоторые весьма грубые оценки.
Пусть в системе имеется n процессов, каждый из которых требует для своего выполнения
примерно B единиц времени при монопольном использовании системы. Пусть q – длина кванта.
Тогда процесс проводит в ожидании следующего кванта время, равное q(n-1). Чем больше
процессов в системе, тем больше эта величина и меньше возможность вести интерактивную
работу с пользователями. Однако если величина кванта очень невелика, то время ожидания все
равно будет приемлемым для пользователей. Типичное значение кванта в системах разделения
времени составляет десятки миллисекунд.
Если квант короткий (т.е. в общем случае B >> q и процесс многократно участвует в цикле
обработки), то суммарное время, которое процесс проводит в ожидании процессора, прямо
пропорционально B.
Тема 2. Управление процессами. Файл 147331784
С. 3 из 12
Действительно, необходимое для процесса количество циклов выполнения равно B/q, и тогда
общее время ожидания равно (q(n-1))*( B/q), или в итоге – B(n-1).
При достаточно большом кванте алгоритм квантования вырождается в алгоритм последовательной обработки, при котором время ожидания задачи в очереди не зависит от её длительности.
 Варианты алгоритмов квантования с изменяющимся квантом.
 Пусть первоначально каждому процессу назначается достаточно большой квант, а величина
каждого следующего кванта уменьшается до некоторой заранее заданной величины.
В таком случае преимущество получают короткие задачи, а длительные вычисления будут
проводиться в фоновом режиме.
 Пусть каждый следующий квант, выделяемый очередному процессу, больше предыдущего.
Такой подход позволяет уменьшить накладные расходы на переключение задач в том случае,
когда сразу несколько задач выполняют длительные вычисления.
 Процессы, которые не полностью использовали выделенный им квант (например, из-за ухода на
выполнение операций ввода-вывода), могут получить компенсацию в виде привилегий при последующем обслуживании. Для этого планировщик создает две очереди готовых процессов (рис. 2.8).
Процесс завершен
или произошла ошибка
Квант исчерпан
Вновь созданные
процессы
Выполнение
Назначен
квант
Назначен
квант
Очередь 1
готовых процессов
Требуется ввод-вывод
Ожидание
Очередь 2
готовых процессов
Ввод-вывод завершен
Рис. 2.8. Квантование с предпочтением процессов, интенсивно обращающихся к вводу-выводу
Очередь 1 образована процессами, которые пришли в состояние готовности в результате
исчерпания кванта времени, а очередь 2 – потоками, у которых завершилась операция вводавывода. При выборе процесса для выполнения прежде всего просматривается вторая очередь, и
только если она пуста, квант выделяется потоку из первой очереди.
 Очереди готовых процессов также могут быть организованы по-разному: по правилу «первый
пришел – первый обслужился» (FIFO) или по правилу «последний пришел – первый обслужился»
(LIFO).
 В любом случае в алгоритмах, основанных на квантовании, не используется никакой
предварительной информации о задачах. Дифференциация обслуживания базируется только на
истории существования процесса в системе.
3.4. Алгоритмы, основанные на приоритетах (классификация по принципу выбора процесса на выполнение из очереди)
 Приоритет – это число, характеризующее степень привилегированности процесса при
использовании ресурсов вычислительной машины, в частности, процессорного времени. Чем
выше приоритет процесса, тем значительнее его привилегии и тем меньше времени он будет
проводить в очередях.
Приоритет может выражаться целым или дробным, положительным или отрицательным
значением. В некоторых ОС принято, что большее число обозначает больший приоритет, в других
– наоборот (большее число означает меньший приоритет).
Тема 2. Управление процессами. Файл 147331784
С. 4 из 12
Приоритет может назначаться директивно администратором системы, например, в зависимости от
важности работы, либо вычисляться самой ОС по определенным правилам.
В зависимости от возможности изменения приоритета в течение жизни потока различаются динамические и фиксированные приоритеты. В системах с динамическими приоритетами изменения
приоритета могут происходить по инициативе процесса, обращающегося с вызовом к
операционной системе; по инициативе пользователя, выполняющего соответствующую команду;
по инициативе ОС в зависимости от ситуации, складывающейся в системе.
 Существует две разновидности алгоритмов приоритетного планирования: обслуживание с относительными приоритетами и обслуживание с абсолютными приоритетами.
В обоих случаях выбор процесса на выполнение из очереди осуществляется одинаково:
выбирается процесс, имеющий наивысший приоритет. По-разному решается проблема
определения момента смены активного процесса.
В системах с относительными приоритетами активный процесс выполняется до тех пор, пока он
сам не покинет процессор, перейдя в состояние ожидания (или же произойдет ошибка, или
процесс завершится) (см. рис. 2.9, а).
В системах с абсолютными приоритетами выполнение активного процесса прерывается еще при
одном условии: если в очереди готовых процессов появился процесс, приоритет которого выше
приоритета активного процесса. В этом случае прерванный процесс переходит в состояние
готовности (см. рис. 2.9, б).
Процесс завершен
или произошла ошибка
Выполнение
а
Ожидание завершения
ввода-вывода
Выбор по приоритету
Готовность
Ожидание
Ввод-вывод завершен
Создание процесса
Процесс завершен
или произошла ошибка
Выполнение
б
Ожидание завершения
В очереди
ввода-вывода
появился процесс
с более высоким приоритетом
Выбор по приоритету
Готовность
Ожидание
Ввод-вывод завершен
Создание процесса
Рис. 2.9. Графы состояний процессов
в системах с относительными и абсолютными приоритетами
 В многопоточных ОС приоритет потока непосредственно связан с приоритетом процесса, в рамках которого выполняется данный поток. Приоритет процесса назначается операционной системой
при создании процесса. ОС учитывает статус процесса (системный или прикладной), статус пользователя, запустившего процесс; наличие явного указания пользователя на присвоение процессу
определенного уровня приоритета.
Значение приоритета включается в дескриптор процесса и используется при назначении приоритета потокам этого процесса. Поток может быть инициирован по команде пользователя или в результате выполнения системного вызова другим потоком. В последнем случае ОС принимает во
внимание значение параметров системного вызова.
Тема 2. Управление процессами. Файл 147331784
С. 5 из 12
3.5. Смешанные алгоритмы планирования (квантование с приоритетами)
Во многих операционных системах алгоритмы планирования построены с использованием как
квантования, так и приоритетов. Например, в основе планирования лежит квантование, но величина кванта и/или порядок смены процессов и выбора процесса из очереди готовых определяется
приоритетами процессов.
На смешанных алгоритмах основано планирование в системах Windows NT и Unix System V Release 4. И в одной, и в другой системе реализована дисциплина вытесняющей многозадачности,
основанная на использовании абсолютных приоритетов и квантования. Эти системы используем
как основу для рассмотрения смешанных алгоритмов. Обобщенный граф состояния процессов
(потоков) в этом случае имеет вид, представленный на рис. 2.10.
Процесс завершен
или произошла ошибка
Выполнение
Ожидание завершения
Появился процесс ввода-вывода
с более высоким приоритетом или квант исчерпан
Выбор по приоритету
Готовность
Ожидание
Ввод-вывод завершен
Создание процесса
Рис. 2.10. Граф состояний процессов (потоков)
в системах с планированием на основе абсолютных приоритетов и квантования
Общими для упомянутых ОС являются следующие моменты.
 Диапазон приоритетов подразделяется на несколько классов.
 Часть диапазона отведена для процессов (потоков) с переменными приоритетами, часть –
для процессов (потоков) с фиксированными приоритетами. К последним относятся процессы реального времени, наиболее критичные ко времени и имеющие самые высокие приоритеты.
 При планировании процессов (потоков) с динамическими приоритетами приоритет процесса
(потока), полностью исчерпавшего свой очередной квант времени, снижается; напротив, если квант полностью не исчерпан, приоритет повышается.
 Планирование процессов в Unix
Присвоение
приоритетов
Создание
процессов
Понятие «поток» отсутствует. Планирование осуществляется на уровне процессов.
Все процессы создаются системным вызовом fork(). Этот вызов выполняется всякий раз, когда
возникает необходимость в запуске нового процесса, например, из пользовательского приложения
(fork содержится в приложении) или из командной строки (fork формируется системой). Процесс,
сделавший этот вызов, называется родительским, а вновь созданный процесс – дочерним.
Прародителем всех процессов является процесс init, называемый также распределителем процессов. Он загружается первым и производит настройку системы. Загрузившись, init запускает login
– задачу регистрации пользователей, которая, проверив их имя и пароль, в свою очередь запускает рабочую оболочку (shell)
Созданный процесс наследует характеристики планирования процесса-родителя (класс
приоритета и величину приоритета в этом классе). Процесс остается в некотором классе, пока не
будет выполнен системный вызов, изменяющий его класс.
В настоящее время имеется три класса приоритетов процессов, приведенные ниже (возможно
включение новых классов приоритетов при инсталляции системы). Схемы нумерации текущих
приоритетов различаются для различных версий ОС.
Тема 2. Управление процессами. Файл 147331784
Планирование процессов разных классов
Классы приоритетов
Приоритетный класс
Глобальное значение
приоритета
159
Реальное время
…..
(real time)
100
99
Системные процессы
…..
(system)
60
59
Процессы разделения времени
…..
(time-shared)
0
Каждый класс имеет свои характеристики планирования процессов.
С. 6 из 12
Порядок выбора процесса
планировщиком
Первый
Последний
Процессы системного класса используют стратегию фиксированных приоритетов. Этот класс
зарезервирован для процессов ядра. Уровень приоритета процессу назначается ядром и никогда
не изменяется.
Процессы реального времени также используют стратегию фиксированных приоритетов, но
пользователь может их изменять. Процессы реального времени надо проектировать весьма
тщательно, чтобы они не захватывали процессор на слишком долгое время, так как при наличии
готовых к выполнению таких процессов другие процессы не выбираются на выполнение.
Характеристики планирования процессов реального времени включают две величины:
 уровень глобального приоритета;
 квант времени.
Процессу разрешается захватывать процессор на соответствующий квант времени, а по его
истечении планировщик снимает процесс с выполнения.
Состав класса процессов разделения времени наиболее неопределенный и часто меняющийся, в
отличие от двух предыдущих классов. Эти процессы до появления Unix System V Release 4 были
единственным классом процессов, и по умолчанию новому процессу назначается именно этот
класс.
При планировании процессов разделения времени используется стратегия динамических
приоритетов, которая адаптируется к операционным характеристиках процесса. Величина
приоритета, назначаемого этим процессам, вычисляется пропорционально значениям двух
составляющих: пользовательской и системной части. Пользовательская часть приоритета может
быть изменена администратором и владельцем процесса, но в последнем случае – только в
сторону снижения.
Системная составляющая определяется тем, как долго процесс занимал процессор, не уходя в
состояние ожидания. У процессов, потребляющих большие периоды процессорного времени без
ухода в состояние ожидания, приоритет снижается, а у тех, которые часто уходят в состояние
ожидания после короткого периода использования процессора, приоритет повышается. Однако в
порядке компенсации того, что процессы с низким приоритетом реже выбираются для выполнения,
им даются большие кванты времени, чем процессам с высоким приоритетом. Таким образом,
низкоприоритетный процесс работает реже высокоприоритетного, но когда он выбирается для
выполнения, ему отводится больше времени.
 Планирование процессов в Windows NT
Создание процессов
и потоков
ОС Windows NT является многопотоковой (многонитевой). Сразу после запуска процесса
создается один поток. Этот поток может запускать другие потоки, реализуя многозадачность в
рамках процесса.
В отличие от ОС Unix, концепция иерархии не является основополагающей и процессы могут
запускаться независимо. Пользователь может непосредственно запустить процесс как
исполняемый файл при помощи Диспетчера задач (Task Manager) или через командную строку.
Запуск процесса из приложения осуществляется как при помощи функций ОС WinExec и LoadModule, так и при помощи функции CreateProcess, специально предназначенной для запуска
процессов. В последнем случае запущенный процесс можно расценивать как дочерний.
Запуск потоков выполняется только процессами. Однако то, какие именно фрагменты приложения
могут выполняться параллельно, определяется пользователем, и соответствующие фрагменты
описываются как потоки (thread).
Тема 2. Управление процессами. Файл 147331784
С. 7 из 12
При запуске процесса ему может быть назначен один из следующих четырех классов приоритета.
Класс приоритета
Уровень приоритета
1
REALTIME_PRIORITY_CLASS (процессы реального времени)
24
2
HIGH_PRIORITY_CLASS (высокоприоритетные)
13
3
NORMAL_PRIORITY_CLASS (обычные)
4
IDLE_PRIORITY_CLASS (низкоприоритетные)
9 или 7
4
При запуске процесса через пользовательский интерфейс ОС по умолчанию присваивает ему приоритет класса 3. Приоритет выполняемого процесса может быть изменен администратором или
пользователем (например, через Диспетчер задач, выделив процесс, нажав правую кнопку мыши и
задав нужное значение). При запуске процесса из приложения с помощью функции CreateProcess
класс приоритета можно задать как параметр функции.
Полученный таким образом базовый приоритет процесса в дальнейшем может быть повышен или
понижен операционной системой в некотором диапазоне.
Для потоков в системе определено 32 уровня приоритетов и два класса – потоки реального времени (приоритеты 16 – 31) и потоки с переменными приоритетами (приоритеты 1 – 15; приоритет
0 зарезервирован для системных целей). Схема назначения приоритетов изображена ниже.
30
Потоки реального времени
Классы и уровни
приоритетов
Поток первоначально получает значение базового приоритета из диапазона базового приоритета
своего процесса-создателя. Из пользовательского интерфейса приоритет потока недоступен, но
может быть изменен из приложения функцией SetThreadPriority.
28
26
24
22
20
18
16
12
Динамический приоритет
потоков процесса
10
Базовый приоритет
потоков процесса
8
6
4
2
Базовый приоритет
процесса
Потоки с переменным
приоритетом
14
0
Рис. 2.11. Приоритеты и схема их назначения в Windows NT
Планирование
выполнения потоков
При выборе потока на выполнение диспетчер прежде всего просматривает очередь готовых потоков реального времени и обращается к другим потокам, только когда эта очередь пуста.
Большинство потоков в системе попадает в класс с переменными приоритетами. При
планировании таких потоков используется стратегия динамических приоритетов. Если поток
полностью исчерпал свой квант, то его приоритет понижается на некоторую величину, В то же
время приоритет потоков, которые перешли в состояние ожидания, не использовав полностью
выделенный квант, повышается. При таком подходе не дискриминируются интерактивные задачи,
часто выполняющие операции ввода-вывода. ОС наращивает приоритет дифференцированно, в
частности, повышает приоритет в большей степени интерактивным приложениям и в меньшей –
потокам, выполняющим дисковые операции.
Тема 2. Управление процессами. Файл 147331784
С. 8 из 12
Начальной точкой отсчета для динамического приоритета потока является значение его базового
приоритета. Значение динамического приоритета потока ограничено снизу его базовым
приоритетом, а сверху – нижней границей диапазона приоритетов реального времени.
3.6. Маленький пример, иллюстрирующий работу с приоритетами
Приводится приложение, созданное в среде Delphi 6. Приложение содержит описание двух потоков – t1 и t2, выполнение которых состоит в циклическом вызове методов (процедур), изменяющих
значение общей переменной value. Метод thread1.work для потока t1 увеличивает переменную value на 1, соответствующий метод для потока t2 уменьшает ее на 1.
Изменение значения value визуализируется посредством индикатора хода процесса в виде прямоугольника, закрашиваемого в синий цвет. Размер закрашиваемой области отображает значение
value; 50% заполнения цветом соответствует value = 0.
Приоритеты каждого из потоков и могут изменяться от минимально возможного до предшествующего максимальному установленному системой значения посредством двух движков. В зависимости от соотношения приоритетов больше процессорного времени занимает один или другой поток,
что отображается уменьшением или увеличением закрашенной области.
Потоки запускаются нажатием кнопки запуска.
Изменять приоритет можно, только если потоки запущены; попытка установить приоритеты, а затем запустить потоки не даст результата, так как при запуске приоритеты будут установлены системой в установленное по умолчанию значение.
Задание обоим потокам максимально допустимых в приложении значений (установка обоих движков в крайнее правое положение) может привести к зависанию системы, устранить которое можно
только через диспетчер задач путем завершения приложения. Причина следующая.
Реально при запуске приложения, а затем двух рассматриваемых потоков в системе существует
три потока – два пользовательских и один, создаваемый системой, соответствующий собственно
процессу и выполняющий все действия кроме тех, что выполняют потоки t1 и t2, в частности, этот
«основной» поток прорисовывает окна. Изначально все три потока имеют одинаковый приоритет.
Задавая потокам t1 и t2 максимальное значение, мы, во-первых, почти полностью загружаем процессор их выполнением (это можно видеть через посредство диспетчера задач). Во-вторых, мы
лишаем третий поток процессорного времени. Это видно, если просто сделать активным любое
окно любого другого приложения, а затем попытаться вернуться в окно рассматриваемого приложения. Это окно не прорисовывается. Единственный выход из ситуации – снять приложение через
диспетчер задач. Поэтому экспериментировать с этим режимом работы не следует.
Ниже приведен текст модуля, реализующего описанные функции.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
TrackBar1: TTrackBar;
Button1: TButton;
TrackBar2: TTrackBar;
Button2: TButton;
ProgressBar1: TProgressBar;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
Тема 2. Управление процессами. Файл 147331784
С. 9 из 12
procedure TrackBar2Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
{Определение классов для 1-го и 2-го потоков}
thread1 = class(TThread)
protected
procedure execute; override; //переопределение процедуры класса потока
procedure work;//добавляется метод класса (собственно обработка)
end; {thread1}
thread2 = class(TThread)// класс для 2-го потока
protected
procedure execute; override;
procedure work;
end; {thread2}
{Описание потоков и др.}
var
Form1: TForm1;
t1:thread1;
//1-й поток
t2:thread2;
//2-й поток
value:longint;
//разделяемый ресурс (изменяется обоими потоками)
c1,c2:int64;
// число запусков каждого потока
implementation
{$R *.dfm}
{Формирование кода потока (вставка кода потока в метод execute для каждого потока)}
procedure thread1.execute;
begin
repeat
synchronize(work); //вызов метода обработки критической секции
until terminated;
//цикл до вызова метода, завершающего выполнение потока
end;
procedure thread2.execute;
begin
repeat
synchronize(work);
until terminated;
end;
{Описание метода обработки разделяемой переменной value для каждого потока}
procedure thread1.work;
begin
value:=value+1;
c1:=c1+1;
end;
procedure thread2.work;
begin
value:=value-1;
c2:=c2+1;
end;
{создание потоков t1 и t2 при нажатии Button1}
procedure TForm1.Button1Click(Sender: TObject);
begin
Тема 2. Управление процессами. Файл 147331784
С. 10 из 12
c1:=1;
c2:=1;
value:=0;
t1:=thread1.create(false);
t2:=thread2.create(false);
end;
{обработка события перемещения движков для обоих потоков}
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
case TrackBar1.position of //диапазон изменения приоритета потока
1: t1.priority:=tpIdle;
2: t1.Priority:=tpLowest;
3: t1.Priority:=tpLower;
4: t1.priority:=tpNormal;
5: t1.priority:=tpHigher;
6: t1.priority:=tpHighest;
end;
{вывод приоритета потока в боковое поле memo2}
memo2.lines.add('Thread 1: '+inttostr(getthreadpriority(t1.handle)));
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
case TrackBar2.position of
1: t2.priority:=tpIdle;
2: t2.Priority:=tpLowest;
3: t2.Priority:=tpLower;
4: t2.priority:=tpNormal;
5: t2.priority:=tpHigher;
6: t2.priority:=tpHighest;
end;
memo2.lines.add('Thread 2: '+inttostr(getthreadpriority(t2.handle)));
end;
{остановка и завершение работы обоих потоков при нажатии Button2}
procedure TForm1.Button2Click(Sender: TObject);
begin
t1.suspend;
t2.suspend;
t1.terminate;
t2.terminate;
{Вывод числа запусков каждого потока в течение сеанса}
memo2.lines.add('Thread 1: '+inttostr(c1)+' запусков, Thread 2:
'+inttostr(c2)+' запусков');
end;
{Вывод значения value в виде индикатора прогресса каждые 10 мс: обработка сообщений
от таймера}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.progressbar1.position:=value;
end;
begin
end.
Тема 2. Управление процессами. Файл 147331784
С. 11 из 12
Верхний колонтитул
Заголовок1. Arial 12, полужирный, по центру, интервал одинарный, перед: 6
пт, после: 6 пт
Заголовок2. Arial 12, полужирный, курсив, по центру, интервал одинарный,
перед: 6 пт, после: 6 пт
Заголовок 3. Arial 11, полужирный, курсив, интервал одинарный, перед: 6 пт, после: 3 пт
Подзаголовок 1. Основной текст, полужирный. Так выглядит текст, отформатированный в
этом стиле.
Обычный – Arial 10, влево, интервал одинарный. Так выглядит текст, отформатированный в этом
стиле.
Основной текст - Обычный, по ширине, интервал после: 6 пт.
Так выглядит текст, отформатированный в этом стиле. Так выглядит текст, отформатированный в
этом стиле.
Основной текст с отступом - Обычный №1 + отступ: первая строка 0.67, по ширине, интервал
после: 6 пт.
Так выглядит текст, отформатированный в этом стиле. Так выглядит текст, отформатированный
в этом стиле.
 Маркиров. список1
 Так выглядит текст, отформатированный в этом стиле отформатированный в этом стиле отформатированный в этом стиле
 отформатированный в этом стиле.
- Маркиров. список2
 Маркиров. список 3
 Так выглядит текст, отформатированный в этом стиле отформатированный в этом стиле
отформатированный в этом стиле
- Так выглядит текст, отформатированный в этом стиле отформатированный в этом стиле отформатированный в этом стиле
- отформатированный в этом стиле.
1. Нумеров. Список №1.
2. Так выглядит текст, отформатированный в этом стиле отформатированный в этом стиле отформатированный в этом стиле отформатированный в этом стиле.
3. Так выглядит текст, отформатированный в этом стиле.
Курсив-выдел. Так выглядит текст, отформатированный в этом стиле.
Курсив-жирный . Так выглядит текст, отформатированный в этом стиле.
Полужирный
Заголовок таблицы
Подпись под рисунком
Тексты выносок: обычный
Тексты выносок по центру
Алгоритм, 1-я строка: обычный + интервал перед 6
Алгоритм
Алгоритм
Алгоритм
Алгоритм, последняя строка: обычный + интервал после 6
Формула: p=(np/n)*100 (1)
Тема 2. Управление процессами. Файл 147331784
С. 12 из 12
Download