Изучение основных принципов управления процессами и нитями в ОС LINUX

Страницы работы

16 страниц (Word-файл)

Содержание работы

Санкт-Петербургский Государственный Политехнический Университет

Факультет Технической Кибернетики

Кафедра Компьютерных систем и Программных технологий

Отчет

о лабораторной работе №3

«Управление процессами и нитями»

по дисциплине «Системное программное обеспечение».

Работу выполнил студент группы 4081/2

Радзивиллович Мария

Преподаватель: Душутина Елена Владимировна

Санкт-Петербург

2010


1. Цель работы.

Изучить основные принципы управления процессами и нитями в ОС LINUX.

2. Программа работы. 

2.1. Порождение и запуск процессов.

1. Ознакомиться с выполнением системных вызовов fork(); execl(); wait(); exit(); sleep().

2. Разработать программы родителя и потомка father.c и son.c.
3.  Скомпилировать программы, используя команду вида: gcc -o name.out name.c.

4. Запустить на выполнение программу father.out.
С терминала узнать о процессах, запущенных с вашего терминала; фиксировать идентификаторы процессов и идентификаторы родительских процессов.

5. Запустить на выполнение программу father.out в фоновом режиме father &
Получить таблицу процессов, запущенных с вашего терминала (включая отцовский и сыновний процессы).

2.2. Взаимодействие родственных процессов.

Изменяя длительности выполнения процессов и параметры системных вызовов, рассмотреть 3 ситуации и вывести соответствующие таблицы процессов:
а) процесс-отец запускает процесс-сын и ожидает его завершения;
б) процесс-отец запускает процесс-сын и, не ожидая его завершения, завершает свое выполнение. Зафиксируйте изменение родительского идентификатора процесса-сына;
в) процесс-отец запускает процесс-сын и не ожидает его завершения; процесс-сын завершает свое выполнение. Зафиксируйте появление процесса-зомби, для этого включите команду ps в программу father.c.

2.3. Управление процессами посредством сигналов

1. С помощью команды kill -l ознакомьтесь с перечнем сигналов, поддерживаемых процессами. Ознакомьтесь с системными вызовами kill(2), signal(2).
Подготовьте программы следующего содержания:
а) процесс father порождает процессы son1, son2, son3 и запускает на исполнение программные коды из соответствующих исполнительных файлов;
б) далее родительский процесс осуществляет управление потомками, для этого он генерирует сигнал каждому пользовательскому процессу;
в) в пользовательских процессах-потомках необходимо обеспечить:
для son1 - реакцию на сигнал по умолчанию;
для son2 - реакцию игнорирования;
для son3 - перехватывание и обработку сигнала.
2. Организуйте посылку сигналов любым двум процессам, находящимся в разных состояниях: активном и пассивном, фиксируя моменты посылки и приема каждого сигнала с точностью до секунды.

3.  Ознакомьтесь с выполнением команды и системного вызова nice(1) и getpriority(2).
Приведите примеры их использования.

4. Ознакомьтесь с командой nohup(1). Запустите длительный процесс по nohup(1). Завершите сеанс работы. Снова войдите в систему и проверьте таблицу процессов. Поясните результат.

2.4. Многонитевое функционирование.

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

2. После запуска программы проанализируйте выполнение нитей, распределение во времени. Используйте для этого вывод таблицы процессов командой ps. Попробуйте удалить нить, зная ее идентификатор, командой kill. Приведите и объясните результат.

Похожие материалы

Информация о работе