Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая по СОС.docx
Скачиваний:
8
Добавлен:
22.12.2018
Размер:
475.9 Кб
Скачать

2.1.5 Управление процессами

Linux Ubuntu 10.04 LTS

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

Конечно, не менее важно защищать саму операционную систему от возможности ее повреждения каким бы то ни было пользовательским процессом. В ОС Linux это достигается за счет того, что ядро системы работает в собственном "ядерном" виртуальном пространстве, к которому не может иметь доступа ни один пользовательский процесс.

Ядро системы предоставляет возможности (набор системных вызовов) для порождения новых процессов, отслеживания окончания порожденных процессов и т.д. С другой стороны, в ОС Linux ядро системы - это полностью пассивный набор программ и данных. Любая программа ядра может начать работать только по инициативе некоторого пользовательского процесса либо по причине внутреннего или внешнего прерывания (примером внутреннего прерывания может быть прерывание из-за отсутствия в основной памяти требуемой страницы виртуальной памяти пользовательского процесса; примером внешнего прерывания является любое прерывание процессора по инициативе внешнего устройства). В любом случае считается, что выполняется ядерная часть обратившегося или прерванного процесса, т.е. ядро всегда работает в контексте некоторого процесса.

Также в ОС Linux присутствует механизм легковесных процессов (light-weight processes), или нитей, или потоков управления (threads). Нить - это процесс, выполняющийся в виртуальной памяти, используемой совместно с другими нитями того же "тяжеловесного" (т.е. обладающего отдельной виртуальной памятью) процесса.

Подсистема управления процессами включает в себя:

1.      создание и удаление процессов;

2.      распределение системных ресурсов;

3.      синхронизацию процессов;

4.      межпроцессовое взаимодействие.

Программа – это один из ресурсов, которые использует процесс. Процесс может существовать в 2-х состояниях: задача и ядро (вызов системной функции). В ОС Linux существует 2 типа объектов: файлы и процессы. Когда вы запускаете программу, ядро запускает соответствующий исполняемый файл, создает образ процесса и передает ему управление. Стандартная функция создания процесса – fork(). К моменту выхода из этой функции уже существуют 2 процесса, но возвращаемое значение у них разное – порождающий процесс получает возвращаемое значение, а порожденный процесс – 0.

Существуют следующие виды процессов:

Системные процессы – не имеют соответствующих им программ в виде исполняемых файлов и запускаются особым образом при инициализации ядра системы.

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

Прикладные процессы – все остальные, которые выполняются в системе.

Windows Seven

Основная структура, которая описывает процесс в винде - это блок управления процессом (PCB, Process control block). В состав PCB обычно включают:

- состояние, в котором находится процесс;

- программный счетчик процесса или, другими словами, адрес команды, которая должна быть выполнена для него следующей;

- содержимое регистров процессора;

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

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

- информацию об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом; таблица открытых файлов).

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

Подобно процессам потоки (нити, threads) в системе описываются структурой данных, которую обычно называют блоком управления потоком (thread control block, TCB).

Блок управления процессом (PCB) реализован в виде набора связанных структур, главная из которых называется блоком процесса EPROCESS. Соответственно, каждый поток также представлен набором структур во главе с блоком потока ETHREAD.

Структура данных процесса:

Этапы создания процесса.

1. На диске отыскивается нужный файл-образ, после чего создается объект "раздел" памяти для его проецирования на адресное пространство нового процесса.

2. Выполняется обращение к системному сервису NtCreateProcess для создания объекта "процесс". Формируются блоки EPROCESS, KPROCESS и блок переменных окружения PEB. Менеджер процессов инициализирует в блоке процесса маркер доступа (копируя аналогичный маркер родительского процесса), идентификатор и другие поля.

3. В уже полностью проинициализированном объекте "процесс" необходимо создать первичный поток. Это, посредством системного сервиса NtCreateThread, делает библиотека kernel32.dll.

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

Наконец, запускается первичный поток, для чего формируются его начальный контекст и стек, и выполняется запуск стартовой процедуры потока режима ядра KiThreadStartup. После этого стартовый код из библиотеки C/C++ передает управление функции main() запускаемой программы.

Вывод.

Система управления процессами с Windows Seven и Linux Ubuntu 10.04 во многом похожи. В частности, они оба имеют поддержку механизма легковесных процессов (light-weight processes), или нитей. Они также отвечают за создание и удаление процессов, межпроцессорное взаимодействие, синхронизацию процессов, отслеживают их состояние и т.д. Но у них также есть ряд различий, так например, в системе управления процессами Seven присутствует функция, которая отслеживает информацию об устройствах ввода/вывода, а в Linux такой функции не предусмотрено.

На основание сравнения, которая было сделано в данной курсовой работе, можно сделать вывод, что для конечного пользователя, систем управления процессами в Windows Seven, подходит больше. Она представляет более больший набор функции, чем в Linux, и само управления процессами осуществляется достаточно просто и понятно, что достигается применением диспетчера задач.