Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС СФМЭИ.doc
Скачиваний:
22
Добавлен:
17.09.2019
Размер:
1.37 Mб
Скачать

Контрольные вопросы

  1. Сравните возможности функций CreateProcess? WinExec и ShellExecute

  2. В чем заключается различие между процедурой ExitProcess и функцией TerminateProcess?

  3. Почему ExitProcess и ExitThread реализованы как процедуры, TerminateProcess и TerminateThread – как функции?

  4. Как установит приоритет текущего процесса равным 31?

  5. Как установит приоритет текущего процесса равным 1?

  6. Величина кванта потока - 6 квантовых единиц. Компьютер имеет несколько процессоров. Определите величину кванта в миллисекундах.

  7. Величина кванта потока - 18 квантовых единиц. Компьютер имеет один процессор. Определите величину кванта в миллисекундах.

  8. Вы начали длительный пересчет электронной таблицы и переключились на приложение, активно использующее процессор (например, игра типа “action”). Что сделает ОС для эффективного использования процессорного времени – увеличит приоритет активного процесса (игры) или увеличит квант времени активного процесса. Ответ обоснуйте.

  9. Поток ожидал завершения операции ввода-вывода. Текущий приоритет потока – 12. По завершении операции ввода-вывода приоритет потока должен быть увеличен на 4 уровня. Каким будет приоритет потока после завершения операции ввода-вывода?

6. Лабораторная работа № 6

РАБОТА С ФУНКЦИЯМИ TOOLHELP

6.1. Цель работы

Целью работы является получение навыков работы с функциями библиотеки ToolHelp API для получения системной информации. В данной работе рассматриваются следующие вопросы:

  • Получение списка всех процессов в системе;

  • Получение списка всех модулей в системе;

  • Получение списка всех потоков выбранного процесса;

  • Получение карты памяти выбранного процесса.

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

При разработке программного обеспечения часто возникает задача получения системной информации, например, списка всех загруженных процессов или списка созданных потоков. В Windows первоначально отсутствовали средства для получения данной информации. Однако, начиная с Windows 95, в состав операционной системы включен набор функций, позволяющих получать системную информацию. Данные функции включены в ToolHelp API. В Delphi функции ToolHelp API описаны в файле TlHelp32.pas.

Функции ToolHelp можно условно разбить на следующие функциональные группы:

  • Получение «мгновенного снимка» системы;

  • Информация о процессах;

  • Информация о потоках;

  • Информация о кучах (heap);

  • Информация о виртуальной памяти;

  • Информация о модулях.

6.2.1. Получение «мгновенного снимка» системы

Для получения «мгновенного снимка системы» применяется функция CreateToolhelp32SnapShot. Необходимость в моментальном снимке связана с реализованном в Windows механизме вытесняющей многозадачности. Например, поток 1, просматривающий список процессов, вытеснен более приоритетным потоком 2, который, в свою очередь, изменяет просматриваемую цепочку процессов, что приведет к сбою системы при передаче управления потоку 1. Для предотвращения этой и аналогичных проблем функции ToolHelp используют концепцию «моментального снимка», то есть сохранения информации о текущем состоянии ОС;

Описание функции CreateToolhelp32SnapShot выглядит следующим образом:

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle;

где

dwFlags - флаги, определяющие, какая системная информация включается в «мгновенный список системы». Допустимые значения параметра dwFlags приведены в таблице 6.1.

th32ProcessID – идентификатор процесса. Если этот параметр равен 0, то «мгновенный снимок» делается для системной информации текущего процесса. Этот параметр учитывается только в случае, если параметр dwFlags принимает значение TH32CS_SNAPHEAPLIST или TH32CS_SNAPMODULE

Функция CreateToolhelp32SnapShot при успешном завершении возвращает дескриптор «мгновенного снимка». В случае ошибки – выходной параметр равен - FALSE. Для закрытия дескриптора следует выполнить функцию – CloseHandle.

Таблица 6.1 Возможные значения параметра dwFlags

Значение параметра dwFlags

Описание

TH32CS_INHERIT

Указывает, что снимок является наследуемым

TH32CS_SNAPALL

Эквивалентно одновременной установке значений TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE, TH32CS_SNAPPROCESS и TH32CS_SNAPTHREAD

TH32CS_SNAPHEAPLIST

Указывает, что будет сделан «мгновенный снимок» списка куч процесса, выбранного с помощью параметра th32ProcessID.

TH32CS_SNAPMODULE

Указывает, что будет сделан «мгновенный снимок» списка модулей процесса, выбранного с помощью параметра th32ProcessID.

TH32CS_SNAPPROCESS

Указывает, что будет сделан «мгновенный снимок» всех процессов

TH32CS_SNAPTHREAD

Указывает, что будет сделан «мгновенный снимок» всех потоков