Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Управление процессами. API- функции для работы с процессами. ⇐ ПредыдущаяСтр 4 из 4
Процесс (process) - это пользовательская программа при ее исполнении в компьютерной системе. Для выполнения процесса требуется ряд ресурсов, включая время процессора, память, файлы, устройства ввода-вывода, сетевые устройства и др. ОС отвечает за следующие действия, связанные с управлением процессами: Создание и удаление процессов. При создании процесса необходимо создать в памяти соответствующие системные структуры (таблицу страниц, стек и др.). При удалении процесса память, занимаемая ими, освобождается, а также выполняется закрытие всех файлов и освобождение всех других ресурсов, которые использовал процесс, если последний не сделал этого явно. Приостановка и возобновление процессов. Выполнение процесса приостанавливается при выполнении синхронного ввода-вывода, а также системного вызова или команды (типа suspend ). Синхронизация процессов. Процессы работают параллельно и при этом конкурируют за общие ресурсы, а также должны в некоторые моменты вычислений ожидать наступления некоторых событий. Для предотвращения возможных конфликтов и несогласованностей, например, race condition - несогласованного доступа к общим данным, при котором один процесс читает старые данные, а другой их в этот же момент обновляет, - ОС предоставляет средства синхронизации (например, семафоры и мониторы, рассмотренные в следующем разделе). Взаимодействие процессов. При своей параллельной работе процессам необходимо взаимодействие, с целью согласованного решения различных частей одной и той же задачи. Процессы могут взаимодействовать с помощью передачи сообщений друг другу, а также с помощью так называемых условных переменных и рандеву (все эти виды взаимодействия рассмотрены позже). ОС предоставляет все эти средства, в виде системных вызовов, для организации адекватного и удобного взаимодействия процессов. API- функции для работы с процессами.
Управление памятью. Api -Функции для работы с виртуальной памятью В ранних ОС управление памятью сводилось просто к загрузке программы и ее данных из некоторого внешнего накопителя (перфоленты, магнитной ленты или магнитного диска) в память. С появлением мультипрограммирования перед ОС были поставлены новые задачи, связанные с распределением имеющейся памяти между несколькими работающими программами. Функции ОС по управлению памятью в мультипрограммной системе: 1)Отслеживание свободной и занятой памяти. 2)Выделение памяти процессам и освобождение памяти при завершении процессов. 3)Вытеснение кодов и данных процессов из ОП на диск (полное или частичное), когда размеры основной памяти недостаточны для размещения в ней всех процессов, и возвращение их в ОП, когда в ней освобождается место. 4)Настройка адресов программы на конкретную область физической памяти.
Дополнительные функции: Динамическое распределение памяти, т.е. выполнение запросов приложений на выделение им дополнительной памяти на время выполнения. Создание новых служебных информационных структур (описателей процессов и потоков, буферов и др.) Защита памяти, которая состоит в том, чтобы не позволить выполняемому процессу записывать или читать данные из памяти, назначенной другому процессу.
Виртуальная память Одним из наиболее популярных способов управления памятью в современных ОС является так называемая виртуальная память. Наличие в ОС виртуальной памяти позволяет программисту писать программу так, как будто в его распоряжении имеется однородная ОП большого объема, часто существенно превышающего объем имеющейся физической памяти. В действительности все данные, используемые программой, хранятся на диске и при необходимости частями (сегментами или страницами) отображаются в физическую память. При перемещении кодов и данных между ОП и диском подсистема ВП выполняет трансляцию виртуальных адресов, полученных в результате компиляции и компоновки программы, в физические адреса ячеек ОП. API виртуальной памяти Win32 (функции VirtualAlloc, VirtualFree, VirtualLock, VirtualUnlock и т.д.) работает с целыми страницами. API “кучи” Win32 может работать с единицами память, определяемыми пользователем. Функция VitualAlloc распределяет ряда страниц в виртуальном адресном пространстве, а функция VitualAllocEx распределяет ряд страниц в виртуальном адресном пространстве указанного процесса. LPVOID VitualAlloc ( LPVOID lpvAddress, DWORD dwSize, DWORD dwAllocationType, DWORD dwProtect). LPVOID VitualAllocEx ( HANDLE hProcess, LPVOID lpvAddress, DWORD dwSize, DWORD dwAllocationType, DWORD dwProtect). Функция VirtualFree освобождает ряд страниц в виртуальном адресном пространстве. А функция VirtualFreeEx освобождает ряд страниц в виртуальном адресном пространстве указанного процесса. BOOL VirtualFree(LPVOID lpvAddress, DWORD dwSize, DWORD dwFreeType) BOOL VirtualFreeEx(HANDLE hProcess, LPVOID lpvAddress, DWORD dwSize, DWORD dwFreeType) Функция VirtualLock блокирует область виртуального адресного пространства в памяти. А функция VirtualUnLock дает возможность разблокировать указанный ряд страниц в виртуальном адресном пространстве процесса, позволяя системе выгружать эти страницы в файл подкачки по мере необходимости. BOOL VirtualLock (LPVOID lpvAddress, DWORD dwSize), BOOL VirtualUnlock (LPVOID lpvAddress, DWORD dwSize) Функция VirtualProtect изменяет установки защиты доступа к области выделенных страниц в виртуальном адресном пространстве. Функция VirtualProtectEx может действовать в виртуальном адресном пространстве других процессов, тогда как VirtualProtect действует толька в рамках вызывающего процесса. BOOL VirtualProtect(LPVOID lpvAddress, DWORD dwSize, DWORD dwNewProtect, DWORD pdwOldProtect) BOOL VirtualProtectEx(HANDLE hProcess, LPVOID lpvAddress, DWORD dwSize, DWORD dwNewProtect, DWORD pdwOldProtect)
СОЗДАНИЕ ПОТОКА #include < windows.h> #include < stdio.h> DWORD WINAPI MyThread( LPVOID lpParam ) { printf(" Parameter = %d\n", *(DWORD*)lpParam); return 0; }
VOID main( VOID ) { DWORD ThreadId, ThreadParameter = 10; HANDLE hThread; hThread = CreateThread( NULL, // атрибуты безопасности по умолчанию 0, // размер стека по умолчанию MyThread, // указатель на процедуру создаваемого потока & ThreadParameter, // аргумент, передаваемый функции потока 0, // флаги создания по умолчанию & ThreadId); // возвращаемый идентификатор потока
if (hThread == NULL) printf(" CreateThread failed." ); getchar(); CloseHandle( hThread ); }
|
Последнее изменение этой страницы: 2019-04-09; Просмотров: 263; Нарушение авторского права страницы