АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Москва 2010

Читайте также:
  1. г. Москва
  2. ГОРОД МОСКВА, УЛИЦА РАМЕНКИ, ДОМ 21 (Двадцать один), КВАРТИРА 142 (Сто сорок два), условный номер квартиры – 77-77-03/077/2007-545.
  3. Москва 2006 г.
  4. Москва 2013
  5. Москва 2014
  6. МОСКВА, 2013 Г.
  7. Москва-2013 г.
  8. Некоторые направления информатизации муниципального управления с точки зрения реализации городской целевой программы «Электронная Москва»
  9. ТЕМЫ ДЛЯ РЕФЕРАТА: Естествознание и религия, естествознание и философия, естествознание и математика. «КСЕ»Бондарев В.П. москва 2003.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ ПО ДИСЦИПЛИНЕ

«ОПЕРАЦИОННЫЕ СИСТЕМЫ»

 

 

Составитель Е.Н. Питомиц

 

Москва 2010

 

 

УДК 621.1.016.7

 

 

Содержание

 

  Общие указания к выполнению лабораторных работ  
  Требования к содержанию отчета  
  Лабораторная работа 1. Создание многозадачного приложения, функционирующего под управлением ОС Windows  
  Использование заданий при создании приложений для ОС Windows  
  Исследование средств межпроцесного взаимодействия ОС Windows  
  Использование средств синхронизации ОС Windows для предотвращения тупиков.  
  Исследование подсистемы управления памятью ОС Windows  
  Исследования асинхронного ввода-вывода ОС Windows  
  Исследование файловой системы NTFS  

1 Общие указания к выполнению лабораторных работ

 

1.1 Методика выполнения работы:

· Изучить методические указания к работе

· Разработать в соответствии с вариантом задания многопоточное приложение.

· Результаты выполнения работы сохранить в виде текстового файла

 

 

2 Требования к содержанию отчета

Отчет должен содержать:

· Постановку задачи

· Описание метода решения задачи

· Текст программы

· Методику отладки и тестирования

· Выводы

 


2 Лабораторная работа 1. Создание многозадачного приложения, функционирующего под управлением ОС Windows

 

2.1 Цель работы: разработка многозадачного приложения для ОС Windows с использованием функций Windows API.

 

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

1. Разработать приложение, запускающее MS Word. Если MS Word не установлен, вывести на экран соответствующее предупреждение. Вывести на экран. Вывести на экран идентификаторы запущенного процесса и его первичного потока.
2. Разработать приложение, запускающее MS Excell. Если MS Excell не установлен, вывести на экран соответствующее предупреждение
3. Разработать приложение, запускающее MS PowerPoint. Если MS PowerPoint. не установлен, вывести на экран соответствующее предупреждение. Вывести на экран идентификаторы запущенного процесса и его первичного потока.
4. Разработать приложение, запускающее MS Access Если MS Access. не установлен, вывести на экран соответствующее предупреждение. Вывести на экран идентификаторы запущенного процесса и его первичного потока.
5. Разработать приложение, запускающее любую программу на локальной ЭВМ по выбору оператора. Вывести на экран идентификаторы запущенного процесса и его первичного потока.
6. Разработать приложение, вычисляющее среднее значение элемента матрицы [1000][1000]. Инициализация матрицы – в первичном потоке методом случайных чисел. Вычисление среднего значения – с помощью дочернего потока.
7. Разработать приложение, вычисляющее минимальное значение элемента матрицы [1000][1000]. Инициализация матрицы – в первичном потоке методом случайных чисел. Вычисление минимальног значения – с помощью дочернего потока.
8. Разработать приложение, вычисляющее максимальное значение элемента матрицы [1000][1000]. Инициализация матрицы – в первичном потоке методом случайных чисел. Вычисление максимального значения – с помощью дочернего потока
9. Разработать приложение, читающее из текстового файла размером не более 10кБ и выводящее считанную информацию на экран. Чтение файла должно осуществляться в первичном потоке. Вывод на экран должен осуществляться в дочернем потоке. При выводе на экран необходимо осуществлять проверку считанных предложений на заглавную букву и, при необходимости, корректировать.
10. Разработать приложение, записывающее в текстовый файл размером не более 10кБ информацию, введенную оператором с клавиатуры. Ввод информации должен осуществляться в первичном потоке. Запись в файл должен осуществляться в дочернем потоке. При записи в файл необходимо осуществлять проверку считанных предложений на заглавную букву и, при необходимости, корректировать.
11. Разработать приложение, инвертирующее введенную с клавиатуры строку длиной не более 200 символов. Ввод строки должен осуществляться в первичном потоке, инвертирование строки и вывод на экран - в дочернем.
12. Разработать приложение, выводящее на экран только первые буквы каждого слова введенной с клавиатуры строки длиной не более 200 символов. Ввод строки должен осуществляться в первичном потоке, фильтрация символов строки и вывод на экран - в дочернем потоке.
13. Разработать приложение, выводящее на экран только последние буквы каждого слова введенной с клавиатуры строки длиной не более 200 символов. Ввод строки должен осуществляться в первичном потоке, фильтрация символов строки и вывод на экран - в дочернем потоке.
14. Разработать приложение, запускающее калькулятор Если калькулятор. не установлен, вывести на экран соответствующее предупреждение. Вывести на экран идентификаторы запущенного процесса и его первичного потока.
15. Разработать приложение, запускающее MS Paint. Если MS Paint. не установлен, вывести на экран соответствующее предупреждение. Вывести на экран идентификаторы запущенного процесса и его первичного потока.
16. Разработать приложение, запускающее MS Notebook Если MS Notebook. не установлен, вывести на экран соответствующее предупреждение. Вывести на экран идентификаторы запущенного процесса и его первичного потока.
17. Разработать приложение, производящее умножение матрицы А [100][100] на число b. Инициализация матрицы A и ввод на числа b – в первичном потоке методом случайных чисел. Вычисление итоговой матрицы – с помощью дочернего потока. Полученный результат необходимо сохранить в виде текстового файла.
18. Разработать приложение, производящее сложение матриц А и В, размер матриц -[100][100]. Инициализация матриц A и ввод В – в первичном потоке методом случайных чисел. Вычисление итоговой матрицы – с помощью дочернего потока. Полученный результат необходимо сохранить в виде текстового файла.
19. Разработать приложение, производящее умножение матриц А и В, размер матриц - [100][100]. Инициализация матриц A и ввод В – в первичном потоке методом случайных чисел. Вычисление итоговой матрицы – с помощью дочернего потока. Полученный результат необходимо сохранить в виде текстового файла.
20. Разработать приложение, вычисляющее детерминант матрицы [10][10]. Инициализация матрицы – в первичном потоке методом случайных чисел. Вычисление детерминанта – с помощью дочернего потока. Полученный результат необходимо сохранить в виде текстового файла.

 

 

2.3 Теоретический раздел

2.3.1. Процесс создается при вызове приложением функции

BOOL CreateProcess (PCTSTR pszApplicationName,
PTSTR pszCommandLine,

PSECURITY_ATTRIBUTES psaProcess,

PSECURITY.ATTRIBUTES psaThread,

BOOL bInheritHandles,

DWORD fdwCreate,

PVOID pvEnvironment,

PCTSTR pszCurDir,

PSTARTUPINFO psiStartInfo,

PPROCESS_INFORMATION ppiProcInfo)

 

Когда поток в приложении вызывает CreateProcess, система создает объект ядра «процесс» с начальным значением счетчика числа его пользователей, равным 1

Параметры pszApplicationName и pszCommandLine

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

Параметр pszCommandLine позволяет указать полную командную строку, используемую функцией CreateProcess при создании нового процесса. Разбирая эту строку, функция полагает, что первый компонент в ней представляет собой имя исполняемого файла, который вы хотите запустить. Если в имени этого файла не указано расширение, она считает его ЕХЕ. Далее функция приступает к поиску заданного файла и делает это в следующем порядке:

1. Каталог, содержащий ЕХЕ-файл вызывающего процесса.

2. Текущий каталог вызывающего процесса.

3. Системный каталог Windows (System32, согласно GetSystemDirectory).

4. Основной каталог Windows.

5. Каталоги, перечисленные в переменной окружения PATH.

Данный алгоритм сработает, если параметр pszApplicationName равен NULL. Вместо NULL можно передать адрес строки с именем исполняемого файла, который надо запустить. Однако тогда придется указать не только его имя, но и расширение, так как в этом случае имя не дополняется расширением ЕХЕ автоматически. CreateProcess предполагает, что файл находится в текущем каталоге (если полный путь не задан). Если в текущем каталоге файла нет, поиск в других каталогах не производится.

Параметры psaProcess, psaThread и blnheritHandles

Параметры psaProcess и psaThread позволяют определить нужные атрибуты защиты для объектов «процесс» и «поток» соответственно. В эти параметры можно занести NULL, и система использует для данных объектов дескрипторы защиты по умолчанию. В качестве альтернативы можно объявить и инициализировать две структуры SECURITY_ATTRIBUTES; тем самым вы создадите и присвоите объектам «процесс» и

«поток» свои атрибуты защиты. Структуры SECURITY_ATTRIBUTES для

параметров psaProcess и psaThread используются и для того, чтобы какой-либо из этих двух объектов получил статус наследуемого любым дочерним процессом. Праметр bInheritHandles оределяет, будут ли переданы дочернему процессу наследуемые описатели.

Параметр fdwCreate

Параметр fdwCreate определяет флаги, влияющие на то, как именно создается новый процесс.

Параметр pvEnvironment

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

Параметр pszCurDir

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

Параметр psiStartInfo

Этот параметр указывает на структуру STARTUPINFO или STARTUPINFOEX:

typedef struct _STARTUPINFO {

DWORD cb;

PSTR lpReserved;

PSTR lpDesktop;

PSTR lpTitle;

DWORD dwX;

DWORD dwY;

DWORD dwXSize;

DWORD dwYSize;

DWORD dwXCountChars;

DWORD dwYCountChars;

DWORD dwFillAttribute;

DWORD dwFiags;

WORD wShowWindow;

WORD cbReserved2;

PBYTE lpReserved2;

HANDLE hStdlnput;

HANDLE hStdOutput;

HANDLE hStdError;

} STARTUPINFO, *LPSTARTUPINFO;

typedef struct _STARTUPINFOEX {

STARTUPINFO StartupInfo;

struct _PROC_THREAD_ATTRIBUTE_LIST *lpAttributeList;

} STARTUPINFOEX, *LPSTARTUPINFOEX;

Элементы структуры STARTUPINFO используются Windows-функциями

при создании нового процесса. Большинство приложений порождает процессы с атрибутами по умолчанию. Но и в этом случае необходимо все элементы структуры STARTUPINFO инициализировать нулевыми значениями, а в элемент cb — заносить размер этой структуры.

Параметр ppiProclnfo

Параметр ppiProcInfo указывает на структуру PROCESS_INFORMATION,

которую необходимо предварительно создать; ее элементы инициализиру-

ются самой функцией CreateProcess:

typedef struct _PROCESS_INFORMATION {

HANDLE hProcess;

HANDLE hThread;

DWORD dwProcessId;

DWORD dwThreadId;

} PROCESS_INFORMATION;

Создание нового процесса влечет за собой создание объектов ядра «процесс» и «поток». В момент создания система присваивает счетчику каждого объекта начальное значение — единицу. Далее функция CreateProcess (перед самым возвратом управления) открывает объекты «процесс» и «поток» и заносит их описатели, специфичные для данного процесса, в элементы hProcess и hThread структуры PROCESS_INFORMATION.

 

2.3.2 Для создания дочернего потока необходимо вызвать функцию

 

HANDLE CreateThread (

PSECURITY_ATTRIBUTES psa,

DW0RD cbStackSize,

PTHREAD_START_ROUTIME pfnStartAddr,

PVOID pvParam,

DWORD dwCreateFlags,

PDWORD pdwThreadID);

При каждом вызове этой функции система создает объект ядра «поток». Система выделяет память под стек потока из адресного пространства процесса. Новый поток выполняется в контексте того же процесса, что и родительский поток. Поэтому он получает доступ ко всем описателям объектов ядра, всей памяти и стекам всех потоков в процессе. За счет этого потоки в рамках одного процесса могут легко взаимодействовать друг с другом.

Параметр psa

Параметр psa является указателем на структуру SECURITY_ATTRIBUTES. Для присвоения атрибутам защиты значения по умолчанию необходимо передать в этом параметре NULL. А чтобы дочерние процессы смогли наследовать описатель этого объекта, необходимо определите структуру SECURITY_ATTRIBUTES и инициализируйте ее элемент bInheritHandle значением TRUE

Параметр cbStackSize

Этот параметр определяет, какую часть адресного пространства поток сможет использовать под свой стек.

Параметры pfhStartAddr и pvParam

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

Параметр dwCreateFlags

Этот параметр определяет дополнительные флаги, управляющие созданием потока. Он принимает одно из двух значений: 0 (исполнение потока начинается немедленно) или CREATE_SUSPENDED. В последнем случае система создает поток, инициализирует его и приостанавливает до последующих указаний.

Параметр pdwThreadID

Адрес переменной типа DWORD, в которой функция возвращает идентификатор, приписанный системой новому потоку. Если в логике приложении не используется, передается NULL.

 

Определение функции потока имеет вид:

DWORD WINAPI pfnStartAddr (PVOID pvParam)

{

DW0RD dwResult = 0;

return(dwResult);

}

 


Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.)