Изучение организации мультипрограммирования в ОС Windows: Методические рекомендации по выполнению лабораторной работы

Страницы работы

Содержание работы

УПРАВЛЕНИЕ  ПРОЦЕССАМИ  И  ПОТОКАМИ  В  ОС  WINDOWS

Лабораторная     работа     № 1

1.   ЦЕЛЬ   РАБОТЫ

Изучение организации мультипрограммирования в ОС Windows, приобретение практических навыков использования средств API Windows для создания процессов и потоков.

2.  ОСНОВНЫЕ  СВЕДЕНИЯ

2.1.  Многозадачность  в  ОС  Windows

Windows  является многозадачной операционной системой. Многозадачность, или мультипрограммирование – это способ организации вычислительного процесса, при котором на одном процессоре с разделением во времени выполняется несколько программ. Для каждой выполняемой программы (процесса) ОС выделяет необходимую область оперативной памяти, а также предоставляет процессорное время и доступ к таким ресурсам, как файлы,  устройства ввода-вывода и др. Процесс – это совокупность исполняемой программы и выделенных ей системных ресурсов.  Часть процессов являются прикладными или пользовательскими, другая часть инициализируется самой ОС и называется системными.  Каждый процесс выполняется  в собственном адресном пространстве. Процессы могут одновременно нуждаться в одних и тех же ресурсах, поэтому ОС  выполняет планирование, управление  и  защиту ресурсов.

За время существования процесса его выполнение может быть многократно прервано и продолжено. Для продолжения выполнения процесса необходимо восстановить состояние операционной среды. Это состояние определяется значениями регистров,  программного счетчика, указателями на открытые файлы, информацией о незавершенных операциях ввода-вывода и т.д. Эти данные называются контекстом процесса. При смене процесса происходит переключение контекста.

Начиная с версии Windows 95, в  Windows  реализована истинная или преимущественная (вытесняющая) многозадачность (preemptivemulti-tasking). Каждой прикладной программе (процессу) система выделяет определенный квант времени (timeslice), по истечении которого происходит переключение на выполнение  другой программы. Величина кванта времени зависит от ОС и типа процессора, для Windows NT она составляет примерно 20 мс.  Реализация preemptive multi-tasking обеспечивает не только одновременное выполнение программ в вычислительной системе, но и устойчивость среды к зависаниям, так как ни одно приложение не может получить неограниченный доступ к ресурсам компьютера.

Windows является многопроцессной (multi-processмногопотоковой (multi-threaded) операционной системой. Каждый экземпляр программы соответствует только одному процессу. Windows рассматривает процесс как потребитель всех ресурсов, кроме одного, самого главного, - процессорного времени. Этот важнейший ресурс ОС распределяет между потоками. Поток (thread) представляет собой последовательность (поток выполнения) команд.  В Windows процесс не исполняется, исполняются потоки процесса. При запуске процесса система создает главный поток выполнения (primary thread), которому соответствует некоторая последовательность действий. Программист или система кроме главного потока может создать ещё несколько потоков, принадлежащих процессу. Приложение получает возможность выделять требующие больших затрат времени операции, например, печать текста в отдельный поток, при этом главный поток может выполняться параллельно с печатью. Так реализуется потоковая многозадачность.

Смена активного потока при вытесняющей многозадачности происходит, если:

-  поток завершился и покинул систему,

-  произошла ошибка выполнения,

-  исчерпан квант времени, предоставленный потоку,

-  поток перешел в состояние ожидания завершения ввода-вывода.

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

2.2.  Функции  WinExec() и ShellExecute()

Для запуска новой программы нужно создать новый процесс. В Win32 API для этого предусмотрен стандартный системный вызов CreateProcess(), однако эта функция имеет громоздкий синтаксис из-за множества аргументов. Более простыми, но и более ограниченными по возможностям являются функции WinExec() иShellExecute() Win32 API.

Функция WinExec() запускает специфицированное приложение. Синтаксис функции

UINTWinExec(

LPCSTR  lpCmdLine ,             // Адрес командной строки

UINT      uCmdShow//Стиль окна нового приложения

).

Параметр lpCmdLine – указатель на командную строку, которая содержит имя файла и дополнительные необязательные параметры, другой параметр uCmdShow определяет вид окна запускаемого приложения (). Если функция выполняется нормально, то возвращается значение >31, в случае ошибки возвращается код ошибки.

            Функция ShellExecute() открывает или печатает специфицированный файл. Файл может быть исполняемым или документом. Её синтаксис:

HINSTANCE  ShellExecute (  

              HWND   hwnd,                   // хэндл  родительского окна

              LPCTSTR  lpOperation,    // указатель на строку, определяющую операцию

              LPCTSTR  lpFile,            // указатель на имя файла

              LPCTSTR  lpParameters,  //указатель на строку, определяяющую параметры исполняемого файла

              LPCTSTR  lpDirectory,   //указатель на строку, определяющую директорию по умолчанию

              INT            nShowCmd      // Стиль окна нового приложения

).

Параметр hwnd представляет собой так называемый хэндл (дескриптор)  родительского окна. Хэндл (handle) – номер, который присваивается любому объекту Windows (окну, иконке, курсору, меню и т.д.). Фактически  это указатель на блок памяти, в котором размещен  объект. Идентификаторы переменных  типа HANDLE должны начинаться с буквы h. В заголовочных файлах тип HANDLE определен как void*.

            Параметр lpOperation может принимать следующие значения – строки:

“open” -  функция открывает специфицированный файл lpFile,

“print” – функция печатает lpFile,

“explore” – функция исследует папку, специфицированную через lpFile.

Если lpOperation принимает значение NULL, то функция открывает  lpFile.

            Параметр lpFile – это указатель на строку, содержащую имя файла или папки. Если это исполняемый файл, то          lpParameters является указателем на строку, которая определяет параметры, передаваемые приложению. Когда lpFile – файл-документ, то значением  lpParameters должен быть NULL. Через указатель lpDirectory устанавливаетсядиректория по умолчанию  для запускаемого приложения. Параметр nShowCmd определяет вид окна приложения (возможные значения SW_HIDE,  SW_MAXIMIZE, SW_RESTORE и др.).

            В Приложении 1 приведен пример программы, в которой с помощью функции WinExec открывается текстовый редактор со специфицированным текстовым файлом, а с помощью ShellExecute запускается Проводник Windows (файл explorer.exe).

2.3.  Функция  CreateProcess( ).

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

BOOL CreateProcess (

LPCTSTR    lpApplicationName,    // указатель на имя запускаемого приложения

LPCTSTR    lpCommandLine,     // указатель на командную строку

LPSECURITY_ATTRIBUTES    lpProcessAttributes,    // указатель на  структуру безопасности процесса

Похожие материалы

Информация о работе