Практическая работа № 7. Многопроцессорная симметричная обработка в ОС
Традиционно компьютер рассматривается как машина, предназначенная для выполнения последовательных действий. В большинстве языков программирования алгоритм задается в виде последовательных инструкций; при работе программы процессор выполняет машинные команды последовательно, одну за другой. Каждая команда представляется в виде последовательности операций (выборка команды, выборка операндов, выполнение операции, сохранение результатов).
Такая точка зрения на компьютер никогда не соответствовала действительности полностью. На уровне микроопераций одновременно генерируются несколько управляющих сигналов. Уже давно применяется конвейерная обработка команд, позволяющая выполнять одновременно по крайней мере операции выборки и выполнения. Оба приведенных примера являются образцами параллельного выполнения функций.
По мере развития компьютерных технологий и уменьшения стоимости аппаратного обеспечения разработчики компьютеров находили все больше возможностей реализации параллелизма. Обычно это делалось для повышения производительности, а в некоторых случаях — для повышения надежности. В данной книге исследуются два наиболее популярных подхода обеспечения одновременной работы процессоров в многопроцессорных системах: симметричная многопроцессорность (symmetric multiprocessor — SMP) и кластеры. Симметричная многопроцессорная обработка описана в этом разделе, а кластеры — в шестой части.
Архитектура SMP
Рассмотрим, каким образом архитектура SMP соотносится с общей категорией параллельных процессоров. Общепринятым методом классификации таких систем по-прежнему является систематика, в которой выделяются системы с параллельными процессорами, впервые введенная Флинном (Flynn) [FLYN72]. Флинн предложил ввести следующие классы компьютерных систем.
Архитектура с одним потоком команд и одним потоком данных (Single Instruction Single Data — SISD). На одном процессоре выполняется один поток команд; операции выполняются над данными, которые хранятся в единой области памяти.
Архитектура с одним потоком команд и многими потоками данных (Single Instruction Multiple Data — SIMD). С каждым из обрабатываемых элементов связаны хранящиеся в памяти данные, и каждая команда выполняет действия с различными наборами данных, относящимися к разным процессам. Под эту категорию подпадают векторный и матричный процессоры.
Архитектура со многими потоками команд и одним потоком данных (Multiple Instruction Single Data — MISD). Последовательность данных передается набору процессоров, каждый из которых выполняет свою последовательность команд. Такая структура еще не была реализована.
Архитектура со многими потоками команд и многими потоками данных (Multiple Instruction Multiple Data — MIMD). Несколько процессоров одновременно выполняют различные последовательности команд с различными наборами данных.
В схеме MIMD процессоры являются универсальными, потому что они должны иметь возможность обрабатывать все команды, необходимые для соответствующего преобразования данных. Дальнейшая классификация систем с архитектурой MIMD может производиться в соответствии с тем, как в них осуществляется обмен данными между процессорами (рис. 4.8). Если каждому процессору выделяется отдельная область памяти, то каждый обрабатывающий элемент является самостоятельным компьютером. Они обмениваются между собой информацией либо через специальные каналы, либо через какие-то сетевые устройства. Такие системы известны под названием кластеры (clusters) или мультикомпьютеры. Если процессоры совместно используют общую память, то каждый из них имеет доступ к программам и данным, которые там хранятся. Процессоры могут обмениваться информацией через эту память. Такие системы известны под названием многопроцессорных систем с общей памятью (shared-memory multiprocessor).
Рис. 4.8. Архитектуры систем с параллельными процессорами
Одна из общих классификаций многопроцессорных систем основана на том, как процессы распределяются между процессорами. Два главных подхода — выделение основных и подчиненных процессоров и симметричная многопроцессорная обработка. В архитектуре с ведущим и ведомыми процессорами (muster/slave architecture) ядро операционной системы всегда выполняется на специально выделенном процессоре. На других процессорах могут выполняться только пользовательские программы и, возможно, утилиты операционной системы. Ведущий процессор отвечает за планирование процессов или потоков. Если выполняющемуся на ведомом процессоре процессу или потоку понадобится какой-нибудь системный сервис (например, вызов процедуры ввода-вывода), он должен будет послать запрос основному процессору, а затем ждать, пока сервисная программа не закончит свою работу. Такой подход довольно прост, и для его реализации достаточно немного усовершенствовать операционную систему, предназначенную для однопроцессорных многозадачных систем. Разрешение конфликтов упрощается, благодаря тому что всей памятью и всеми ресурсами ввода-вывода управляет один процессор. Этот подход имеет ряд недостатков.
Сбой в работе основного процессора влечет за собой отказ всей системы.
Основной процессор может тормозить работу всей системы, так как только на нем должны производиться все действия по планированию и управлению процессами.
В симметричной многопроцессорной системе (symmetric multiprocessor) ядро может выполняться на любом процессоре; как правило, каждый процессор сам планирует свою работу, извлекая имеющийся в наличии процесс или поток из накопителя. Ядро может быть выполнено в виде многих процессов или многих потоков; при этом разные его части способны работать параллельно. Симметричный подход несколько усложняет архитектуру операционной системы. Нужно принять меры предосторожности, чтобы два процессора не выбрали один и тот же процесс или чтобы процесс каким-нибудь образом не выпал из очереди. Необходимо применять специальные методы для разрешения запросов одного и того же ресурса различными процессами и синхронизации запросов.
Симметричные мультипроцессоры и кластеры имеют сложную архитектуру. Для их разработки нужно решать вопросы, связанные с физической организацией, структурами взаимосвязей, обменом информацией между процессорами, архитектурой операционной системы и обеспечением прикладными программами. Обсуждая такие системы в данном разделе и далее, в главе 13, "Распределенные вычисления, архитектура клиент/сервер и кластеры", мы затрагиваем в основном вопросы архитектуры операционных систем. Однако и здесь, и позже мы вскользь коснемся вопросов аппаратного устройства таких компьютерных систем.
Организация симметричной многопроцессорной системы
На рис. 4.9 проиллюстрирована общая архитектура симметричной многопроцессорной системы. В ней имеется несколько процессоров, каждый из которых содержит свой собственный управляющий модуль, арифметико-логическое устройство и свои регистры. Каждый из процессоров имеет доступ к общей основной памяти и устройствам ввода-вывода. Этот доступ осуществляется с помощью некоторого механизма взаимодействия; традиционно в роли такого механизма выступает общая шина. Процессоры могут обмениваться между собой информацией посредством общей памяти (т.е. с помощью сообщений и информации о состоянии, хранящихся в общем адресном пространстве). Кроме того, процессоры могут иметь возможность непосредственного обмена сигналами. Память зачастую имеет организацию, позволяющую осуществлять одновременный множественный доступ к ее отдельным блокам.
Как правило, в современных машинах процессоры имеют по крайней мере один уровень собственного кэша. Его использование вносит новые аспекты в рассмотрение архитектуры операционных систем. Поскольку в каждом локальном кэше хранится образ какой-то части основной памяти, то в результате изменения слова в одном кэше соответствующее слово в другом кэше может оказаться неверным. Чтобы предотвратить такую ситуацию, все процессоры, в кэше которых содержится данное слово, должны быть извещены о необходимости изменить его. Эта проблема известна как проблема когерентности кэшей и относится скорее к аппаратному обеспечению, чем к операционной системе.
Рис. 4.9. Архитектура симметричной многопроцессорной системы
Архитектура многопроцессорных операционных систем
Операционная система, предназначенная для симметричной многопроцессорной системы, управляет процессорами и другими ресурсами компьютера таким образом, чтобы с точки зрения пользователя многопроцессорная система выглядела так же, как и многозадачная однопроцессорная. Пользователь может создавать приложения с использованием нескольких процессов или нескольких потоков в процессах, не заботясь о том, какое количество процессоров будет доступно — один или несколько. Таким образом, многопроцессорная операционная система должна выполнять все функции многозадачной системы, а также обладать дополнительными возможностями по распределению вычислений среди процессоров. В число особенностей архитектуры такой операционной системы входят следующие.
Одновременные параллельные процессы или потоки. Чтобы несколько различных процессов могли одновременно выполнять один и тот же код ядра, он должен быть реентерабельным. При выполнении несколькими процессорами одного и того же кода ядра (или разных его частей) необходима организация управления таблицами и управляющими структурами ядра, чтобы избежать взаимоблокировок или неправильного выполнения операции.
Планирование. Планирование может выполняться на любом из процессоров, поэтому необходимо предусмотреть механизм, позволяющий избежать конфликтов. При использовании многопоточности на уровне ядра несколько потоков одного и того же процесса могут выполняться на разных процессорах. Планирование в многопроцессорных системах рассматривается в главе 10, "Многопроцессорное планирование и планирование реального времени".
Синхронизация. В ситуации, когда несколько активных процессов имеют возможность доступа к совместным адресным пространствам или ресурсам ввода-вывода, необходимо позаботиться об их эффективной синхронизации. Синхронизация — это средство, обеспечивающее реализацию взаимоисключений и упорядочение событий. Общепринятым механизмом синхронизации в многопроцессорных операционных системах являются блокировки, описанные в главе 5, "Параллельные вычисления: взаимоисключения и многозадачность".
Управление памятью. Система управления памятью в многопроцессорной системе должна быть способна разрешать все проблемы, возникающие в однопроцессорных машинах, а кроме того, операционная система должна уметь использовать возможности, предоставляемые аппаратным обеспечением, например многопортовую память. Механизмы страничной организации памяти разных процессоров должны быть скоординированы, чтобы обеспечить согласованность работы в ситуации, когда несколько процессоров используют одну и ту же страницу или один и тот же сегмент и принимают решение по вопросу замещения страниц.
Надежность и отказоустойчивость. При отказе одного из процессоров операционная система должна обеспечить продолжение корректной работы системы. Планировщик операционной системы (как и другие ее части) должен получить информацию о потере одного из процессоров и соответствующим образом перестроить свои управляющие таблицы.
Поскольку при описании архитектуры многопроцессорной операционной системы, как правило, рассматриваются те же вопросы (с добавлением некоторых других), что и при описании устройства однопроцессорной операционной системы, мы не будем останавливаться на многопроцессорных операционных системах отдельно. Вместо этого по ходу изложения материала книги будем обращаться к вопросам, являющимся специфичными для многопроцессорных систем.
Краткие теоретические сведения:
Необходимость обеспечить программам возможность осуществлять обмен данными с внешними устройствами и при этом не включать в каждую двоичную программу соответствующий двоичный код, осуществляющий собственно управление устройствами ввода/вывода, привела разработчиков к созданию системного программного обеспечения и, в частности, самих операционных систем.
Программирование задач управления вводом/выводом является наиболее сложным и трудоемким, требующим очень высокой квалификации. Поэтому код, позволяющий осуществлять операции ввода/вывода, стали оформлять в виде системных библиотечных процедур; потом его стали включать не в системы программирования, а в операционную систему с тем, чтобы в каждую отдельно взятую программу его не вставлять, а только позволить обращаться к такому коду. Системы программирования стали генерировать обращения к этому системному коду ввода/вывода и осуществлять только подготовку к собственно операциям ввода/вывода, то есть автоматизировать преобразование данных к соответствующему формату, понятному устройствам, избавляя прикладных программистов от этой сложной и трудоемкой работы. Другими словами, системы программирования вставляют в машинный код необходимые библиотечные подпрограммы ввода/вывода и обращения к тем системным программным модулям, которые, собственно, и управляют операциями обмена между оперативной памятью и внешними устройствами.
Таким образом, управление вводом/выводом — это одна из основных функций любой ОС. Одним из средств правления вводом/выводом, а также инструментом управления памятью является диспетчер задач Windows, он отображает приложения, процессы и службы, которые в текущий момент запущены на компьютере. С его помощью можно контролировать производительность компьютера или завершать работу приложений, которые не отвечают.
При наличии подключения к сети можно также просматривать состояние сети и параметры ее работы. Если к компьютеру подключились несколько пользователей, можно увидеть их имена, какие задачи они выполняют, а также отправить им сообщение.
Также управлять процессами можно и «вручную» при помощи командной строки. Команды Windows для работы с процессами:
•at - запуск программ в заданное время
•Schtasks - настраивает выполнение команд по расписанию
•Start - запускает определенную программу или команду в отдельном окне.
Taskkill - завершает процесс
•Tasklist - выводит информацию о работающих процессах
Для получения более подробной информации, можно использовать центр справки и поддержки или команду help (например: help at)
•command.com - запуск командной оболочки MS-DOS
•cmd.exe - запуск командной оболочки Windows
Ход работы:
Задание 1. Работа с Диспетчером задач Windows 7.
1.Запустите ранее установленную ОС Windows 7.
2.Запуск диспетчера задач можно осуществить двумя способами:
1)Нажатием сочетания клавиш Ctrl+Alt+Del. При использовании данной команды не стоит пренебрегать последовательностью клавиш. Появится меню, в котором курсором следует выбрать пункт «Диспетчер задач».
2)Переведите курсор на область с показаниями системной даты и времени и нажмите правый клик, будет выведено меню, в котором следует выбрать «Диспетчер задач».
3.Будет выведено окно как на рис. 21.
Рис. 21. Диспетчер задач Windows
4.В диспетчере задач есть 6 вкладок:
1)Приложения
2)Процессы
3)Службы
4)Быстродействие
5)Сеть
6)Пользователи
o Вкладка «Приложения» отображает список запущенных задач (программ) выполняющиеся в настоящий момент не в фоновом режиме, а также отображает их состояние. Также в данном окне можно снять задачу переключиться между задачами и запустить новую задачу при помощи соответствующих кнопок.
Вкладка «Процессы» отображает список запущенных процессов, имя пользователя запустившего процесс, загрузку центрального процессора в процентном
соотношении, а также объем памяти используемого для выполнения процесса. Также присутствует возможность отображать процессы всех пользователей, либо принудительного завершения процесса. Процесс — выполнение пассивных инструкций компьютерной программы на процессоре ЭВМ.
oВкладка «Службы» показывает, какие службы запущены на компьютере. Службы
— приложения, автоматически запускаемые системой при запуске ОС Windows и выполняющиеся вне зависимости от статуса пользователя.
oВкладка «Быстродействие» отображает в графическом режиме загрузку процессора, а также хронологию использования физической памяти компьютера. Очень эффективным инструментом наблюдения является «Монитор ресурсов». С его
помощью можно наглядно наблюдать за каждой из сторон «жизни» компьютера. Подробное изучение инструмента произвести самостоятельно, интуитивно.
oВкладка «Сеть» отображает подключенные сетевые адаптеры, а также сетевую активность.
oВкладка «Пользователи» отображает список подключенных пользователей.
5.После изучения диспетчера задач:
oПотренируйтесь в завершении и повторном запуске процессов.
o Разберите мониторинг загрузки и использование памяти.
o Попытайтесь запустить новые процессы при помощи диспетчера, для этого можно использовать команды: cmd, msconfig.
Задание 2. Командная строка Windows.
1. Для запуска командной строки в режиме Windows следует нажать:
(Пуск) > «Все программы» > «Стандартные» > «Командная строка»
2.Поработайте выполнением основных команд работы с процессами: запуская, отслеживая и завершая процессы.
Основные команды
Schtasks - выводит выполнение команд по расписанию
Start - запускает определенную программу или команду в отдельном окне. Taskkill - завершает процесс
Tasklist - выводит информацию о работающих процессах
Рис. 22. Командная строка Windows 3. В появившемся окне (рис. 22) наберите:
cd/ - переход в корневой каталог;
cd windows – переход в каталог Windows. dir - просмотр содержимого каталога.
В данном каталоге мы можем работать с такими программами как «WordPad» и «Блокнот».
4.Запустим программу «Блокнот»: C:\Windows > start notepad.exe
Отследим выполнение процесса: C:\Windows > tasklist
Затем завершите выполнение процесса: C:\Windows > taskkill /IM notepad.exe
5.Самостоятельно, интуитивно, найдите команду запуска программы WordPad. Необходимый файл запуска найдите в папке Windows.
6.Выполнение задания включить в отчет по выполнению лабораторной работы.
Задание 3. Самостоятельное задание.
1.Отследите выполнение процесса explorer.exe при помощи диспетчера задач и командной строки.
2.Продемонстрируйте преподавателю завершение и повторный запуск процесса explorer.exe из:
•Диспетчера задач;
•Командной строки.
3.Выполнение задания включить в отчет по выполнению лабораторной работы.
В Windows 10 есть функция “Контроль памяти”, которая автоматически освобождает место на диске согласно выбранным вами параметрам. Ранее мы рассматривали как ее включить и настроить в параметрах системы. Сегодня мы рассмотрим как включить или отключить “Контроль памяти” для автоматического освобождения места на диске всем пользователям в Windows 10.
ВКЛЮЧИТЬ ИЛИ ОТКЛЮЧИТЬ КОНТРОЛЬ ПАМЯТИ В ГРУППОВЫХ ПОЛИТИКАХ
Данный способ работает в Windows Pro, Enterprise или Education, если у вас домашняя версия – переходите к следующему способу.
1. В строке поиска или в меню “Выполнить” (Win+R) введите gpedit.msc и нажмите клавишу Enter.
2. Зайдите в “Конфигурация компьютера” => “Административные шаблоны” => “Система” => “Контроль памяти” => откройте “Разрешить контроль памяти”.
3. Чтобы включить всем пользователям “Контроль памяти” и запретить его отключение в параметрах системы, поставьте точку в поле “Включено” и нажмите на “ОК”.
Чтобы отключить всем пользователям “Контроль памяти” и запретить его включение в параметрах системы, поставьте точку в поле “Отключено” и нажмите на “ОК”.
Закройте редактор локальной групповой политики.
ВКЛЮЧИТЬ ИЛИ ОТКЛЮЧИТЬ КОНТРОЛЬ ПАМЯТИ В РЕДАКТОРЕ РЕЕСТРА
1. В строке поиска или в меню “Выполнить” (Win+R) введите команду regedit и нажмите Enter.
Перейдите по пути HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\StorageSense, если в разделе Windows нет раздела StorageSense – нажмите на него правой кнопкой мыши, выберите “Создать” => “Раздел” => назовите новый раздел StorageSense
3. Нажмите на раздел StorageSense правой кнопкой мыши, выберите “Создать” => “Параметр DWORD (32 бита) => назовите новый параметр AllowStorageSenseGlobal
4. Откройте параметр AllowStorageSenseGlobal, в поле “Значение” введите 0 и нажмите на “ОК”, если вы хотите отключить “Контроль памяти” всем пользователям и запретить включение в параметрах системы, или в поле “Значение” введите 1 и нажмите на “ОК”, если вы хотите включить “Контроль памяти” всем пользователям и запретить отключение в параметрах системы. Закройте редактор реестра.
Do'stlaringiz bilan baham: |