Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АОПИ. Старое / Презентация. Механизмы ядра. Часть 1.pptx
Скачиваний:
77
Добавлен:
20.09.2019
Размер:
6.57 Mб
Скачать

Windows API подробнее

Всякий раз, когда программист создает поток

(CreateThread) или другой механизм ядра, он

реализует вызов одной из функции Windows API

(конкретно для потока: одной из функций файла kernel32.dll).

Windows API подробнее

Посмотрим

файл

C:\Windows\System32\kernel32.dll.

Для этого воспользуемся декомпилятором Reko (freeware).

Сделаем копию kernel32.dll и декомпилируем файл…

Windows API подробнее

Windows API подробнее

Теперь отследим, что делает многопоточная программа во время работы.

В качестве программы-шпиона выберем Process Explorer.

Windows API подробнее

Заранее создадим простую программу на С89

(C90)#include. <stdio.h>

 

 

 

 

#include <windows.h>

 

 

int main() {

int a; /* a = 0 */

 

 

 

HANDLE hThread = CreateThread(NULL, 0,

 

 

 

(LPTHREAD_START_ROUTINE) &function, NULL,

void function() {

 

 

 

0, NULL);

 

 

 

printf("%d\n", a); /* 0 */

int i;

 

 

 

WaitForSingleObject(hThread, INFINITE);

Sleep(10000);

/*

10

sec.

printf("%d\n", a); /* 200 */

*/

 

 

 

CloseHandle(hThread);

for (i = 0; i

< 100;

i++)

hThread = NULL;

{

 

 

 

getchar(); getchar();

a += 1 + 1;

 

 

 

}

}

 

 

 

 

Sleep(10000);

/*

10

sec.

 

*/

 

 

 

 

}

 

 

 

 

Windows API подробнее

Запустим программу и посмотрим, что происх1. Вторичныйдит: поток начал свою работу (ID:

2748).

Количество

дескрипторов: (вкладка Performance)

Windows API подробнее

2. Поток отработал и пошел на завершение (ID:

Windows API подробнее

3. Поток завершился (ID: 2748).

Количество

дескрипторов:

Performance)

Windows API подробнее

А теперь посмотрим, какие DLL-модули использует наше приложение.

Для этого воспользуемся стандартными средствами Windows — Монитор ресурсов

(Администрирование).

Запустим нашу программу и посмотрим в

мониторе ресурсов (раздел “Центральный процессор —> Связанные модули”) используемые модули.

Windows API подробнее

<—