Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
yubuzova_umk_tehnol_sistem_2011.pdf
Скачиваний:
13
Добавлен:
13.03.2015
Размер:
660.42 Кб
Скачать

темной таблице, которая называется таблицей глобальных дескрипторов

(Global Descriptor Table, или GDT). Биты поля доступа (access field) дескрипто-

ра сегмента определяют способ использования сегмента.

Многосегментная модель памяти. При использовании многосегментной модели памяти для каждой программы выделяется собственная таблица -сег ментных дескрипторов, которая называется таблицей локальных дескриптopoв (Local Descriptor Table, или LDT).

Каждый сегмент находится в изолированном адресном пространстве. Каждый элемент таблицы локальных дескрипторов определяет различные сегменты памяти.

Рисунок 1.3 - Многосегментная модель памяти

Страничная организация памяти. В процессорах семействаIA-32 под-

держивается возможность страничной организации памяти (paging). Она позволяет разделить сегмент на блоки памяти размером4096 байтов, которые называются страницами (page). Страничная организация памяти часто называется виртуальной памятью (virtual memory).

Работоспособность системы виртуальной памяти обеспечивает специальная программа, диспетчер виртуальной памяти (virtual memory manager).

Основная литература: 1[17-50], 2[31-54, 551-559]

Дополнительная литература: 14[31-54, 551-559]

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

1.Какие типы структур выделяют в общей классической структуре про-

грамм.

2.Какие общие положения о программировании в Windows можно выде-

лить.

3.Набор базовых функций интерфейсов программирования.

4.Функции Win32 АPI и Win64 АPI.

5.Вызов функций API.

6.Архитектура Windows и модели памяти.

14

Лекция 2. Процессы. Управление процессами

Процесс состоит из двух компонентов:

-объекта ядра;

-адресного пространства.

Процессы и потоки. Один процесс может владеть несколькими потоками (threads), они «одновременно» исполняют код в адресном пространстве процесса. Выполняющийся внутри процесса поток также может сам создавать новые потоки и независимые новые процессы, управлять взаимодействием объектов между собой и их синхронизацией.

При создании процесса система автоматически создает поток, называемый главным потоком. Выделяя потокам отрезки времени(называемые квантами) по принципу карусели, она создает тем самым иллюзию одновременного выполнения потоков.

ПРОЦЕСС

Код

Глобальные переменные

Куча процесса

Ресурсы процесса Открытые файлы Кучи

…..

Блок параметров настройки окружения

Поток 1

Локальная область хранения

потока

Стек

Поток 2

Локальная область хранения

потока

Стек

Рисунок 2.1 - Процесс и его потоки

Каждый поток планируется независимо от других и располагает элемента-

ми:

-стек;

-локальные области хранения потока (Thread Local Storage, TLS) - массивы указателей;

-уникальный аргумент потока в стеке, получаемый от создающего потока;

-структура контекста.

15

Описатель экземпляра процесса. Любому EXE- или DLL-модулю, загру-

жаемому в адресное пространство процесса, присваивается уникальный описатель экземпляра. Описатель экземпляра ЕХЕ-файла передается как первый па-

раметр функции (w)WinMain-hinstanceExe.

Базовый адрес, по которому загружается приложение, определяется компоновщиком. Разные компоновщики выбирают и разные(по умолчанию) базовые адреса.

Функция GetModuleHandle:

HMODULE GetModuleHandle(PCTSTR pszModule);

Возвращает описатель/базовый адрес, указывающий, куда именно загружается ЕХЕ- или DLL-файл.

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

BOOL CreateProcess( PCTSTR pszApplicationName, PTSTR pszCommandLine, PSECURITY_ATTRIBUTES psaProcess,

PSECUWTY_ATTRIBUTES psaThread, BOOL bInheritHandles, DWORD dwCreationFlags, PVOID pvEnvironment,

PCTSTR pezCurrentDirectory, LPSTARTUPINFO pStartupInfo, PPROCESS_INFORMATION pProcessInformation);

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

зуемую

функцией CreateProcess при

создании

нового

процесса.

pszApplicationName введен в CreateProcess для поддержки подсистемы POSIX в

Windows. psaProcess и psaThread позволяют определить нужные атрибуты за-

щиты для

объектов«процесс» и «поток»

соответственно.

Структуры

SECURITY_ATTRIBUTES для параметров psaProcess и psaThread используются

для получения объектами статуса наследуемого

любым

дочерним

процессом.

bInheritHandles показывает, наследует ли процесс наследуемые открытые дескрипторы из вызывающего процесса. fdwCreate определяет флаги, влияющие на то, как именно создается новый процесс. fdwCreate разрешает задать и класс приоритета процесса. Классы приоритета влияют на распределение процессорного времени между процессами и их потоками. pvEnvironment указывает на блок памяти, хранящий строки переменных окружения, которыми будет пользоваться новый процесс. pszCurDir позволяет родительскому процессу установить текущие диск и каталог для дочернего процесса. psiStartInfo указывает на структуру STARTUPINFO или STARTUPINFOEX:

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

STARTUPINFO si = { sizeof(si) };CreateProcess(…, &si, …);

16

Элемент dwFlags содержит набор флагов, позволяющих управлять созданием дочернего процесса. Элемент wShowWindow структуры STARTUPINFO позволяет указать, в каком виде должно появиться главное окно приложения.

Структура STARTUPINFOEX в дополнение к полюStartupInfo получила поле lpAttributeList, в котором передаются дополнительные параметры, называемые атрибутами:

Список атрибутов состоит из пар«ключ - значение», представляющих атрибуты. В настоящее время задокументированы два ключа-:атрибута

PROC_THREAD_ATTRIBUTE_HANDLE_LIST и PROC_THREAD_ATTRIBUTE_PARENT_PROCESS

ppiProcInfo указывает на структуруPROCESS_INFORMATION, которую должны предварительно создать; ее элементы инициализируются самой функцией CreateProcess. Структура представляет собой следующее:

typedef struct _PROCESS_INFORMATION {

HANDLE hProcess;HANDLE hThread;DWORD dwProcessId; DWORD dwThreadId;} PROCESS_INFORMATION;

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

Указатель на полную командную строку процесса можно получить и вызо-

вом функции GetCommandLine:

PTSTR GetCommandLine();

Она возвращает указатель на буфер, содержащий полную командную строку, включая полное имя (вместе с путем) исполняемого файла.

Идентификация процессов. Созданному объекту ядра«процесс» присваивается уникальный идентификатор. Завершая свою работу, CreateProcess заносит значения идентификаторов в элементыdwProcessId и dwThreadId структуры PROCESS_INFORMATION. Узнать идентификатор текущего процесса можно вызовом GetCurrentProcessId, а идентификатор текущего потока - вызовом функции GetCurrentThreadId. Кроме того, идентификатор процесса можно узнать по его описателю, вызвав GetProcessId (а в случае потока-

GetThreadId).

По окончании операций с идентификатором, вызвать функцию CloseHandle и освободить соответствующие объекты ядра.

Функция DuplicateHandle используется для создания нового«процессозависимого» описателя из описателя объекта ядра, значение которого увязано с другим процессом.

BOOL DuplicateHandle(HANDLE hSourceProcess, HANDLE hSource,HANDLE hTargetProcess, PHANDLE phTarget,DWORD dwDesiredAccess, BOOL bInheritHandle,DW0RD dwOptions);

17

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]