
- •А.Н. Езин операционные системы
- •2009 Содержание
- •Пояснительная записка
- •Лабораторная работа № 1. Мультипрограммные вычислительные процессы Цель работы
- •Краткие теоретические сведения
- •1. Получение обобщенной информации о компонентах вычислительного процесса.
- •2. Просмотр и анализ информации о процессах и потоках.
- •3. Детальное исследование вычислительного процесса.
- •4. Управление журналами счетчиков и журналом оповещения.
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа № 2. Управление процессами и потоками вWin32api. Организация взаимодействия между процессами и потоками вWin32api Цель работы
- •Краткие теоретические сведения
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа № 3. Синхронизация потоков вWin32api Цель работы
- •Краткие теоретические сведения
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа № 4. Управление памятью Цель работы
- •Краткие теоретические сведения
- •1. Получение обобщенной информации об использовании оперативной памяти.
- •2. Управление файлом подкачки.
- •3. Оптимизация виртуальной памяти.
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа № 5. Управление виртуальной памятью вWindowsприложениях вWin32api Цель работы
- •Краткие теоретические сведения
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа №6. Управление файловой системой и системой ввода/вывода Цель работы
- •Краткие теоретические сведения
- •1. Установка, диагностика работы и настройка драйверов устройств.
- •2. Управление дисками и обслуживание файловой системы.
- •3. Диагностика и мониторинг устройств компьютера.
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа № 7. Управление файловой системой вWindowsприложениях вWin32api Цель работы
- •Краткие теоретические сведения
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •2. Команды управления файловой системой Windows.
- •3. Основы разработки командных (пакетных) файлов.
- •2. Использование программы Debug
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа №9. Пользовательский интерфейс командной строки в Linux (Unix) Цель работы
- •Краткие теоретические сведения
- •1. Интерфейс командной строки ос Unix.
- •2. Командные файлы в Linux.
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа № 10. Организация графического пользовательского интерфейса вWindowsприложениях вWin32api
- •Краткие теоретические сведения
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа № 11. Организация обмена данными между приложениями вWindows
- •Краткие теоретические сведения
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •2. Защита системных файлов.
- •3. Проверка системных файлов (System File Checker).
- •4. Верификация цифровой подписи файлов.
- •5. Откат драйверов.
- •6. Безопасный режим загрузки.
- •7. Точки восстановления системы.
- •8. Резервное копирование и восстановление.
- •9. Аварийное восстановление системы.
- •10. Консоль восстановления.
- •11. Загрузочная дискета.
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа №13. Системный реестр и системные службы Цель работы
- •Краткие теоретические сведения
- •1. Назначение и структура реестра.
- •2. Средства управления реестром.
- •3. Резервное копирование и восстановление реестра.
- •4. Очистка реестра.
- •5. Редактирование реестра.
- •6. Системные службы.
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •Лабораторная работа №14. Обеспечение безопасности компьютерной системы Цель работы
- •Краткие теоретические сведения
- •1. Защита от вторжений. Брандмауэры.
- •2. Отключение ненужных служб.
- •3. Защита от спама.
- •4. Защита от вредоносных программ и вирусов.
- •5. Защита конфиденциальной информации.
- •Задания для самостоятельного выполнения
- •Контрольные вопросы
- •План представляемого студентом отчета.
- •Материально-техническое обеспечение дисциплины
- •Литература
Лабораторная работа № 2. Управление процессами и потоками вWin32api. Организация взаимодействия между процессами и потоками вWin32api Цель работы
Изучение основных функций Win 32 API, используемых для управления процессами и потоками.
Изучение организации взаимодействия между процессами и потоками методом посылки сообщений.
Разработка простейшей программы, демонстрирующей создание и завершение процесса.
Разработка простейшей программы, демонстрирующей создание многопоточной программы.
Разработка простейшей программы, демонстрирующей взаимодействие процессов путем посылки сообщений.
Краткие теоретические сведения
К основным функциям Win32 API по управлению процессами и потоками относятся:
CreateProcess – создать новый процесс;
ExitProcess – завершить текущий процесс и все его потоки (вызывается из какого-либо потока данного процесса);
TerminateProcess – завершить текущий процесс и все его потоки (вызывается из любого потока любого процесса);
CreateThread – создать новый поток в существующем процессе;
ExitThread – завершить этот поток (вызывается из завершаемого потока);
TerminateThread – завершить поток (вызывается из любого потока любого процесса);
SetPriorityClass – задать класс приоритета для процесса;
GetPriorityClass – получить класс приоритета для процесса;
SetThreadPriority – задать приоритет для потока;
GetThreadPriority – получить приоритет для потока.
Функция CreateProcess имеет следующий прототип:
BOOL CreateProcess(
LPCTSTR lpApplicationName, /*указатель на строку имени исполняемого файла */
LPCTSTR lpCommandLine, /* указатель на командную строку */
LPSECURITY_ATTRIBUTES lpProcessAttributes, /*указатель на атрибуты защиты процесса*/
LPSECURITY_ATTRIBUTES lpThreadAttributes, /*указатель на атрибуты защиты первичного потока*/
BOOL bInheritHandles, /* признак передачи процессу описателей наследуемых объектов */
DWORD dwCreationFlags, /* определяет флаги, воздействующие на способ создания нового процесса */
LPVOID lpEnvironment, /* указатель на блок памяти, хранящий строки переменных окружения, которыми будет пользоваться данный процесс*/
LPTSTR lpCurrentDirectory, /* указатель на имя текущего каталога для вновь создаваемого процесса (если NULL, то наследуется от родительского процесса)*/
LPSTARTUPINFO lpStartupInfo, /* указатель на структуру, описывающую параметры окна, связанного с создаваемым процессом */
LPPROCESS_INFORMATION lpProcessInformation /* указатель на структуру, в которую функция возвращает идентификаторы (глобальный идентификатор и идентификатор, служащий для обращения к объектам в функциях) процесса и первичного потока */
).
Если lpszImageName=NULL, то параметр lpszCommandLine трактуется как имя исполняемого файла, вместе с которым может быть передана и командная строка.
Функция ExitProcess имеет следующий прототип:
VOID ExitProcess(UINT uExitCode).
Параметр uExitCode служит для возврата кода выхода из процесса.
Функция TerminateProcess имеет следующий прототип:
BOOL TerminateProcess(
HANDLE hProcess, /* идентифицирует описатель процесса */
UINT uExitCode /* содержит код завершения процесса */
).
Функция CreateThread имеет следующий прототип:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, /* указатель на атрибуты защиты создаваемого потока */
DWORD dwStackSize, /* начальный размер стека потока в байтах */
LPTHREAD_START_ROUTINE lpStartAddress, /* указатель на функцию потока, то есть на функцию с которой начинается исполнение потока */
LPVOID lpParameter, / аргумент, передаваемый в функцию потока */
DWORD dwCreationFlags, / флаги, управляющие созданием потока */
LPDWORD lpThreadId /* указатель на идентификатор создаваемого потока */
);
При успешном выполнении функция CreateThread возвращает указатель на идентификатор описателя вновь созданного потока. Функция потока имеет следующий единый прототип:
DWORD WINAPI ThreadFunc(LPVOID lpvThreadParm){
DWORD dwResult = 0;
…
Return (dwResult);
}.
Функция ExitThread имеет следующий прототип:
VOID ExitThread(DWORD dwExitCode).
Параметр dwExitCode служит для возврата кода выхода из потока.
Функция TerminateThread имеет следующий прототип:
BOOL TerminateThread(
HANDLE hThread, /* идентифицирует описатель потока */
UINT uExitCode /* содержит код завершения потока */
).
Функция SetPriorityClass имеет следующий прототип:
BOOL SetPriorityClass(
HANDLE hProcess, / * идентификатор описателя процесса */
DWORD dwPriorityClass /* значения класса приоритета */
);
Возможны следующие значения параметра dwPriorityClass:
IDLE_PRIORITY_CLASS – простаивающий – потоки процесса выполняются, когда система простаивает (уровень 4);
NORMAL_PRIORITY_CLASS – нормальный;
HIGH_PRIORITY_CLAS – высокий приоритет;
REALTIME_PRIORITY_CLASS – приоритет реального времени.
Функция GetPriorityClass имеет следующий прототип:
WORD GetPriorityClass(
HANDLE hProcess /* идентификатор описателя процесса */
);
Функция GetPriorityClass возвращает класс приоритета процесса.
Функция SetThreadPriority имеет следующий прототип:
BOOL SetThreadPriority(
HANDLE hThread, /* указатель идентификатора описателя потока */
int nPriority /* уровень приоритета потока */
);
Параметр nPriority может принимать следующие значения:
THREAD_PRIORITY_ABOVE_NORMAL – приоритет потока должен быть на 1 единицу больше класса приоритета процесса;
THREAD_PRIORITY_BELOW_NORMAL – приоритет потока должен быть на 1 единицу меньше класса приоритета процесса;
THREAD_PRIORITY_HIGHEST – приоритет потока должен быть на 2 единицы больше класса приоритета процесса;
THREAD_PRIORITY_LOWEST – приоритет потока должен быть на 2 единицы меньше класса приоритета процесса;
THREAD_PRIORITY_NORMAL – приоритет потока должен соответствовать классу приоритета процесса;
THREAD_PRIORITY_TIME_CRITICAL – указывает уровень базового приоритета 15 для классов приоритета процесса IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS, и уровень базового приоритета 31 для класса приоритета REALTIME_PRIORITY_CLASS;
THREAD_PRIORITY_IDLE – указывает базовый уровень приоритета 1 для классов приоритета процесса IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS, и уровень базового приоритета 16 для класса приоритета процесса REALTIME_PRIORITY_CLASS процесса.
Функция GetThreadPriority имеет следующий прототип:
int GetThreadPriority(
HANDLE hThread /* идентификатор описателя потока */
);
Функция GetThreadPriority возвращает уровень приоритета потока.
Взаимодействие между процессами может быть организовано посредством посылки сообщений их окнам. Для этого служит функция SendMessage.
Функция SendMessage имеет следующий прототип:
LRESULT SendMessage(
HWND hWnd, /* идентификатор дескриптора окна, которому посылается сообщение */
UINT Msg, /* посылаемое сообщение */
WPARAM wParam, /* первый параметр сообщения */
LPARAM lParam /* второй параметр сообщения */
);
Чтобы осуществить передачу данных из одного процесса другому, нужно послать из первого процесса окну второго процесса сообщение WM_COPYDATA: SendMessage(hwndReceiver, WM_COPYDATA, (WPARAM) hwndSender, (LPARAM)&cds). Здесь hwndReceiver - идентификатор дескриптора окна второго процесса; hwndSender - идентификатор дескриптора окна первого процесса; cds – переменная типа COPYDATASTRUCT, определенная следующим образом:
typedef struct tagCOPYDATASTRUCT {
DWORD dwData;
DWORD cbData;
PVOID lpDATA;
} COPYDATASTRUCT;
Чтобы переслать данные другому потоку нужно вначале инициировать переменную cds данного типа. Параметр dwData резервируется для использования в вашей программе. Параметр cbData задает число байт, пересылаемых в другой процесс, а параметр lpData указывает на первый байт данных.
Для определения идентификаторов окон может быть использована функция FindWindow.
Функция FindWindow имеет следующий прототип:
HWND FindWindow(
LPCTSTR lpClassName, /* указатель на строку с именем класса окна */
LPCTSTR lpWindowName /* указатель на строку с именем окна */
).
Если функция выполнилась успешно, то она возвращает идентификатор дескриптора окна, в противном случае – NULL.