- •14.Назовите последовательность операций, необходимую для:
- •15 Системные вызовы FreeBsd, реализующие функции управления процессами.
- •16. Охарактеризуйте многонитевые процессы. Поясните понятия параллельности и одновременности выполнения.
- •17 Укажите на характерные отличия между однонитевой и многонитевой реализацией процессов.
- •18 Классификация нитей. Нити ядра. Особенности реализации и рекомендуемая область применения.
- •19 Классификация нитей. Легковесные нити. Особенности реализации и рекомендуемая область применения.
14.Назовите последовательность операций, необходимую для:
создания процесса;
завершения процесса;
переключения процессов.
Создание процесса
Операционным системам необходим какой-нибудь способ для создания процессов. В самых простых системах, или в системах, сконструированных для запуска только одного приложения (например, в контроллере микроволновой печи), появляется возможность присутствия абсолютно всех необходимых процессов при вводе системы в действие. Но в универсальных системах нужны определенные способы создания и прекращения процессов по мере необходимости.
Существуют четыре основных события, приводящие к созданию процессов:
1.Инициализация системы
2. Выполнение работающим процессом системного вызова, предназначенного для создания процесса.
3. Запрос пользователя на создание нового процесса
4. Инициация пакетного задания
При запуске операционной системы создаются, как правило, несколько процессов. Некоторые из них представляют собой высокоприоритетные процессы, то есть процессы, взаимодействующие с пользователями и выполняющие для них определенную работу .Остальные являются фоновыми процессами, не снизанными с конкретными пользователями, но выполняющими ряд специфических функций
Вдобавок к процессам, созданным во время загрузки, новые процессы могут быть также созданы и после нее. Часто бывает так. что работающий процесс осуществляет системный вызов для создания одного или более новых вспомогательных процессов. Создание новых процессов особенно полезно, когда выполняемая работа может быть легко выражена в понятиях нескольких связанных друг с другом но в остальном независимых друг от друга взаимодействующих процессов. Например, если для последующей обработки из сети выбираете большой объем данных, наверное, будет удобно создать один процесс для выборки данных и помещения их в общий буфер, чтобы в то же самое время второй процесс забирал элементы данных и проводил их обработку также можно ускорить выполнение работы, если на многопроцессорной системе разрешить каждому процессу работ, на разных центральных процессорах.
В интерактивных системах пользователи могут запустить программу вводом команды или щелчком (двойным щелчком) на значке. Любое из этих действий дает начало новому процессу и запускает в нем выбранную программу в основанных на применении команд UNIX-системах. Используя мышь, пользователь может выбрать окно и взаимодействовать с процессом: например, если потребуется, вводить данные.
Последнее событие, приводящее к созданию процесса, применимо только к системам пакетной обработки данных, имеющимся на больших универсальных машинах. Здесь пользователи могут отправлять системе пакетные задания (возможно. с помощью удаленного доступа). Когда операционная система решает что у нее достаточно ресурсов для запуска еще одного задания, она создает новый процесс и запускает новое заданно из имеющейся у нее очереди входящих заданий.
С технической точки зрения но всех лих случаях новый процесс создается за счет уже существующего процесса, который выполняет системный вызов, предназначенный для создания процесса. Этим процессом может быть работающий пользовательский процесс, системный процесс, вызванный событиями клавиатуры или мыши, или процесс управления пакетными заданиями. Этот процесс осуществляет системный вызов для создания нового процесса. Этот системный вызов предписывает операционной системе создание нового процесса и прямо или косвенно указывает, какую программу в нем запустить.
В UNIX существует только один системный вызов для создании нового процесса - fork. Этот вызов создаст точную копию вызывающего процесса. После выполнения системного вызова fork два процесса, родительский и дочерний, имеют единый образ памяти, единые строки описания конфигурации и одни и те же открытые файлы. и больше ничего. Обычно после этого дочерний процесс изменяет образ памяти и запускает новую программу, выполняя системный вызов execve или ему подобный. Например, когда пользователь набирает в оболочке команду sort, оболочка создаст ответвляющийся дочерний процесс, в котором и выполняется команда sort. Смысл этого двухступенчатого процесса заключается в том чтобы позволить дочернему процессу управлять его файловыми дескрипторами после разветвления, но перед выполнением execve с целью выполнения перенаправления стандартного ввода, стандартного вывода и стандартного вывода сообщений об ошибках.
Завершение процессов
После создания процесс начинает работать и выполняет свою задачу. Но ничто не длится вечно, даже процессы. Рано или поздно новые процессы будут завершены, обычно в силу следующих обстоятельств:
обычного выхода (добровольно)
выхода при возникновении ошибки (добровольно)
возникновения фатальной ошибки (принудительно)
уничтожения другим процессом (принудительно)
Большинство процессов завершаются по окончании своей работы. Когда компилятор откомпилирует заданную ему программу, он осуществляет системный вызов, сообщающий операционной системе о завершении своей работы. Этим вызовом в UNIX является exit. Программы, работающие с экраном, также поддерживают добровольное завершение. Текстовые процессоры, интернет-браузеры и аналогичные программы всегда содержат значок или пуню- меню, на котором пользователь может щелкнуть, чтобы приказать процессу удалить все временные файлы, которые им были открыты, и завершить свою работу.
Вторая причина завершения — обнаружение процессом фатальной ошибки.
Выхода из интерактивных, использующих экран процессов при задании им неверных параметров обычно не происходит. Вместо этого появляется диалоговое окно с просьбой о повторной попытке ввода параметров.
Третья причина завершения — ошибка, вызванная самим процессом, чаще всего связанная с ошибкой в программе. В качестве примеров можно привести неверную инструкцию, ссылку на несуществующий адрес памяти или деление на нуль.
Четвертая причина, из-за которой процесс может быть завершен это выполнение процессом системного вызова, приказывающего операционной системе завершить некоторые другие процессы. В UNIX этот вызов называется kill. В обоих случаях у процесса, вызывающего завершение, должны быть на это соответствующие полномочия. В некоторых системах при добровольном или принудительном завершении процесса тут же завершаются и все созданные им процессы. Но ни UNIX, ни Windows так не делают.