Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

1. 2. Последовательность выполнения работы




1. 2. ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ РАБОТЫ

 

 

1. Написание, компиляция и запуск программы с системными вызовами getpid() и getppid().

Наша программа (язык С):

 

 

Вывод программы:

 

 

 

2.  Прогон программы с использованием вызова fork(), где порожденный процесс

 делает то же самое, что и родитель.

Наша программа:

 

В процессе выполнения системного вызова fork() порождается копия родительского процесса и возвращение из системного вызова будет происходить уже как в родительском, так и в порожденном процессах. Этот системный вызов является единственным, который вызывается один раз, а при успешной работе возвращается два раза (один раз в процессе-родителе и один раз в процессе-ребенке)! После выхода из системного вызова оба процесса продолжают выполнение регулярного пользовательского кода, следующего за системным вызовом.

 

Результат выполнения программы:

3.  Написание, компиляция и запуск программы с распечаткой значений переменных

 среды и аргументов командной строки.

 

Наша программа:

 

Результат выполнения программы:

 

4.  Прогон программы с использованием системного вызова exec().

 

Задачей exec является замена текущего процесса на новый процесс. Отметьте использование слова заменить. Как только вы вызываете exec, текущий процесс завершается и начинается новый. Если вы хотите создать отдельный процесс, сначала вы должны вызвать fork, затем вызвать exec для новой программы в дочернем процессе.

В программе ниже показан этот сценарий:

 

 

Результат выполнения программы:

 

 

5.  Написание, компиляция и запуск программы для изменения пользовательского

 контекста в порожденном процессе.

6. Написание, компиляция и запуск программы с использованием вызова fork() с

 разным поведением процессов ребенка и родителя.

 

 

Наша программа:

 

 

Результат выполнения программы:

 

 

 

 

Вывод:

 

Научились использовать опции для компиляции программ на языке С в UNIX и их запуск. Также изучили новые системные вызовы getuid() и getgid(), с помощью которых можно узнать номер пользователя и номер группы в системе.

 

 

Министерство образования и науки Российской Федерации

Федеральное государственное автономное образовательное учреждение

высшего образования

«Южно-Уральский государственный университет»

(национальный исследовательский университет)

Институт естественных и точных наук

Факультет математики, механики и компьютерных технологий

Кафедра прикладной математики и программирования

 

   

 

 

ОТЧЕТ К ЛАБОРАТОРНОЙ РАБОТЕ №7

по дисциплине операционные системы

 

    Руководитель работы, __________/Е. Ю. Алексеева «____»_____________2019 г.
    Автор работы Студент группы ЕТ-313 _____________/ К. С. Шведов «____»_____________2019 г.
   

 

Челябинск 2019

ЛАБОРАТОРНАЯ РАБОТА № 7.

Управление процессами и заданиями

ЦЕЛЬ РАБОТЫ

План занятия

· Работа выполняется: на хостовой или виртуальной машине.

· Навыки: работа с процессами, задачами, фоновый режим.

· Изучаемые команды: ps, top, bg, fg, pstree, kill.

 

Практические работы

1. Выполните команды:

 

$ ps

$ ps -u

$ ps -ux

$ ps -aux

$ ps -e

Найдите отличия в работе команды ps в зависимости от переданных аргументов.

 

2. Выведите список процессов в виде дерева:

$ pstree

 

3. Для того, чтобы найти какой-либо процесс, используйте конвейер:

 

$ pstree | less

В интерактивном режиме программы less напечатайте:

/syslog

и нажмите Enter. Выйдите из программы нажатием клавиши q

 

4. Bash обладает полезным свойством выполнять задачи в фоновом режиме, для этого после выполняемой команды нужно поставить символ амперсанд - " & ". Запустите команду. #: которая будет работать " вечно":

 

$ yes

 

5. Завершите команду, нажав сочетание Ctrl+C

6. Запустите эту же команду в фоновом режиме, перенаправив стандартный вывод:

 

$ yes > /dev/null &

 

7. Появится надпись вроде следующей: [1] 18335. В квадратных скобках указан номер задания, следом - PID процесса, который может не совпадать с примером.

8. Убедитесь при помощи команды jobs, что в фоне работает одна задача

9. Запустите ещё одну задачу:

 

$ yes n > /dev/null & И ещё одну:

$ yes yes > /dev/null &

 

10. Откройте команду top и отметьте две запущенные ранее задачи, потребляющие больше всего ресурсов:

 

$ top

 

11. Уничтожьте одну из них, набрав в интерактивном режиме:

k

Здесь - идентификатор процесса, который можно посмотреть в команде top

 

12. Выполните выход из команды top клавишей q

13. Выясните PID остальных задач:

 

$ jobs -l

 

14. Уничтожьте одну из задач командой kill, используя полученный PID

 

$ kill

 

15. Уничтожьте оставшуюся задачу по номеру задания, используя команду:

 

$ kill %

Здесь - номер задачи

 

16. Убедитесь, что в фоне теперь не выполняется ни одной задачи.

17. Существует ещё один метод перевода задачи в фоновый режим. Запустите команду:

 

$ yes > /dev/null

 

18. Остановите задачу, отправив ей сигнал HUP (для этого достаточно нажать сочетание клавиш Ctrl+Z).

19. Переведите остановленную задачу в фоновый режим:

 

$ bg

 

20. Откройте команду top и убедитесь, что процесс yes работает (занимает 100% процессорного времени)

21. Завершите команду yes, используя команду killall. Данная команда может остановить процесс по его имени:

 

$ killall yes

 

22. Проверьте состояние фоновых заданий, убедитесь, что в фоне нет ни одной задачи.

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...