Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на экзаменационные вопросы.doc
Скачиваний:
45
Добавлен:
01.05.2014
Размер:
888.32 Кб
Скачать

25. Порождение процессов на уровне оболочки и их взаимодействие

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

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

Каждый процесс может образовать полностью идентичный подчиненный процесс с помощью системного вызова fork() и дожидаться окончания выполнения своих подчиненных процессов с помощью системного вызоваwait. Каждый процесс в любой момент времени может полностью изменить содержимое своего образа памяти с помощью одной из разновидностей системного вызоваexec(сменить образ памяти в соответствии с содержимым указанного файла, хранящего образ процесса (выполняемого файла)). Каждый процесс может установить свою собственную реакцию на «сигналы», производимые операционной системой в соответствие с внешними или внутренними событиями. Наконец, каждый процесс может повлиять на значение своего статического (а тем самым и динамического) приоритета с помощью системного вызоваnice.

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

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

Система предоставляет возможность для пользовательских процессов явно генерировать сигналы, направляемые другим процессам. Для этого используется системный вызов kill(pid, signum).

Для завершения процесса по его собственной инициативе используется системный вызов exit(status), где status — это целое число, возвращаемое процессу-предку для его информирования о причинах завершения процесса-потомка

26. Удаленный доступ и особенности работы в среде parix

Местами терминология сомнительная, но в целом суть отражает…

Для решения параллельных задач используется среда PARIX (Parallel extensions to UNIX).

PARIX — это однозадачная система: если один пользователь запустил PARIX-приложение на разделе, то никакой другой пользователь уже не сможет запустить своего PARIX-приложения на данном разделе, пока первое приложение не закончит свою работу и не освободит раздел.

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

В нашем случае, для получения доступа к среде Parixтребовалось создать удаленное подключение командойtelnet(telnetopus) и зарегистрироваться под своим логином.

Зарегистрировавшись на машине, вы попадаете в знакомую среду командного интерпретатора ОС UNIX. На удаленной машине есть все обычные для UNIX средства работы: редактор vi, отладчики, компиляторы.

Следующие, характерные для многопроцессорной системы, задачи мы решали:

  • компиляция программы для запуска под PARIX

  • запуск программы под управлением PARIX

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

Чтобы скомпилировать программу на языке Cи создать исполняемый файлParixтребуется запуситить компилятор с соответсующими параметрами:

ancc.px –o program.px program.c

Для запуска PARIX-приложения используется командаrun. При этом вы обязательно должны указать количество процессорных элементов, на которых должно быть запущено приложение:

run –f1 n m program.px

где nиm(n,m=) размер решетки процессорных элементов по двум измерениям соответственно.

Команда runзанимает указанный раздел, так что он становится недоступен для запуска других приложенийPARIX. По окончании PARIX-приложения, run автоматически освобождает занятый раздел.

Однако в ряде случаев (программа не завершилась) раздел может остаться занятым. Поэтому будьте очень внимательны, и убедитесь, что ваша программа завершилась и не занимает раздел. Используйте для этого команду ps–ef. Если вы видите в списке процессов ваше приложение, которое не завершилось должным образом, принудительно завершите его командойkillpid, гдеpid– идентификатор процесса вашего приложения.

Для решения параллельных задач используется среда PARIX (Parallel extensions to UNIX).

PARIX — это однозадачная система: если один пользователь запустил PARIX-приложение на разделе, то никакой другой пользователь уже не сможет запустить своего PARIX-приложения на данном разделе, пока первое приложение не закончит свою работу и не освободит раздел.

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

В нашем случае, для получения доступа к среде Parixтребовалось создать удаленное подключение командойtelnet(telnetopus) и зарегистрироваться под своим логином.

Зарегистрировавшись на машине, вы попадаете в знакомую среду командного интерпретатора ОС UNIX. На удаленной машине есть все обычные для UNIX средства работы: редактор vi, отладчики, компиляторы.

Следующие, характерные для многопроцессорной системы, задачи мы решали:

  • компиляция программы для запуска под PARIX

  • запуск программы под управлением PARIX

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

Чтобы скомпилировать программу на языке Cи создать исполняемый файлParixтребуется запуситить компилятор с соответсующими параметрами:

ancc.px –o program.px program.c

Для запуска PARIX-приложения используется командаrun. При этом вы обязательно должны указать количество процессорных элементов, на которых должно быть запущено приложение:

run –f1 n m program.px

где nиm(n,m=) размер решетки процессорных элементов по двум измерениям соответственно.

Команда runзанимает указанный раздел, так что он становится недоступен для запуска других приложенийPARIX. По окончании PARIX-приложения, run автоматически освобождает занятый раздел.

Однако в ряде случаев (программа не завершилась) раздел может остаться занятым. Поэтому будьте очень внимательны, и убедитесь, что ваша программа завершилась и не занимает раздел. Используйте для этого команду ps–ef. Если вы видите в списке процессов ваше приложение, которое не завершилось должным образом, принудительно завершите его командойkillpid, гдеpid– идентификатор процесса вашего приложения.