Средства межзадачного обмена в Win32 (mailslot, pipe, mapped file). Задача об обедающих философах
Средства межзадачного обмена в Win32: mailslots – "почтовые ящики", pipe – каналы, mapped file – файлы, проецируемые в память. Задача об обедающих философах: постановка, схема решения с помощью сети Петри и реализация решения задачи на языке C++.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 04.02.2013 |
Размер файла | 48,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Магнитогорский государственный технический университет им Г.И. Носова»
Кафедра вычислительной техники и прикладной математики
Контрольная работа по дисциплине:
«Теория вычислительных процессов» на тему
«Средства межзадачного обмена в Win32 (mailslot, pipe, mapped file). Задача об обедающих философах»
Выполнил: студент гр. АВ-09-2
Проверил: Калитаев А.Н.
г. Магнитогорск 2011
Оглавление
1. Средства межзадачного обмена в Win32
1.1 Mailslots - «почтовые ящики»
1.2 Pipe - каналы
1.3 Mapped file - файлы, проецируемые в память
2. Задача об обедающих философах
2.1 Постановка задачи
2.2 Схема решения задачи с помощью сети Петри
2.3 Реализация решения задачи на языке C++
Заключение
Библиографический список
1. Средства межзадачного обмена в Win32
ОС Windows предоставляет механизмы, облегчающие взаимодействие приложений и совместный доступ к данным. Возможности, обеспечиваемые этими механизмами, принято называть межзадачными (межпроцессными) взаимодействием (IPC -interprocess communications). Одни механизмы IPC позволяют нескольким специализированным процессам совместно выполнять обработку данных, а другие - распределенную обработку данных в сети.
Приложения, использующие IPC, принято разделять на клиентские и серверные. Клиент - приложение или процесс, запрашивающее сервис у другого приложения или процесса, а сервер - приложение или процесс, предоставляющее такой сервис. Многие приложения, в зависимости от ситуации, являются и клиентами и серверами. Например, текстовый процессор может выступать в роли клиента при получении некоторых данных от приложения, поддерживающего электронные таблицы, которое в свою очередь, выступает в роли клиента по отношению к приложению, предоставляющему данные для электронной таблицы.
Процессы не могут взаимодействовать не общаясь. Общение процессов обычно приводит к изменению их поведения в зависимости от полученной информации. Если деятельность процессов остается неизменной при любой принятой ими информации, то это означает, что они на самом деле не нуждаются во взаимном общении. Процессы, которые влияют на поведение друг друга путем обмена информацией, принято называть кооперативными или взаимодействующими процессами, в отличие от независимых процессов, не оказывающих друг на друга никакого воздействия и ничего не знающих о взаимном сосуществовании в вычислительной системе.
Различные процессы в вычислительной системе изначально представляют собой обособленные сущности. Работа одного процесса не должна приводить к нарушению работы другого процесса. Для этого, в частности, разделены их адресные пространства и системные ресурсы, и для обеспечения корректного взаимодействия процессов требуются специальные средства и действия операционной системы.
ОС Windows поддерживает такие механизмы для организации межзадачного обмена:
буфер обмена Clipboard; COM модель; Data Copy - передача данных с помощью сообщения WM_COPYDATA Windows; RPC - удаленный вызов процедур; объекты Windows Sockets; DDE - динамический обмен данными; File Mapping - файлы, отображаемые в память; Mailslots - объекты ядра Windows «почтовые ящики»; Pipes - каналы.
Рассмотрим подробнее последние три механизма.
1.1 Mailslots - «почтовые ящики»
Почтовые ящики обеспечивают одностороннее взаимодействие процессов. Каждый процесс, который создает почтовый ящик, является «сервером почтовых ящиков» (mailslot server). Другие процессы, называемые «клиентами почтовых ящиков» (mailslot clients), посылают сообщения серверу, записывая их в почтовый ящик. Входящие сообщения всегда дописываются в почтовый ящик и сохраняются до тех пор, пока сервер их не прочтет. Каждый процесс может одновременно быть и сервером, и клиентом почтовых ящиков, создавая, таким образом, двунаправленные коммуникации между процессами.
Клиент может посылать сообщения на почтовый ящик, расположенный на том же компьютере, на компьютере в сети, или на все почтовые ящики с одним именем всем компьютерам выбранного домена. При этом широковещательное сообщение, транслируемое по домену, не может быть более 400 байт. В остальных случаях размер сообщения ограничивается только при создании почтового ящика сервером.
Почтовые ящики предлагают легкий путь для обмена короткими сообщениями, позволяя при этом вести передачу и по локальной сети, в том числе и по всему домену.
Mailslot является псевдофайлом, находящимся в памяти, и следует использовать стандартные функции для работы с файлами, чтобы получить доступ к нему. Данные в почтовом ящике могут быть в любой форме - их интерпретацией занимается прикладная программа, но их общий объем не должен превышать 64 Кб. Однако, в отличие от дисковых файлов, mailslot являются временными - когда все дескрипторы почтового ящика закрыты, он и все его данные удаляются. Все почтовые ящики являются локальными по отношению к создавшему их процессу; процесс не может создать удаленный mailslot.
Сообщения меньше чем 425 байт передаются с использованием дейтаграмм. Сообщения, больше чем 426 байт, используют передачу с установлением логического соединения на основе SMB-сеансов. Передачи с установлением соединения допускают только индивидуальную передачу от одного клиента к одному серверу. Следовательно, теряется возможность широковещательной трансляции сообщений от одного клиента ко многим серверам. Windows не поддерживает сообщения размером в 425 или 426 байт.
Когда процесс создает почтовый ящик, имя последнего должно иметь следующую форму:
\ \.\mailslot\ [path]name
Например:
\\.\mailslot\taxes\bobs_comments \\.\mailslot\taxes\petes_comments \\.\mailslot\taxes\sues_comments
Если необходимо отправить сообщение в почтовый ящик на удаленный компьютер, то следует воспользоваться NETBIOS-именем:
\\ComputerName\mailslot\[path]name
Чтобы передать сообщение всем mailslot с указанным именем внутри домена, понадобится NETBIOS-имя домена:
\\DomainName\mailslot\ [path]name
Для главного домена операционной системы (домен, в котором находится рабочая станция):
\\*\mailslot\ [path]name
Клиенты и серверы, использующие почтовые ящики, при работе с ними должны пользоваться функциями, представленными в табл. 1.
Таблица 1 Функции почтовых ящиков
Функция |
Описание |
|
Серверов |
||
CreateMailslot |
Создает почтовый ящик и возвращает его дескриптор |
|
GetMailslotInfo |
Извлекает максимальный размер сообщения, размер почтового ящика, размер следующего сообщения в ящике, количество сообщений и время ожидания сообщения при выполнении операции чтения |
|
SetMailslotlnfo |
Изменение таймаута при чтении из почтового ящика |
|
DuplicateHandle |
Дублирование дескриптора почтового ящика |
|
ReadFile ReadFileEx |
Считывание сообщений из почтового ящика |
|
GetFileTime |
Получение даты и времени создания почтового ящика |
|
SetFileTime |
Установка даты и времени создания, модификации почтового ящика |
|
GetHandlelnformation |
Получение свойств дескриптора почтового ящика |
|
SetHandleInformation |
Установка свойств дескриптора почтового ящика |
|
Клиентов |
||
CreateFile |
Создает дескриптор почтового ящика для клиентского процесса |
|
DuplicateHandle |
Дублирование дескриптора почтового ящика |
|
WriteFile WriteFileEx |
Запись сообщений в почтовый ящик |
|
CloseHandle |
Закрывает дескриптор почтового ящика для клиентского процесса |
Рассмотрим последовательно все операции, необходимые для корректной работы с почтовыми ящиками.
Создание почтового ящика. Операция выполняется процессом сервера с использованием функции CreateMailslot:
HANDLE CreateMailslot(LPCTSTR lpName,// Имя почтового ящикаDWORD nMaxMessageSize, // Максимальный размер сообщения DWORD IReadTimeout, // Таймаут операции чтения LPSECURITY_ATTRIBUTES // Опции наследования и IpSecurityAttrlbutes // безопасности);
Запись сообщений в почтовый ящик производится аналогично записи в стандартный дисковый файл с помощью функции WriteFile.
Чтение сообщений из почтового ящика. Создавший почтовый ящик процесс получает право считывания сообщений, из него используя дескриптор mailslot в вызове функции ReadFile.
Почтовый ящик существует до тех пор, пока не вызвана функция CloseHandle на сервере или пока существует сам процесс сервера. В обоих случаях все непрочитанные сообщения удаляются из почтового ящика, уничтожаются все клиентские дескрипторы, и mailslot удаляется из памяти.
Функция считывает параметры почтового ящика:
BOOL GetMailslotlnfo(HANDLE hMailslot,// Дескриптор почтового ящика.LPDWORD lpMaxMessageSize, / / Максимальный размер сообщения.LPDWORD lpNextSize,// Размер следующего непрочитанного сообщения. LPDWORD lpMessageCount, // Количество сообщений.LPDWORD lpReadTimeout // Таймаут операции чтения.);
Функция устанавливает таймаут операции чтения:
BOOL SetMailslotlnfo(HANDLE hMailslot,// Дескриптор почтового ящика.DWORD IReadTimeout// Новый таймаут операции чтения.);
Резюме: Основное преимущество этого способа - возможность передавать сообщения по локальной сети сразу нескольким компьютерам за одну операцию. Для этого приложения-приемники создают почтовые слоты с одним и тем же именем. Когда в дальнейшем какое-либо приложение помещает сообщение в этот слот, приложения-приемники получают его одновременно.
1.2 Pipe - каналы
Каналы - это очень мощная технология обмена данными. Наверное, именно поэтому в полной мере они поддерживаются только в Windows NT/2000. В общем случае канал можно представить в виде трубы, соединяющей два процесса. Что попадает в трубу на одном конце, мгновенно появляется на другом. Чаще всего каналы используются для передачи непрерывного потока данных.
Имеется два типа каналов (pipes) для двустороннего межпроцессного взаимодействия: анонимные (anonymous) и именованные (named).
Анонимные каналы
Безымянные (анонимные) каналы позволяют связанным процессам передавать информацию друг другу. Обычно, безымянные каналы используются для перенаправления стандартного ввода/вывода дочернего процесса так, чтобы он мог обмениваться данными с родительским процессом. Чтобы производить обмен данными в обоих направлениях, следует создать два безымянных канала. Родительский процесс записывает данные в первый канал, используя его дескриптор записи, в то время как дочерний процесс считывает данные из канала, используя дескриптор чтения. Аналогично, дочерний процесс записывает данные во второй канал и родительский процесс считывает из него данные. Безымянные каналы не могут быть использованы для передачи данных по сети и для обмена между несвязанными процессами.
Анонимные каналы создаются процессом сервером при помощи функции CreatePipe:
BOOL CreatePipe(
PHANDLE hReadPipe, // описатель для чтения
PHANDLE hWritePipe, // описатель для записи
LPSECURITY_ATTRIBUTES lpPipeAttributes, // атрибуты безопасности
DWORD nSize // размер канала);
Функция CreatePipe возвращает два описателя (дескриптора) для чтения и записи в канал. После создания канала необходимо передать клиентскому процессу эти дескрипторы (или один из них), что обычно делается с помощью механизма наследования.
Для наследования описателя нужно, чтобы дочерний процесс создавался функцией CreateProcess с флагом наследования TRUE. Предварительно нужно создать наследуемые описатели. Это можно, например, сделать путем явной спецификации параметра bInheritHandle структуры SECURITY_ATTRIBUTES при создании канала.
Другим способом является создание наследуемого дубликата имеющегося описателя при помощи функции DuplicateHandle и последующая передача его создаваемому процессу через командную строку или каким-либо иным образом.
Получив нужный описатель, клиентский процесс, так же как и сервер, может далее взаимодействовать с каналом при помощи функций ReadFile и WriteFile. По окончании работы с каналом оба процесса должны закрыть описатели при помощи функции CloseHandle.
Именованные каналы
Именованные каналы являются объектами ядра ОС Windows, позволяющими организовать межпроцессный обмен не только в изолированной вычислительной системе, но и в локальной сети. Они обеспечивают дуплексную связь и позволяют использовать как потоковую модель, так и модель, ориентированную на сообщения. Обмен данными может быть синхронным и асинхронным.
Каналы должны иметь уникальные в рамках сети имена в соответствии с правилами именования ресурсов в сетях Windows (Universal Naming Convention, UNC), например,\\ServerName\pipe\PipeName. Для общения внутри одного компьютера имя записывается в форме \\.\pipe\PipeName, где "." обозначает локальную машину. Слово "pipe" в составе имени фиксировано, а PipeName - имя, задаваемое пользователем.
Именованные каналы используются для передачи данных между независимыми процессами или между процессами, работающими на разных компьютерах. Обычно, процесс сервера именованных каналов создает именованный канал с известным именем или с именем, которое будет передано клиентам. Процесс клиента именованных каналов, зная имя созданного канала, открывает его на своей стороне с учетом ограничений, указанных процессом сервера. После этого между сервером и клиентом создается соединение, по которому может производиться обмен данными в обоих направлениях. В организации межпроцессного обмена наибольший интерес представляют именованные каналы.
Общие принципы работы именованных и неименованных каналов:
При чтении меньшего числа байт, чем находится в канале, возвращается требуемое число байт, остаток сохраняется для последующих чтений.
При чтении большего числа байт, чем находится в канале, возвращается доступное число байт. Процесс, читающий из канала, должен эту ситуацию отработать.
Если канал пуст и ни один процесс не открыл его на запись, при чтении из канала будет получено 0 байт. Если один или более процессов открыли канал для записи, вызов на чтение будет заблокирован до появления данных в канале.
Запись числа байт, меньшего емкости канала, гарантирована атомарно. В случае, когда несколько процессов одновременно записывают в канал, порции данных от них не перемешиваются.
При записи большего числа байт, чем это позволяет канал, вызов на запись блокируется до освобождения требуемого места в канале. Атомарность при этом не гарантируется.
Клиентам и серверам для работы с каналами допускается использовать функции, представленные в табл. 2. Кроме того, для работы с каналами используется функция CreateFile (для подключения к каналу со стороны клиента) и функции WriteFile и ReadFile для записи и чтения данных в/из канала соответственно.
средство межзадачный обмен решение задача
Таблица 2 Функции работы с каналами
Функция |
Описание |
|
CallNamedPipe |
Выполняет подключение к каналу, записывает в канал сообщение, считывает из канала сообщение и затем закрывает канал |
|
ConnectNamedPipe |
Позволяет серверу именованных каналов ожидать подключения одного или нескольких клиентских процессов к экземпляру именованного канала |
|
CreateNamedPipe |
Создает экземпляр именованного канала и возвращает дескриптор для последующих операций с каналом |
|
CreatePipe |
Создает безымянный канал |
|
DisconnectNamedPipe |
Отсоединяет серверную сторону экземпляра именованного канала от клиентского процесса |
|
GetNamedPipeHandleState |
Получает информацию о работе указанного именованного канала |
|
GetNamedPipelnfo |
Извлекает свойства указанного именованного канала |
|
PeekNamedPipe |
Копирует данные их именованного или безымянного канала в буфер без удаления их из канала |
|
SetNamedPipeHandleState |
Устанавливает режим чтения и режим блокировки вызова функций (синхронный или асинхронный) для указанного именованного канала |
|
TransactNamedPip |
Комбинирует операции записи сообщения в канал и чтения сообщения из канала в одну сетевую транзакцию |
|
WaitNamedPipe |
Ожидает, пока истечет время ожидания или пока экземпляр указанного именованного канала не будет доступен для подключения к нему |
Резюме: Неименованные каналы предоставляют эффективный способ для перенаправления стандартного ввода или вывода дочернего процесса на том же компьютере. Именованные каналы предоставляют простой программный интерфейс для передачи данных между процессами, которые находятся на одном компьютере или на разных.
1.3 Mapped file - файлы, проецируемые в память
Отображение файлов в память позволяет процессу интерпретировать содержимое файла так, как будто оно является блоком памяти в его адресном пространстве. Процесс может использовать простые операции для чтения и модификации содержимого файла. Когда два или более процесса получают доступ к одному и тому же отображенному в память файлу (данным), каждый процесс получает указатель на память в своем собственном адресном пространстве и может читать или модифицировать содержимое файла.
Отображение файла в память может быть использовано только для взаимодействия между процессами на одном компьютере, но не в сети. Таким образом, отображаемые в память файлы предоставляют возможность нескольким процессам получать совместный доступ к данным, однако процессы должны обеспечивать синхронизацию доступа к данным.
Этот способ взаимодействия реализуется не совсем напрямую, а через технологию File Mapping - отображения файлов на оперативную память. Вкраце, этот механизм позволяет осуществлять доступ к файлу таким образом, как будто это обыкновенный массив, хранящийся в памяти (не загружая файл в память явно). "Побочным эффектом" этой технологии является возможность работать с таким отображенным файлом сразу нескольким процессам. Таким образом, можно создать объект file mapping, но не ассоциировать его с каким-то конкретным файлом. Получаемая область памяти как раз и будет общей между процессами. Работая с этой памятью, потоки обязательно должны согласовывать свои действия с помощью объектов синхронизации.
Как и виртуальная память, проецируемые файлы позволяют резервировать регион адресного пространства и передавать ему физическую память.
Операционная система позволяет проецировать на адресное пространство процесса и файл данных. Это очень удобно при манипуляциях с большими потоками данных.
Проецируемые файлы применяются для:
- загрузки и выполнения ЕХЕ- и DLL-файлов. Это позволяет существенно экономить как на размере страничного файла, так и на времени, необходимом для подготовки приложения к выполнению;
- доступа к файлу данных, размещенному на диске. Это позволяет обойтись без операций файлового ввода-вывода и буферизации его содержимого;
- разделения данных между несколькими процессами, выполняемыми на одной машине.
Использование проецируемых в память файлов
Для этого нужно выполнить три операции:
Создать или открыть объект ядра «файл», идентифицирующий дисковый файл, который используется как проецируемый в память.
Создать объект ядра «проекция файла», сообщив системе размер файла и способ доступа к нему.
Указать системе, как спроецировать в адресное пространство процесса объект «проекция файла» - целиком или частично. Закончив работу с проецируемым в память файлом, следует
выполнить следующие операции:
Сообщить системе об отмене проецирования на адресное пространство процесса объекта ядра «проекция файла».
Закрыть этот объект.
Закрыть объект ядра «файл».
Этап 1: создание или открытие объекта ядра «файл»
Для создания и открытия объекта ядра «файл» используется
функция CreateFile:
Этап 2: создание объекта ядра «проекция файла»
Указав операционной системе, где находится физическая память для проекции файла: на жестком диске, в сети, на CD-ROM или в другом месте (вызов функции CreateFile), необходимо указать системе какой объем физической памяти нужен проекции файла. Для этого необходимо вызвать функцию CreateFileMapping:
Создание файла, проецируемого в память, аналогично резервированию региона адресного пространства с последующей передачей ему физической памяти. Разница лишь в том, что физическая память для проецируемого файла - сам файл на диске, и для него не нужно выделять пространство в страничном файле. При создании объекта «проекция файла» система не резервирует регион адресного пространства и не увязывает его с физической памятью из файла. Но, как только дело дойдет до отображения физической памяти на адресное пространство процесса, системе понадобится точно знать атрибут защиты, присваиваемый страницам физической памяти.
Основное назначение CreateFileMapping - гарантировать, что объекту «проекция файла» доступен нужный объем физической памяти. Через эти параметры сообщается системе максимальный размер файла в байтах. Windows способна обрабатывать файлы длиной до 16 экзабайтов.
Для создания объекта «проекция файла» таким, чтобы он отражал текущий размер файла, необходимо передавать в обоих параметрах нули. Так же следует поступить, если необходимо ограничиться считыванием или как-то обработать файл, не меняя его размер. Для дозаписи данных в файл выбирается его размер максимальным, чтобы оставить пространство для «маневра».
Чтобы получить доступ к существующему объекту ядра «проекция файла» необходимо вызвать функцию OpenFileMapping с указанием операций, которые будут проводиться над объектом.
Этап 3: проецирование файловых данных на адресное пространство процесса
Когда объект «проекция файла» создан, необходимо, чтобы система, зарезервировав регион адресного пространства под данные файла, передала их как физическую память, отображенную на регион. Это делает функция Map ViewOfFile:
Этап 4: отключение файла данных от адресного пространства процесса
Когда необходимость в данных файла (спроецированного на регион адресного пространства) отпадает, требуется освободить регион вызовом функции UnmapViewOfFile:
Этапы 5 и 6: закрытие объектов «проекция файлов» и «файл»
Закончив работу с любым открытым объектом ядра, необходимо его закрыть, иначе в процессе начнется утечка ресурсов. Для закрытия объектов «проекция файлов» и «файл» требуется дважды вызвать функцию CloseHandle.
При операциях с проецируемыми файлами обычно открывают файл, создают объект «проекция файла» и с его помощью проецируют представление файловых данных на адресное пространство процесса. Поскольку система увеличивает внутренние счетчики объектов «файл» «проекция файла», их можно закрыть в начале кода, тем самым, включив возможность утечки ресурсов.
Заключение
В данной работе были описаны такие механизмы межзадачного обмена в Win32, как «почтовые ящики», каналы и файлы, проецируемые в память, описаны области применения, есть некоторый теоретический материал об использовании данных механизмов, так же изложены плюсы и минусы каждого механизма взаимодействия.
Так же рассмотрена одна из классических задач синхронизации процессов - задача о пяти обедающих философах и произведено решение этой задачи с использованием мьютексов. Таким образом наглядно показано создание, взаимодействие (работа) процессов между собой и их завершение. Программно реализовано избегание попадания в критические секции.
Библиографический список
Калитаев А.Н., Тутарова В.Д., Кочержинская Ю.В. - К 172 Лабораторный практикум по дисциплине «Теория вычислительных процессов»: учеб. пособие. - Магнитогорск: Изд-во Магнитогорск. гос. техн. ун-та, 2011. - 60 с.
Размещено на Allbest.ru
...Подобные документы
Критерии различия между механизмами межпроцессного обмена. Системные вызовы для работы с разделяемой памятью, выделение ее области. Создание и инициализация семафора. Задачи использования потока. Способ обмена между виртуальной машиной Linux и Windows.
лекция [485,2 K], добавлен 29.07.2012Задача о ранце как задача комбинаторной оптимизации. Задача о загрузке, рюкзаке, ранце. Постановка и NP-полнота задачи. Классификация методов решения задачи о рюкзаке. Динамическое программирование. Метод ветвей и границ. Сравнительный анализ методов.
курсовая работа [1,7 M], добавлен 18.01.2011Преимущества применения математических методов в планировании перевозок. Постановка транспортной задачи, отыскание начального решения методом минимального элемента. Проверка опорного плана на невырожденность. Написание программы для автоматизации решения.
курсовая работа [1,5 M], добавлен 19.01.2016Ханойские башни: постановка задачи, условия перемещения дисков со стержня на стержень. Стратегия решения, используемые предикаты. Текст программы на языке Пролог. Построение модели решения задачи о ферзях. Примеры использования списков в языке Пролог.
презентация [72,0 K], добавлен 29.07.2012Рассмотрение способов организации передачи данных между различными процессами, основанных на использовании дейтаграммных каналов Mailslot. Однонаправленный интерфейс взаимодействия между процессами. Создание и открытие канала, запись и чтение сообщений.
контрольная работа [19,1 K], добавлен 10.10.2010Описание решения задачи, ее постановка, общий подход к решению. Представление исходных данных, условий задачи и целей ее решения. Составление алгоритма решения поставленной задачи. Написание программного обеспечения и тестирование конечного продукта.
курсовая работа [1,1 M], добавлен 03.07.2011Сущность и назначение основных алгоритмов оптимизации. Линейное программирование. Постановка и аналитический метод решения параметрической транспортной задачи, математическая модель. Метод решения задачи об оптимальных перевозках средствами MS Excel.
курсовая работа [465,6 K], добавлен 24.04.2009Концептуальная модель операции. Математическая постановка задачи. Описание метода ветвей и границ, прямого перебора. Проектирование сценария диалога. Описание структур данных. Ручная реализация решения задачи с помощью алгоритма Литла и перебора.
курсовая работа [202,6 K], добавлен 14.12.2013Разработка API взаимодействия клиентских приложений с сервером СУБД через Pipe под Windows. Устройство и характеристики СУБД SQLite. Методы WinAPI для передачи данных. Реализация взаимодействия через PIPE. Результат работы серверного приложения.
курсовая работа [596,3 K], добавлен 09.05.2014Основные принципы разработки программ. Разработка алгоритма решения задачи о пересечении двухвыпуклым многоугольником. Реализация разработанного алгоритма на языке программирования. Тесты для проверки работы программы. Графическая иллюстрация решения.
курсовая работа [53,3 K], добавлен 20.11.2015Описание алгоритма решения транспортной задачи по планированию перевозки зерна. Ход решения задачи вручную, в программе TORA методом наименьшего элемента, с помощью MS Excel. Разработка программы для решения задачи в общем виде средствами Delphi.
курсовая работа [2,5 M], добавлен 22.11.2012Составление математической модели решения транспортной задачи. Описание входной и выходной информации. Программно-технические средства, используемые при разработке программы. Общее описание программы, ее назначение, информационная совместимость.
курсовая работа [49,1 K], добавлен 24.05.2013Описание предметной области решаемой задачи. Входные документы, необходимые для решения задачи, ее функции. Разработка информационного обеспечения задачи и реквизиты входной информации. Технология и алгоритмов решения задачи и их машинная реализация.
контрольная работа [15,1 K], добавлен 21.10.2010Дискретная минимаксная задача с ограничениями на параметры. Применение решений минимаксных задач в экономике с помощью математического пакета Maple. Математические пакеты Maple и Matlab. Основные средства решения минимаксных задач в среде Марle-языка.
курсовая работа [2,2 M], добавлен 17.06.2015Концептуальная модель задачи на основе триады "Задача–Данные–Решатель" и работа генератора вспомогательных концептуальных моделей. Разработка программы на языке Python, позволяющая решать любые задачи по заданным действительным математическим формулам.
курсовая работа [1,9 M], добавлен 27.11.2011Задача для проведения теплофизического расчета с помощью программы написанной на языке Pascal. Модуль программы, позволяющий определить и рассчитать параметры для решения задачи теплофизического расчета. Блок-схема, отображающая основные действия.
методичка [17,5 K], добавлен 02.09.2010Устройство и характеристики СУБД SQLite. Методы работы с базой данных. Описание PIPE под Windows. Разработка API взаимодействия клиентских приложений с сервером СУБД через Pipe под Windows. Шифрование и модификация передающейся через канал информации.
курсовая работа [600,0 K], добавлен 04.05.2014Создание и реализация алгоритма решения транспортной задачи методом наименьших стоимостей. Схема алгоритма основной программы. Основные шаги алгоритма решения транспортной задачи. Инструкция по эксплуатации программы и обзор результатов ее выполнения.
курсовая работа [2,0 M], добавлен 12.02.2013Общее понятие и характеристика задачи линейного программирования. Решение транспортной задачи с помощью программы MS Excel. Рекомендации по решению задач оптимизации с помощью надстройки "Поиск решения". Двойственная задача линейного программирования.
дипломная работа [2,4 M], добавлен 20.11.2010Критерий эффективности и функции в системе ограничений. Общая постановка задачи линейного программирования. Составление математической модели задачи. Алгоритмы решения задачи симплексным методом. Построение начального опорного решения методом Гаусса.
курсовая работа [232,4 K], добавлен 01.06.2009