Исследование особенностей реализации многозадачности в ОС семейства Windows. Лабораторная №3. Лабораторная работа 3 Исследование особенностей реализации многозадачности в ос семейства Windows по дисциплине Операционные системы
Скачать 384.04 Kb.
|
Санкт-Петербургский политехнический университет Петра Великого Институт компьютерных наук и технологий Кафедра «Компьютерные интеллектуальные технологии» Лабораторная работа № 3 Исследование особенностей реализации многозадачности в ОС семейства Windows по дисциплине «Операционные системы» Выполнил студент гр. з3530903/90001 Сенаторов И.К. <подпись> Руководитель доцент, к.т.н. А.В. Сергеев <подпись> «___» __________ 2019 г. Санкт-Петербург 2021 Исследование сбоев и зависаний программ при работе компьютера. Для интерпретации результатов, получающихся при выполнении лабораторной работы, необходимо знать некоторые определения. Запишите в отчёт определение следующих терминов: контекст потока, переключение контекста (Context Switch). Укажите о чём свидетельствует увеличение числа переключений контекста, а о чём наоборот отсутствие переключений контекста. Также запишите, что значит сбой выполнения программы. Приведите конкретные примеры ситуаций, приводящих к сбою. Напишите, что значит зависание программы и когда оно возникает. Контекст потока – включает в себя всю необходимую информацию для возобновления работы потока, включая набор потоков и регистров ЦП. Своими словами, контекст потока – это вся необходимая информация о потоке в последний момент его выполнения, чтобы в будущем возобновить его работу с того же места. Переключений контекста – процесс, в ходе которого останавливается выполнение потока, сохраняется его состояния (контекст потока) и начинается выполнение другого потока. Увеличение числа переключений контекста может говорить о том, что выполняющийся в данный момент процесс, включает в себя множество потоков, так же это может быть связано с тем что, в данный момент процессор имеет высокую загрузку. Отсутствие переключений контекста говорит об обратном – выполняющийся в данный момент времени процесс работает в однопоточном режиме, и/или процессор имеет низкую загрузку. Сбой выполнения программы – это завершение работы процесса при возникновении нештатной ситуации, например, обращение к области памяти не относящейся к процессу. Если написать программу калькулятора и не предусмотреть обработку события деления на ноль, то это приведёт к сбою работы программы при выполнении подобной операции. Зависание программы – это ситуация, при которой код программы продолжает выполняться, но он достиг состояния, из которого программа не может выйти. Например, бесконечный цикл с некорректным условием выхода. Для наблюдения за процессами и потоками запустите программу Process Explorer (procexp.exe). Запустите программу badapp32.exe. Запишите приоритет процесса badapp32 и приоритет основного потока, принадлежащего этому процессу. Для этого найдите в списке процессов процесс badapp32, щёлкните по нему правой кнопкой мыши и выберите пункт меню Properties. В открывшемся окне выберите закладку Threads. Приоритет процесса badapp 8. Приоритет основного потока 10. Проследите, как меняется количество изменений контекста потока (Context Switches) если программа не активна. Каков её статус? Как меняется Context Switches при наведении курсора мыши на окно программы badapp32 и выборе какого-либо меню? В отчёте приведите объяснение наблюдаемым явлениям Когда программа неактивна количество изменений контекста потока 0. При наведении курсора мыши количество изменений контекста потока возрастает. Обнаружена зависимость количества переключений потока от скорости движения мыши внутри окна: чем быстрее движется мышь по окну, тем больше переключений. При максимально активном движении мышью кол-во переключений возрастало до 1700. Статус программы: Wait:WrUserRequest. При наведении курсора мыши или выборе пункта меню мы активно работаем с программой, переводя ее из режима «ожидания» в активный режим работы. Промоделируйте сбой программы badapp32, выбрав пункт меню Action – GPFault. В программе Process Explorer отследите изменение состояния потока. Каков его статус? Как меняется Context Switches? Объясните произошедшие изменения. После смоделированного сбоя программы ее статус ненадолго поменялся на UserRequest. После этого потоки и процесс прекратили свою работу. Количество переключений возросло. После того как мы дали программе команду, она перешла в более активное состояние, что объясняет увеличение количества переключений. После сбоя программа прекратила работу, что объясняет исчезновение потоков. WrUserRequest и UserRequest говорят о статусе ожидания. WrUserRequest говорит, что поток ждёт сообщений от windows. Объясните, почему сбой одной программы не влияет на другие программы? Когда процессор не может выполнить инструкцию исполняющегося потока, происходит внутреннее исключительное прерывание, и процессор переходит к выполнению других инструкций, не связанных с прекратившим работу процессом. Так же процесс имеет доступ только к предназначенной ему области памяти и в случае некорректной работы не может п Закройте программу badapp32.exe и запустите её вновь. Промоделируйте зависание программы, выбрав пункт меню Action – Hang. Запишите какой приоритет стал у процесса и потока. Запишите также, какой стал статус у потока и как меняется Context Switches? Объясните получившиеся результаты. Приоритет процесса не поменялся и остался на уровне 8. Приоритет потока снизился с 12 сначала до 10, потом до 8. Статус потока: Running. Context Switches вначале выросло, потом упало и находилось в пределах от 5 до 50. Приоритет потока снизился, потому что окно перестало быть активным, и программа зависла. Статус потока Running объясняется тем, что программа перешла к выполнению бесконечного цикла и не меняла свой статус на ожидание WrUserRequest. Объясните, почему зависание одной программы не влияет на другие программы? Такое поведение можно объяснить многопроцессорностью, процесс badapp32 и его потоки запускаются не на всех процессорах. Провёл дополнительный эксперимент: задал через диспетчер задач badapp32 соответствие работать только на одном процессоре (ЦП 7). После чего запустил зависание. Нагрузка выбранного ядра возросла до 100%, но на остальных осталась прежней. Возможно, если бы мой процессор был одноядерным, зависание badapp32 повлияло бы и на другие программы и работу системы в целом. Исследование свойств кооперативной (невытесняющей) и вытесняющей многозадачности Win32. Попробуйте запустить программу badapp16.exe в 64-х разрядной операционной системе. Почему не удалось её запустить? Потому что согласно документации Microsoft, 64 разрядные версии Windows не поддерживают 16 – разрядные приложения. Прилагаю ссылку. https://docs.microsoft.com/ru-ru/troubleshoot/windows-client/application-management/x64-windows-not-support-16-bit-programs Запустите 3 экземпляра приложения badapp16 в 32-х разрядной операционной системе и произведите операцию искусственного зависания (Hang) одного из них. Зафиксируйте поведение остальных экземпляров программы. Сделайте вывод и запишите его в отчёт. По причине отсутствия 32 – разрядной ОС, и не запуска badapp16 на 64 – разрядной ОС, пункт 2.2 пропущен Запустите 3 экземпляра приложения badapp32 и произведите операцию искусственного зависания (Hang) одного из них. Зафиксируйте поведение остальных экземпляров программы. Объясните, получившиеся различия в поведении 16-разрядных и 32- разрядных приложений. Зависание одного из badapp32 не привело к изменениям в работу других двух. Исследование поведения процесса в режиме реального времени. Переведите программу badapp32 в режим зависания (Hang). Используя Диспетчер задач, задайте процессу badapp32.exe приоритет реального времени. Используя программу Process Explorer, убедитесь, что приоритет потока управления равен 24. . Запишите, какой статус у потока? Как меняется Context Switches? На каком ядре запущен поток, и какой процент процессорного времени ядра занимает поток? Объясните получившиеся результаты. Статус потока: Running. Это связано с тем, что программа вошла в бесконечный цикл. До перехода в режим реального времени badapp32 равномерно нагружал все ЦП, после перехода он поочередно нагрузил ЦП 2, потом ЦП 3, ЦП 4, потом снова ЦП 2. Процент процессорного времени равен 12. Объяснение полученным результатам найти не удалось. Определение влияния приоритета процесса на выделяемое этому процессу процессорное время.Для дальнейшей работы надо использовать программу counter. Для того, чтобы программа заработала, надо зарегистрировать в операционной системе библиотеку VB40032.DLL. Для этого надо обладать правами администратора. Если у Вас нет таких прав, то вместо counter можно использовать программу badapp32. В этом случае надо перейти к п. 5. В Windows 7 при запуске программы counter пользователем с правами администратора библиотека зарегистрируется автоматически. В Windows 10 для регистрации библиотеки надо нажать правой кнопкой мыши на файл counter.exe и в контекстном меню выбрать пункт «Запуск от имени администратора». После этого библиотека зарегистрируется, и программа counter запустится. Если программа counter запустилась, то п. 5 выполнять не надо. Запустите два экземпляра приложения counter. Определите при помощи утилиты «Диспетчер задач» доли процессорного времени, выделяемого каждому из полученных процессов. Процент процессорного времени, отведённому каждому процессу, представлен в колонке ЦП «Диспетчера задач». Каждому из процессов counter выделено 10.5% процессорного времени. Измените приоритет одного процесса counter на Высокий, а другого на Низкий и определите доли процессорного времени, выделяемого каждому из полученных процессов. Объясните получившийся результат После изменения приоритета изменений в значениях процентов процессорного времени обоих процессов не замечено. Это связано с тем что нагрузка на процессор распределяется между ядрами. Запустите оба процесса counter на одном ядре процессора. Для этого в «Диспетчере задач» надо нажать правой кнопкой мыши на процесс counter и выбрать из контекстного меню «Задать соответствие» (Задать сходство). Как изменился процент процессорного времени, отводимый каждому процессу counter? Почему? После запуска процессов counter на одном ядре доля процессорного времени обоих упала. У процесса с высоким приоритетом она выше, чем у процесса с низким. Полученные результаты объясняются тем, что теперь процессы запущены на одном ядре, и распределить их нагрузку так, чтобы они не мешали друг другу невозможно, ОС отдаёт предпочтение процессу с высоким приоритетом, в следствие этого его нагрузка выше. Запустите третий экземпляр программы counter на том же процессорном ядре, что и остальные процессы counter. Как изменилась доля процессорного времени, отводимого каждому процессу counter? Почему? После запуска процесса с нормальным приоритетом нагрузка распределилась соответственно их приоритету. Больше всего процессорного времени у процесса с высоким приоритетом, у процесса с низким приоритетом самое маленькое значение процессорного времени. У процесса с нормальным приоритетом среднее. ОС распределяет процессорное время между процессами неравномерно, предпочтение отдаётся процессам с более высоким приоритетом. Установите у нового процесса приоритет Высокий. Как изменилась доля процессорного времени, отводимого каждому процессу counter? Почему? После изменения приоритета третьего процесса counter на высокий, нагрузка между двумя процессами с высоким уровнем приоритета распределилась поровну, у процесса с низким она не изменились. Между процессами одного уровня ОС распределяет мощности равномерно. Если уровень приоритета разный, то чем он выше, тем больше процессорного времени получит процесс. Оцените качественно возможность реакции процессов counter на интерактивное событие – перетаскивание окна. Есть ли разница при перетаскивании разных окон counter? Объясните результат. Объясните, почему при перетаскивании окна counter останавливается счётчик. Во время перетаскивания окна динамический приоритет потока увеличивается на 2, после отпускания окна приоритет возвращается к базовому значению приоритета процесса. Во время перетаскивания окна процессорное время падает до 0, процесс ставится на паузу, об этом так же свидетельствует снижение количества изменений контекста до 0. Процессорное время распределяется между двумя другими процессами, в соответствии с их приоритетом так, будто третий процесс не запущен. |