OpenProcess – открытие процесса.
TerminateProcess – удаление процесса.
CreatThread – создание потока.
TerminateThread – удаление потока.
CreatSemaphor – создать синхронизатор.
OpenSemaphor – открыть синхронизатор.
СloseHandle – закрыть хэндл.
Функция CreatProcess имеет следующий вид:
Bool CreatProcess
(
lpApplicationName, //указатель на имя исполняемого модуля. Может быть нулем.
lpCommandLine, //указатель на командную строку, заканчивающуюся нулем.
lpProcessAttributes, //указатель на структуру безопасности, если он равен 0, то процесс создается с дескриптором безопасности по умолчанию.
lpThreedAttributes, //указатель на структуру безопасности для первого потока нового процесса.
blnHeritHandless, //индикатор наследования новым процессом хэндла родительского процесса; если он равен 1, то наследуемый хэндл имеет то же значение и привилегии, что и родительский процесс. Ядро операционной системы содержит хэндлы для объектов таких типов: _Process, _Tread, _Files, _Events, _Semaphore, _Mutexes, _Pipes. Приложения пользователя не имеют прямого доступа к внутренней структуре этих объектов или системным ресурсам, которыми представляется объект. Для доступа используется хэндл объекта, который является косвенным указателем на эти объекты.
DwCreationFlags, //специфицирует дополнительный флаг, который управляет приоритетом и способом реализации создаваемого объекта. Используются такие уровни приоритета: High_Priority_Class – высокий приоритет, Ide_Priority_Class – низкий приоритет, нормальный приоритет, приоритет реального времени, который является более высоким, чем потоки операционной системы.
LpEnviroment, //указатель на окружение нового процесса; если он равен 0, то наследуется родительское окружение.
LpCurrentDirectory, //указатель на строку, содержащую диск и каталог нового процесса.
LpStartupInfo, //указатель на структуру, которая определяет окно для нового процесса. В этой структуре отражаются положение, размеры окна, способ представления - всего 18 параметров.
LpProcessInformation, //указатель на структуру, которая получает идентифицирующую информацию о новом процессе
)
Пример вызова функции CreatProcess в среде Delphi. Доступ к функциям API реализует модель WINDOWS Delphi. Передаваемые функции API строковые данные должны быть в формате PChar и являться указателем на массив символов с нулем в конце. В данном примере на форму помещаются следующие поля:
Command – команда, используемая в качестве дочернего процесса,
Parameter – параметр команды,.
WorkingDir – рабочая директория,
Launch – кнопка запуска.
Unit Unit1;
Interface
Uses Windows, Messege, Classes, …;
Type TForm1 = class(TForm)
Label1:Tlabel;
…………………………………… {все, что на форме}
procedure FormCreat(Sender:TObject);
end;{конец описания класса TForm}
var Form1:TForm1;
implementation
procedure Tform1.FormCreat(Sender:TObject);
Begin
LeftSpin.MaxValue:=Screen.Width
{определение размеров и положения окна}
End;
Prosedure Tform1.LaunchButtonClick(Send:Tobject);
Const
Modes:array [0..2] of integer = (SH_ShowNormal, SW_ShowMinimized, SV_ShovMAximized);
Var TSI:TstatupInfo;
TPI:TpocessInformation;
WorkDir:Pchar;
Sucsess:boolean;
Message:string;
Begin
If WorkDirEdit. Text=’’ then WorkDir:=NIL
Else WorkDir:=StrNew(Pchar(WorkDirEdit. Text));
FillChar(TSI, SizeOf(TSI),0);
TSI. wShowWindow:=Modes[ModesGroup. ItemIndex];
TSI. dwFlag:=StartF_UsesShowWindows;
TSI. dwX:=StrToIntDef(LeftSpin. Text,-1);
TSI. dwY:= StrToIntDef(TopSpin. Text,-1);
If (TSI. dwX>1)and(TSI. dwY>1)then
TSI. dwFlag:= TSI. dwFlag or Startf_Usesposition;
TSI. dwXSize:=?определение ширины и высоты окна
TSI. dwYSize:=?
{анализируется содержимое текстовых полей ширины и высоты окна}
Suсsess:= CreatProcess (NIL, Pchar (Command (Edit. Text) + ’ ‘ + ParamEdit. Text), NIL, NIL, FALSE, Normal_Priority_Class, NIL, WorkDir, TSI, TPI);
{осуществляется вывод имени процесса, его идентификатора и хэндла}
End;
End.
1. Управление процессами обеспечивает повышение производительности операционной системы за счет организации параллельной работы процессора с внешними устройствами различного быстродействия. Решение этой задачи связано с управлением памятью, так как процесс может развиваться только в оперативной памяти.
2. Реализация управления процессами требует дополнительных ресурсов времени и памяти.
3. Управление процессами в любой операционной системе реализуется с помощью специальной структуры – дескриптора процесса, которая содержит основную информацию о процессе.
4. ВЗАИМОДЕЙСТВИЕ ПРОЦЕССОВ В ОПЕРАЦИОННЫХ СИСТЕМАХ
Рассмотрим взаимодействие процессов на примере операционной системы OS/2, которое реализуется с помощью таких механизмов: транспортеры, (каналы), очереди, сигналы, семафоры.
Взаимодействие заключается в передаче данных между процессами или совместном использовании некоторых ресурсов.
Транспортеры (каналы). Являются средством взаимодействия родственных процессов, представляют собой область памяти, имеющую файловую организацию, для которой обеспечивается запись и считывание данных в транспортере. Реализуется очередь обслуживания. Порядок записи данных на транспортер неизменен, не допускается повторное считывание данных. Обмен данными происходит не непосредственно, а через транспортер. Он создается функцией DosMakePipe (CreatPipe – Windows 95, CreatNamePipe – Windows NT). Из вызвавшего процесса задается размер транспортера, запись и чтение производятся функциями DosWrite, DosRead. Дочерние процессы могут использовать родительский транспортер. Он заканчивает работу, когда все использующие его процессы обратятся к DosClose.
Очереди. Эти механизмы могут обеспечивать передачу или использование общих данных без перемещения данных, а с передачей элемента очереди, содержащего указатель данных и объем массива данных. Очередь используется вместе с механизмом общей памяти. Элемент очереди может быть считан с уничтожением или без уничтожения этого элемента. Чтение элемента может осуществляться в соответствии с механизмом очереди или стека. Чтение элементов очереди осуществляет только создающий очереди процесс, все другие процессы могут только записать элемент в очередь. Создающий процесс может выполнять такие действия над очередью: DosCreatQuene – создание очереди, DosPeakQuene – просмотр очереди, DosReadQuene – чтение очереди, DosCloseQuene – закрытие очереди. Записывающий процесс выполняет такие действия: DosOpenQuene – открыть очередь, DosWriteQuene - записать в очередь, DosCloseQuene – закрыть очередь. Имя очереди, которое присваивается создающим процессом, имеет вид полной спецификации файла:
C:\QUEUESE\<имя очереди>
Ожидание элементов в очереди организуется с помощью семафора, сигнализирующего о записи элемента в очередь. Для работы с очередью определены такие дополнительные функции: DosQueryQuene (определение количества элементов в очереди в текущий момент), DosPurgeQuene (очистка очереди создавшим ее процессом). Преимущества очереди: передача данных без копирования по указателю, гибкое изменение порядка передачи и доступа, возможность просмотра элементов очереди без их удаления.
Сигналы. Сигнал является механизмом передачи требования от одного процесса к другому на немедленное выполнение действия. Обработчик сигнала создается процессом и помещается в начале первого потока процесса. Является аналогом обработки прерывания. При передаче управления обработчику передается адрес возврата и тип принятого сигнала. Процесс, посылающий сигнал типа флаг, может передать дополнительную информацию обработчику сигнала. Для OS/2 определены такие типы сигналов:
1. Нажатие Ctrl-Break (SIGBREAK).
2. Нажатие Ctrl-C (SIGINTR).
3. Flag A (SIGPGA).
4. Flag B (SIGPFB).
5. Flag C (SIGPFC).
Если у процесса отсутствуют обработчики одного из первых сигналов, то операционная система прекращает выполнение такого процесса по любому из этих сигналов. С помощью функции DosFlagProcess один процесс может послать любому другому процессу один из трех сигналов Flag, а с помощью функции DosSendSignal имитировать посылку сигнала Ctrl-Break или Ctrl-C. Сигнал SIGTERM генерируется функцией DosKillProcess. Функция DosSetSigHandler задает характер выполняемых действий при возникновении сигнала: обработку системной ошибки при появлении сигнала, блокирование сигнала, передачу управления подпрограммы.
Семафоры. Являются механизмами передачи сообщений от одного потока к другому о наступлении некоторого события. B OS/2 различают семафоры системные и оперативной памяти. Семафоры оперативной памяти – двойное слово в памяти системы, его описатель – адрес места в памяти. Такие семафоры не создаются и не открываются, а устанавливаются в определенное состояние. Процессы, использующие семафоры оперативной памяти, должны иметь доступ к соответствующему сегменту памяти. Операционная система такие семафоры не обслуживает и не сообщает об их освобождении или захвате. Системные семафоры создаются функцией DosSemCreat с присваиванием ему имени. При создании семафора или его открытии возвращается описатель семафора, включающий его имя. Операционная система контролирует завершение каждого процесса, владеющего системным семафором, и освобождает его для процессов.
Используются функции по обслуживанию системных семафоров. Новый семафор создается со спецификацией функцией DosCreatSem C:\SEM\<имя семафора>. DosSemRequest – запрос на захват семафора. Если семафор свободен, то он захватывается вызывающим его процессом, если семафор занят, то вызвавший его поток переходит в режим ожидания освобождения семафора или ожидает истечения времени. Семафор, захваченный по DosSemRequest, освобождается после соответствующего количества освобождений. Освобождение семафора происходит по функции DosCloseSem. Если семафор освобождается всеми использующими его процессами, то он удаляется из системы. DosOpenSem – доступ процесса к существующему семафору, созданному другим процессом.
Управление семафором реализуется с помощью функций:
DosSemSee установка семафора с целью сигнализации,
DosSemClear очистка семафора с целью сигнализации,
DosSemWait ожидание вызывающим потоком, пока семафор не будет выключен,
DosMaxSemWait ожидание потоком выключения одного из нескольких семафоров.
В Windows 95 определены функции CreatSemaphore и OpenSemaphore. При вызове этих функций возвращается хэндл семафора, который используется для доступа к нему.
5. УПРАВЛЕНИЕ ПАМЯТЬЮ В ОПЕРАЦИОННОЙ СИСТЕМЕ
Многообразие алгоритмов распределения памяти определяется:
1) опережающей потребностью пользователей в объеме оперативной памяти;
2) высокой ценой оперативной памяти;
3) тем, что распределение памяти как ресурса тесно взаимосвязано с распределением процессора.
Различают статическое и динамическое управление памятью. Статическое – долгосрочное планирование процесса. В любой момент времени в многозадачной операционной системе память может быть представлена чередованием занятых и свободных участков памяти (дыр). Задача распределения оперативной памяти распадается на три взаимно связанные задачи: учет, выделение и возврат участков памяти. Учету подвергаются дыры и занятые участки. Различают простую и сложную задачи выделения. Простая – выделение сплошного участка памяти, а сложная – выделение составных участков памяти.
При выделении памяти используются алгоритмы "самый подходящий" и "первый подходящий". Для алгоритма "первый подходящий" строки таблицы свободных зон памяти упорядочены по начальным адресам зон, а для алгоритма "самый подходящий" – по размеру зон. В первом алгоритме список зон просматривается до тех пор, пока не будет найдена зона, удовлетворяющая запросу. При этом такая зона изымается из таблицы свободных зон. При использовании алгоритма "самый подходящий" просматривается упорядоченный по длинам зон список и выбирается первая зона, удовлетворяющая запросу. В более сложных алгоритмах выделения памяти предусматривается объединение остатков зон. В алгоритмах распределения памяти используются сцепленные списки свободных зон. В MS-DOS предусматривается также алгоритм распределения “последний подходящий”.
Управление памятью в OS/2 осуществляется с помощью функций API:
DosAllocSeg – создание сегмента памяти размером до 64К. Возвращает значение шестнадцатибитного селектора, который используется для доступа к сегменту. После создания такой сегмент можно определить как общий для процессов, при этом первый процесс функцией DosGiveSeg может объявить сегмент как общий, а второй - функцией DosGetSeg – может использовать этот сегмент. Размер сегмента может быть изменен функцией DosReallocSeg.
DosFreeSeg – освобождение процессом ранее созданного сегмента. Существуют специальные функции, которые могут разрешить или запретить расформирование сегмента: DosLockSeg, DosUnLockSeg.
В OS/2 адрес исполняемой программы не является прямым представлением реального (физического) адреса, а используется виртуальный адрес включающий 16 бит селектора и 16 бит смещения. Селектор используется для обращения к дескриптору сегмента, находящегося в таблице локальных дескрипторов (LDT). Дескриптор содержит информацию о сегменте реальной физической памяти:
1. находится ли сегмент в физической памяти;
2. размер сегмента;
3. является ли сегмент защищенным;
4. уровень приоритета сегмента;
5. тип (только для чтения).
Если сегмент отсутствует в физической памяти, то операционная система отыскивает сегмент памяти на диске, который размещается в специальном файле. При использовании памяти, превышающей физический объем, реализуются:
1. подкачка сегментов – при этом может возникнуть необходимость удалять сегменты из оперативной памяти, для чего используется алгоритм LRU (удалять наименее часто используемые сегменты);
2. расформирование сегментов – программные сегменты и некоторые сегменты данных не сбрасываются на диск, а уничтожаются и в случае необходимости считываются из того файла, откуда были взяты;
3. перемещение сегментов – выполняется так, чтобы из существующих между ними свободных промежутков можно было образовать участок свободной физической памяти.
Управление использованием этих режимов осуществляется с помощью следующих команд в файле config.sys:
MEMMAN = NOSWAP и NOMOVE – вариант для запуска операционной системы с гибкого диска.
MEMMAN = SWAP и MOVE - разрешено все.
MEMMAN = NOSWAP – вариант, обеспечивающий наивысшую реакцию системы.
RMSIZE – резервирование блока памяти для пакетов реального режима.
SWAPPATH = C:\DATA – каталог для свопинга памяти.
Используются также следующие дополнительные функции управления оперативной памятью:
DosAllocHude, DosGetHude – обеспечивают закрепление за программой большой области памяти и обращение к ней по значению селектора первого сегмента этой области. Каждое последующее значение селектора определяется по значению предыдущего.
DosSubSet, DosSubAlloc, DosSubFree – дробление памяти, выделение блока внутри дробленой памяти и освобождение памяти. Эти функции используются для выделения большого числа блоков малого объема. Операционная система отслеживает, какие из таких блоков еще не использованы. Размер блока кратен четырем байтам.
DosAllocShrSeg, DosGetShrSeg - функции создания и доступа именованных сегментов памяти.
DosCreatCSAlloc – обеспечение доступа к области данных, в которой хранится программный код.
Реализация трех способов управления памятью:
С помощью механизма виртуальной памяти, используемой для управления большими массивами.
Через динамически распределяемые области для управления большим количеством небольших участков памяти.
Через отображаемые в память файлы, с помощью которых память разделяется между приложениями. В оперативной памяти адресного пространства программы создается дисковый файл.
Управление обеспечивается следующим набором функций:
HeapCreat – создание нового блока динамической памяти.
HeapDestroy - уничтожение блока динамической памяти.
HeapAlloc – выделение блоков памяти.
HeapSize – проверка размеров блоков памяти.
HeapFree – высвобождение блока памяти.
CreatFile – отображение файла в память.
CloseHandle – закрытие файла.
Виртуальной называется память, которая превосходит допустимую реальную за счет отображения внешней памяти в реальную память. Механизм управления виртуальной памятью основывается на решении четырех взаимосвязанных задач:
1. Размещение страниц в адресном пространстве оперативной памяти. В результате решения задачи размещения страниц в оперативной памяти выбираются страницы или сегменты, на которых будут отображаться некоторые страницы виртуального адресного пространства, то есть создается базовый адрес.
2. Перемещение, выбор в архивной среде соответствующей страницы. В архивной среде хранится и та информация, которая принадлежит отображаемой виртуальной странице и которая перемещается в страницу оперативной памяти.
3. Преобразование адресов в виртуальной оперативной памяти.
4. Замещение страниц по запросу. Выбирает в среде страниц оперативной памяти кандидата на перераспределение. В случае отсутствия свободных страниц в адресном пространстве оперативной памяти существуют следующие стратегии вытеснения: FIFO (первый подкачан – первый удален), LRU (по давности использования) – в основе лежит гипотеза о локальном обращении к памяти, то есть, если к области памяти не обращались в течение некоторого времени, то мала вероятность того, что она понадобится.
Различают следующие схемы структурирования адресного пространства: страничную (группировка памяти в блоки равного размера), сегментную (объединение памяти в блоки произвольной длины) и сегментно-страничную структуризацию (исходная память структурируется сначала по фиксированным блокам, а затем они объединяются в группы произвольной длины).
В соответствии со схемой структурирования адресного пространства различают следующие схемы функционирования виртуальной памяти:
1. Чисто страничная – схема виртуальной памяти, основанная на том, что выделяется вся необходимая память для реализации программы или блока программ, то есть ставится условие, что программа целиком располагается в оперативной памяти.
2. Страничная по запросу – снимает требование полного расположения программы в оперативной памяти, то есть в оперативной памяти может размещаться блок программы и снимается ограничение на размер виртуальной памяти. Отображение происходит динамически и по частям.
3. Сегментная – использует сегментно-страничное виртуальное адресное пространство. При этом требуется явное выделение частей программы. Реальная память также подвергается сегментной детализации по модульному признаку.
4. Сегментно-страничная – каждый модуль программы подвергается дополнительному страничному структурированию. При этом размеры получаемых сегментов могут быть увеличены. В этом случае оперативная память подвергается также страничной структуризации. Такая схема реализует компромисс между операционной системой и пользователем, а именно: операционная система увеличивает пропускную способность, используя преимущества страничной по запросу схемы функционирования оперативной памяти, а пользователь избавлен от ограничений на размеры разрабатываемой программы.
При сегментации памяти обеспечивается:
1. Перекрытие между работами без вмешательства пользователя.
2. Облегчается редактирование связей. Так как динамическое редактирование связей не осуществляется, команды, содержащие межсегментные ссылки, не выполняются.
3. Упрощается совместное использование памяти, так как возможен доступ нескольких пользователей к одной и той же программе.
Схема размещения виртуальной памяти по запросу представлена на рис. 9.

Рис. 9
В механизме размещения страниц по запросу виртуальная память процесса разделяется на страницы фиксированной длины, а реальная память разделяется на страничные кадры той же длины, что и страницы. Любая страница любого процесса потенциально может быть запущена в любой страничный кадр реальной памяти. Отображение страниц в страничные кадры описывается таблицей отображения страниц PMT. PMT используется аппаратурой для преобразования виртуальной памяти в соответствующие адреса реальной памяти. Такое преобразование – динамическое преобразование адресов. В процессе исполнения команды с виртуальным адресом соответствующая страница может быть не загружена. Тогда вырабатывается страничное прерывание, в ответ на которое стандартная подпрограмма обработки прерываний загружает требуемую страницу в требуемый страничный кадр.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |



