Страница
4
Многопоточность. Главное, что обеспечивает многопоточность – возможность параллельного выполнения нескольких видов операций в одной прикладной программе. Параллельные вычисления часто реализуются на уровне тредов. программа оформленная в виде нескольких тредов, в рамках одного процесса может быть выполнена быстрее за счет параллельно выполненных отдельных ее частей. Особенно эффективно можно использовать многопоточность для выполнения распределенных приложений. Например многопоточный сервер может выполнять запросы сразу нескольких клиентов.
Понятие поток было введено для того, чтобы именно с помощью этих понятий распределять процессорное время между возможными работами. Понятие процесс предполагает, что при диспетчеризации нужно учитывать все ресурсы, закрепленные за процессом. При манипулировании тредами можно менять только контекст задачи, если мы переключаемся с задачи на задачу в рамках одного процесса, то все остальные ресурсы при этом не затрагиваются. Каждый процесс состоит по крайней мере из одного треда и только для многопроцессорных систем программист может расщепить поток на несколько параллельных. Потребность в потоках возникла еще на однопроцессорных вычислительных системах, поскольку они позволяют организовать вычислительный процесс более эффективно, а для использования достоинств многопроцессорных систем с общей памятью треды просто необходимы, т. к. позволяют не только ускорить выполнение тех задач, которые допускают их естественное распараллеливание, но и загрузить процессоры работой, чтобы они не простаивали. Каждый тред выполняется строго последовательно и имеет свой собственный программный счетчик и стек. Треды как и процессы могут порождать треды-потомки, поскольку любой процесс состоит хотя бы из одного треда. Подобно традиционным процессам, каждый тред может находится в одном из активных состояний. Пока один тред заблокирован или находится в очереди готовых к исполнению задач другой тред того же процесса может выполняться. Треды разделяют процессорное время в соответствии с различными вариантами диспетчеризации. Все треды имеют одно и то же виртуальное адресное пространство своего процесса, т. е. они разделяют одни пи те же глобальные переменные. Так как любой тред может иметь доступ к каждому виртуальному адресу один тред может использовать стек другого треда. Между потоками нет полной защиты, т. к. это невозможно, и вапще она не нужна для тредов. все потоки одного процесса решают задачу одного пользователя и механизм потоков используются здесь для более быстрого решения задачи путем ее распараллеливания. При этом программисту очень важно получить в свое распоряжение удобные средства организации взаимодействия частей одной программы. Кроме разделения адресного пространства все треды разделяют набор открытых файлов или общие устройства выделенные в процессы имеют одни и те же наборы сигналов, называемые семафоры и т. п.
Собственными у тредов являются программные счетчики, свой стек, рабочие регистры процессора, потоки-потомки и состояния. В следствие того, что треды относятся у определенному процессу выполняются в одном и том же виртуальном адресном пространстве между ними можно организовать тесное взаимодействие, в отличие от процессов для которых нужны специальные механизмы обмена сообщениями и данными. Программист, создающий многопоточное приложение должен заранее продумать работу многих тредов процесса таким образом, чтобы они могли взаимодействовать наиболее выгодным способом, а не участвовали в конкуренции за предоставление ресурсов тогда, когда этого можно избежать.
Для того чтобы можно было эффективно организовать параллельное выполнение потоков и процессов в архитектуре современных компьютеров включена возможность работать со специальной информационной структурой, которая описывает процессы или потоки. Для этого уже на уровне архитектуры микропроцессора исполняются некоторые задачи. И это понятие объединяет в себе обычные и легковесные процессы и поддерживает для него на уровне аппаратуры информационные структуры, позволяющие в дальнейшем при разработке ОС построить соответствующие дескрипторы как для процесса, так и для треда. Отличаться эти дескрипторы будут тем, что дескриптор потока или треда может хранить только контекст приостановленного вычислительного процесса, тогда как дескриптор процесса должен содержать поля, которые описывают ресурсы выделенные этому процессу.
Использование потоков. В случае использования однопроцессорной системы множество параллельных потоков часто не ускоряют работу приложения, поскольку в каждой отдельно взятой промежуток времени возможно выполнение только одного потока. Кроме того, чем больше потоков, тем больше нагрузка на систему, поскольку затрачиваются ресурсы. Если процесс имеет более 2 потоков, то такая мультизадачность не сделает работу быстрее, если каждый из потоков не будет требовать частого ввода/выводы.
2 Необходимо помнить для чего нужен поток. Поток, осуществляя обработку. может помешать системе быстро реагировать на запросы ввода/вывода. Потоки позволяют программе откликаться на просьбы пользователя и устройств, но при этом сильно загружают процессор. Потоки позволяют компьютеру одновременно обслуживать множество устройств.
3 Потокам можно назначить определенный приоритет, для того чтобы наименее значимые процессы выполнялись в фоновом режиме (путь частичного разделения ресурсов CPU). Однако всегда нужно помнить, что процессор 1 – а потоков много.
4 Потоки хорошо работают, когда они независимы. Но они начинают работать не продуктивно, если вынуждены часто синхронизироваться для доступа к общим ресурсам.
5 Необходимо четко представлять, что память виртуальна, механизм виртуальной памяти следит за тем, какая часть виртуального адресного пространства должна находится в ОЗУ, а какая должна быть сброшена в файл подкачки. Потоки усложняют ситуацию, если они обращаются в одно и то же время к различным виртуальным адресам виртуального адресного пространства приложения.
6 Не следует возлагать на потоки несколько функций. Сложные функциональные отношения затрудняют понимание общей структуры приложения всего алгоритма. Чем проще и менее многозначно каждая из рассматриваемых ситуаций, тем больше вероятность, что ошибок удастся избежать.
3. Для чего каждая задача получает свой дескриптор. Какие поля, как правило, содержатся в дескрипторе процесса (задачи). Что такое контекст задачи.
№6
1. Дескриптор ОС реального времени
В ОС реального времени количество процессов фиксируется, поэтому полезно определить количество дескрипторов процессов. Каждый дескриптор процессов постоянно располагается в оперативной памяти, с целью ускорить работу диспетчера задач, для более эффективной обработки данных. В системах реального времени целесообразно иметь постоянные дескрипторы задач, полностью или всегда существующие в системе, независимо от того, поступают на них требования или нет. каждая конкретная задача обладает некоторой собственной областью оперативной памяти, независимо от того исполняется задача или нет. Это так наз. ОЗУ резидентные задачи. Эта область может использоваться для хранения данных полученных задачей ранее. Данные могут хранится в ней тогда, когда задача находится в состоянии ожидания или бездействия.