И возможности их разделения

Рассмотрим кратко основные виды ресурсов вычислительной системы и способы их разделения (см. рис. 1.5). Прежде всего, одним из важнейших ресурсов являет­ся сам процессор1, точнее — процессорное время. Процессорное время делится попеременно (параллельно). Имеется множество методов разделения этого ресур­са (см. раздел «Планирование и диспетчеризация процессов и задач» в главе 2).

Вторым видом ресурсов вычислительной системы можно считать память. Опера­тивная память может делиться и одновременно (то есть в памяти одновременно может располагаться несколько задач или, по крайней мере, текущих фрагментов, участвующих в вычислениях), и попеременно (в разные моменты оперативная па­мять может предоставляться для разных вычислительных процессов). Память — очень интересный вид ресурса. Дело в том, что в каждый конкретный момент вре­мени процессор при выполнении вычислений обращается к очень ограниченному числу ячеек оперативной памяти. С этой точки зрения желательно память выде­лять для возможно большего числа параллельно исполняемых задач. С другой сто­роны, как правило, чем больше оперативной памяти может быть выделено для конкретного текущего вычислительного процесса, тем лучше будут условия его выполнения. Поэтому проблема эффективного разделения оперативной памяти между параллельно выполняемыми вычислительными процессами является од-

1 Разговор о процессоре как об одном из ресурсов более характерен для мультипроцессорных систем. В случае однопроцессорных систем чаще говорят о процессорном времени.


Основные виды ресурсов и возможности их разделения_______________________ 43

ной из самых актуальных. Достаточно подробно вопросы распределения памяти между параллельно выполняющимися процессами рассмотрены в главе 3.

Внешняя память тоже является ресурсом, который часто необходим для выполне­ния вычислений. Когда говорят о внешней памяти (например, памяти на магнит­ных дисках), то собственно память и доступ1 к ней считаются разными видами ресурса. Каждый из этих ресурсов может предоставляться независимо от другого. Но для полноценной работы с внешней памятью необходимо иметь оба этих ре­сурса. Собственно внешняя память может разделяться и одновременно, а вот дос­туп к ней всегда разделяется попеременно.

Если говорить о внешних устройствах, то они, как правило, могут разделяться па­раллельно, если используются механизмы прямого доступа. Если же устройство работает с последовательным доступом, то оно не может считаться разделяемым ресурсом. Простыми и наглядными примерами внешних устройств, которые не могут быть разделяемыми, являются принтер и накопитель на магнитной ленте. Действительно, если допустить, что принтер можно разделять между двумя про­цессами, которые смогут его использовать (управлять его работой) попеременно, то результаты печати, скорее всего, окажутся негодными — фрагменты выведен­ного текста могут перемешаться таким образом, что будет не понятно, что есть что. Аналогично и для накопителя на магнитной ленте. Если один процесс начнет что-то читать или писать, а второй при этом запросит перемотку ленты на ее начало, то оба вычислительных процесса не смогут выполнить свои вычисления. Здесь сле­дует заметить, что при работе с устройствами печати мы, тем не менее, явно на­блюдаем возможность печатать из разных программ, выполняющихся параллельно. Однако необходимо знать, что это реализуется за счет того, что каждый вычисли­тельный процесс получает свой виртуальный принтер, который он ни с кем не раз­деляет. А операционная система, получив задания на печать от выполняющихся задач, сама упорядочивает эти задания и передает очередное задание на принтер только после полного завершения предыдущего задания.

Очень важным видом ресурсов являются программные модули. Прежде всего, мы будем рассматривать системные программные модули, поскольку именно они обыч­но считаются программными ресурсами и поэтому в принципе могут распреде­ляться между выполняющимися процессами.

Как известно, программные модули могут быть однократно используемыми и мно­гократно (или повторно) используемыми. Однократно используемыми называют такие программные модули, которые могут быть правильно выполнены только один раз, то есть в процессе своего выполнения они могут испортить себя: либо повреж­дается часть кода, либо исходные данные, от которых зависит ход вычислений. Очевидно, что однократно используемые программные модули являются недели­мым ресурсом. Более того, их, как правило, вообще не распределяют как ресурс системы. Системные однократно используемые программные модули, как прави­ло, задействуются только на этапе загрузки операционной системы. При этом сле­дует иметь в виду тот очевидный факт, что собственно двоичные файлы, которые

' Процесс обращения к данным.


44_____________________________________________ Глава 1. Основные понятия

обычно хранятся на системном диске и в которых и записаны эти модули, не пор­тятся, а потому могут быть повторно использованы при следующем запуске опе­рационной системы.

Повторно используемые программные модули, в свою очередь, могут быть непри­вилегированными, привилегированными и реентерабельными. Все они допуска­ют корректное повторное выполнение программного кода при обращении к нему из другой программы.

Привилегированные программные модули работают в так называемом привилеги­рованном режиме, то есть при отключенной системе прерываний (часто говорят, что прерывания закрыты), когда никакие внешние события не могут нарушить естественный порядок вычислений. Как результат, программный модуль выпол­няется до своего конца, после чего он может быть вновь вызван на исполнение из другой задачи (другого вычислительного процесса). С позиций стороннего наблю­дателя по отношению к вычислительным процессам, которые попеременно (при­чем, возможно, неоднократно) в течение срока своей «жизни» вызывают некото­рый привилегированный программный модуль, такой модуль будет выступать как попеременно разделяемый ресурс. Структура привилегированных программных модулей изображена на рис. 1.8. Здесь в первой секции программного модуля вы­ключается система прерываний. Следовательно, при выполнении вычислений в первой секции ничто не может их прервать, и беспокоиться о промежуточных переменных нет необходимости. В последней секции, напротив, система прерыва­ний включается. Даже если тут же возникнет прерывание и другой процесс запро­сит этот же привилегированный модуль, все равно все вычисления уже выполне­ны и ничто не сможет их испортить.

Рис. 1.8. Структура привилегированного программного модуля

Непривилегированные программные модули — это обычные программные модули, которые могут быть прерваны во время своей работы. Следовательно, такие моду­ли в общем случае нельзя считать разделяемыми, потому что если после прерывания выполнения такого модуля, исполняемого в рамках одного вычислительного про­цесса, запустить его еще раз по требованию другого вычислительного процесса, то промежуточные результаты для прерванных вычислений могут быть потеряны.

В противоположность этому, реентерабельные программные модули допускают повторное многократное прерывание своего исполнения и повторный их запуск по обращению из других задач (вычислительных процессов). Для этого реентера­бельные программные модули должны быть созданы таким образом, чтобы было

' Реентерабельный — допускающий повторные прерывания (дословный перевод с английского слова «re-enterable»).


Основные виды ресурсов и возможности их разделения________________________ 45

обеспечено сохранение промежуточных результатов для прерываемых вычисле­ний и возврат к ним, когда вычислительный процесс возобновляется с прерванной ранее точки. Это может быть реализовано двумя способами: с помощью статиче­ских и динамических методов выделения памяти под сохраняемые значения. Основным и наиболее часто используемым является динамический способ выде­ления памяти для сохранения всех промежуточных результатов вычисления, от­носящихся к реентерабельному программному модулю (рис. 1.9).

Рис. 1.9. Структура реентерабельного программного модуля

Основная идея построения и работы реентерабельного программного модуля за­ключается в том, что в первой (головной) своей части путем обращения из систем­ной привилегированной секции осуществляется запрос на получение в системной области памяти блока ячеек, необходимого для размещения всех текущих (проме­жуточных) данных. При этом на вершину стека помещается указатель на начало области данных и ее объем. Все текущие переменные реентерабельного программ­ного модуля в этом случае располагаются в системной области памяти. Адресация этих переменных осуществляется относительно вершины стека. Поскольку в кон­це привилегированной секции система прерываний включается, то во время рабо­ты центральной (основной) части реентерабельного модуля возможно ее преры­вание. Если прерывания не возникает, то в третьей (заключительной) секции


46_____________________________________________ Глава 1. Основные понятия

осуществляется запрос на освобождение используемого блока системной области памяти. При освобождении этой области памяти модифицируется значение стека. Если же во время работы центральной секции возникает прерывание, и другой вычислительный процесс обращается к тому же самому реентерабельному про­граммному модулю, то для этого нового процесса вновь заказывается новый блок памяти в системной области памяти, и на вершину стека записывается новый указа­тель. Очевидно, что возможно многократное повторное вхождение в реентерабель­ный программный модуль до тех пор, пока в области системной памяти, выделяе­мой специально для реентерабельной обработки, есть свободные области, объема которых достаточно для выделения нового блока.

Что касается статического способа выделения памяти, то здесь речь может идти, например, о том, что заранее для фиксированного числа вычислительных процес­сов резервируются области памяти, в которых будут располагаться переменные реентерабельных программных модулей: для каждого процесса — своя область памяти. Чаще всего в качестве таких процессов выступают процессы ввода-выво­да, и речь идет о реентерабельных драйверах1.

Кроме реентерабельных программных модулей существуют еще повторно входимые (re-entrance). Этим термином называют программные модули, которые тоже допус­кают свое многократное параллельное использование, по, в отличие от реентерабель­ных, их нельзя прерывать. Повторно входимые программные модули состоят из привилегированных секций, и повторное обращение к ним возможно только после завершения какой-нибудь из таких секций. После выполнения очередной такой при­вилегированной секции управление может быть передано супервизору, который может предоставить возможность выполняться другой задаче, а значит, возможно повторное вхождение в рассматриваемый программный модуль. Другими словами, в повторно входимых программных модулях четко предопределены все допусти­мые (возможные) точки входа. Следует отметить, что повторно входимые программ­ные модули встречаются гораздо чаще реентерабельных (повторно прерываемых).

Наконец, имеются и информационные ресурсы, то есть в качестве ресурсов могут выступать данные. Информационные ресурсы могут существовать как в виде пе­ременных, находящихся в оперативной памяти, так и в виде файлов. Если процессы используют данные только для чтения, то такие информационные ресурсы можно разделять. Если же процессы могут изменять информационные ресурсы, то необхо­димо специальным образом организовывать работу с такими данными. Это одна из наиболее сложных проблем, достаточно подробно она обсуждается в главах 9 и 10.








Дата добавления: 2016-09-20; просмотров: 1019;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.