Требования к выполнению лабораторной работы



Разработать многопоточную программу, решающую одну из перечисленных ниже задач (в соответствии с вариантом):

1. «Оплата – заказ». В файле хранятся записи формата «№ заказа – Сумма оплаты – да/нет». Первый поток изменяет запись о заказе – сумму оплаты. Второй поток производит оплату и делает запись об оплате – «да».

2.  «Библиотека». Первый поток моделирует взятие книги читателем. Второй поток моделирует сдачу книги. Количество книг в библиотеке ограничено.

3. «Производитель – потребитель». Первый поток моделирует производство изделия. Второй поток моделирует запрос на товар и получение товара.

4. «Очередь». Каждый из потоков имеет свою очередь, содержащую элементы. Каждый из потоков берет элемент из очереди другого потока и заносит в свою очередь.

5.  «Ввод». Первый поток вводит символы. Второй поток выводит введенный символ на экран.

6. «Билеты». Первый поток моделирует бронирование билетов – вносит в массив структур №рейса - №заказа и через произвольно генерируемое время оплачивает бронь, удаляя запись о ней из массива. Второй поток читает информацию из массива.

7. «Инкремент». Первый поток наращивает каждый элемент массива на единицу. Второй поток выводит массив на экран.

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

Варианты заданий

№ задачи Тип синхронизации Потоки - процессы
1 1 lock Один процесс
2 2 Семафоры Разные процессы
3 3 События Один процесс
4 4 Семафоры Разные процессы
5 5 События Один процесс
6 6 lock Один процесс
7 7 Семафоры Разные процессы
8 1 Мьютексы Один процесс
9 2 Семафоры Разные процессы
10 3 События Один процесс
11 4 Волокна Один процесс
12 5 Волокна Один процесс
13 6 Monitor Один процесс
14 7 Волокна Один процесс
15 1 Мьютексы Разные процессы
16 2 Семафоры Один процесс
17 3 События Разные процессы
18 4 Семафоры Один процесс
19 5 Волокна Один процесс
20 6 Мьютексы Разные процессы

Вопросы для защиты лабораторной работы

1. Контекст потока

2. Определение приоритета потока

3. Назначение маски родства потока

4. Объекты синхронизации, особенности их применения


Лабораторная работа № 11WMI

Определение характеристик компьютера с помощью технологии WMI

Цель работы: Получить навыки использования технологии WMI с помощью сценариев Windows Script Host (WSH).

Теоретические сведения

Технология (Windows Management Instrumentation) WMI — это созданная фирмой Microsoft реализация модели управления предприятием на базе Web (Web-Based Enterprise Management, WBEM). В основе WBEM лежит идея создания универсального интерфейса мониторинга и управления к различным системам и компонентам распределенной информационной среды предприятия с использованием объектно-ориентированной идеологии. WMI – это открытая унифицированная библиотека (репозиторий) однотипных интерфейсов доступа к параметрам, настройки и свойствам различных систем и их компонентов.

Используя WMI, можно с помощью сценариев Windows Script Host (WSH) решать следующие задачи:

1. Управление различными версиями операционной системы Windows.

2. Управление ресурсами и службами сети.

3. Мониторинг состояния системы в реальном времени.

4. Управление серверными приложениями Windows.

Для обращения к объектам WMI используется специфический язык запросов WMI Query Language (WQL), который является одной из разновидностей SQL. Основное его отличие от ANSI SQL — это невозможность изменения данных, то есть с помощью WQL возможна лишь выборка данных с помощью команды SELECT. Запросы WQL обычно применяются в скриптах. Можно автоматизировать работу с WMI с помощью сценариев Windows Script Host (WSH).

Всякому ресурсу, управляемому с помощью WMI, соответствует свой класс. Каждый класс имеет свойства, методы и квалификаторы. Также свои квалификаторы могут быть у каждого свойства и метода. Все классы группируются в пространства имен, которые иерархически упорядочены и логически связаны друг с другом по определенной технологии или области управления. В WMI имеется одно корневое пространство имен Root, которое в свою очередь имеет 4 подпространства: CIMv2, Default, Security и WMI. Некоторые классы репозитария WMI пространства имен CIMv2, использование которых предлагается в данной лабораторной работе, приведены в приложении 1.

Свойства классов используются для однозначной идентификации экземпляра класса, представляющего конкретный управляемый ресурс, а также для описания текущего состояния этого ресурса.

Методы класса позволяют выполнить те или иные действия над управляемым ресурсом, которому соответствует этот класс. Так как не над каждым ресурсом можно производить какие-либо операции, то не у всякого класса есть методы.

Квалификаторы содержат дополнительную информацию о классе, свойстве или методе, в котором они определены.

Работа с WMI в сценариях WSH

Для подключения к WMI с помощью сценариев WSH существуют два варианта: с использованием объекта SWbemLocator и с помощью WMI-моникера (WMI moniker) "WinMgmts:".

Объект SWbemLocator позволяет установить соединение с определённым пространством имён WMI на удалённом компьютере от имени заданной учётной записи или на локальном компьютере от имени текущей учётной записи. Использование этого объекта необходимо, если в сценарии нужно явно задать имя пользователя и пароль для подключения к пространству имён WMI. Объект SWbemLocator создаётся следующим образом:

objSWbemLocator = CreateObject("WbemScripting.SWbemLocator");

Единственный метод ConnectServer объекта SWbemLocator позволяет подключиться к WMI и получить ссылку на объект SWbemServices. Синтаксисвызоваметода:

objSWbemServices = objSWbemLocator.ConnectServer([strServer], [strNamespace], [strUser], [strPassword], [strLocale], [strAuthority], [iSecurityFlags], [objWbemNamedValueSet])

Параметры метода:

•   strServer - имя компьютера. Если не указано, подключение будет производиться к локальному компьютеру.

•   strNamespace - пространство имён. Если не указано, будет использовано пространство имён, заданное по умолчанию.

•   strUser - имя пользователя в формате Domain\Username. Если не указано, будет использована текущая учётная запись. Если параметр указан для локального соединения, произойдёт ошибка (к локальному компьютеру можно подключаться только от имени текущей учётной записи).

•   strPassword - пароль пользователя.

•   strLocale - код локализации. Если не указан, будет использован текущий регион (язык). Формат строки - "MS_xxxx", где xxxx - строка в шестнадцатеричной форме, которая указывает LCID. Например, американский английский указывается как "MS_409".

•   strAuthority - имя домена. Если домен уже определен в параметре strUser, повторное указание домена в этом параметре приведёт к ошибке.

•   iSecurityFlags - влияет на время ожидания подключения. Если параметр установлен в 0, управление будет передано на следующую строку программы (скрипта) только после того, как подключение к серверу будет установлено. Если параметр установлен в 128, максимальное время ожидания подключения - 2 минуты.

•   objWbemNamedValueSet - объект SWbemNamedValueSet, элементы которого представляют контекстную информацию, которая может использоваться провайдером, который обслуживает запрос. Провайдер, который поддерживает или требует такую информацию, должен документировать имена и типы данных возможных значений. Как правило, этот параметр остаётся пустым.     

Примерподключения:

objSWbemLocator = CreateObject("WbemScripting.SWbemLocator");

objSWbemServices = objSWbemLocator.ConnectServer(".", "Root\CIMV2",,,,, 128);

Моникер - это строка определённой структуры, задающая путь к объекту, экземпляр которого должен быть создан. Моникер передаётся в качестве параметра функции GetObject(). Моникер состоит из:

•   Обязательный префикс "winmgmts:".

•   Необязательные параметры настройки безопасности WMI.

•   Необязательный путь к нужному объекту WMI.

Регистр символов префикса "winmgmts:" неважен. Самый простой моникер состоит только из этого префикса. Такой моникер подключается к пространству имён по умолчанию (как правило, это Root\CIMV2) на локальном компьютере:

objService = GetObject("winmgmts:");

Пример подключения к конкретному объекту и с заданным уровнем безопасности:

objSWbemServices = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\.\Root\CIMV2");

В результате подключения к WMI (как с помощью объекта SWbemLocator, так и с помощью моникера) можно получить объект SWbemServices, который обладает рядом свойств и методов. Объект SWbemServices возвращается в случае, если подключение производится к пространству имён.

Большинство операций в сценариях WMI можно выполнять в трёх режимах: синхронном, полусинхронном и асинхронном. При запуске метода в синхронном режиме выполнение сценария не продолжается до тех пор, пока метод не будет полностью выполнен. В синхронном режиме рекомендуется выполнять операции, которые не возвращают больших объёмов данных. В асинхронном режиме после вызова метода управление сразу передаётся обратно в сценарий. При использовании асинхронных методов нужно обрабатывать события, возникающие при выполнении и завершении асинхронной операции. В полусинхронном режиме после вызова метода управление сразу передаётся обратно в сценарий, и можно начать работать с возвращаемыми данными, не дожидаясь полного завершения их формирования.

Некоторые свойства и методы объекта SWbemServices

ExecMethod(strObjectPath, strMethodName, [objWbemInParams ]) – работает в синхронном режиме. Позволяет вызвать метод (strMethodName) объекта (strObjectPath), objWbemInParams – задает параметры для метода.

Get(strObjectPath) – работает в синхронном режиме, позволяет получить доступ к классу или экземпляру объекта, например:

objServices = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2");

objClass = objServices.Get("Win32_Process");

intError = objClass.Create("Notepad.exe", null, null, intProcessID);

InstancesOf(strClass) – позволяет получить коллекцию объектов класса (strClass), работает в синхронном и полусинхронном режимах, например:

strResult="";

objService = GetObject("winmgmts:\\\\.\\root\\CIMV2");

colNamespaces = objService.InstancesOf("Win32_Process");

P=new Enumerator(colNamespaces);

for (; !P.atEnd(); P.moveNext())

{ objItemC = P.item();

strResult = strResult +objItemC.Name;

}

Wscript.Echo (strResult);

SubclassesOf ([strSuperclass]) – позволяетполучитьколлекциювсехподклассовзаданногокласса.Тут strSuperclass - имя класса, подклассы которого требуется получить. Если параметр не указан, будут возвращены все классы верхнего уровня или вообще все классы в пределах текущего пространства имён. Работает в синхронном и полусинхронном режиме.


Дата добавления: 2018-04-05; просмотров: 600; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!