Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.docx
Скачиваний:
39
Добавлен:
15.02.2021
Размер:
845.23 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Московский технический университет связи и информатики»

Центр заочного обучения по программам бакалавриата

Кафедра «Математической кибернетики и информационных технологий»

Отчет

Практическая работа № 3

«Детальное изучение процессов. Наблюдение за многозадачным вычислительным процессом»

по дисциплине: «Операционные системы»

Выполнила: Иванова Иоанна, студентка группы БСТ17хх

Цель работы.

  1. Получение информации о запущенных процессах

  2. Получение информации об используемых процессами ресурсах

  3. Представление результатов в различном виде

  4. Исследование влияния многозадачного режима и приоритета процесса на время его выполнения

Задания на лабораторную работу.

  1. Исследовать мультипрограммный вычислительный процесс на примере выполнения самостоятельно разработанных трех задач

  2. Для одной из задач определить:

  • Номер процесса (PID) и имя пользователя, его запустившего (USER);

  • текущий приоритет процесса (PR) и приоритет, присвоенный ему командой NICE (NI);

  • VIRT — объем виртуальной памяти, которую использует процесс;

  • RES — объем физической памяти, занятой данным процессом;

  • SHR — общий объем разделяемой памяти;

  • S — текущий статус процесса: R — running; S — sleeping, Z — zombie;

  • %CPU — процент используемого времени центрального процессора;

  • %MEM — процент ОЗУ, используемой процессом;

  • TIME+ — продолжительность работы процесса с момента запуска

  • COMMAND — название команды (программы), которая инициировала процесс. количество потоков.

  1. Для всех зарегистрированных в данный момент в системе процессов выведите в один файл строки:

ProcessID=PID : Parent_ProcessID=PPID : Average_Time=avg_atom.

Значения PPid и Pid возьмите из файлов status, значение avg_atom из файлов sched, которые находятся в директориях с названиями, соответствующими PID процессов в /proc. Отсортируйте эти строки по идентификаторам родительских процессов.

  1. Монопольно выполнить каждую из трех задач, определить время их выполнения

  2. Запустить одновременно (друг за другом) три задачи, определить время выполнения пакета.

  3. Изменить приоритет процесса и установить, влияет ли значение приоритета на время выполнения приложения.

  4. Ответить на контрольные вопросы.

Ход работы.

1) Подготовим три скрипта, которые будут выполнять одно и то же действие – обратный отсчет от 250000 до 0.

  • Первый скрипт (1.sh):

#!/bin/bash

echo -e "Запусукаю первый скрипт:"

var1=250000

while [ $var1 -gt -1 ]

do

echo "Первый скрипт:$var1"

var1=$[ $var1 - 1 ]

done

  • Второй скрипт (2.sh):

#!/bin/bash

echo -e "Запусукаю второй скрипт:"

var2=250000

while [ $var2 -gt -1 ]

do

echo "Второй скрипт $var2"

var2=$[ $var2 - 1 ]

done

  • Третий скрипт (3.sh):

#!/bin/bash

echo -e "Запусукаю третий скрипт:"

var3=250000

while [ $var3 -gt -1 ]

do

echo "Третий скрипт $var3"

var3=$[ $var3 - 1 ]

done

2) Запускаем любой из скриптов, для примера был выбран 3.sh. Запустим программу top, используемую для наблюдения за процессами в режиме реального времени (Рис. 1).

Рисунок 1. Работа программы top.

  1. Номер процесса (PID) и имя пользователя, его запустившего (USER);

  • PID = 19179, USER = pavel;

  1. текущий приоритет процесса (PR) и приоритет, присвоенный ему командой NICE (NI);

  • PR = 20, NI = 0;

  1. VIRT — объем виртуальной памяти, которую использует процесс;

  • VIRT = 9608;

  1. RES — объем физической памяти, занятой данным процессом;

  • RES = 3712;

  1. SHR — общий объем разделяемой памяти;

  • SHR = 3268;

  1. S — текущий статус процесса: R — running; S — sleeping, Z — zombie;

  • S – Sleeping;

  1. %CPU — процент используемого времени центрального процессора;

  • %CPU = 0,3;

  1. %MEM — процент ОЗУ, используемой процессом;

  • %MEM = 0,0;

  1. TIME+ — продолжительность работы процесса с момента запуска

  • TIME+ = 0:00.43;

  1. COMMAND — название команды (программы), которая инициировала процесс. количество потоков.

  • COMMAND = 3.sh.

3) Для выполнения данной задачи подготовим скрипт:

#!/bin/bash

status=""

#ps –A (Все процессы), -о pid (Указываем набор столбцов в ответе, т.е столбец pid)

#tail -n +2 (Выводим содержимое начиная со второй строки)

for pid in $(ps -A -o pid | tail -n +2)

do

file="/proc/"$pid"/status"

file1="/proc/"$pid"/sched"

#-E (Расширенное регулярное выражение), -h (Подавляет вывод имен файлов)

#-s (Подавляет сообщения о несуществующих файлах), -i (Игнорирует регистр символов)

ppid=$(grep -E -h -s -i "ppid:\s(.+)" $file | grep -o "[0-9]\+")

avg_atom=$(grep -E -h -s -i "avg_atom(.+)" $file1 | grep -o "[0-9.]\+")

# -z (Пустая строка)

if [[ -z $avg_atom ]]

then avg_atom=0

fi

if [[ $ppid != "" ]]

then status=$status"ProcessID="$pid" : Parent_ProcessID="$ppid" : Average_Time="$avg_atom$'\n'

fi

done

# sort -t " " -k2 (Отсортировать текст по идентификаторам родительского процесса)

# > /tmp/lr3ans3(Вывести/перезаписать результат в указанный файл)

echo "$status" | sort -t " " -k2 > /tmp/lr3ans3

Зарегистрированные в системе процессы отображены и отсортированы по идентификаторам родительских процессов.

Часть результата работы данного скрипта представлена на рисунке 2.

Рисунок 2. Зарегистрированные процессы на момент выполнения скрипта.

4) Монопольно запускаем каждый из созданных ранее скриптов, и определяем время их работы (Рис. 3).

Рисунок 3. Время работы 1.sh, 2.sh, 3.sh (сверху-вниз).

В результате выполнения получаем следующие результаты:

1.sh

2.sh

3.sh

real 3.154

real 3.064

real 3.038

user 2.791

user 2.669

user 2.680

sys 0.352

sys 0.383

sys 0.345

real — реальное (общее) время выполнения;

user — время CPU, которое занял пользователь;

sys — время CPU, занятое системой.

5) Напишем небольшой скрипт, для одновременного запуска 1.sh, 2.sh, 3.sh.

#!/bin/bash

echo -e "Запускаю три скрипта одновременно"

#nice -20 ~/Рабочий\ стол/./1.sh ;nice -20 ~/Рабочий\ стол/./2.sh ;~/Рабочий\ стол/./3.sh

/usr/bin/time -o 111 -p ~/Рабочий\ стол/./1.sh &

/usr/bin/time -o 222 -p ~/Рабочий\ стол/./2.sh &

/usr/bin/time -o 333 -p ~/Рабочий\ стол/./3.sh

echo -e "Завершено"

exit

Для более точного определения времени, запускаем каждый скрипт работать в фон, не дожидаясь выполнения предыдущего, используя добавление & к команде. Также, для команды time будем использовать ключ –o, указав файл, в который будет записываться информация.

В результате выполнения получаем следующие результаты:

1.sh

2.sh

3.sh

real 6.73

real 7.33

real 7.44

user 4.08

user 3.98

user 4.09

sys 2.12

sys 2.22

sys 2.18

По получившимся результатам можно сделать вывод, что при параллельном запуске время выполнения каждого скрипта увеличилось, примерно в два раза.

6) Изменим приоритет выполнения для скрипта 2.sh. Для этого исправим код, используемый в предыдущем пункте, добавив в него команду nice, и укажем значение:

#!/bin/bash

echo -e "Запускаю три скрипта одновременно"

#nice -20 ~/Рабочий\ стол/./1.sh ;nice -20 ~/Рабочий\ стол/./2.sh ;~/Рабочий\ стол/./3.sh

/usr/bin/time -o 111 -p ~/Рабочий\ стол/./1.sh &

/usr/bin/time -o 222 -p nice -n 20 ~/Рабочий\ стол/./2.sh &

/usr/bin/time -o 333 -p ~/Рабочий\ стол/./3.sh

echo -e "Завершено"

exit

Рисунок 4. Результат изменения приоритета для 2.sh.

После выполнения, получаем следующие результаты:

1.sh

2.sh

3.sh

real 6.93

real 8.88

real 6.93

user 3.87

user 3.80

user 3.92

sys 0.69

sys 0.54

sys 0.61

Можно сделать вывод, что, изменив приоритет, мы увеличили время выполнения скрипта 2.sh, но, тем самым, уменьшили время выполнения 3.sh.

Контрольные вопросы.

  1. В каком случае суммарное время выполнения задач больше: при последовательном или одновременном выполнении?

Исходя из результатов ранее выполненного задания, с параллельным выполнением трех скриптов, мы получили итоговый результат, равный 7.44 сек. Для проверки суммарного времени работы скриптов при последовательном выполнении, напишем скрипт (123.sh):

#!/bin/bash

echo -e "Запускаю три скрипта друг за другом"

~/Рабочий\ стол/./1.sh ; ~/Рабочий\ стол/./2.sh ; ~/Рабочий\ стол/./3.sh

echo -e "Завершено"

exit

Определим время выполнения (Рис. 5,6).

Рисунок 5. Запуск проверки времени выполнения 123.sh.

Рисунок 6. Результат выполнения.

В результате получаем, что суммарное время при последовательном выполнении составляет 10,211 сек., что значительно больше, чем при параллельном выполнении.

  1. Как изменилось время выполнения каждой отдельной задачи при пакетном запуске приложений.

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

  1. Как изменится время выполнения отдельной задачи при изменении ее приоритета? Окажет ли влияние изменение приоритета одной задачи на время выполнения другой задачи? Объяснить результаты.

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

Москва, 2020